Re: [PATCH RESEND v5 01/25] drm/msm/dp: introduce stream_id for each DP panel

Yongxing Mou <[email protected]>
Newsgroups org.freedesktop.lists.dri-devel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel
Message-ID <[email protected]>

On 7/12/2026 7:11 PM, Dmitry Baryshkov wrote:
> On Mon, Jun 29, 2026 at 10:14:22PM +0800, Yongxing Mou wrote:
>> From: Abhinav Kumar <[email protected]>
>>
>> With MST, each DP controller can handle multiple streams. There shall be
>> one dp_panel for each stream but the dp_display object shall be shared
>> among them. To represent this abstraction, create a stream_id for each DP
> 
> You are not creating IDs.
> 
Got it. Will modify it next patchset.
>> panel which shall be dynamically assigned to actual stream IDs by the MST
>> path. For SST, default this to stream 0.
>>
>> In the MST path, panels are dynamically assigned to actual stream IDs at
>> stream enable time by the MST layer.
>>
>> Use the stream ID to control the pixel clock of that respective stream by
>> extending the clock handles and state tracking of the DP pixel clock to
>> an array of max supported streams. The maximum streams currently is 4.
>>
>> Signed-off-by: Abhinav Kumar <[email protected]>
>> Signed-off-by: Yongxing Mou <[email protected]>
>> ---
>>   drivers/gpu/drm/msm/dp/dp_ctrl.c    | 67 +++++++++++++++++++++++--------------
>>   drivers/gpu/drm/msm/dp/dp_ctrl.h    |  2 +-
>>   drivers/gpu/drm/msm/dp/dp_display.c |  2 +-
>>   drivers/gpu/drm/msm/dp/dp_panel.c   |  1 +
>>   drivers/gpu/drm/msm/dp/dp_panel.h   | 11 ++++++
>>   5 files changed, 55 insertions(+), 28 deletions(-)
>>
>> @@ -2188,38 +2188,39 @@ static bool msm_dp_ctrl_send_phy_test_pattern(struct msm_dp_ctrl_private *ctrl)
>>   	return success;
>>   }
>>   
>> -static int msm_dp_ctrl_on_pixel_clk(struct msm_dp_ctrl_private *ctrl, unsigned long pixel_rate)
>> +static int msm_dp_ctrl_on_pixel_clk(struct msm_dp_ctrl_private *ctrl, unsigned long pixel_rate,
>> +				    enum msm_dp_stream_id stream_id)
>>   {
>>   	int ret;
>>   
>> -	ret = clk_set_rate(ctrl->pixel_clk, pixel_rate * 1000);
>> +	ret = clk_set_rate(ctrl->pixel_clk[stream_id], pixel_rate * 1000);
>>   	if (ret) {
>>   		DRM_ERROR("Failed to set pixel clock rate. ret=%d\n", ret);
>>   		return ret;
>>   	}
>>   
>> -	if (WARN_ON_ONCE(ctrl->stream_clks_on))
>> +	if (WARN_ON_ONCE(ctrl->stream_clks_on[stream_id]))
>>   		return 0;
> 
> Is it an error, defensive coding, DT mismatch or something else? Why are
> we warning the users _and_ returning success here?
> 
This is primarily defensive code. The normal execution flow is not 
expected to reach this path, so we only print a warning here.
>>   
>> -	ret = clk_prepare_enable(ctrl->pixel_clk);
>> +	ret = clk_prepare_enable(ctrl->pixel_clk[stream_id]);
>>   	if (ret) {
>>   		DRM_ERROR("Failed to start pixel clocks. ret=%d\n", ret);
>>   		return ret;
>>   	}
>> -	ctrl->stream_clks_on = true;
>> +	ctrl->stream_clks_on[stream_id] = true;
>>   
>>   	return ret;
>>   }
>>   
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.