On Tue, Jan 8, 2019 at 9:35 AM Andrzej Hajda <a.ha...@samsung.com> wrote:
> On 07.01.2019 22:56, Daniel Vetter wrote:
> > On Mon, Jan 7, 2019 at 5:27 PM Andrzej Hajda <a.ha...@samsung.com> wrote:
> >> On 07.01.2019 17:08, Daniel Vetter wrote:
> >>> On Mon, Jan 07, 2019 at 12:26:58PM +0100, Andrzej Hajda wrote:
> >>>> On 07.01.2019 11:45, Daniel Vetter wrote:
> >>>>> On Thu, Jan 03, 2019 at 01:11:47PM +0000, Russell King - ARM Linux 
> >>>>> wrote:
> >>>>>> On Thu, Jan 03, 2019 at 10:47:27AM +0100, Lubomir Rintel wrote:
> >>>>>>> Hello,
> >>>>>>>
> >>>>>>> lately I've been trying to make the Himax HX8837 chip that drives the 
> >>>>>>> OLPC
> >>>>>>> LCD display work with Armada DRM driver. I've been advised to create a
> >>>>>>> bridge driver and not an encoder driver since the silicon is separate 
> >>>>>>> from
> >>>>>>> the LCDC.
> >>>>>>>
> >>>>>>> The Armada DRM driver (and, I think, the i.MX one) creates the 
> >>>>>>> drm_device
> >>>>>>> once the component infrastructure sees the necessary sub-devices 
> >>>>>>> appear.
> >>>>>>> The sub-devices being the LCDCs and the encoders (not bridges) that it
> >>>>>>> expects to be created externally.
> >>>>>>>
> >>>>>>> Currently, it seems, the only driver that can actually work with this 
> >>>>>>> (that
> >>>>>>> is -- creates a drm_encoder for a drm_device when the component is 
> >>>>>>> bound)
> >>>>>>> is the tda998x. All other similar drivers create a drm_bridge instead 
> >>>>>>> and
> >>>>>>> not use the component infrastructure at all. (In fact, tilcdc driver
> >>>>>>> contains a  hack to handle tda998x specially.)
> >>>>>>>
> >>>>>>> I'm wondering how to reconcile the two?
> >>>>>>>
> >>>>>>> * The tda998x driver has recently been modified to create a bridge on 
> >>>>>>> probe
> >>>>>>>   and eventually encoder on component bind. Is this an okay thing to 
> >>>>>>> do in
> >>>>>>>   a new driver? (this probably means the tilcdc hack can be 
> >>>>>>> removed...)
> >>>>>>>
> >>>>>>> * If a non-componentized bridge were to be used (along with a dummy
> >>>>>>>   encoder), at what point would it make sense to look for the bridge?
> >>>>>>>   Would it be a good idea to defer the probe of crtc until a bridge 
> >>>>>>> can be
> >>>>>>>   looked up and the attach it on component bind?  What if the bridge 
> >>>>>>> goes
> >>>>>>>   away (a module is unloaded, etc.) in between?
> >>>>>>>
> >>>>>>> I'd be thankful for opintions and advice before I move ahead with 
> >>>>>>> this.
> >>>>>> This is the long-standing problem with the conflict between bridge
> >>>>>> support and component support, and I'm not sure that there is really
> >>>>>> any answer to it.
> >>>>>>
> >>>>>> I've gone into the details of the two several times on the list,
> >>>>>> particularly about the short-comings of the bridge approach, but it
> >>>>>> seems no one cares to fix those short-comings.
> >>>>>>
> >>>>>> You are re-identifying some of the issues that I've already pointed
> >>>>>> out - such as what happens to DRM drives when the bridge driver is
> >>>>>> unbound (it's really not about modules being unloaded, and the problem
> >>>>>> can't be solved by taking a module reference count - all that the
> >>>>>> module reference count does is ensure that the module doesn't go
> >>>>>> away unexpected, there is no way to ensure that the device isn't
> >>>>>> unbound.)
> >>>>>>
> >>>>>> The issue of unbinding is precisely the issue which the component
> >>>>>> support was created to solve - but everyone seems to prefer the buggy
> >>>>>> bridge approach, and no one seems willing to do anything about the
> >>>>>> bugs or even acknowledge that it's a problem.  It's strange - if one
> >>>>>> identifies bugs that result in kernel oops in other kernel subsystems,
> >>>>>> one is generally taken seriously and the problem is solved.
> >>>>> Unbinding is really not the most important feature, especially for SoC. 
> >>>>> If
> >>>>> you feel different, working together with others, getting some 
> >>>>> agreement,
> >>>>> getting the patches reviewed and finding someone to get them merged is
> >>>>> very much appreciated. But just complaining won't move this forward.
> >>>>>
> >>>>>> The issue about the encoders is something that I've tried to discuss,
> >>>>>> and I've pointed out that moving it into the DRM driver adds additional
> >>>>>> complexity there, and I'd hoped that my patch set I posted would've
> >>>>>> generated discussion, but alas not.
> >>>>>>
> >>>>>> What I'm not prepared to do is to introduce _known_ bugs into any
> >>>>>> driver that I maintain.
> >>>>> I thought last time around the idea was to use device links (and teach
> >>>>> drm_bridge about them), so that the unloading works correctly.
> >>>> With current device_links implementation registering links in probe of
> >>>> the consumer is just incorrect - it can happen that neither consumer
> >>>> neither provider is fully probed and creating device links in such state
> >>>> is wrong according to docs, and my experiments. See [1] for discussion
> >>>> and [2] for docs.
> >>> We could set up the device link only at drm_dev_register time. At that 
> >>> point
> >>> we know that driver loading has fully succeeded. We do have a list of
> >>> bridges at hand, so that's not going to be an issue.
> >>>
> >>> The only case where this breaks is if a driver is still using the
> >>> deprecated ->load callback. But that ->load callback doesn't mix well with
> >>> EDEFER_PROBE/component framework anyway, so I think not going to be a
> >>> problem hopefully?
> >>
> >> drm_dev_register usually is called from bind callback, which is called 
> >> from probe callback of one of the components or master (depending on 
> >> particular probe order). If you want to register device link in this 
> >> function it is possible that the bad scenario will happen - there will be 
> >> attempt to create device link between not-yet-probed consumer and 
> >> not-yet-probed provider.
> > If you call drm_dev_register before you have all the components
> > assembled (i.e. anywhere else than in master bind) that sounds like a
> > driver bug.
>
>
> This is how components work, every component calls component_add usually
> in probe, and this function checks if all components are present, if yes
> (ie. during probe of the last component) master bind is called and it
> creates drm device and then registers it. If you add device link at this
> moment, it is still before end of probe of the last component.
>
> On the other side provider is registered (drm_bridge_add in case of
> bridges) during its probe so it becomes available to the consumers
> BEFORE end of its probe and again it can happen that device link will be
> added to early.

Hm I read that thread again. Is the reason why we can't add the device
link only the exynos behaviour to allow drm_panel to be
hot-added/removed?

Note that for bridge allowing this is 100% buggy: drm core does not
allow you to hotplug/hotunplug bridges.

In theory drm_panel can be hotplugged (because we can hotplug
drm_connector), but I'm pretty sure exynos gets it all wrong since
hotplugging panels is no easy thing to do. I don't think this is
something we want to support, forcing the entire driver to be unload
sounds like what we want to do here.
-Daniel

>
>
> Regards
>
> Andrzej
>
>
> > drm_dev_register publishes the drm device instance to the
> > world, if you're not ready to handle userspace requests at that point
> > (because not everything is loaded yet) then things will go boom in
> > very colorful ways. And from my (admittedly very rough) understanding
> > we should be able to register the the device links as the very last
> > step in the master bind function (and drm_dev_register should be about
> > the last thing you do in the master bind).
> >
> > So not clear on why this won't work?
>
>
>
>
> > -Daniel
> > --
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > +41 (0) 79 365 57 48 - http://blog.ffwll.ch
> >
> >
>


-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to