Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Mar 2014 06:31:37 -0700
From:      Warner Losh <imp@bsdimp.com>
To:        Patrick Kelsey <kelsey@ieee.org>
Cc:        "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org>, freebsd-arm <freebsd-arm@freebsd.org>, freebsd-embedded@freebsd.org, Ian Lepore <ian@freebsd.org>
Subject:   Re: [PATCH] simplebus child device probe order control via FDT (motivated by BeagleBone Black)
Message-ID:  <438620C4-7712-4B01-A46F-CB57946A30BF@bsdimp.com>
In-Reply-To: <CAD44qMWLox0yY1-%2B2bn4dQ=z0jWKow95b=mnCJEkwmSiSipf4g@mail.gmail.com>
References:  <CAD44qMUyqzaFtjgXdgThgHcHjPctx-oZAdhvHp4Kf0G7N4HVog@mail.gmail.com> <7C2B7036-51CC-4C97-80C4-0A439874357D@bsdimp.com> <CAD44qMXe8bh0cR60tm8%2BLZ9W3WhJDuGX6xz9FLNHrzmXNd5FDQ@mail.gmail.com> <1393939277.1149.300.camel@revolution.hippie.lan> <CAD44qMWLox0yY1-%2B2bn4dQ=z0jWKow95b=mnCJEkwmSiSipf4g@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

On Mar 4, 2014, at 11:53 PM, Patrick Kelsey <kelsey@ieee.org> wrote:

>=20
>=20
>=20
> On Tue, Mar 4, 2014 at 8:21 AM, Ian Lepore <ian@freebsd.org> wrote:
>=20
> There's a standard property for mmc/sd devices, "non-removable" whose
> presence denotes things like soldered-on eMMC parts.  Only one of our
> many sdhci drivers supports it right now (imx).  In general the core
> part of the driver (dev/sdhci) doesn't have good support for
> insert/remove/presence detection that's handled off to the side =
(whether
> it's non-removable or a gpio pin).
>=20
> That alone doesn't solve the wider problem, though, which I think =
breaks
> down into two pieces.  Let's say you've got two slots, call them left
> and right.  You end up with these two problems...
>=20
>       * Sometimes the right slot is mmcsd0, but it turns into mmcsd1 =
if
>         there's a card in the left slot when I boot; I don't want it =
to
>         change.
>=20
> And not just a boot-time issue, of course.  If you were to remove =
those two cards and then reinsert them in the opposite time-order, their =
device names would swap.
> =20
>       * I want the slot on the left to be named '1' and the right to =
be
>         '0'.
>=20
> The first problem is easily solved without impacting dts in any way.  =
We
> just wire down the relationship controllerN -> mmcN -> mmcsdN.  This =
is
> exactly equivelent to the old ATA_STATIC_ID option in its effect -- =
you
> don't get to choose the names, but you know they won't change based on
> which devices are present.  It could be controlled with a tunable.
>=20
> It's harder to envision the fix for the second part without adding an
> ad-hoc property for the devices.  Even with a property I'm not sure =
how
> easy it would be.
>=20
> We should be able to assign a geographic address (controllerX:slotY) =
to each mmcsd device in a given system (let's ignore for now the =
theoretical possibility of multiple cards on one bus).  The =
'controllerX' part of the address could be the controller's pathname =
from the devicetree, or an index assigned by mmcbr machinery at attach =
time.  The "slotY" part of the address is assigned by the specific =
controller device driver using some internally-determined fixed mapping =
between the assigned values and its physical slots.  This geographic =
address could be used to create an additional set of /dev entries with =
stable names.  There could be a mechanism for user-configurable aliases =
for the geographical addresses.

There=92s already a chance to run a script when a device is attached =
that can create /dev/slot0 or /dev/slot1 that has geographical =
information available to it. People use ddvd for this in the USB world =
all the time to make sure that tty devices get a symlink based on their =
location or serial number.

Why is mmc so different it needs its own mechanism?

Warner

> That kind of approach addresses both concerns, avoids trying to =
control device unit number assignment, and doesn't require any special =
support from the device tree.
>=20
> In the theoretically possible case of multiple MMC devices on one bus, =
the next piece of identifying information in the geographic address =
would have to be the RCA assigned to the card.  As far as I am aware, in =
such a multidrop configuration, there is generally no way for a =
controller to know which RCA is assigned to which slot due to the =
contention-based (that is, non-geographic) nature of the initialization =
protocol, so this would be a configuration in which stable names would =
not be possible without an ad-hoc, out-of-band hardware support.  Does =
anyone know if sharing a bus is only a possibility with MMC cards?  I =
*think*, but am not feeling authoritative, that SD/SDIO cards do not =
support multiple devices on one bus.
> =20
>=20
> There's been talk of moving mmcsd towards using CAM.  I don't know =
that
> much about cam, but I suspect it rules out doing anything about #1 as
> well.  At least, I've never heard of wiring down /dev/daN to a =
specific
> device/slot/whatever.
>=20
> -- Ian
>=20
>=20
>=20




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?438620C4-7712-4B01-A46F-CB57946A30BF>