[Freedreno] [PATCH v3 00/38] drm/msm/dpu: rework HW catalog
Dmitry Baryshkov
dmitry.baryshkov at linaro.org
Mon Apr 3 22:16:21 UTC 2023
On 03/04/2023 22:07, Abhinav Kumar wrote:
>
>
> On 4/3/2023 11:48 AM, Dmitry Baryshkov wrote:
>> On 03/04/2023 21:06, Abhinav Kumar wrote:
>>>
>>>
>>> On 3/30/2023 2:52 PM, Dmitry Baryshkov wrote:
>>>> This huge series attempts to restructure the DPU HW catalog into a
>>>> manageable and reviewable data set. In order to ease review and testing
>>>> I merged all the necessary fixes into this series. Also I cherry-picked
>>>> & slightly fixed Konrad's patch adding size to the SSPP and INTF
>>>> macros.
>>>>
>>>
>>> I had to first dig up some history about why dpu catalog grew so much
>>> in the first place before starting this review. When the DPU driver
>>> first landed (which pre-dates my work in upstream), it looks like it
>>> followed mdp5 model from mdp5_cfg.c. But looks like as the number of
>>> chipsets which use DPU kept growing, this is becoming a burden.
>>>
>>> As everyone knows, downstream follows a devicetree model for the dpu
>>> hardware and that should have always been the case. Perhaps in the
>>> last 2-3 years more time could have been spent on standardizing the
>>> bindings used for hw blocks in order to maintain a less hard-coded
>>> catalog file and more in the device tree.
>>
>> Unfortunately, this is not how the upstream DT works. If something is
>> a constant hardware property, it should not go into the DT. So pushing
>> catalog to dt would have been immediately frowned upon by Rob Herring
>> or Krzysztof.
>>
>
> Yes certainly we cannot put hardware specific properties. But in
> general, modelling the hardware like the number of sspps, number of
> interfaces and number of dspps etc can be a bit abstracted? like
> blk-type and blk-offset? blk-type can be a custom string because each
> block is named differently for different vendors?
No.
>
> The number of blk_offsets decides number of blocks. Its not constant
> right. We are seeing it varying with chipsets.
>
>>> Then the catalog would have just been a place to parse the device
>>> tree, set the feature capability based on chipset (refer
>>> _sde_hardware_pre_caps). That way offsets , number of blocks and the
>>> blocks themselves still come from the device tree but perhaps some
>>> specific features are at SOC level for which the catalog still stays.
>>>
>>> That being said, I thought of different strategies even before the
>>> review but two issues prevented me from suggesting those ideas (one
>>> of which I am seeing even here , which I am going to suggest below
>>> and also suggest why it wont work).
>>>
>>> 1) For the same DPU major/minor version, some features might get
>>> dropped or even get added with different SOCs as overall the system
>>> capabilities might differ like number of SSPPs or memory footprint of
>>> the SOC etc.
>>>
>>> So there is no good way right now to generalize any dpu catalog or to
>>> tie it with a DPU major/minor version. We will have to stick with a
>>> per-SOC model.
>>
>> Up to now, the SoC was equal to major+minor. Could you please be more
>> specific here, if there are any actual differences within major+minor
>> families?
>>
>
> So lets say, the same DPU major/minor version is used but we have only
> one DSI on one chipset Vs two DSIs on the other, some of the features
> which come into play only for dual DSI cannot be used. Like broadcasting
> a DCS command across two DSIs etc. This is a very basic example, but
> there are many examples.
I'm asking for the exact details, because up to now the driver was using
major:minor to find the catalog entry. It was modelled this way in
sdm845/sc7180, then it was natural for us to continue down this path.
I will put reworking catalog to be bound to the binding data
>
>>>
>>> This is what led me to not pursue that route.
>>>
>>> 2) For the same DPU major/minor version, even if core-DPU is same (in
>>> terms of SSPP, DSPP etc), the number of interfaces can change. So
>>> again no room to generalize same DPU hw version.
>>
>> Again, I might be just scratching the surface, but I have not observed
>> this.
>>
>
> This typically happens based on what products that chipset is catered
> towards. Thats pretty much what I can share. But more number of
> interfaces for more number of displays / use-cases.
Ack, I will not that we should be more careful about this items.
>
>>>
>>> 3) For the same reason as (1) and (2), I think the de-duplication
>>> strategy used in this series is not correct. The idea of
>>> dpu_hw_version_num_layer_mixer is just not scalable as I dont know
>>> how many variants that will lead to. So it seems like just an attempt
>>> to de-duplicate which perhaps works today for existing dpu chipsets
>>> in upstream but by no means scalable. Lets go ahead with per-SOC
>>> catalog file but lets live with some amount of duplication between
>>> them if we really have to split it across header files.
>>
>> Indeed, this leads to minor differences on top of major+lm. However, I
>> think, the overall complexity is lowered.
>>
>> Nevertheless, let's land the major set of patches and leave
>> generalization for the later time. I think, with the addition of the
>> next several platforms we will see the drill.
>>
>
> Yes, I would say lets handle generalization/de-duplication later when we
> see more patterns.
>
> Lets land the main pieces first.
>
> Going with dpu version and number of lms is not the way to generalize it
> from what we think.
>
>>> I also thought of similar strategies to generalize like based on
>>> sub-blocks similar to what you have done but all of these were NAKed
>>> internally by folks who work on more chipsets / have more visibility
>>> into the spread of features across chipsets.
>>>
>>>> First 4 patches clean up the catalog a bit in order to make it more
>>>> suitable for refactoring.
>>>>
>>>
>>> These are okay. I will address your follow-up questions about patch
>>> (1) and lets land these.
>>>
>>>> Then the next batch of 13 + 5 patches split the hw catalog entries into
>>>> per-SoC files.
>>>>
>>>
>>> This part is also fine. But perhaps dont have dpu hw version in the
>>> file. So just dpu_hw_sm8250.h or dpu_hw_sm8350.h etc.
>>
>> Having a version makes it easier to compare chipsets (and also to
>> verify that feature masks are correct), so I'd like to retain it.
>>
>
> This is again trying to generalize it. So for example, yes perhaps today
> the chipsets we have belong to a particular DPU major/minor version and
> it might look like because they are in the same family things look
> similar but that can also go against this. If we find some differences
> among them, then some upstream developers might think "Oh, these belong
> to the same family, but how come it doesnt have the same features?".
> Thats why I am hesitant to go with DPU major/minor version in the name.
We have both major/minor and SoC name, so we will not mix them. However,
yes, if I were to see two SoCs having the same major/minor, it would be
natural for me to compare them. Ask/check if I got it correct that the
details are not the same. Curse and add a separate catalog entry.
Please note, that if we remove the major/minor from the file name, the
entry becomes completely deteached from hw version. The only connection
will be the cfg_handler table. And moving the SoC <-> catalog binding to
the match data (as there can be different chipsets with the same hw rev)
will remove this binding completely.
Thus, I think I am going to keep it in the file name at least. The note
that major/minor doesn't guarantee the same set of features is noted.
>
>>>
>>>> Next 9 patches rework catalog entries, mostly targeting
>>>> deduplication of
>>>> data used by several platforms. At this moment only three pairs (out of
>>>> 13 devices supported by DPU) are merged. However this part lays out the
>>>> ground to ease adding support for new platforms, some of which use the
>>>> same configuration as the existing platforms
>>>>
>>>
>>> This is the part I suggest we drop.
>>>
>>>> Last batch of 7 patches renames existing macros to ease using them
>>>> while
>>>> adding support for new devices.
>>>>
>>>
>>> I have to check this part but perhaps after re-basing based on my
>>> earlier comment.
>>
>> Ack, I'll see what I can drop and what is going to be there.
>>
>> Up to now there were some natural shares, like sm8150 vs sc8180x and
>> qcm2290 vs sm6115. Do you think we should populate the missing parts
>> by duplicate the data?
>>
>
> Yes, lets go ahead with the duplicate data for now. Once a more
> reasonable strategy evolves for generalizing it, we can update it.
Ack, will provide corresponding patches.
>
>>>
>>>> This pile of patches is submitted in a single batch to allow one to
>>>> observe the final goal of the cleanup which otherwise might be hard to
>>>> assess.
>>>>
>>>>
>>>> Changes since v2:
>>>> - Fixed sc8280xp SSPP size to 0x2ac
>>>> - Rebased on top of msm-next-lumag, dropped merged patches
>>>>
>>>> Changes since v1:
>>>> - Picked up Konrad's patch
>>>> - Picked up dependencies into the main series
>>>> - Moved qseed3lite vs qseed4 patches into the fixes part
>>>> - Fixed sm6115 in a similar manner.
>>>>
>>>> Dmitry Baryshkov (37):
>>>> drm/msm/dpu: constify DSC data structures
>>>> drm/msm/dpu: mark remaining pp data as const
>>>> drm/msm/dpu: move UBWC/memory configuration to separate struct
>>>> drm/msm/dpu: split SM8550 catalog entry to the separate file
>>>> drm/msm/dpu: split SM8450 catalog entry to the separate file
>>>> drm/msm/dpu: split SC8280XP catalog entry to the separate file
>>>> drm/msm/dpu: split SC7280 catalog entry to the separate file
>>>> drm/msm/dpu: split SM8350 catalog entry to the separate file
>>>> drm/msm/dpu: split SM6115 catalog entry to the separate file
>>>> drm/msm/dpu: split QCM2290 catalog entry to the separate file
>>>> drm/msm/dpu: split SC7180 catalog entry to the separate file
>>>> drm/msm/dpu: split SM8250 catalog entry to the separate file
>>>> drm/msm/dpu: split SC8180X catalog entry to the separate file
>>>> drm/msm/dpu: split SM8150 catalog entry to the separate file
>>>> drm/msm/dpu: split MSM8998 catalog entry to the separate file
>>>> drm/msm/dpu: split SDM845 catalog entry to the separate file
>>>> drm/msm/dpu: duplicate sdm845 catalog entries
>>>> drm/msm/dpu: duplicate sc7180 catalog entries
>>>> drm/msm/dpu: duplicate sm8150 catalog entries
>>>> drm/msm/dpu: duplicate sm8250 catalog entries
>>>> drm/msm/dpu: duplicate sm8350 catalog entries
>>>> drm/msm/dpu: use defined symbol for sc8280xp's maxwidth
>>>> drm/msm/dpu: catalog: add comments regarding DPU_CTL_SPLIT_DISPLAY
>>>> drm/msm/dpu: enable DPU_CTL_SPLIT_DISPLAY for sc8280xp
>>>> drm/msm/dpu: enable DSPP_2/3 for LM_2/3 on sm8450
>>>> drm/msm/dpu: drop duplicate vig_sblk instances
>>>> drm/msm/dpu: enable DSPP on sc8180x
>>>> drm/msm/dpu: deduplicate sc8180x with sm8150
>>>> drm/msm/dpu: deduplicate sm6115 with qcm2290
>>>> drm/msm/dpu: deduplicate sc8280xp with sm8450
>>>> drm/msm/dpu: drop unused macros from hw catalog
>>>> drm/msm/dpu: inline IRQ_n_MASK defines
>>>> drm/msm/dpu: rename INTF_foo_MASK to contain major DPU version
>>>> drm/msm/dpu: rename CTL_foo_MASK to contain major DPU version
>>>> drm/msm/dpu: rename VIG and DMA_foo_MASK to contain major DPU
>>>> version
>>>> drm/msm/dpu: rename MIXER_foo_MASK to contain major DPU version
>>>> drm/msm/dpu: rename MERGE_3D_foo_MASK to contain major DPU version
>>>>
>>>> Konrad Dybcio (1):
>>>> drm/msm/dpu: Allow variable SSPP/INTF_BLK size
>>>>
>>>> .../msm/disp/dpu1/catalog/dpu_3_0_msm8998.h | 210 ++
>>>> .../msm/disp/dpu1/catalog/dpu_4_0_sdm845.h | 210 ++
>>>> .../msm/disp/dpu1/catalog/dpu_5_0_sm8150.h | 97 +
>>>> .../msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h | 91 +
>>>> .../gpu/drm/msm/disp/dpu1/catalog/dpu_5_lm6.h | 152 ++
>>>> .../msm/disp/dpu1/catalog/dpu_6_0_sm8250.h | 244 ++
>>>> .../msm/disp/dpu1/catalog/dpu_6_2_sc7180.h | 151 ++
>>>> .../msm/disp/dpu1/catalog/dpu_6_3_sm6115.h | 91 +
>>>> .../msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h | 83 +
>>>> .../gpu/drm/msm/disp/dpu1/catalog/dpu_6_lm1.h | 53 +
>>>> .../msm/disp/dpu1/catalog/dpu_7_0_sm8350.h | 226 ++
>>>> .../msm/disp/dpu1/catalog/dpu_7_2_sc7280.h | 158 ++
>>>> .../msm/disp/dpu1/catalog/dpu_8_0_sc8280xp.h | 136 ++
>>>> .../msm/disp/dpu1/catalog/dpu_8_1_sm8450.h | 142 ++
>>>> .../gpu/drm/msm/disp/dpu1/catalog/dpu_8_lm6.h | 99 +
>>>> .../msm/disp/dpu1/catalog/dpu_9_0_sm8550.h | 209 ++
>>>> .../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2175
>>>> +----------------
>>>> .../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 37 +-
>>>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c | 4 +-
>>>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c | 18 +-
>>>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.h | 4 +-
>>>> 21 files changed, 2443 insertions(+), 2147 deletions(-)
>>>> create mode 100644
>>>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h
>>>> create mode 100644
>>>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_4_0_sdm845.h
>>>> create mode 100644
>>>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h
>>>> create mode 100644
>>>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h
>>>> create mode 100644 drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_lm6.h
>>>> create mode 100644
>>>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h
>>>> create mode 100644
>>>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h
>>>> create mode 100644
>>>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h
>>>> create mode 100644
>>>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h
>>>> create mode 100644 drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_lm1.h
>>>> create mode 100644
>>>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_0_sm8350.h
>>>> create mode 100644
>>>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h
>>>> create mode 100644
>>>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_0_sc8280xp.h
>>>> create mode 100644
>>>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h
>>>> create mode 100644 drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_lm6.h
>>>> create mode 100644
>>>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_0_sm8550.h
>>>>
>>
--
With best wishes
Dmitry
More information about the Freedreno
mailing list