2024-02-15 17:32:35

by Deucher, Alexander

[permalink] [raw]
Subject: RE: [PATCH 1/3] drm/radeon: Use RMW accessors for changing LNKCTL2

[Public]

> -----Original Message-----
> From: Ilpo Järvinen <[email protected]>
> Sent: Thursday, February 15, 2024 8:32 AM
> To: Deucher, Alexander <[email protected]>; amd-
> [email protected]; Daniel Vetter <[email protected]>; David Airlie
> <[email protected]>; Dennis Dalessandro
> <[email protected]>; dri-
> [email protected]; Jason Gunthorpe <[email protected]>; Leon
> Romanovsky <[email protected]>; [email protected]; linux-
> [email protected]; Pan, Xinhui <[email protected]>; Koenig, Christian
> <[email protected]>
> Cc: Ilpo Järvinen <[email protected]>; Lukas Wunner
> <[email protected]>
> Subject: [PATCH 1/3] drm/radeon: Use RMW accessors for changing LNKCTL2
>
> Convert open coded RMW accesses for LNKCTL2 to use
> pcie_capability_clear_and_set_word() which makes its easier to understand
> what the code tries to do.
>
> LNKCTL2 is not really owned by any driver because it is a collection of control
> bits that PCI core might need to touch. RMW accessors already have support
> for proper locking for a selected set of registers
> (LNKCTL2 is not yet among them but likely will be in the future) to avoid losing
> concurrent updates.
>
> Suggested-by: Lukas Wunner <[email protected]>
> Signed-off-by: Ilpo Järvinen <[email protected]>

The radeon and amdgpu patches are:
Acked-by: Alex Deucher <[email protected]>

Are you looking for me to pick them up or do you want to land them as part of some larger change? Either way is fine with me.

Alex

