[PATCH 3/4] drm/amd/display: pass panel instance in dirty rect message

Leo sunpeng.li at amd.com
Fri Jun 3 15:08:56 UTC 2022




On 2022-06-02 16:48, Harry Wentland wrote:
> 
> 
> On 2022-06-02 14:03, sunpeng.li at amd.com wrote:
>> From: David Zhang <dingchen.zhang at amd.com>
>>
>> [why]
>> DMUB FW uses OTG instance to get eDP panel instance. But in case
>> of MPO multiple pipe indexes are passed to updated the same panel.
>> The other OTG instance passed would be ignored causing in DMUB not
>> acknowledging the messages.
>>
>> [how]
>> Add panel instance to dirty rectangle data and cursor update data
>> structures and pass to DMUB.
>>
> 
> I'm not entirely following why passing the panel_inst solves the problem
> that is described.

Oops, it looks like the commit message is misleading.

"panel_inst" already exists in the dmub_cmd structures. It defaults to 0 today due to the memset, which works with single eDP scenarios.
What this change is really doing is identifying the panel instance to run PSR commands on, instead of assuming that the eDP we want is always instance 0.

Will reword the message.

Thanks,
Leo

> 
>> Signed-off-by: Mikita Lipski <mikita.lipski at amd.com>
> 
> This says the author is David but it has only Mikita's sign-off.
> We need David's sign-off as well.
> 
> Harry
> 
>> Acked-by: Leo Li <sunpeng.li at amd.com>
>> ---
>>  drivers/gpu/drm/amd/display/dc/core/dc.c | 5 +++++
>>  1 file changed, 5 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
>> index d4173be11903..31d83297bcb5 100644
>> --- a/drivers/gpu/drm/amd/display/dc/core/dc.c
>> +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
>> @@ -2837,10 +2837,14 @@ void dc_dmub_update_dirty_rect(struct dc *dc,
>>  	struct dc_context *dc_ctx = dc->ctx;
>>  	struct dmub_cmd_update_dirty_rect_data *update_dirty_rect;
>>  	unsigned int i, j;
>> +	unsigned int panel_inst = 0;
>>  
>>  	if (stream->link->psr_settings.psr_version != DC_PSR_VERSION_SU_1)
>>  		return;
>>  
>> +	if (!dc_get_edp_link_panel_inst(dc, stream->link, &panel_inst))
>> +		return;
>> +
>>  	memset(&cmd, 0x0, sizeof(cmd));
>>  	cmd.update_dirty_rect.header.type = DMUB_CMD__UPDATE_DIRTY_RECT;
>>  	cmd.update_dirty_rect.header.sub_type = 0;
>> @@ -2869,6 +2873,7 @@ void dc_dmub_update_dirty_rect(struct dc *dc,
>>  			if (pipe_ctx->plane_state != plane_state)
>>  				continue;
>>  
>> +			update_dirty_rect->panel_inst = panel_inst;
>>  			update_dirty_rect->pipe_idx = j;
>>  			dc_dmub_srv_cmd_queue(dc_ctx->dmub_srv, &cmd);
>>  			dc_dmub_srv_cmd_execute(dc_ctx->dmub_srv);
> 



More information about the amd-gfx mailing list