On Sun, Jul 10, 2016 at 09:12:03PM +0200, Mark Kettenis wrote:
> 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?

#3 sounds good to me as well.  The same problem occurs for ahci
as imx and sunxi both have it.

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