[PATCH] drm/amd/display: Prevent OTG shutdown during PSR SU

Leo Li sunpeng.li at amd.com
Wed Sep 28 17:25:08 UTC 2022



On 2022-09-28 09:52, Harry Wentland wrote:
> 
> 
> On 2022-09-27 19:13, sunpeng.li at amd.com wrote:
>> From: Leo Li <sunpeng.li at amd.com>
>>
>> [Why]
>>
>> Enabling Z10 optimizations allows DMUB to disable the OTG during PSR
>> link-off. This theoretically saves power by putting more of the display
>> hardware to sleep. However, we observe that with PSR SU, it causes
>> visual artifacts, higher power usage, and potential system hang.
>>
>> This is partly due to an odd behavior with the VStartup interrupt used
>> to signal DRM vblank events. If the OTG is toggled on/off during a PSR
>> link on/off cycle, the vstartup interrupt fires twice in quick
>> succession. This generates incorrectly timed vblank events.
>> Additionally, it can cause cursor updates to generate visual artifacts.
>>
>> Note that this is not observed with PSR1 since PSR is fully disabled
>> when there are vblank event requestors. Cursor updates are also
>> artifact-free, likely because there are no selectively-updated (SU)
>> frames that can generate artifacts.
>>
>> [How]
>>
>> A potential solution is to disable z10 idle optimizations only when fast
>> updates (flips & cursor updates) are committed. A mechanism to do so
>> would require some thoughtful design. Let's just disable idle
>> optimizations for PSR2 for now.
>>
> 
> Great writeup. Wish every bugfix came with details like this.
> 
>> Fixes: 7cc191ee7621 ("drm/amd/display: Implement MPO PSR SU")
>> Signed-off-by: Leo Li <sunpeng.li at amd.com>
> 
> With Thorsten's comments addressed this is
> Reviewed-by: Harry Wentland <harry.wentland at amd.com>
> 
> Harry
> 

Thanks all for the bug report, comments, and review. Will send out v2 
and merge shortly.

Leo

>> ---
>>   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c | 8 +++++++-
>>   1 file changed, 7 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c
>> index c8da18e45b0e..8ca10ab3dfc1 100644
>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c
>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c
>> @@ -170,7 +170,13 @@ bool amdgpu_dm_psr_enable(struct dc_stream_state *stream)
>>   					   &stream, 1,
>>   					   &params);
>>   
>> -	power_opt |= psr_power_opt_z10_static_screen;
>> +	/*
>> +	 * Only enable static-screen optimizations for PSR1. For PSR SU, this
>> +	 * causes vstartup interrupt issues, used by amdgpu_dm to send vblank
>> +	 * events.
>> +	 */
>> +	if (link->psr_settings.psr_version < DC_PSR_VERSION_SU_1)
>> +		power_opt |= psr_power_opt_z10_static_screen;
>>   
>>   	return dc_link_set_psr_allow_active(link, &psr_enable, false, false, &power_opt);
>>   }
> 


More information about the amd-gfx mailing list