[PATCH 2/2] drm/amdgpu: use cached baco flag as the check in runpm (v2)
Lazar, Lijo
lijo.lazar at amd.com
Tue Jul 12 06:56:31 UTC 2022
Instead of doing this way, suggest to cache the run_pm_mode in
struct amdgpu_pm {
}
You could cache the run_pm modes in kms logic -
https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c#L183
Afterwards, you may use the cached value for any check
For ex: adev->pm.run_pm_mode == AMDGPU_RPM_BACO
Thanks,
Lijo
On 7/12/2022 12:08 PM, Guchun Chen wrote:
> SMU will perform dpm disablement when entering BACO,
> and enable them later on, so talking to SMU to get
> enabled features mask in runpm cycle as BACO support
> check is not reliable. Hence, use a cached baco flag
> to fix it.
>
> v2: cache this flag in load sequence to simplify code (from Evan)
>
> Signed-off-by: Guchun Chen <guchun.chen at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 4 +++-
> drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 2 +-
> 4 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 845d6054992a..816f813a5df2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -1014,6 +1014,7 @@ struct amdgpu_device {
> bool runpm;
> bool in_runpm;
> bool has_pr3;
> + bool is_baco_supported;
>
> bool pm_sysfs_en;
> bool ucode_sysfs_en;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 1cc9260e75de..c3f870c01c47 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -2513,7 +2513,7 @@ static int amdgpu_pmops_runtime_suspend(struct device *dev)
> drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF;
> } else if (amdgpu_device_supports_boco(drm_dev)) {
> /* nothing to do */
> - } else if (amdgpu_device_supports_baco(drm_dev)) {
> + } else if (adev->is_baco_supported) {
> amdgpu_device_baco_enter(drm_dev);
> }
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> index 4b663866d33a..532406d32fba 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> @@ -188,8 +188,10 @@ int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)
>
> amdgpu_runtime_pm_quirk(adev);
>
> - if (adev->runpm)
> + if (adev->runpm) {
> dev_info(adev->dev, "Using BACO for runtime pm\n");
> + adev->is_baco_supported = true;
> + }
> }
>
> /* Call ACPI methods: require modeset init
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> index de59dc051340..f05d7ac03122 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> @@ -2353,7 +2353,7 @@ static int psp_load_smu_fw(struct psp_context *psp)
> */
> if (adev->in_runpm &&
> !amdgpu_device_supports_boco(adev_to_drm(adev)) &&
> - amdgpu_device_supports_baco(adev_to_drm(adev)))
> + adev->is_baco_supported)
> return 0;
>
> if (!ucode->fw || amdgpu_sriov_vf(psp->adev))
>
More information about the amd-gfx
mailing list