> ---
> drivers/gpu/drm/radeon/cik.c | 40 ++++++++++++++----------------------
> drivers/gpu/drm/radeon/si.c | 40 ++++++++++++++----------------------
> 2 files changed, 30 insertions(+), 50 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
> index 10be30366c2b..b5e96a8fc2c1 100644
> --- a/drivers/gpu/drm/radeon/cik.c
> +++ b/drivers/gpu/drm/radeon/cik.c
> @@ -9592,28 +9592,18 @@ static void cik_pcie_gen3_enable(struct
> radeon_device *rdev)
>
> PCI_EXP_LNKCTL_HAWD);
>
> /* linkctl2 */
> - pcie_capability_read_word(root,
> PCI_EXP_LNKCTL2,
> - &tmp16);
> - tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP
> |
> - PCI_EXP_LNKCTL2_TX_MARGIN);
> - tmp16 |= (bridge_cfg2 &
> - (PCI_EXP_LNKCTL2_ENTER_COMP |
> - PCI_EXP_LNKCTL2_TX_MARGIN));
> - pcie_capability_write_word(root,
> - PCI_EXP_LNKCTL2,
> - tmp16);
> -
> - pcie_capability_read_word(rdev->pdev,
> - PCI_EXP_LNKCTL2,
> - &tmp16);
> - tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP
> |
> - PCI_EXP_LNKCTL2_TX_MARGIN);
> - tmp16 |= (gpu_cfg2 &
> - (PCI_EXP_LNKCTL2_ENTER_COMP |
> - PCI_EXP_LNKCTL2_TX_MARGIN));
> - pcie_capability_write_word(rdev->pdev,
> - PCI_EXP_LNKCTL2,
> - tmp16);
> + pcie_capability_clear_and_set_word(root,
> PCI_EXP_LNKCTL2,
> +
> PCI_EXP_LNKCTL2_ENTER_COMP |
> +
> PCI_EXP_LNKCTL2_TX_MARGIN,
> + bridge_cfg2
> |
> +
> (PCI_EXP_LNKCTL2_ENTER_COMP |
> +
> PCI_EXP_LNKCTL2_TX_MARGIN));
> + pcie_capability_clear_and_set_word(rdev-
> >pdev, PCI_EXP_LNKCTL2,
> +
> PCI_EXP_LNKCTL2_ENTER_COMP |
> +
> PCI_EXP_LNKCTL2_TX_MARGIN,
> + gpu_cfg2 |
> +
> (PCI_EXP_LNKCTL2_ENTER_COMP |
> +
> PCI_EXP_LNKCTL2_TX_MARGIN));
>
> tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
> tmp &= ~LC_SET_QUIESCE;
> @@ -9627,15 +9617,15 @@ static void cik_pcie_gen3_enable(struct
> radeon_device *rdev)
> speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE;
> WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl);
>
> - pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL2, &tmp16);
> - tmp16 &= ~PCI_EXP_LNKCTL2_TLS;
> + tmp16 = 0;
> if (speed_cap == PCIE_SPEED_8_0GT)
> tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */
> else if (speed_cap == PCIE_SPEED_5_0GT)
> tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */
> else
> tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */
> - pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL2, tmp16);
> + pcie_capability_clear_and_set_word(rdev->pdev, PCI_EXP_LNKCTL2,
> + PCI_EXP_LNKCTL2_TLS, tmp16);
>
> speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
> speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE; diff --git
> a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index
> 85e9cba49cec..8eeaea64c75d 100644
> --- a/drivers/gpu/drm/radeon/si.c
> +++ b/drivers/gpu/drm/radeon/si.c
> @@ -7193,28 +7193,18 @@ static void si_pcie_gen3_enable(struct
> radeon_device *rdev)
>
> PCI_EXP_LNKCTL_HAWD);
>
> /* linkctl2 */
> - pcie_capability_read_word(root,
> PCI_EXP_LNKCTL2,
> - &tmp16);
> - tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP
> |
> - PCI_EXP_LNKCTL2_TX_MARGIN);
> - tmp16 |= (bridge_cfg2 &
> - (PCI_EXP_LNKCTL2_ENTER_COMP |
> - PCI_EXP_LNKCTL2_TX_MARGIN));
> - pcie_capability_write_word(root,
> - PCI_EXP_LNKCTL2,
> - tmp16);
> -
> - pcie_capability_read_word(rdev->pdev,
> - PCI_EXP_LNKCTL2,
> - &tmp16);
> - tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP
> |
> - PCI_EXP_LNKCTL2_TX_MARGIN);
> - tmp16 |= (gpu_cfg2 &
> - (PCI_EXP_LNKCTL2_ENTER_COMP |
> - PCI_EXP_LNKCTL2_TX_MARGIN));
> - pcie_capability_write_word(rdev->pdev,
> - PCI_EXP_LNKCTL2,
> - tmp16);
> + pcie_capability_clear_and_set_word(root,
> PCI_EXP_LNKCTL2,
> +
> PCI_EXP_LNKCTL2_ENTER_COMP |
> +
> PCI_EXP_LNKCTL2_TX_MARGIN,
> + bridge_cfg2
> &
> +
> (PCI_EXP_LNKCTL2_ENTER_COMP |
> +
> PCI_EXP_LNKCTL2_TX_MARGIN));
> + pcie_capability_clear_and_set_word(rdev-
> >pdev, PCI_EXP_LNKCTL2,
> +
> PCI_EXP_LNKCTL2_ENTER_COMP |
> +
> PCI_EXP_LNKCTL2_TX_MARGIN,
> + gpu_cfg2 &
> +
> (PCI_EXP_LNKCTL2_ENTER_COMP |
> +
> PCI_EXP_LNKCTL2_TX_MARGIN));
>
> tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
> tmp &= ~LC_SET_QUIESCE;
> @@ -7228,15 +7218,15 @@ static void si_pcie_gen3_enable(struct
> radeon_device *rdev)
> speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE;
> WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl);
>
> - pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL2, &tmp16);
> - tmp16 &= ~PCI_EXP_LNKCTL2_TLS;
> + tmp16 = 0;
> if (speed_cap == PCIE_SPEED_8_0GT)
> tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */
> else if (speed_cap == PCIE_SPEED_5_0GT)
> tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */
> else
> tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */
> - pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL2, tmp16);
> + pcie_capability_clear_and_set_word(rdev->pdev, PCI_EXP_LNKCTL2,
> + PCI_EXP_LNKCTL2_TLS, tmp16);
>
> speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
> speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE;
> --
> 2.39.2


2024-02-16 09:22:35

by Ilpo Järvinen

[permalink] [raw]
Subject: RE: [PATCH 1/3] drm/radeon: Use RMW accessors for changing LNKCTL2

On Thu, 15 Feb 2024, Deucher, Alexander wrote:

> [Public]
>
> > -----Original Message-----
> > From: Ilpo Järvinen <[email protected]>
> > Sent: Thursday, February 15, 2024 8:32 AM
> > To: Deucher, Alexander <[email protected]>; amd-
> > [email protected]; Daniel Vetter <[email protected]>; David Airlie
> > <[email protected]>; Dennis Dalessandro
> > <[email protected]>; dri-
> > [email protected]; Jason Gunthorpe <[email protected]>; Leon
> > Romanovsky <[email protected]>; [email protected]; linux-
> > [email protected]; Pan, Xinhui <[email protected]>; Koenig, Christian
> > <[email protected]>
> > Cc: Ilpo Järvinen <[email protected]>; Lukas Wunner
> > <[email protected]>
> > Subject: [PATCH 1/3] drm/radeon: Use RMW accessors for changing LNKCTL2
> >
> > Convert open coded RMW accesses for LNKCTL2 to use
> > pcie_capability_clear_and_set_word() which makes its easier to understand
> > what the code tries to do.
> >
> > LNKCTL2 is not really owned by any driver because it is a collection of control
> > bits that PCI core might need to touch. RMW accessors already have support
> > for proper locking for a selected set of registers
> > (LNKCTL2 is not yet among them but likely will be in the future) to avoid losing
> > concurrent updates.
> >
> > Suggested-by: Lukas Wunner <[email protected]>
> > Signed-off-by: Ilpo Järvinen <[email protected]>
>
> The radeon and amdgpu patches are:
> Acked-by: Alex Deucher <[email protected]>
>
> Are you looking for me to pick them up or do you want to land them as
> part of some larger change? Either way is fine with me.

Hi,

You please take them, I intentionally took them apart from the BW
controller series so they can go through the usual trees, not along with
the BW controller. (I don't expect the BW controller to be accepted during
this cycle).

--
i.

2024-02-16 17:00:06

by Alex Deucher

[permalink] [raw]
Subject: Re: [PATCH 1/3] drm/radeon: Use RMW accessors for changing LNKCTL2

Applied. Thanks.

Alex

On Fri, Feb 16, 2024 at 5:38 AM Ilpo Järvinen
<[email protected]> wrote:
>
> On Thu, 15 Feb 2024, Deucher, Alexander wrote:
>
> > [Public]
> >
> > > -----Original Message-----
> > > From: Ilpo Järvinen <[email protected]>
> > > Sent: Thursday, February 15, 2024 8:32 AM
> > > To: Deucher, Alexander <[email protected]>; amd-
> > > [email protected]; Daniel Vetter <[email protected]>; David Airlie
> > > <[email protected]>; Dennis Dalessandro
> > > <[email protected]>; dri-
> > > [email protected]; Jason Gunthorpe <[email protected]>; Leon
> > > Romanovsky <[email protected]>; [email protected]; linux-
> > > [email protected]; Pan, Xinhui <[email protected]>; Koenig, Christian
> > > <[email protected]>
> > > Cc: Ilpo Järvinen <[email protected]>; Lukas Wunner
> > > <[email protected]>
> > > Subject: [PATCH 1/3] drm/radeon: Use RMW accessors for changing LNKCTL2
> > >
> > > Convert open coded RMW accesses for LNKCTL2 to use
> > > pcie_capability_clear_and_set_word() which makes its easier to understand
> > > what the code tries to do.
> > >
> > > LNKCTL2 is not really owned by any driver because it is a collection of control
> > > bits that PCI core might need to touch. RMW accessors already have support
> > > for proper locking for a selected set of registers
> > > (LNKCTL2 is not yet among them but likely will be in the future) to avoid losing
> > > concurrent updates.
> > >
> > > Suggested-by: Lukas Wunner <[email protected]>
> > > Signed-off-by: Ilpo Järvinen <[email protected]>
> >
> > The radeon and amdgpu patches are:
> > Acked-by: Alex Deucher <[email protected]>
> >
> > Are you looking for me to pick them up or do you want to land them as
> > part of some larger change? Either way is fine with me.
>
> Hi,
>
> You please take them, I intentionally took them apart from the BW
> controller series so they can go through the usual trees, not along with
> the BW controller. (I don't expect the BW controller to be accepted during
> this cycle).
>
> --
> i.