On Fri, Mar 17, 2023 at 01:06:43PM +0100, Álvaro Fernández Rojas wrote: > Hi Vladimir, > > El vie, 17 mar 2023 a las 12:51, Vladimir Oltean (<olteanv@xxxxxxxxx>) escribió: > > > > On Fri, Mar 17, 2023 at 12:34:26PM +0100, Álvaro Fernández Rojas wrote: > > > b53 MMAP devices have a MDIO Mux bus controller that must be registered after > > > properly initializing the switch. If the MDIO Mux controller is registered > > > from a separate driver and the device has an external switch present, it will > > > cause a race condition which will hang the device. > > > > Could you describe the race in more details? Why does it hang the device? > > I didn't perform a full analysis on the problem, but what I think is > going on is that both b53 switches are probed and both of them fail > due to the ethernet device not being probed yet. > At some point, the internal switch is reset and not fully configured > and the external switch is probed again, but since the internal switch > isn't ready, the MDIO accesses for the external switch fail due to the > internal switch not being ready and this hangs the device because the > access to the external switch is done through the same registers from > the internal switch. The proposed solution is too radical for a problem that was not properly characterized yet, so this patch set has my temporary NACK. > But maybe Florian or Jonas can give some more details about the issue... I think you also have the tools necessary to investigate this further. We need to know what resource belonging to the switch is it that the MDIO mux needs. Where is the earliest place you can add the call to b53_mmap_mdiomux_init() such that your board works reliably? Note that b53_switch_register() indirectly calls b53_setup(). By placing this function where you have, the entirety of b53_setup() has finished execution, and we don't know exactly what is it from there that is needed.