[PATCH] drm/amdgpu: expand runpm parameter

Chen, Guchun Guchun.Chen at amd.com
Thu Aug 10 01:29:15 UTC 2023


[Public]

Reviewed-by: Guchun Chen <guchun.chen at amd.com>

Regards,
Guchun

> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Alex
> Deucher
> Sent: Wednesday, July 12, 2023 11:53 PM
> To: amd-gfx at lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher at amd.com>
> 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 at amd.com>
> ---
>  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



More information about the amd-gfx mailing list