Currently the armv7 port has several bits ehci(4) glue code.
Basically there is one of these for every SoC platform that we
support. I converted the glue for the i.MX6 platform to use the FDT
and that works fine. However, this prevents us from converting the
other bits of glue, since it isn't possible to have multiple bits of
glue for:
ehic? at fdt?
We have a couple of solutions here:
1. Introduce a single armv7 ehci(4) glue driver that calls the
appropriate SoC-specifuc implementation based on the compatible
string. With this approach we continue to have:
ehci0 at simplebus1
lines in dmesg.
2. Introduce SoC-specific busses such that we can have bus-specific
glue code for each SoC platform we want to support. This would
mean that on i.MX6 we would get something like:
ehci0 at aipsbus1
lines in dmesg. The SoC-specific bus drivers would be essentially
clones of simplebus(4), with stricter match code that returns a
higher value. Tis is not entirely straigtforward, and if we need
to attach ehci(4) to mainbus(4) on more than one SoC the approach
fails.
3. Use SoC-specific driver names. We'd get something like:
imxehci0 at simplebus1
on i.NX6 and
omehci0 at simplebus0
on OMAP. We'd need to think about how we document these new
drivers.
I'm currently leaning towards option #3. It can be argues that the
SoC-specific glue code is complicated enough to warrant its own driver
anyway. The changes are fairly easy to make and the code stays nicely
separated. See diff below.
Or is there another option that I'm missing?
Index: arch/armv7/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/armv7/conf/GENERIC,v
retrieving revision 1.28
diff -u -p -r1.28 GENERIC
--- arch/armv7/conf/GENERIC 9 Jul 2016 12:32:50 -0000 1.28
+++ arch/armv7/conf/GENERIC 10 Jul 2016 19:09:31 -0000
@@ -52,8 +52,8 @@ iic* at imxiic?
imxesdhc* at fdt? # SDHC controller
sdmmc* at imxesdhc? # SD/MMC bus
ahci* at fdt? # AHCI/SATA
-ehci* at fdt? # EHCI (shim)
-usb* at ehci?
+imxehci* at fdt? # EHCI
+usb* at imxehci?
# OMAP3xxx/OMAP4xxx SoC
omap0 at mainbus?
Index: arch/armv7/imx/files.imx
===================================================================
RCS file: /cvs/src/sys/arch/armv7/imx/files.imx,v
retrieving revision 1.12
diff -u -p -r1.12 files.imx
--- arch/armv7/imx/files.imx 9 Jul 2016 12:32:50 -0000 1.12
+++ arch/armv7/imx/files.imx 10 Jul 2016 19:09:31 -0000
@@ -40,7 +40,8 @@ device fec: ether, ifnet, mii, ifmedia
attach fec at fdt
file arch/armv7/imx/if_fec.c fec
-attach ehci at fdt with imxehci
+device imxehci: usbus
+attach imxehci at fdt
file arch/armv7/imx/imxehci.c imxehci
device imxesdhc: sdmmcbus
Index: arch/armv7/imx/imxehci.c
===================================================================
RCS file: /cvs/src/sys/arch/armv7/imx/imxehci.c,v
retrieving revision 1.11
diff -u -p -r1.11 imxehci.c
--- arch/armv7/imx/imxehci.c 10 Jul 2016 11:46:28 -0000 1.11
+++ arch/armv7/imx/imxehci.c 10 Jul 2016 19:09:31 -0000
@@ -94,6 +94,10 @@ struct cfattach imxehci_ca = {
imxehci_detach
};
+struct cfdriver imxehci_cd = {
+ NULL, "imxehci", DV_DULL
+};
+
int
imxehci_match(struct device *parent, void *match, void *aux)
{