[U-Boot] UCLASS_MISC bug
Jean-Jacques Hiblot
jjhiblot at ti.com
Fri Mar 22 16:47:10 UTC 2019
Simon, Sergey,
On 22/03/2019 17:33, Jean-Jacques Hiblot wrote:
> Simon,
>
> On 22/03/2019 08:53, Simon Glass wrote:
>> Hi,
>>
>> On Tue, 19 Mar 2019 at 23:29, Jean-Jacques Hiblot <jjhiblot at ti.com>
>> wrote:
>>> + Simon Glass
>>>
>>>
>>> Hi Serguey,
>>>
>>> On 15/03/2019 22:55, Sergey Kubushyn wrote:
>>>> I would like to point that this was not a very good idea:
>>>>
>>>> === Cut ===
>>>> --- uboot-imx-next/drivers/misc/misc-uclass.c 2018-12-20
>>>> 20:35:22.505180339 -0800
>>>> +++ u-boot-imx/drivers/misc/misc-uclass.c 2019-03-13
>>>> 11:50:19.408982814 -0700
>>>> @@ -68,4 +68,7 @@ int misc_set_enabled(struct udevice *dev
>>>> UCLASS_DRIVER(misc) = {
>>>> .id = UCLASS_MISC,
>>>> .name = "misc",
>>>> +#if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)
>>>> + .post_bind = dm_scan_fdt_dev,
>>>> +#endif
>>>> };
>>>> === Cut ===
>>>>
>>>> The problem comes up with all those "glue" layers like e.g. in
>>>> usb/dwc3 and
>>>> everywhere else.
>>>>
>>>> Those "glues" primarily bind drivers to e.g. USB interfaces like e.g.
>>>> dwc3-generic does. That is where it should stop because glue knows
>>>> better
>>>> what to bind. However, after glue has bound appropriate drivers to
>>>> their
>>>> interfaces that post_bind scans FDT again and finds yet another
>>>> bunch of
>>>> drivers that it binds on top of what glue already bound. This happens
>>>> e.g.
>>>> with DWC3 drivers that glues bind to interfaces depending on their
>>>> declared
>>>> roles. However both peripheral and XHCI drivers are compatible with
>>>> "snps,dwc3" so they are bound on top creating a huge mess. Here is a
>>>> dm tree
>>>> fragment of its action:
>>>>
>>>> === Cut ===
>>>> phy 0 [ + ] imx8mq_usb_phy |-- phy at 381f0040
>>>> misc 0 [ + ] imx8m_dwc3_glue |-- usb at 38100000
>>>> usb 0 [ ] imx8m_dwc3_periphera | |-- dwc3
>>>> usb 0 [ ] xhci-dwc3 | `-- dwc3
>>>> phy 1 [ ] imx8mq_usb_phy |-- phy at 382f0040
>>>> misc 1 [ ] imx8m_dwc3_glue |-- usb at 38200000
>>>> usb 1 [ ] xhci-dwc3 | |-- dwc3
>>>> usb 2 [ ] xhci-dwc3 | `-- dwc3
>>>> === Cut ===
>>>>
>>>> The glue bound imx8m_dwc3_peripheral to USB0 then post_bind found yet
>>>> another "compatible" driver, xhci-dwc3 and bound it to the same
>>>> interface.
>>>>
>>>> Then glue bound xhci-dwc3 to USB1 but post_bind found yet another
>>>> "compatible" driver, xhci-dwc3 and bound it again so there are TWO
>>>> xhci
>>>> drivers bound to the same interface.
>>>>
>>>> This is simplified picture -- I removed "compatible" from my
>>>> peripheral
>>>> driver so it only comes up once, under USB0. If I leave that
>>>> "compatible"
>>>> with "snps,dwc3" there everything gets even weirder :(
>>>>
>>>> That diff above is the latest 2019.04-rc3 u-boot-imx-next vs
>>>> 2019.01-rc
>>>> something release.
>>>>
>>>> We either need some additional special flag to disable that post_bind
>>>> where
>>>> it is not needed or create a special new class for those binding
>>>> "glues" or
>>>> this change should be reverted.
>>> We can also see the problem on TI platforms.
>>>
>>> Tested with a am57xx evm
>> Can you check for an existing device and not create a new one in that
>> case?
>>
>> Maybe use device_find_first_child_by_uclass() ?
>
> If I'm not mistaken, that would not solve the issue because the device
> are bound in the bind() callback of the misc driver.
>
> One solution would be to use another UCLASS that really does not do
> anything (UCLASS_NOP for example). It would be ok because we don't
> use any of the features offered by the MISC UCLASS
A patch being worth a thousand words, I posted a patch for such a UCLASS
: https://patchwork.ozlabs.org/patch/1061383/
JJ
>
> Another solution would be to use a flag stored in the uclass priv data
> to tell not bind devices in the post_bind callback.
>
> I prefer the first approach.
>
> JJ
>
>
>>
>> Regards,
>> Simon
>>
>>
>>> JJ
>>>
>>>> P.S. I'm going to post imx8m USB glue, USB PHY, USB peripheral initial
>>>> drivers probably Monday late night as they still need some cleanup. It
>>>> all
>>>> works with full Linux Kernel DTS files, picks power domains from
>>>> there.
>>>>
>>>> Don't know what to do with my board-specific DTS as there is (and
>>>> probably
>>>> will not be) our board submitted -- it is not secret but used in our
>>>> devices
>>>> only and not available to the public -- so it doesn't make sense to
>>>> post a
>>>> full DTS. Will probably send a fragment.
>>>>
>>>> ---
>>>> ******************************************************************
>>>> * KSI at home KOI8 Net < > The impossible we do immediately. *
>>>> * Las Vegas NV, USA < > Miracles require 24-hour notice. *
>>>> ******************************************************************
>>>> _______________________________________________
>>>> U-Boot mailing list
>>>> U-Boot at lists.denx.de
>>>> https://lists.denx.de/listinfo/u-boot
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot
More information about the U-Boot
mailing list