UPLI PHY connected to USBH1 on Babbage board seem to need a special reset sequence in which STP signal gets asserted for a short period of time. Without this sequnce running "usb" results in timeout and no USB devices found. Similar reset sequences can be found in Babbage board code in U-Boot as well as efikamx_usb_init() in Barebox. Signed-off-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx> --- .../arm/boards/freescale-mx51-babbage/board.c | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/arch/arm/boards/freescale-mx51-babbage/board.c b/arch/arm/boards/freescale-mx51-babbage/board.c index 2e75db547..4839aa568 100644 --- a/arch/arm/boards/freescale-mx51-babbage/board.c +++ b/arch/arm/boards/freescale-mx51-babbage/board.c @@ -43,6 +43,41 @@ #define MX51_CCM_CACRR 0x10 +#define USBH1_STP IMX_GPIO_NR(1, 27) +#define USBH1_PHY_RESET IMX_GPIO_NR(2, 5) +#define USBH1_HUB_RESET IMX_GPIO_NR(1, 7) + +static int imx51_babbage_reset_usbh1(void) +{ + void __iomem *iomuxbase = IOMEM(MX51_IOMUXC_BASE_ADDR); + + if (!of_machine_is_compatible("fsl,imx51-babbage")) + return 0; + + imx_setup_pad(iomuxbase, MX51_PAD_EIM_D21__GPIO2_5); + imx_setup_pad(iomuxbase, MX51_PAD_GPIO1_7__GPIO1_7); + + gpio_direction_output(USBH1_PHY_RESET, 0); + gpio_direction_output(USBH1_HUB_RESET, 0); + + mdelay(10); + + gpio_set_value(USBH1_PHY_RESET, 1); + gpio_set_value(USBH1_HUB_RESET, 1); + + imx_setup_pad(iomuxbase, MX51_PAD_USBH1_STP__GPIO1_27); + gpio_direction_output(USBH1_STP, 1); + + mdelay(1); + + imx_setup_pad(iomuxbase, MX51_PAD_USBH1_STP__USBH1_STP); + + gpio_free(USBH1_PHY_RESET); + + return 0; +} +console_initcall(imx51_babbage_reset_usbh1); + static int imx51_babbage_init(void) { if (!of_machine_is_compatible("fsl,imx51-babbage")) -- 2.17.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox