[PATCH] drm/amdgpu: simplify runtime suspend

Quan, Evan Evan.Quan at amd.com
Thu Nov 21 01:43:22 UTC 2019


Acked-by: Evan Quan <evan.quan at amd.com>

> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Alex
> Deucher
> Sent: Thursday, November 21, 2019 3:23 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher at amd.com>
> Subject: [PATCH] drm/amdgpu: simplify runtime suspend
> 
> In the standard _PR3 case, the pci core handles the pci state.
> The driver only needs to handle it in the legacy ATPX case.
> 
> This may fix issues with runtime suspend/resume on certain
> hybrid graphics laptops.
> 
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 35 ++++++++++++++++---------
>  1 file changed, 22 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index ea763bc5b233..df2f4720a2f0 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -1227,13 +1227,17 @@ static int amdgpu_pmops_runtime_suspend(struct
> device *dev)
> 
>  	ret = amdgpu_device_suspend(drm_dev, false, false);
>  	if (amdgpu_device_supports_boco(drm_dev)) {
> -		pci_save_state(pdev);
> -		pci_disable_device(pdev);
> -		pci_ignore_hotplug(pdev);
> -		if (amdgpu_is_atpx_hybrid())
> +		/* Only need to handle PCI state in the driver for ATPX
> +		 * PCI core handles it for _PR3.
> +		 */
> +		if (amdgpu_is_atpx_hybrid()) {
> +			pci_ignore_hotplug(pdev);
> +		} else {
> +			pci_save_state(pdev);
> +			pci_disable_device(pdev);
> +			pci_ignore_hotplug(pdev);
>  			pci_set_power_state(pdev, PCI_D3cold);
> -		else if (!amdgpu_has_atpx_dgpu_power_cntl())
> -			pci_set_power_state(pdev, PCI_D3hot);
> +		}
>  		drm_dev->switch_power_state =
> DRM_SWITCH_POWER_DYNAMIC_OFF;
>  	} else if (amdgpu_device_supports_baco(drm_dev)) {
>  		amdgpu_device_baco_enter(drm_dev);
> @@ -1255,14 +1259,19 @@ static int amdgpu_pmops_runtime_resume(struct
> device *dev)
>  	if (amdgpu_device_supports_boco(drm_dev)) {
>  		drm_dev->switch_power_state =
> DRM_SWITCH_POWER_CHANGING;
> 
> -		if (amdgpu_is_atpx_hybrid() ||
> -		    !amdgpu_has_atpx_dgpu_power_cntl())
> +		/* Only need to handle PCI state in the driver for ATPX
> +		 * PCI core handles it for _PR3.
> +		 */
> +		if (amdgpu_is_atpx_hybrid()) {
> +			pci_set_master(pdev);
> +		} else {
>  			pci_set_power_state(pdev, PCI_D0);
> -		pci_restore_state(pdev);
> -		ret = pci_enable_device(pdev);
> -		if (ret)
> -			return ret;
> -		pci_set_master(pdev);
> +			pci_restore_state(pdev);
> +			ret = pci_enable_device(pdev);
> +			if (ret)
> +				return ret;
> +			pci_set_master(pdev);
> +		}
>  	} else if (amdgpu_device_supports_baco(drm_dev)) {
>  		amdgpu_device_baco_exit(drm_dev);
>  	}
> --
> 2.23.0
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list