[Freedreno] [PATCH RFC v2 4/6] drm/msm/dpu: Fix slice_last_group_size calculation

Jessica Zhang quic_jesszhan at quicinc.com
Mon Apr 3 22:13:01 UTC 2023



On 4/3/2023 2:51 PM, Dmitry Baryshkov wrote:
> On 04/04/2023 00:45, Jessica Zhang wrote:
>>
>>
>> On 4/2/2023 4:27 AM, Dmitry Baryshkov wrote:
>>> On 31/03/2023 21:49, Jessica Zhang wrote:
>>>> Correct the math for slice_last_group_size so that it matches the
>>>> calculations downstream.
>>>>
>>>> Fixes: c110cfd1753e ("drm/msm/disp/dpu1: Add support for DSC")
>>>> Signed-off-by: Jessica Zhang <quic_jesszhan at quicinc.com>
>>>> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov at linaro.org>
>>>> ---
>>>>   drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c | 6 +++++-
>>>>   1 file changed, 5 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c 
>>>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c
>>>> index b952f7d2b7f5..9312a8d7fbd9 100644
>>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c
>>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c
>>>> @@ -56,7 +56,11 @@ static void dpu_hw_dsc_config(struct dpu_hw_dsc 
>>>> *hw_dsc,
>>>>       if (is_cmd_mode)
>>>>           initial_lines += 1;
>>>> -    slice_last_group_size = 3 - (dsc->slice_width % 3);
>>>> +    slice_last_group_size = dsc->slice_width % 3;
>>>> +
>>>> +    if (slice_last_group_size == 0)
>>>> +        slice_last_group_size = 3;
>>>
>>> Hmm. As I went on checking this against techpack:
>>>
>>> mod = dsc->slice_width % 3
>>>
>>> mod | techpack | old | your_patch
>>> 0   | 2        | 3   | 3
>>> 1   | 0        | 2   | 1
>>> 2   | 1        | 1   | 2
>>>
>>> So, obviously neither old nor new code match the calculations of the 
>>> techpack. If we assume that sde_dsc_helper code is correct (which I 
>>> have no reasons to doubt), then the proper code should be:
>>>
>>> slice_last_group_size = (dsc->slice_width + 2) % 3;
>>>
>>> Could you please doublecheck and adjust.
>>
>> Hi Dmitry,
>>
>> The calculation should match the techpack calculation (I kept the 
>> `data |= ((slice_last_group_size - 1) << 18);` a few lines down).
> 
> And the techpack doesn't have -1.
> 
> I think the following code piece would be more convenient as it is simpler:
> 
> slice_last_group_size = (dsc->slice_width + 2) % 3;
> [...]
> data |= slice_last_group_size << 18;
> 
> If you agree, could you please switch to it?

Sure.

Thanks,

Jessica Zhang

> 
>>
>> Thanks,
>>
>> Jessica Zhang
>>
>>>
>>>> +
>>>>       data = (initial_lines << 20);
>>>>       data |= ((slice_last_group_size - 1) << 18);
>>>>       /* bpp is 6.4 format, 4 LSBs bits are for fractional part */
>>>>
>>>
>>> -- 
>>> With best wishes
>>> Dmitry
>>>
> 
> -- 
> With best wishes
> Dmitry
> 


More information about the Freedreno mailing list