Hi, this is my first try on activating EHCI on imx53 (primarily via dt). However, probe() still hangs on the first ehci_writel() l.189. I guess some clock/enabling is still missing? Sascha, do you already have EHCI running on imx53? Any hint would be very much appreciated. Thanks in advance, Roland --- arch/arm/boot/dts/imx53.dtsi | 8 ++++++++ arch/arm/mach-imx/Kconfig | 1 + arch/arm/mach-imx/devices-imx53.h | 4 ++++ arch/arm/mach-imx/imx53-dt.c | 7 +++++++ drivers/usb/host/ehci-mxc.c | 12 ++++++++++++ 5 files changed, 32 insertions(+) --- linux-2.6.orig/arch/arm/boot/dts/imx53.dtsi +++ linux-2.6/arch/arm/boot/dts/imx53.dtsi @@ -135,6 +135,14 @@ }; }; + ehci@53f80000 { + compatible = "fsl,mxc-ehci"; + interrupt-parent = <&tzic>; + interrupts = <14>; + reg = <0x53f80000 0x4000>; + status = "disabled"; + }; + gpio1: gpio@53f84000 { compatible = "fsl,imx53-gpio", "fsl,imx35-gpio"; reg = <0x53f84000 0x4000>; --- linux-2.6.orig/arch/arm/mach-imx/Kconfig +++ linux-2.6/arch/arm/mach-imx/Kconfig @@ -799,6 +799,7 @@ config MACH_MX53_DIMM select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX select IMX_HAVE_PLATFORM_SPI_IMX select IMX_HAVE_PLATFORM_MXC_NAND + select IMX_HAVE_PLATFORM_MXC_EHCI select LEDS_GPIO_REGISTER help Include support for DIMM MX53 platform. This includes specific --- linux-2.6.orig/arch/arm/mach-imx/devices-imx53.h +++ linux-2.6/arch/arm/mach-imx/devices-imx53.h @@ -45,4 +45,8 @@ extern const struct imx_pata_imx_data im #define imx53_add_pata_imx() \ imx_add_pata_imx(&imx53_pata_imx_data) +extern const struct imx_mxc_ehci_data imx53_mxc_ehci_data; +#define imx53_add_mxc_ehci(pdata) \ + imx_add_mxc_ehci(&imx53_mxc_ehci_data, pdata) + extern struct platform_device *__init imx53_add_ahci_imx(void); --- linux-2.6.orig/arch/arm/mach-imx/imx53-dt.c +++ linux-2.6/arch/arm/mach-imx/imx53-dt.c @@ -23,6 +23,12 @@ #include <mach/common.h> #include <mach/mx53.h> +#include <mach/mxc_ehci.h> + +static struct mxc_usbh_platform_data otg_pdata __initdata = { + .portsc = MXC_EHCI_MODE_SERIAL, +}; + /* * Lookup table for attaching a specific name and platform_data pointer to * devices as they get created by of_platform_populate(). Ideally this table @@ -48,6 +54,7 @@ static const struct of_dev_auxdata imx53 OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C3_BASE_ADDR, "imx-i2c.2", NULL), OF_DEV_AUXDATA("fsl,imx53-sdma", MX53_SDMA_BASE_ADDR, "imx35-sdma", NULL), OF_DEV_AUXDATA("fsl,imx53-wdt", MX53_WDOG1_BASE_ADDR, "imx2-wdt.0", NULL), + OF_DEV_AUXDATA("fsl,mxc-ehci", MX53_OTG_BASE_ADDR, "mxc-ehci.0", &otg_pdata), { /* sentinel */ } }; --- linux-2.6.orig/drivers/usb/host/ehci-mxc.c +++ linux-2.6/drivers/usb/host/ehci-mxc.c @@ -18,6 +18,8 @@ */ #include <linux/platform_device.h> +#include <linux/of.h> +#include <linux/of_platform.h> #include <linux/clk.h> #include <linux/delay.h> #include <linux/usb/otg.h> @@ -311,11 +313,21 @@ static void ehci_mxc_drv_shutdown(struct MODULE_ALIAS("platform:mxc-ehci"); +#ifdef CONFIG_OF +static const struct of_device_id mxc_ehci_dt_ids[] = { + { .compatible = "fsl,mxc-ehci" }, + { /* sentinel */ } +}; + +MODULE_DEVICE_TABLE(of, mxc_ehci_dt_ids); +#endif + static struct platform_driver ehci_mxc_driver = { .probe = ehci_mxc_drv_probe, .remove = __exit_p(ehci_mxc_drv_remove), .shutdown = ehci_mxc_drv_shutdown, .driver = { .name = "mxc-ehci", + .of_match_table = of_match_ptr(mxc_ehci_dt_ids), }, }; -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html