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)
 {

Reply via email to