Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 29 Jan 2012 14:14:42 +0100
From:      Stefan Bethke <stb@lassitu.de>
To:        Warner Losh <imp@bsdimp.com>
Cc:        FreeBSD Net <freebsd-net@FreeBSD.org>, Aleksandr Rybalko <ray@ddteam.net>, Adrian Chadd <adrian@FreeBSD.org>, FreeBSD-arch <freebsd-arch@FreeBSD.org>
Subject:   Re: Ethernet Switch Framework
Message-ID:  <81B88904-6894-4AC3-80F3-2866216E494B@lassitu.de>
In-Reply-To: <DBAB0C5C-5B2D-4430-8096-9E4DC7233961@bsdimp.com>
References:  <20120120221319.ca8b631f.ray@freebsd.org> <30A45A1E-CA13-4AC8-86FB-F8E06301D1F6@lassitu.de> <20120122195130.360261ce.ray@freebsd.org> <CAJ-VmokTh2q0ZH=kwU6GzJm5Mr4k7geJiFsoX_A9hcLhMZNxsg@mail.gmail.com> <0E31FEC4-963D-4AC8-9AB7-EE6D6D7F86EE@lassitu.de> <CAJ-Vmo=GRKRf%2BYsFqNm9d_T3Tq583uV_pabMV6ozuaytSRLivg@mail.gmail.com> <20120129001251.7e4cfe83.ray@ddteam.net> <CACVs6=-U9rr7cpeJ%2BVUgP3Xq1yRB=Xk1GjuzEOuXiEUoqGFq_Q@mail.gmail.com> <DBAB0C5C-5B2D-4430-8096-9E4DC7233961@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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

--=20
Stefan Bethke <stb@lassitu.de>   Fon +49 151 14070811






Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?81B88904-6894-4AC3-80F3-2866216E494B>