Acked-by: Evan Quan <evan.quan@xxxxxxx> > -----Original Message----- > From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Alex > Deucher > Sent: Thursday, November 21, 2019 3:23 AM > To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx > Cc: Deucher, Alexander <Alexander.Deucher@xxxxxxx> > 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@xxxxxxx> > --- > 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@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/amd-gfx _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx