[PATCH 3/5] usb: dwc3-generic: Add dependency on SIMPLE_BUS

Marek Vasut marex at denx.de
Mon Jan 23 16:49:48 CET 2023


On 1/23/23 06:01, Kunihiko Hayashi wrote:
> Hi Marek,

Hello Hayashi-san,

[...]

>> On the other hand, the PXS2 controller for example is not a bus:
>>
>> arch/arm/dts/uniphier-pxs2.dtsi:
>> 596 _usb0: usb at 65a00000 {
>> 597     compatible = "socionext,uniphier-dwc3", "snps,dwc3";
>> 598     status = "disabled";
>> 599     reg = <0x65a00000 0xcd00>;
>> ...
>> 610 };
> 
> I understand. However, this node isn't used in u-boot.
> (see below for details)
> 
>>>> Is this needed for socionext dwc3 variant to handle the simple-mfd in
>>>> e.g. arch/arm/dts/uniphier-pxs3.dtsi :
>>>>
>>>> 614 usb-glue at 65b00000 {
>>>> 615     compatible = "socionext,uniphier-pxs3-dwc3-glue",
>>>> 616              "simple-mfd";
>>>>
>>>> ?
>>>
>>> In case of U-Boot, the glue driver is probed by:
>>>
>>>       /* FIXME: U-Boot own node */
>>>       usb at 65b00000 {
>>>               compatible = "socionext,uniphier-pxs3-dwc3";
>>>
>>> And dwc3-uniphier is also declared as UCLASS_SIMPLE_BUS.
>>> Even if using "simple-mfd", this is included in 
>>> drivers/core/simple-bus.c
>>> which is declared as UCLASS_SIMPLE_BUS.
>>
>> If I understand this correctly, node compatible with
>> "socionext,uniphier-pxs3-dwc3-glue" is not used at all , right ?
> 
> Yes.
> Original uniphier devicetree has the following usb nodes.
> 
>      usb at 65a00000 {
>          compatible = "snps,dwc3";
>      };
>      usb-glue at 65b00000 {
>          compatible = "socionext,uniphier-pxs3-dwc3-glue", "simple-mfd";
>      };
> 
> However, U-Boot dwc3-generic needs to put dwc3 node under the glue node.

Have a look at arch/arm/dts/imx8mq.dtsi which does not use any glue 
node, the snps,dwc3 compatible node is directly placed on the soc at 0 bus:

1417
1418         usb_dwc3_0: usb at 38100000 {
1419             compatible = "fsl,imx8mq-dwc3", "snps,dwc3";
1420             reg = <0x38100000 0x10000>;
1421             clocks = <&clk IMX8MQ_CLK_USB1_CTRL_ROOT>,

> Due to this restriction, there is another usb node dedicated to u-boot.
> 
>      /* FIXME: U-Boot own node */
>      usb at 65b00000 { /* glue */
>          compatible = "socionext,uniphier-pxs3-dwc3";
> 
>          dwc3 at 65a00000 {
>              compatible = "snps,dwc3";
>          };
>      };
> 
> So instead of "socionext,uniphier-pxs3-dwc3-glue", the glue driver
> uses "socionext,uniphier-pxs3-dwc3" in U-Boot.

Can we use the same method as imx8mq.dtsi uses, to avoid this special 
node workaround ?

>> The generic driver binds to node compatible with
>> "socionext,uniphier-dwc3" , right ?
> 
> No, the generic driver binds "socionext,uniphier-pxs3-dwc3".
> 
>> That means, there is nothing which would be a bus, and so the
>> dwc3-uniphier.c can be switched from UCLASS_SIMPLE_BUS to UCLASS_NOP ,
>> is that correct ?
> 
> There is still the issue of different usb node between Original and u-boot,
> however, the glue driver can be switched to UCLASS_NOP.

Understood, thank you for the clarification.


More information about the U-Boot mailing list