[PATCH 3/3] drm/amd: Explicitly disable ASPM when dynamic switching disabled

Alex Deucher alexdeucher at gmail.com
Mon Oct 23 21:47:19 UTC 2023


On Mon, Oct 23, 2023 at 5:12 PM Mario Limonciello
<mario.limonciello at amd.com> wrote:
>
> Currently there are separate but related checks:
> * amdgpu_device_should_use_aspm()
> * amdgpu_device_aspm_support_quirk()
> * amdgpu_device_pcie_dynamic_switching_supported()
>
> Simplify into checking whether DPM was enabled or not in the auto
> case.  This works because amdgpu_device_pcie_dynamic_switching_supported()
> populates that value.
>
> Signed-off-by: Mario Limonciello <mario.limonciello at amd.com>

Series is:
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h        |  2 --
>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 21 ++++++---------------
>  drivers/gpu/drm/amd/amdgpu/nv.c            |  7 +++----
>  drivers/gpu/drm/amd/amdgpu/vi.c            |  2 +-
>  4 files changed, 10 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 44df1a5bce7f..c1c98bd2d489 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -1339,9 +1339,7 @@ void amdgpu_device_pci_config_reset(struct amdgpu_device *adev);
>  int amdgpu_device_pci_reset(struct amdgpu_device *adev);
>  bool amdgpu_device_need_post(struct amdgpu_device *adev);
>  bool amdgpu_device_seamless_boot_supported(struct amdgpu_device *adev);
> -bool amdgpu_device_pcie_dynamic_switching_supported(void);
>  bool amdgpu_device_should_use_aspm(struct amdgpu_device *adev);
> -bool amdgpu_device_aspm_support_quirk(void);
>
>  void amdgpu_cs_report_moved_bytes(struct amdgpu_device *adev, u64 num_bytes,
>                                   u64 num_vis_bytes);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 4e144be7f044..7ec32b44df05 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -1456,14 +1456,14 @@ bool amdgpu_device_seamless_boot_supported(struct amdgpu_device *adev)
>  }
>
>  /*
> - * Intel hosts such as Raptor Lake and Sapphire Rapids don't support dynamic
> - * speed switching. Until we have confirmation from Intel that a specific host
> - * supports it, it's safer that we keep it disabled for all.
> + * Intel hosts such as Rocket Lake, Alder Lake, Raptor Lake and Sapphire Rapids
> + * don't support dynamic speed switching. Until we have confirmation from Intel
> + * that a specific host supports it, it's safer that we keep it disabled for all.
>   *
>   * https://edc.intel.com/content/www/us/en/design/products/platforms/details/raptor-lake-s/13th-generation-core-processors-datasheet-volume-1-of-2/005/pci-express-support/
>   * https://gitlab.freedesktop.org/drm/amd/-/issues/2663
>   */
> -bool amdgpu_device_pcie_dynamic_switching_supported(void)
> +static bool amdgpu_device_pcie_dynamic_switching_supported(void)
>  {
>  #if IS_ENABLED(CONFIG_X86)
>         struct cpuinfo_x86 *c = &cpu_data(0);
> @@ -1498,20 +1498,11 @@ bool amdgpu_device_should_use_aspm(struct amdgpu_device *adev)
>         }
>         if (adev->flags & AMD_IS_APU)
>                 return false;
> +       if (!(adev->pm.pp_feature & PP_PCIE_DPM_MASK))
> +               return false;
>         return pcie_aspm_enabled(adev->pdev);
>  }
>
> -bool amdgpu_device_aspm_support_quirk(void)
> -{
> -#if IS_ENABLED(CONFIG_X86)
> -       struct cpuinfo_x86 *c = &cpu_data(0);
> -
> -       return !(c->x86 == 6 && c->x86_model == INTEL_FAM6_ALDERLAKE);
> -#else
> -       return true;
> -#endif
> -}
> -
>  /* if we get transitioned to only one device, take VGA back */
>  /**
>   * amdgpu_device_vga_set_decode - enable/disable vga decode
> diff --git a/drivers/gpu/drm/amd/amdgpu/nv.c b/drivers/gpu/drm/amd/amdgpu/nv.c
> index 9fa220de1490..4d7976b77767 100644
> --- a/drivers/gpu/drm/amd/amdgpu/nv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/nv.c
> @@ -513,7 +513,7 @@ static int nv_set_vce_clocks(struct amdgpu_device *adev, u32 evclk, u32 ecclk)
>
>  static void nv_program_aspm(struct amdgpu_device *adev)
>  {
> -       if (!amdgpu_device_should_use_aspm(adev) || !amdgpu_device_aspm_support_quirk())
> +       if (!amdgpu_device_should_use_aspm(adev))
>                 return;
>
>         if (adev->nbio.funcs->program_aspm)
> @@ -608,9 +608,8 @@ static int nv_update_umd_stable_pstate(struct amdgpu_device *adev,
>         if (adev->gfx.funcs->update_perfmon_mgcg)
>                 adev->gfx.funcs->update_perfmon_mgcg(adev, !enter);
>
> -       if (!(adev->flags & AMD_IS_APU) &&
> -           (adev->nbio.funcs->enable_aspm) &&
> -            amdgpu_device_should_use_aspm(adev))
> +       if (adev->nbio.funcs->enable_aspm &&
> +           amdgpu_device_should_use_aspm(adev))
>                 adev->nbio.funcs->enable_aspm(adev, !enter);
>
>         return 0;
> diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c
> index 1a08052bade3..1a98812981f4 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vi.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vi.c
> @@ -1124,7 +1124,7 @@ static void vi_program_aspm(struct amdgpu_device *adev)
>         bool bL1SS = false;
>         bool bClkReqSupport = true;
>
> -       if (!amdgpu_device_should_use_aspm(adev) || !amdgpu_device_pcie_dynamic_switching_supported())
> +       if (!amdgpu_device_should_use_aspm(adev))
>                 return;
>
>         if (adev->asic_type < CHIP_POLARIS10)
> --
> 2.34.1
>


More information about the amd-gfx mailing list