Re: [RFC PATCH v1 0/4] Add Rockchip RGA support

From: Emil Velikov
Date: Tue Mar 29 2016 - 09:27:37 EST

Hi Yakir,

On 29 March 2016 at 12:40, Yakir Yang <ykk@xxxxxxxxxxxxxx> wrote:
> Hi Emil,
> On 03/28/2016 08:21 PM, Emil Velikov wrote:
>> On 22 March 2016 at 00:42, Heiko Stuebner <heiko@xxxxxxxxx> wrote:
>>> Hi Yakir,
>>> Am Montag, 21. MÃrz 2016, 20:17:46 schrieb Yakir Yang:
>>>> On 03/21/2016 07:29 PM, Heiko StÃbner wrote:
>>>>> Am Montag, 21. MÃrz 2016, 17:28:38 schrieb Yakir Yang:
>>>>>> This patch set would add the RGA direct rendering based 2d graphics
>>>>>> acceleration module.
>>>>> very cool to see that.
>>>> ;)
>>>>>> This patch set is based on git repository below:
>>>>>> git:// drm-next
>>>>>> commit id: 568d7c764ae01f3706085ac8f0d8a8ac7e826bd7
>>>>>> And the RGA driver is based on Exynos G2D driver, it only manages the
>>>>>> command lists received from user, so user should make the command list
>>>>>> to data and registers needed by operation to use.
>>>>>> I have prepared an userspace demo application for testing:
>>>>>> That is a rockchip libdrm library, and I have write a simple test case
>>>>>> "rockchip_rga_test" that would test the below RGA features:
>>>>>> - solid
>>>>>> - copy
>>>>>> - rotation
>>>>>> - flip
>>>>>> - window clip
>>>>>> - dithering
>>>>> Did you submit your libdrm changes as well?
>>>>> Userspace-interfaces need to be stable so the other side must also get
>>>>> accepted - even before the kernel change if I remember correctly.
>>>> Got it, and I just saw exynos_fimg2d already landed at mainline libdrm.
>>>> But I don't find the way to submit patches to libdrm, would you like
>>>> share some helps here ;)
>>> Looking at the libdrm sources on, I did not find any
>>> specific manual on submitting patches.
>>> But looking at the dri-list archive, dri-devel@xxxxxxxxxxxxxxxxxxxxx is
>>> the
>>> right list and looking at the libdrm history it looks like Emil Velikov
>>> <emil.l.velikov@xxxxxxxxx> seems to be doing maintenance-stuff in libdrm.
>>> And as a 3rd recipient, please also include the linux-rockchip list.
>>> @Emil, please shout if I read that wrong :-)
>> You got it spot on Heiko. There are a few notes though...
>> As one reuses the existing hardware/IP block, it would be better to
>> avoid copy/pasting code around.
>> Namely:
>> - (if possible) factor out the exynos g2d kernel functionality to a
>> separate kernel module and wire up the rockhip (via dt ?) to use it
>> - factor out the g2d specifics out of exynos_drm.h (into
>> exynos_g2d_drm.h perhaps ?) and make sure exynos_drm.h includes the
>> new header
>> - if neither of these are possible, then please ensure that the new
>> header uses correct types (see the docs [1]), use MIT/X11 license (if
>> possible) and link where upstream userspace is happy with the
>> interface (ideally more than a simple test app like libdrm)
> Whops... you have provided the third choice, nice :-D
> And I got little idea about license, where should I use the MIT/X11
> license, should I declare the MIT/X11 license in kernel uapi head
> file, but Andreas just remind that kernel do not allow to no GUN
> license. Or may be I can:
Now that's a lovely typo - (GNU vs GUN) :-)

But seriously - what makes you think that the kernel does not allow
MIT/X11 licensed code ? Most of the DRM subsystem uses it.

> 1. Use GUN license in kernel rockchip_drm.h uapi head file
> 2. Use MIT/X11 license in libdrm rockchip_drm.h head file.
I would suggest keeping the license the same in both places (the
libdrm ones should be a direct copy of the kernel one produced with
`make headers_install`), regardless of which one you opt for.

> And I don't understand the "link where upstream userspace is happy
> with the interface", could you reference small example here.
Already mentioned elsewhere but for posterity:

If designing a new interface one should provide a reference to a
maintained upstream project, where the design was approved. Reason
being is that unlike ChromeOS's kernel upstream one gets to keep its
interfaces forever. And yes, I realise that CrOS folks are trying
really hard to upstream things and use vanilla kernel.