On Thu, 10 Jan 2013, Felipe Balbi wrote:

> Hi,
> 
> On Thu, Jan 10, 2013 at 10:36:27AM -0500, Alan Stern wrote:
> > On Thu, 10 Jan 2013, Felipe Balbi wrote:
> > 
> > > Hi Alan,
> > > 
> > > with v3.8-rc3, ehci-hcd fails to compile for ARM if I use allmodconfig:
> > > 
> > > drivers/usb/host/ehci-hcd.c:1285:0: warning: "PLATFORM_DRIVER" redefined 
> > > [enabled by default]
> > > drivers/usb/host/ehci-hcd.c:1255:0: note: this is the location of the 
> > > previous definition
> > > drivers/usb/host/ehci-mxc.c:280:31: warning: 'ehci_mxc_driver' defined 
> > > but not used [-Wunused-variable]
> > > drivers/usb/host/ehci-hcd.c:1285:0: warning: "PLATFORM_DRIVER" redefined 
> > > [enabled by default]
> > > drivers/usb/host/ehci-hcd.c:1255:0: note: this is the location of the 
> > > previous definition
> > > 
> > > Looks like the recent ARM multi-arch patches didn't take into account
> > > EHCI-hcd.
> > 
> > Do you know why this problem didn't occur in 3.6-rc2?  I don't see any 
> > changes in -rc3 that would account for it (although I didn't look 
> > terribly thoroughly).
> 
> It's probably there, I just didn't look at it either :-)

It seems clear that CONFIG_EHCI_HCD_PLATFORM needs to be mutually 
exclusive with all the old-style drivers, in order to prevent this sort 
of conflict.  I just don't see why it never came up before...

> > >  Now it becomes easy to see why giving ehci its own
> > > platform_device/driver would've been a lot easier ;-)
> > 
> > Not at all.  We merely need to finish the conversion that I started.  
> > It should be pretty easy to convert ehci-mxc over to the new scheme.
> > I don't have time to do it right now, but soon...
> 
> ehci-mxc isn't the only one redefining PLATFORM_DRIVER. All of below are
> potential offenders:
> 
> drivers/usb/host/ehci-hcd.c:#define   PLATFORM_DRIVER         ehci_fsl_driver
> drivers/usb/host/ehci-hcd.c:#define PLATFORM_DRIVER           ehci_mxc_driver
> drivers/usb/host/ehci-hcd.c:#define PLATFORM_DRIVER           
> ehci_hcd_sh_driver
> drivers/usb/host/ehci-hcd.c:#define        PLATFORM_DRIVER         
> ehci_hcd_omap_driver
> drivers/usb/host/ehci-hcd.c:#define   PLATFORM_DRIVER         
> ehci_orion_driver
> drivers/usb/host/ehci-hcd.c:#define   PLATFORM_DRIVER         
> ehci_hcd_w90x900_driver
> drivers/usb/host/ehci-hcd.c:#define   PLATFORM_DRIVER         
> ehci_atmel_driver
> drivers/usb/host/ehci-hcd.c:#define PLATFORM_DRIVER           
> ehci_octeon_driver
> drivers/usb/host/ehci-hcd.c:#define   PLATFORM_DRIVER         
> vt8500_ehci_driver
> drivers/usb/host/ehci-hcd.c:#define PLATFORM_DRIVER           
> spear_ehci_hcd_driver
> drivers/usb/host/ehci-hcd.c:#define PLATFORM_DRIVER           ehci_msm_driver
> drivers/usb/host/ehci-hcd.c:#define   PLATFORM_DRIVER         
> ehci_hcd_tilegx_driver
> drivers/usb/host/ehci-hcd.c:#define   PLATFORM_DRIVER         
> ehci_hcd_msp_driver
> drivers/usb/host/ehci-hcd.c:#define PLATFORM_DRIVER           
> tegra_ehci_driver
> drivers/usb/host/ehci-hcd.c:#define PLATFORM_DRIVER           s5p_ehci_driver
> drivers/usb/host/ehci-hcd.c:#define PLATFORM_DRIVER           
> ehci_grlib_driver
> drivers/usb/host/ehci-hcd.c:#define        PLATFORM_DRIVER         
> ehci_mv_driver
> drivers/usb/host/ehci-hcd.c:#define   PLATFORM_DRIVER         
> ehci_hcd_sead3_driver

Yes; those all are old-style drivers.  Most of them can be converted to
the new scheme with relatively little effort; a few will require more
work.

In fact, the only drivers that _have_ been converted so far are 
ehci-pci, chipidea, and ehci-platform.

> By adding a platform_device to struct ehci-hcd.c we wouldn't need all of
> those defines.

And indeed, each time a driver is converted to the new scheme, its 
#define gets removed.

> Also note that not all of them will be able to simply use
> ehci-platform.c. OMAP, for instance, needs to reimplement parts of
> ehci_hub_control() due to silicon erratas (we need to reparent a clock
> at a specific spot during bus suspend), this means we will always have,
> at a minimum, ehci-omap.c. Tegra has other silicon erratas on and
> reimplements other ehci functions and so forth.

That's right.  But a driver can follow the new scheme without using 
ehci-platform.c.  For example, neither ehci-pci.c nor chipidea/host.c 
does.

> But fair enough, I just want to see this fixed but, like yourself, no
> time to look at that :-s

I can fix up ehci-mxc easily enough.  Don't all those other drivers
cause similar build problems, though?

It wouldn't hurt to add some restrictions to the Kconfig entry for 
CONFIG_USB_EHCI_HCD_PLATFORM too.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to