[PATCH] drm/amd: Don't allow s0ix on APUs older than Raven

Limonciello, Mario Mario.Limonciello at amd.com
Fri Feb 10 20:52:10 UTC 2023


[Public]



> -----Original Message-----
> From: Limonciello, Mario <Mario.Limonciello at amd.com>
> Sent: Friday, February 10, 2023 14:47
> To: amd-gfx at lists.freedesktop.org
> Cc: Limonciello, Mario <Mario.Limonciello at amd.com>; Deucher, Alexander
> <Alexander.Deucher at amd.com>
> Subject: [PATCH] drm/amd: Don't allow s0ix on APUs older than Raven
> 
> APUs before Raven didn't support s0ix.  As we just relieved some
> of the safety checks for s0ix to improve power consumption on
> APUs that support it but that are missing BIOS support a new
> blind spot was introduced that a user could "try" to run s0ix.
> 
> Plug this hole so that if users try to run s0ix on anything older
> than Raven it will just skip suspend of the GPU.
> 
> Fixes: cf488dcd0ab7 ("drm/amd: Allow s0ix without BIOS support")
> Suggested-by: Alexander Deucher <Alexander.Deucher at amd.com>
> Signed-off-by: Mario Limonciello <mario.limonciello at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 3 +++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c  | 5 ++++-
>  2 files changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
> index fa7375b97fd47..25e902077caf6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
> @@ -1073,6 +1073,9 @@ bool amdgpu_acpi_is_s0ix_active(struct
> amdgpu_device *adev)
>  	    (pm_suspend_target_state != PM_SUSPEND_TO_IDLE))
>  		return false;
> 
> +	if (adev->asic_type < CHIP_RAVEN)
> +		return false;
> +
>  	/*
>  	 * If ACPI_FADT_LOW_POWER_S0 is not set in the FADT, it is
> generally
>  	 * risky to do any special firmware-related preparations for entering
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 6c2fe50b528e0..98f8d9873cd84 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -2414,7 +2414,7 @@ static int amdgpu_pmops_suspend(struct device
> *dev)
> 
>  	if (amdgpu_acpi_is_s0ix_active(adev))
>  		adev->in_s0ix = true;
> -	else
> +	else if (amdgpu_acpi_is_s3_active(adev))
>  		adev->in_s3 = true;

Relooking at this, I wonder if it actually needs this too:


 	if (!adev->in_s0ix && !adev->in_s3)
 		return 0;


>  	return amdgpu_device_suspend(drm_dev, true);
>  }
> @@ -2436,6 +2436,9 @@ static int amdgpu_pmops_resume(struct device
> *dev)
>  	struct amdgpu_device *adev = drm_to_adev(drm_dev);
>  	int r;
> 
> +	if (!adev->in_s0ix && !adev->in_s3)
> +		return 0;
> +
>  	/* Avoids registers access if device is physically gone */
>  	if (!pci_device_is_present(adev->pdev))
>  		adev->no_hw_access = true;
> --
> 2.25.1


More information about the amd-gfx mailing list