X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=drivers%2Fusb%2Fhost%2Fehci-mx6.c;h=bb48d0dea0a5849cbeb99412980bb74ef605ceb7;hb=79d867c2e683f7080a8724a54a4a12ac0ce1f837;hp=54f868420d55af335df8341a74c9b9a42942fb9e;hpb=35554fc9a194802a43d50b16e92f4efc7f72bd94;p=u-boot diff --git a/drivers/usb/host/ehci-mx6.c b/drivers/usb/host/ehci-mx6.c index 54f868420d..bb48d0dea0 100644 --- a/drivers/usb/host/ehci-mx6.c +++ b/drivers/usb/host/ehci-mx6.c @@ -8,8 +8,9 @@ #include #include #include +#include #include -#include +#include #include #include #include @@ -123,6 +124,7 @@ static int usb_phy_enable(int index, struct usb_ehci *ehci) void __iomem *phy_reg; void __iomem *phy_ctrl; void __iomem *usb_cmd; + int ret; if (index >= ARRAY_SIZE(phy_bases)) return 0; @@ -133,12 +135,15 @@ static int usb_phy_enable(int index, struct usb_ehci *ehci) /* Stop then Reset */ clrbits_le32(usb_cmd, UCMD_RUN_STOP); - while (readl(usb_cmd) & UCMD_RUN_STOP) - ; + ret = wait_for_bit(__func__, usb_cmd, UCMD_RUN_STOP, false, 10000, + false); + if (ret) + return ret; setbits_le32(usb_cmd, UCMD_RESET); - while (readl(usb_cmd) & UCMD_RESET) - ; + ret = wait_for_bit(__func__, usb_cmd, UCMD_RESET, false, 10000, false); + if (ret) + return ret; /* Reset USBPHY module */ setbits_le32(phy_ctrl, USBPHY_CTRL_SFTRST); @@ -249,7 +254,7 @@ static void usb_oc_config(int index) } /** - * board_ehci_hcd_init - override usb phy mode + * board_usb_phy_mode - override usb phy mode * @port: usb host/otg port * * Target board specific, override usb_phy_mode. @@ -305,6 +310,7 @@ int ehci_hcd_init(int index, enum usb_init_type init, #endif struct usb_ehci *ehci = (struct usb_ehci *)(USB_BASE_ADDR + (controller_spacing * index)); + int ret; if (index > 3) return -EINVAL; @@ -312,7 +318,9 @@ int ehci_hcd_init(int index, enum usb_init_type init, mdelay(1); /* Do board specific initialization */ - board_ehci_hcd_init(index); + ret = board_ehci_hcd_init(index); + if (ret) + return ret; usb_power_config(index); usb_oc_config(index);