[PATCH] drm/amdgpu: make damage clips support configurable
Mario Limonciello
mario.limonciello at amd.com
Thu Feb 8 22:15:58 UTC 2024
On 2/8/2024 16:11, Hamza Mahfooz wrote:
> We have observed that there are quite a number of PSR-SU panels on the
> market that are unable to keep up with what user space throws at them,
> resulting in hangs and random black screens. So, make damage clips
> support configurable and disable it by default for PSR-SU displays.
>
> Cc: Mario Limonciello <mario.limonciello at amd.com>
> Signed-off-by: Hamza Mahfooz <hamza.mahfooz at amd.com>
I think this with this patch in place you could also revert
571c2fa26aa6 ("drm/amd/display: Disable PSR-SU on Parade 0803 TCON again")
One minor nit below otherwise LGTM.
Reviewed-by: Mario Limonciello <mario.limonciello at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 13 +++++++++++++
> drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 7 +++++++
> 3 files changed, 21 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 312dfaec7b4a..1291b8eb9dff 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -198,6 +198,7 @@ extern uint amdgpu_dc_debug_mask;
> extern uint amdgpu_dc_visual_confirm;
> extern uint amdgpu_dm_abm_level;
> extern int amdgpu_backlight;
> +extern int amdgpu_damage_clips;
> extern struct amdgpu_mgpu_info mgpu_info;
> extern int amdgpu_ras_enable;
> extern uint amdgpu_ras_mask;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 161ecf9b4174..2b75aeb8280f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -211,6 +211,7 @@ int amdgpu_seamless = -1; /* auto */
> uint amdgpu_debug_mask;
> int amdgpu_agp = -1; /* auto */
> int amdgpu_wbrf = -1;
> +int amdgpu_damage_clips = -1; /* auto */
>
> static void amdgpu_drv_delayed_reset_work_handler(struct work_struct *work);
>
> @@ -859,6 +860,18 @@ int amdgpu_backlight = -1;
> MODULE_PARM_DESC(backlight, "Backlight control (0 = pwm, 1 = aux, -1 auto (default))");
> module_param_named(backlight, amdgpu_backlight, bint, 0444);
>
> +/**
> + * DOC: damageclips (int)
> + * Enable or disable damage clips support. If damage clips support is disabled,
> + * we will force full frame updates, irrespective of what user space sends to
> + * us.
> + *
> + * Defaults to -1.
I think it would be better if this documentation explained what the
values are (IE what -1 really means).
> + */
> +MODULE_PARM_DESC(damageclips,
> + "Damage clips support (0 = disable, 1 = enable, -1 auto (default))");
> +module_param_named(damageclips, amdgpu_damage_clips, int, 0444);
> +
> /**
> * DOC: tmz (int)
> * Trusted Memory Zone (TMZ) is a method to protect data being written
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index b3a5e730be24..fbe2aa40c21a 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -5253,6 +5253,7 @@ static void fill_dc_dirty_rects(struct drm_plane *plane,
> struct drm_plane_state *new_plane_state,
> struct drm_crtc_state *crtc_state,
> struct dc_flip_addrs *flip_addrs,
> + bool is_psr_su,
> bool *dirty_regions_changed)
> {
> struct dm_crtc_state *dm_crtc_state = to_dm_crtc_state(crtc_state);
> @@ -5277,6 +5278,10 @@ static void fill_dc_dirty_rects(struct drm_plane *plane,
> num_clips = drm_plane_get_damage_clips_count(new_plane_state);
> clips = drm_plane_get_damage_clips(new_plane_state);
>
> + if (num_clips && (!amdgpu_damage_clips || (amdgpu_damage_clips < 0 &&
> + is_psr_su)))
> + goto ffu;
> +
> if (!dm_crtc_state->mpo_requested) {
> if (!num_clips || num_clips > DC_MAX_DIRTY_RECTS)
> goto ffu;
> @@ -8411,6 +8416,8 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
> fill_dc_dirty_rects(plane, old_plane_state,
> new_plane_state, new_crtc_state,
> &bundle->flip_addrs[planes_count],
> + acrtc_state->stream->link->psr_settings.psr_version ==
> + DC_PSR_VERSION_SU_1,
> &dirty_rects_changed);
>
> /*
More information about the amd-gfx
mailing list