Messages in this thread | | | Date | Wed, 3 May 2023 10:34:42 -0700 | Subject | Re: [PATCH 2/4] drm/msm/dsi: Fix compressed word count calculation | From | Jessica Zhang <> |
| |
On 5/3/2023 1:26 AM, Dmitry Baryshkov wrote: > On 03/05/2023 04:19, Jessica Zhang wrote: >> Currently, word count is calculated using slice_count. This is incorrect >> as downstream uses slice per packet, which is different from >> slice_count. >> >> Slice count represents the number of soft slices per interface, and its >> value will not always match that of slice per packet. For example, it is >> possible to have cases where there are multiple soft slices per interface >> but the panel specifies only one slice per packet. >> >> Thus, use the default value of one slice per packet and remove >> slice_count >> from the word count calculation. >> >> Fixes: bc6b6ff8135c ("drm/msm/dsi: Use DSC slice(s) packet size to >> compute word count") >> Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com> >> --- >> drivers/gpu/drm/msm/dsi/dsi_host.c | 9 ++++++++- >> 1 file changed, 8 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c >> b/drivers/gpu/drm/msm/dsi/dsi_host.c >> index 35c69dbe5f6f..b0d448ffb078 100644 >> --- a/drivers/gpu/drm/msm/dsi/dsi_host.c >> +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c >> @@ -996,7 +996,14 @@ static void dsi_timing_setup(struct msm_dsi_host >> *msm_host, bool is_bonded_dsi) >> if (!msm_host->dsc) >> wc = hdisplay * dsi_get_bpp(msm_host->format) / 8 + 1; >> else >> - wc = msm_host->dsc->slice_chunk_size * >> msm_host->dsc->slice_count + 1; >> + /* >> + * When DSC is enabled, WC = slice_chunk_size * >> slice_per_packet + 1. >> + * Currently, the driver only supports default value of >> slice_per_packet = 1 >> + * >> + * TODO: Expand drm_panel struct to hold slice_per_packet >> info >> + * and adjust DSC math to account for >> slice_per_packet. > > slice_per_packet is not a part of the standard DSC, so I'm not sure how > that can be implemented. And definitely we should not care about the > drm_panel here. It should be either a part of drm_dsc_config, or > mipi_dsi_device.
Hi Dmitry,
IIRC slice per packet is given by the panel specs with the default value being 1 if no value is specified, so it might be better to have it as part of mipi_dsi_device.
Will update the TODO comment accordingly.
Thanks,
Jessica Zhang
> >> + */ >> + wc = msm_host->dsc->slice_chunk_size + 1; >> dsi_write(msm_host, REG_DSI_CMD_MDP_STREAM0_CTRL, >> DSI_CMD_MDP_STREAM0_CTRL_WORD_COUNT(wc) | >> > > -- > With best wishes > Dmitry >
| |