[Public] Reviewed-by: Guchun Chen <guchun.chen@xxxxxxx> Regards, Guchun > -----Original Message----- > From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Alex > Deucher > Sent: Wednesday, July 12, 2023 11:53 PM > To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx > Cc: Deucher, Alexander <Alexander.Deucher@xxxxxxx> > Subject: [PATCH] drm/amdgpu: expand runpm parameter > > Allow the user to specify -2 as auto enabled with displays. > > By default we don't enter runtime suspend when there are displays attached > because it does not work well in some desktop environments due to the > driver sending hotplug events on resume in case any new displays were > attached while the GPU was powered down. Some users still want this > functionality though, so this lets you enable it. > > Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2428 > Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 37 +++++++++++++----------- > - > 1 file changed, 20 insertions(+), 17 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > index 721f3c6160bcb..33e370d998a87 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > @@ -350,8 +350,9 @@ module_param_named(aspm, amdgpu_aspm, int, > 0444); > * Override for runtime power management control for dGPUs. The amdgpu > driver can dynamically power down > * the dGPUs when they are idle if supported. The default is -1 (auto enable). > * Setting the value to 0 disables this functionality. > + * Setting the value to -2 is auto enabled with power down when displays > are attached. > */ > -MODULE_PARM_DESC(runpm, "PX runtime pm (2 = force enable with > BAMACO, 1 = force enable with BACO, 0 = disable, -1 = auto)"); > +MODULE_PARM_DESC(runpm, "PX runtime pm (2 = force enable with > BAMACO, 1 > += force enable with BACO, 0 = disable, -1 = auto, -2 = autowith > +displays)"); > module_param_named(runpm, amdgpu_runtime_pm, int, 0444); > > /** > @@ -2657,24 +2658,26 @@ static int > amdgpu_runtime_idle_check_display(struct device *dev) > struct drm_connector_list_iter iter; > int ret = 0; > > - /* XXX: Return busy if any displays are connected to avoid > - * possible display wakeups after runtime resume due to > - * hotplug events in case any displays were connected while > - * the GPU was in suspend. Remove this once that is fixed. > - */ > - mutex_lock(&drm_dev->mode_config.mutex); > - drm_connector_list_iter_begin(drm_dev, &iter); > - drm_for_each_connector_iter(list_connector, &iter) { > - if (list_connector->status == > connector_status_connected) { > - ret = -EBUSY; > - break; > + if (amdgpu_runtime_pm != -2) { > + /* XXX: Return busy if any displays are connected to > avoid > + * possible display wakeups after runtime resume > due to > + * hotplug events in case any displays were > connected while > + * the GPU was in suspend. Remove this once that is > fixed. > + */ > + mutex_lock(&drm_dev->mode_config.mutex); > + drm_connector_list_iter_begin(drm_dev, &iter); > + drm_for_each_connector_iter(list_connector, &iter) { > + if (list_connector->status == > connector_status_connected) { > + ret = -EBUSY; > + break; > + } > } > - } > - drm_connector_list_iter_end(&iter); > - mutex_unlock(&drm_dev->mode_config.mutex); > + drm_connector_list_iter_end(&iter); > + mutex_unlock(&drm_dev->mode_config.mutex); > > - if (ret) > - return ret; > + if (ret) > + return ret; > + } > > if (adev->dc_enabled) { > struct drm_crtc *crtc; > -- > 2.41.0