[RFC PATCH] ehci-platform: Merge ppc-of EHCI driver into the ehci-platform driver
Benjamin Herrenschmidt
benh at kernel.crashing.org
Thu Nov 7 06:57:00 EST 2013
On Wed, 2013-11-06 at 18:39 +1100, Alistair Popple wrote:
> diff --git a/arch/powerpc/boot/dts/sequoia.dts
> b/arch/powerpc/boot/dts/sequoia.dts
> index b1d3292..e28371e 100644
> --- a/arch/powerpc/boot/dts/sequoia.dts
> +++ b/arch/powerpc/boot/dts/sequoia.dts
> @@ -153,7 +153,7 @@
> };
>
> USB0: ehci at e0000300 {
> - compatible = "ibm,usb-ehci-440epx", "usb-ehci";
> + compatible = "ibm,usb-ehci-440epx";
Compatible properties are string lists so it *should* be ok to have all
of them in the list. However I do remember Russell mentioning a problem
with the current matching code so adding him on CC for comments.
> +/*
> + * 440EPx Errata USBH_3
> + * Fix: Enable Break Memory Transfer (BMT) in INSNREG3
> + */
> +#define PPC440EPX_EHCI0_INSREG_BMT (0x1 << 0)
> +static int
> +ppc44x_enable_bmt(struct device_node *dn)
> +{
> + __iomem u32 *insreg_virt;
> +
> + insreg_virt = of_iomap(dn, 1);
> + if (!insreg_virt)
> + return -EINVAL;
> +
> + out_be32(insreg_virt + 3, PPC440EPX_EHCI0_INSREG_BMT);
> +
> + iounmap(insreg_virt);
> + return 0;
> +}
> +
I would go even further and add the 44x workarounds to the normal
platform device, with a compatible check in there. That isn't the
first time we add quirks to an existing driver.
> + /* Initialise platform data from device tree if available. */
> + if (!dn) {
That was supposed to be if (dn) no ?
> + if (of_get_property(dn, "big-endian", NULL)) {
> + pdata->big_endian_mmio = 1;
> + pdata->big_endian_desc = 1;
> + }
> + if (of_get_property(dn, "big-endian-regs", NULL))
> + pdata->big_endian_mmio = 1;
> + if (of_get_property(dn, "big-endian-desc", NULL))
> + pdata->big_endian_desc = 1;
> + }
> +
> irq = platform_get_irq(dev, 0);
> if (irq < 0) {
> dev_err(&dev->dev, "no irq provided");
> @@ -203,9 +216,10 @@ static int ehci_platform_resume(struct device *dev)
> #define ehci_platform_resume NULL
> #endif /* CONFIG_PM */
>
> -static const struct of_device_id vt8500_ehci_ids[] = {
> +static const struct of_device_id ehci_platform_ids[] = {
> { .compatible = "via,vt8500-ehci", },
> { .compatible = "wm,prizm-ehci", },
> + { .compatible = "usb-ehci", },
> {}
> };
Cheers,
Ben.
More information about the Linuxppc-dev
mailing list