[1/2] drm/msm/dpu: fix clocks settings for msm8998 SSPP blocks

Marijn Suijten marijn.suijten at somainline.org
Tue Jan 24 14:00:44 UTC 2023


On 2023-01-24 14:29:38, Dmitry Baryshkov wrote:
> On 24/01/2023 14:06, Marijn Suijten wrote:
> > On 2023-01-24 13:20:57, Dmitry Baryshkov wrote:
> >> On Tue, 24 Jan 2023 at 13:12, Marijn Suijten
> >> <marijn.suijten at somainline.org> wrote:
> >>>
> >>> On 2023-01-24 12:19:27, Dmitry Baryshkov wrote:
> >>>> On 24/01/2023 11:59, Marijn Suijten wrote:
> >>>>> On 2023-01-15 14:41:42, Dmitry Baryshkov wrote:
> >>>>>> DMA2 and DMA3 planes on msm8998 should use corresponding DMA2 and DMA3
> >>>>>> clocks rather than CURSOR0/1 clocks (which are used for the CURSOR
> >>>>>> planes). Correct corresponding SSPP declarations.
> >>>>>>
> >>>>>> Fixes: 94391a14fc27 ("drm/msm/dpu1: Add MSM8998 to hw catalog")
> >>>>>> Cc: AngeloGioacchino Del Regno <angelogioacchino.delregno at somainline.org>
> >>>>>> Cc: Jami Kettunen <jami.kettunen at somainline.org>
> >>>>>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov at linaro.org>
> >>>>>> ---
> >>>>>>    drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 4 ++--
> >>>>>>    1 file changed, 2 insertions(+), 2 deletions(-)
> >>>>>>
> >>>>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> >>>>>> index 0f3da480b066..ad0c55464154 100644
> >>>>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> >>>>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> >>>>>> @@ -1180,9 +1180,9 @@ static const struct dpu_sspp_cfg msm8998_sspp[] = {
> >>>>>>     SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000,  DMA_MSM8998_MASK,
> >>>>>>             sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1),
> >>>>>>     SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000,  DMA_CURSOR_MSM8998_MASK,
> >>>>>
> >>>>> Drop the _CURSOR mask here?  And the double space....
> >>>>
> >>>> Ack for the doublespace. By removing _CURSOR we would disallow using
> >>>> these planes as hw cursor planes. This would switch all compositors into
> >>>> sw cursor mode, thus damaging the performance.
> >>>
> >>> Doesn't that require special hardware support, or can any DMA pipe
> >>> support "hw cursor mode/planes", whatever that means?  Sorry for not
> >>> being well versed in this area, I'd expect DMA pipes and CURSOR pipes to
> >>> have a different set of features / capabilities.
> >>
> >> Yes, they have different capabilities. but DMA_CURSOR_MSM8998_MASK =
> >> DMA_MSM8998_MASK | BIT(DPU_SSPP_CURSOR). And the DPU_SSPP_CURSOR is
> >> used internally to tell the DRM core that the corresponding plane is
> >> going to be used as a "userspace cursor" plane.
> > 
> > Different capabilities for userspace, but not in terms hardware (/driver
> > support, yet)?  If so, then:
> > 
> > Reviewed-by: Marijn Suijten <marijn.suijten at somainline.org>
> > 
> >>> Commit 07ca1fc0f8a0 ("drm/msm/dpu: enable cursor plane on dpu") leads me
> >>> to believe that it's mostly to let userspace use these DMA pipes for
> >>> cursors (having cursor planes available in uapi) rather than requiring
> >>> any special hardware support (though semantics do seem to change in a
> >>> nontrivial way).
> >>
> >> Correct.
> >> DRM/userspace cursor planes = planes which userspace can use to draw
> >> mouse cursor. Legacy compositors and legacy cursor IOCTLs stick to
> >> using them
> >> DPU/MDP5 CURSOR plane (sspp_12/13) = lightweight limited plane without
> > 
> > But these DMA pipes are _not_ lightweight/limited?
> 
> No, they are not.
> 
> > 
> >> additional features, targeting HW cursor only, not present since
> >> sdm845
> >> DPU_SSPP_CURSOR = bit which tells DPU core to mark a plane as
> >> 'DRM/userspace cursor plane'.
> > 
> > Ack, so it's not toggling anything hardware specific /yet/.  However,
> > does this prevent userspace from using these pipes/planes for other DMA
> > purposes as they're marked as a different _type_ of plane? 
> 
> This is what 'universal planes' API is solving.
> 
> Historically there were three kinds of planes: primary (iow background), 
> cursor and overlay.
> By default an application sees only the overlay planes and has some 
> additional API to manipulate cursors and backgrounds.
> 
> Then at some point it was found that this split is not worth all the 
> troubles, since applications can better utilize the hardware if they can 
> decide on their own what should be done. So now we still have all three 
> kinds of planes (for the legacy userspace), but behind the scenes they 
> all are the same. If an application knows how to knock the door, it will 
> see all the planes with the capabilities being exposed through plane 
> properties, etc.
> 
> Back to our case. We mark these planes as 'cursor' ones, to let the 
> legacy composers to use them for hardware cursor. I think it was decided 
> that not having the cursor is worse than requiring another blending 
> step. On the other hand newer composers see a full array of planes.

Thanks so much for this backstory, that explains why it shouldn't harm
modern compositors; in modetest I see these planes have the cursor type
property, but no restriction on zpos for example.

> > And will
> > that change when we do end up "implementing more rigorous/strict
> > hardware support"? 
> 
> Once implemented, there will be more planes for msm8998 (and eventually 
> sdm660/630, once we have them too). Some of them will be limited in size 
> or in the Z order (cursor), some will not (rgb, dma, vig).

That's what I saw one of the linked patches; at that point we should add
separate feature bits for this so as to not limit the size or Z-order
range for these DMA-pipes-disguised-as-cursor-planes.

> > For the other SoCs, are their DMA pipes also
> > featureful and would the presence of DPU_SSPP_CURSOR severely limit its
> > functionality? 
> 
> All DMA pipes have the same set of features (in the same generation of 
> course).
> No, it's just a software marker.

Ack yes, so again once the software marker starts limiting properties
for actual CURSOR support (on pre-msm8998) we should distinguish them
from DMA pipes that are simply marked as cursor planes...

> > And is this thing that "virtual planes" would be going
> > to "solve"?
> 
> Included. The virtual planes is trying to solve a slightly different 
> part of the story: to remove 1:1 correspondence between planes and 
> pipes. Sometimes it would be nice to use two HW pipes for a single DRM 
> plane (e.g. the kernel expects to have a single primary plane whose 
> resolution matches the resolution of the CRTC, 4k = two SSPP because of 
> hardware limitations). Sometimes a single HW pipe can be used to drive 
> two DRM planes (see multirect). So, pretty much in the same way as we 
> use one or two LMs to drive a CRTC, it is useful to use 1/2, 1 or 2 
> SSPPs to drive a single DRM plane.

Ah, ack, that makes sense, and it wouldn't / shouldn't be up to
userspace to assign and use the pipes on its own.

- Marijn


More information about the dri-devel mailing list