Ethernet Switch Framework

Stefan Bethke stb at lassitu.de
Sun Jan 29 13:14:44 UTC 2012


Am 29.01.2012 um 08:05 schrieb Warner Losh:

> I think that the main issue here is that we have an assumption that we have a tree structure.  However, it is more of a DAG across different domains.  The hierarchy works well when each device owns all the devices below it and only interacted with them.  Most devices are that way.  However, in the embedded world, there's lots of reach-accrosses that are expected that break the model.

What do people think would be a good approach to solve the concrete issue without too much hackery?  Aleksandr and I have presented three possible approaches:
1. have a PHY driver that acts as a proxy and talks to a separate MDIO master
2. have a proxy between the ethernet driver and the miibus driver
3. modify miibus to have a separate device for mediachg() etc.

All three suffer from a dependency problem: miibus attachment can only complete successfully when both the ethernet driver and the mdio driver have been attached.  In the current model, the ethernet driver provides both the MDIO access as well as the target for the mediachg, etc. messages, so there's no attachment ordering issue.

In my miiproxy patch (2.), it is necessary for the ethernet driver to cooperate in this delayed attachment, by splitting out the miibus attachment from the device_attach method implementation.  That's a fairly intrusive change, and that would need to be made to any ethernet driver that is to support such a split MDIO/MII setup.

I tried delaying just the call to mii_attach(), but it seems that interacts badly with an already attached interface.  Specifically, I got a non-working interface when I tried to call mii_attach() long after if_etherattach().  Additionally, if_arge (and probably most other drivers) assumes that the miibus is attached after they've successfully attached themselves, and subsequently runs into null pointer issues when it isn't.

Would it be possible to attach miibus without having a working PHY, and only attach the PHYs once the MDIO device has been attached?

For the mips/atheros platforms, we could introduce ordering hints for nexus to make sure the mdio driver gets attached before the arge's.  That's a fairly small changes (two lines), and does work, but it's more a hack than a general solution.  With my proposed change to miibus (split devices), that would bring down the necessary changes to just a handful of lines.


Stefan

-- 
Stefan Bethke <stb at lassitu.de>   Fon +49 151 14070811





More information about the freebsd-arch mailing list