From: Jose Abreu <Jose.Abreu@synopsys.com>
To: Daniel Vetter <daniel@ffwll.ch>, Jose Abreu <Jose.Abreu@synopsys.com>
Cc: "dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Alexey Brodkin <Alexey.Brodkin@synopsys.com>
Subject: Re: DRM DMA Engine
Date: Thu, 16 Jun 2016 13:09:34 +0100 [thread overview]
Message-ID: <576296FE.4030504@synopsys.com> (raw)
In-Reply-To: <CAKMK7uGbqKbTdb1UAEdEQPkLeiuStSqpC3CtNoyQmjY8-6i=+w@mail.gmail.com>
Hi Daniel,
Sorry to bother you again. I promise this is the last time :)
On 15-06-2016 11:15, Daniel Vetter wrote:
> On Wed, Jun 15, 2016 at 11:48 AM, Jose Abreu <Jose.Abreu@synopsys.com> wrote:
>> On 15-06-2016 09:52, Daniel Vetter wrote:
>>> On Tue, Jun 14, 2016 at 1:19 PM, Jose Abreu <Jose.Abreu@synopsys.com> wrote:
>>>>> I assume that xilinx VDMA is the only way to feed pixel data into your
>>>>> display pipeline. Under that assumption:
>>>>>
>>>>> drm_plane should map to Xilinx VDMA, and the drm_plane->drm_crtc link
>>>>> would represent the dma channel. With atomic you can subclass
>>>>> drm_plane/crtc_state structures to store all the runtime configuration in
>>>>> there.
>>>>>
>>>>> The actual buffer itsel would be represented by a drm_framebuffer, which
>>>>> either wraps a shmem gem or a cma gem object.
>>>>>
>>>>> If you want to know about the callbacks used by the atomic helpers to push
>>>>> out plane updates, look at the hooks drm_atomic_helper_commit_planes()
>>>>> (and the related functions, see kerneldoc) calls.
>>>>>
>>>>> I hope this helps a bit more.
>>>>> -Daniel
>>>> Thanks a lot! With your help I was able to implement all the
>>>> needed logic. Sorry to bother you but I have one more question.
>>>> Right now I can initialize and configure the vdma correctly but I
>>>> can only send one frame. I guess when the dma completes
>>>> transmission I need to ask drm for a new frame, right? Because
>>>> the commit function starts the vdma correctly but then the dma
>>>> halts waiting for a new descriptor.
>>> DRM has a continuous scanout model, i.e. when userspace doesn't give
>>> you a new frame you're supposed to keep scanning out the current one.
>>> So you need to rearm your upload code with the same drm_framebuffer if
>>> userspace hasn't supplied a new one since the last time before the
>>> vblank period starts.
>>>
>>> This is different to v4l, where userspace has to supply each frame
>>> (and the kernel gets angry when there's not enough frames and signals
>>> an underrun of the queue). This is because drm is geared at desktops,
>>> and there it's perfectly normal to show the exact same frame for a
>>> long time.
>>> -Daniel
>> Thanks, I was thinking this was similar to v4l. I am now able to
>> send multiple frames so it is finally working! I have one little
>> implementation detail: The controller that I am using supports
>> deep color mode but I am using FB CMA helpers to create the
>> framebuffer and I've seen that the supported bpp in these helpers
>> only goes up to 32, right? Does this means that with these
>> helpers I can't use deep color? Can I implement this deep color
>> mode (48bpp) using a custom fb or do I also need custom gem
>> allocation functions (Right now I am using GEM CMA helpers)?
> Suprising the cma doesn't take pixel_format into account. If this
> really doesn't work, pls fix up the cma helpers, not roll your own
> copypasta ;-)
>
> Note that the fbdev emulation itself (maybe that's what threw you off)
> only supports legacy rgb formats up to 32bits. But native kms can
> support anything, we just might need to add the DRM_FOURCC codes for
> that.
> -Daniel
So, I ended up using 32bits and everything is working fine! I
tested using [1] and [2] but now I have kind of a dumb question:
I want to use the new driver that I created as a secondary output
of my desktop so that I can play videos using mplayer but I am
not being able to do this. If I check in my linux settings only
one display is being detected, although in /dev/dri the two video
cards are present (the native one and the one I added). Does the
driver needs something additional to do this or is it only in my
X configuration? I tried editing this configuration but still
doesn't work. I believe that because my driver is not being
probed at runtime the display is not being created by X. Is this
correct?
[1] https://dri.freedesktop.org/libdrm/
[2] https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset.c
Thanks!
Best regards,
Jose Miguel Abreu
next prev parent reply other threads:[~2016-06-16 12:09 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-25 15:46 DRM DMA Engine Jose Abreu
2016-05-25 15:46 ` Jose Abreu
2016-05-26 8:06 ` Daniel Vetter
2016-05-26 8:06 ` Daniel Vetter
2016-05-30 8:44 ` Jose Abreu
2016-05-30 8:44 ` Jose Abreu
2016-05-30 9:00 ` Jose Abreu
2016-05-30 9:00 ` Jose Abreu
2016-05-30 9:36 ` Daniel Vetter
2016-05-30 9:36 ` Daniel Vetter
2016-06-14 11:19 ` Jose Abreu
2016-06-14 11:19 ` Jose Abreu
2016-06-15 8:52 ` Daniel Vetter
2016-06-15 8:52 ` Daniel Vetter
2016-06-15 9:48 ` Jose Abreu
2016-06-15 10:15 ` Daniel Vetter
2016-06-16 12:09 ` Jose Abreu [this message]
2016-06-16 12:34 ` Daniel Vetter
2016-06-16 12:34 ` Daniel Vetter
2016-06-16 12:39 ` Ilia Mirkin
2016-06-16 12:39 ` Ilia Mirkin
2016-06-20 15:34 ` Jose Abreu
-- strict thread matches above, loose matches on Subject: below --
2016-05-25 14:19 Jose Abreu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=576296FE.4030504@synopsys.com \
--to=jose.abreu@synopsys.com \
--cc=Alexey.Brodkin@synopsys.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.