<p dir="ltr">+Puneet,+Zel</p>
<p dir="ltr">We will get back to you guys with answers soon. </p>
<div class="gmail_quote">On Dec 1, 2014 9:28 AM, "Daniel Vetter" <<a href="mailto:daniel@ffwll.ch">daniel@ffwll.ch</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Mon, Dec 01, 2014 at 10:01:37AM +0000, Frank Binns wrote:<br>
> Hi,<br>
><br>
> We are currently in negotiations with one of our customers (Mediatek) on<br>
> a strategy that will allow them to push a DRM modesetting driver into<br>
> the upstream kernel. We are writing to get people's opinions and<br>
> feedback on our proposed approach.<br>
><br>
> Currently, our driver is structured in such a way that the display<br>
> driver is more tightly integrated with the GPU driver than we would<br>
> like. Although our kernel driver has been shipped with a GPL license for<br>
> a long time, it is not in a form that would be considered acceptable<br>
> upstream. Unfortunately, it is going to be a long process to get this<br>
> part of the driver into a reasonable state. However, in the meantime, we<br>
> don't want to prevent customer portions of the driver from being<br>
> upstreamed. With the work done on recent kernels, and with a willing<br>
> partner in Mediatek, we now think that we can restructure our driver in<br>
> such a way as to allow this to happen.<br>
><br>
> We see two basic approaches to achieving this:<br>
> 1) Two independent DRM drivers, i.e. modesetting and render node drivers<br>
> 2) A single componentised DRM driver<br>
><br>
> Our (IMG's) preferred approach is to have a single componentised DRM<br>
> driver. This is due to the following reasons:<br>
><br>
> - Existing user space is not fully prepared to handle render nodes.<br>
><br>
> - There is concern that any IMG DRM render node driver will need<br>
> knowledge about multiple SoCs, each one being from a different vendor.<br>
> Would this be deemed acceptable?<br>
><br>
> - There is a trend, at least for DRM SoC drivers, towards using the<br>
> component interface. Although there appears to be very few (one?)<br>
> examples of GPU component drivers.<br>
><br>
> To give some high level details on how we expect the componentised DRM<br>
> driver model to work, each vendor (in this case Mediatek) will write<br>
> their own DRM driver (supporting modesetting, dumb buffers, GEM, prime,<br>
> etc) and IMG will provide an almost entirely independent component<br>
> driver that adds in GPU support. Until our GPU driver is in a suitable<br>
> state this will most likely necessitate a small kernel patch to wire up<br>
> support, e.g. GPU specific ioctls.<br>
><br>
> Cross-device and cross-process memory allocations will be made using the<br>
> DRM driver. In order for this memory to be shared with the GPU component<br>
> driver it will be necessary, at least for the time being, to export it<br>
> via prime and import it via a GPU ioctl. Synchronisation between the<br>
> display and GPU will be performed via reservation objects.<br>
><br>
> Does this sound like a sane approach? Questions and/or feedback is very<br>
> welcome.<br>
<br>
Rule of thumb is that if it's an externally licensed IP block it should be<br>
a separate driver. Which is the case here. The idea is that the mostly<br>
generic IMG driver could be reused on other platforms that ship the same<br>
IP-block, while linking up with the respective display controller driver.<br>
The end result is 2 drm drivers:<br>
- Display block drm driver which expose KMS objects for modesetting, but<br>
  only very basic gem (just enough to allocate dumb framebuffers and<br>
  import/export dma-bufs).<br>
- Full-blown gem driver for the img render IP block.<br>
<br>
For an example look at the tegra/nouveau combo which can run on TK1.<br>
<br>
Plugggin in an IMG driver into each display block like it's currently done<br>
with all the armsoc stuff on android is imo completely no-go.<br>
<br>
Note that the component interface is completely irrelevant wrt the<br>
interface you expose to userspace. It's just an driver-internal helper<br>
library useful in certain situation. Not even the drm core really cares<br>
whether you use component helpers or not.<br>
<br>
Thanks, Daniel<br>
--<br>
Daniel Vetter<br>
Software Engineer, Intel Corporation<br>
+41 (0) 79 365 57 48 - <a href="http://blog.ffwll.ch" target="_blank">http://blog.ffwll.ch</a><br>
</blockquote></div>