[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