Hi Krzysztof, On Tue, Nov 22, 2022 at 11:30 AM Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx> wrote: > On 22/11/2022 10:07, Herve Codina wrote: > > On Tue, 22 Nov 2022 09:42:48 +0100 > > Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx> wrote: > > > >> On 22/11/2022 09:25, Geert Uytterhoeven wrote: > >>> Hi Krzysztof, > >>> > >>> On Tue, Nov 22, 2022 at 8:45 AM Krzysztof Kozlowski > >>> <krzysztof.kozlowski@xxxxxxxxxx> wrote: > >>>> On 21/11/2022 21:46, Geert Uytterhoeven wrote: > >>>>>> This does not change anything. Herve wrote: > >>>>>> > >>>>>>> probe some devices (USB host and probably others) > >>>>>> > >>>>>> Why some can be probed earlier and some not, if there are no > >>>>>> dependencies? If there are dependencies, it's the same case with sysctrl > >>>>>> touching the register bit and the USB controller touching it (as well > >>>>>> via syscon, but that's obvious, I assume). > >>>>>> > >>>>>> Where is the synchronization problem? > >>>>> > >>>>> The h2mode bit (and probably a few other controls we haven't figured out > >>>>> yet) in the sysctrl must be set before any of the USB devices is active. > >>>>> Hence it's safest for the sysctrl to do this before any of the USB drivers > >>>>> probes. > >>>> > >>>> Again, this does not differ from many, many of other devices. All of > >>>> them must set something in system controller block, before they start > >>>> operating (or at specific time). It's exactly the same everywhere. > >>> > >>> The issue here is that there are two _different drivers_ (USB host > >>> and device). When both are modular, and the driver that depends on the > >>> sysctrl setting is loaded second, you have a problem: the sysctrl change > >>> must not be done when the first driver is already using the hardware. > >>> > >>> Hence the sysctrl driver should take care of it itself during early > >>> initialization (it's the main clock controller, so it's a dependency > >>> for all other I/O device drivers). > >> > >> I assumed you have there bit for the first device (which can switch > >> between USB host and USB device) to choose appropriate mode. The > >> bindings also expressed this - "the USBs are". Never said anything about > >> dependency between these USBs. > >> > >> Are you saying that the mode for first device cannot be changed once the > >> second device (which is only host) is started? IOW, the mode setup must > >> happen before any of these devices are started? > >> > >> Anyway with sysctrl approach you will have dependency and you cannot > >> rely on clock provider-consumer relationship to order that dependency. > >> What if you make all clocks on and do not take any clocks in USB device? > >> Broken dependency. What if you want to use this in a different SoC, > >> where the sysctrl does not provide clocks? Broken dependency. > > > > The issue is really related to the Renesas sysctrl itself and not related > > to the USB drivers themselves. > > From the drivers themselves, the issue is not seen (I mean the driver > > takes no specific action related to this issue). > > If we change the SOC, the issue will probably not exist anymore. > > Yeah, and in the next SoC you will bring 10 of such properties to > sysctrl arguing that if one was approved, 10 is also fine. Somehow > people on the lists like to use that argument - I saw it somewhere, so I > am allowed to do here the same. Like pin control properties? ;-) This property represents a wiring on the board... I.e. a system integration issue. > I understand that the registers responsible for configuration are in > sysctrl block, but it does not mean that it should be described as part > of sysctrl Devicetree node. If there was no synchronization problem, > this would be regular example of register in syscon which is handled > (toggled) by the device (so USB device/host controller). Since there is > synchronization problem, you argue that it is correct representation of > hardware. No, it is not, because logically in DT you do not describe > mode or existence of other devices in some other node and it still does > not describe this ordering. So we have to drop the property, and let the sysctrl block look for <name>@<reg> nodes, and check which ones are enabled? Running out of ideas... Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds