[PATCH v8 22/24] drm: rockchip: Add VOP2 driver

Andy Yan andy.yan at rock-chips.com
Thu Mar 17 07:23:12 UTC 2022


Hi Sascha:

On 3/16/22 20:22, Andy Yan wrote:
>
> Hi Sascha and Daniel:
>
> On 3/16/22 15:40, Sascha Hauer wrote:
>> On Tue, Mar 15, 2022 at 02:46:35PM +0800, Andy Yan wrote:
>>> Hi Sascha:
>>>
>>> On 3/11/22 16:33, Sascha Hauer wrote:
>>>> From: Andy Yan<andy.yan at rock-chips.com>
>>>>
>>>> The VOP2 unit is found on Rockchip SoCs beginning with rk3566/rk3568.
>>>> It replaces the VOP unit found in the older Rockchip SoCs.
>>>>
>>>> This driver has been derived from the downstream Rockchip Kernel and
>>>> heavily modified:
>>>>
>>>> - All nonstandard DRM properties have been removed
>>>> - dropped struct vop2_plane_state and pass around less data between
>>>>     functions
>>>> - Dropped all DRM_FORMAT_* not known on upstream
>>>> - rework register access to get rid of excessively used macros
>>>> - Drop all waiting for framesyncs
>>>>
>>>> The driver is tested with HDMI and MIPI-DSI display on a RK3568-EVB
>>>> board. Overlay support is tested with the modetest utility. AFBC support
>>>> on the cluster windows is tested with weston-simple-dmabuf-egl on
>>>> weston using the (yet to be upstreamed) panfrost driver support.
>>> Do we need some modification to test AFBC by weston-simple-dma-egl ?
>> By default weston-simple-dma-egl uses DRM_FORMAT_XRGB8888 which in the
>> panfrost driver ends up as PIPE_FORMAT_B8G8R8_UNORM and
>> panfrost_afbc_format() returns PIPE_FORMAT_NONE for that. Change the
>> format to DRM_FORMAT_ABGR8888 using weston-simple-dma-egl -f 0x34324241.
>> This ends up as PIPE_FORMAT_R8G8B8A8_UNORM in panfrost_afbc_format()
>> which is a supported format.
>>
> I also try weston-simple-dmabuf-egl -f 0x34324241 command,
>
> but I got this output log from weston[0]:
>
> Layer 5 (pos 0x50000000):
> View 0 (role xdg_toplevel, PID 375, surface ID 3, top-level window 
> 'simple-dmabuf-egl' of org.freedesktop.weston.
> simple-dmabuf-egl, 0xaaaad08275e0):
> position: (871, 174) -> (1127, 430)
> [not opaque]
> outputs: 0 (HDMI-A-1) (primary)
> dmabuf buffer
> format: 0x34324241 ABGR8888
> modifier: ARM_BLOCK_SIZE=16x16,MODE=YTR|SPARSE (0x800000000000051)
> Layer 6 (pos 0x2):
> View 0 (role (null), PID 372, surface ID 18, background for output 
> HDMI-A-1, 0xaaaad0863520):
> position: (0, 0) -> (1920, 1080)
> [fully opaque]
> outputs: 0 (HDMI-A-1) (primary)
> [buffer not available]
> [repaint] preparing state for output HDMI-A-1 (0)
> [repaint] trying planes-only build state
> [view] evaluating view 0xaaaad083b0f0 for output HDMI-A-1 (0)
> [view] not assigning view 0xaaaad083b0f0 to plane (no buffer available)
> [view] failing state generation: placing view 0xaaaad083b0f0 to 
> renderer not allowed
> [repaint] could not build planes-only state, trying mixed
> [state] using renderer FB ID 73 for mixed mode for output HDMI-A-1 (0)
> [state] scanout will use for zpos 0
> [view] evaluating view 0xaaaad083b0f0 for output HDMI-A-1 (0)
> [view] not assigning view 0xaaaad083b0f0 to plane (no buffer available)
> [view] view 0xaaaad083b0f0 will be placed on the renderer
> [view] evaluating view 0xaaaad08275e0 for output HDMI-A-1 (0)
> [plane] started with zpos 18446744073709551615
> [view] view 0xaaaad08275e0 will be placed on the renderer
> [view] evaluating view 0xaaaad0863520 for output HDMI-A-1 (0)
> [view] not assigning view 0xaaaad0863520 to plane (no buffer available)
> [view] not assigning view 0xaaaad0863520 to plane (occluded by 
> renderer views)
>
> [view] view 0xaaaad0863520 will be placed on the renderer
>
>
> From the log we can find that Layer5 view 0(0xaaaad08275e0) is the 
> afbc view rendered by Panfrost.
>
> But it at last put on a render not a afbc window of vop  "view] view 
> 0xaaaad083b0f0 will be placed on the renderer "
>
> The output message from sys/kernel/debug/dri/state can also provide 
> that only non-AFBC window smart0-win0 is used.
>
> It seems that it failed in  weston drm_output_prepare_plane_view.
>
> Maybe I need a deeper dig.
>

After a deeper dig, I found it failed from

drm_fb_get_from_dmabuf {


.......

/* XXX: TODO:
          *
          * Currently the buffer is rejected if any dmabuf attribute
          * flag is set.  This keeps us from passing an inverted /
          * interlaced / bottom-first buffer (or any other type that may
          * be added in the future) through to an overlay. Ultimately,
          * these types of buffers should be handled through buffer
          * transforms and not as spot-checks requiring specific
          * knowledge. */
         if (dmabuf->attributes.flags) {
                 drm_debug(backend, "\t\t\t\t invlid flag 0x%x\n", 
dmabuf->attributes.flags);
                 return NULL;
         }

}

After some grep search, I found the flag is set  at create_dmabuf_buffer 
by weston-simple-dmabuf-egl itself.

So I run this test with -g: weston-simple-dmabuf-egl -f 0x34324241 -g

 From the log I can see this view is go to a  overlay plane, but it 
doesn't appear on the screen.

Cat the dri state, I can see Cluster1-win0 this afbc window is enabled.

So I guess there is something wrong with the vop2 configuration.

I dump registers of OVERLAY and Cluster1-win0 and Smart0-win0(Primary plane)

I found a obvious  error in 0x604(OVERLAY_LAYER_SEL) register, the 
configuration value

is 0x54763513.

I am not sure if you know clearly about this register:

Every four bits of this register select a Window(Cluster0,Cluster1, 
Esmart0, Esmart1, Smart0. Smart1)

for layer0 to layer 5 from bottom to top.

0: Cluster0

1: Cluster1:

2: Esmart0

3: Smart0

6: Esmart1

7: Smart1

And one window can only be selected by one layer at a time.

So when I change this register to 0x54762513, the square draw by 
weston-simple-dmabuf-egl appeared on the top of the weston background on 
screen.


So Sascha, please check the logic of you map the window and layer.




> [0] https://pastebin.com/8CfiP7u1
>
>>> I have a buildroot system with weston-10.0.9 and mesa 21.3.5.
>>>
>>> After launch weston, I run weston-simple-dmabuf-egl, but from the output
>>>
>>> of sys/kernel/debug/dri/0/state, the weston is still use Smart0-win0, which
>>> is
>>>
>>> a non-AFBC window.
>>>
>>> Do i need to modify the vop2 driver to set one Cluster window as primary
>>> plane?
>> I never used a Cluster window as primary plane.
>>
>> Sascha
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20220317/99ac6f13/attachment-0001.htm>


More information about the dri-devel mailing list