Hi, On Fri, Jun 17, 2022 at 9:34 AM Matthias Kaehlcke <mka@xxxxxxxxxxxx> wrote: > > > Looking at the "companion-hub" case with fresh eyes, too, I wonder if > > that can be simpler. If we find a companion hub, do we need both the > > check for usb_hcd_is_primary_hcd() and the check to see whether the > > pdev was already created? > > I was also doubting about this and concluded that it is still needed. > > Let's use once more the trogdor config as example, which has one physical > onboard hub chip with a USB 3.1 hub and a USB 2.1 companion hub, connected > to the dwc3 controller: > > &usb_1_dwc3 { > dr_mode = "host"; > #address-cells = <1>; > #size-cells = <0>; > > /* 2.x hub on port 1 */ > usb_hub_2_x: hub@1 { > compatible = "usbbda,5411"; > reg = <1>; > vdd-supply = <&pp3300_hub>; > companion-hub = <&usb_hub_3_x>; > }; > > /* 3.x hub on port 2 */ > usb_hub_3_x: hub@2 { > compatible = "usbbda,411"; > reg = <2>; > vdd-supply = <&pp3300_hub>; > companion-hub = <&usb_hub_2_x>; > }; > }; > > Let's assume we don't check for the pdev. With our change above for root hubs > the loop is now only executed for the primary HCD. In the first iteration > we encounter the 2.x hub, it has a companion hub, but that alone doesn't > tell us much, so we create a pdev. In the next iteration we encouter the > 3.x hub, it also has a companion hub, but we don't know/check that the > companion already has a pdev, so we create another one for the same > physical hub. Ah, you are correct. You only run into that case for the root hub, correct? For everything else it's impossible? ...and I guess things would be different if inside the loop you actually set "hcd" to point to the "hcd" of the child device. I guess that's where my confusion keeps stemming from. "hcd" is the parent's host controller which is not always the same as the child's host controller. It would have been keen if we could somehow know the child's host controller and get a pointer to that, but we can't because the child device hasn't been enumerated yet. OK, I'm convinced. I'll mention it in your v23 but maybe I'll have a slightly better chance of figuring this out if/when I look at this again if we rename "hcd" to "parent_hcd". -Doug