It is likely that the DM conversion of EHCI iMX5 driver was a derivative
of EHCI VF, however the conversion is incomplete and is missing the bind
workaround, which updates dev->seq number. Without this, all controllers
have dev->seq number 0 . Add this bind workaround into EHCI iMX5 driver
as well.

Signed-off-by: Marek Vasut <[email protected]>
Cc: Abel Vesa <[email protected]>
Cc: Adam Ford <[email protected]>
Cc: Fabio Estevam <[email protected]>
Cc: Ludwig Zenz <[email protected]>
Cc: Peng Fan <[email protected]>
Cc: Stefano Babic <[email protected]>
Cc: Vagrant Cascadian <[email protected]>
---
 drivers/usb/host/ehci-mx5.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/usb/host/ehci-mx5.c b/drivers/usb/host/ehci-mx5.c
index 0b32728c57..4db513f4e5 100644
--- a/drivers/usb/host/ehci-mx5.c
+++ b/drivers/usb/host/ehci-mx5.c
@@ -301,6 +301,22 @@ static int ehci_usb_ofdata_to_platdata(struct udevice *dev)
        return 0;
 }
 
+static int ehci_usb_bind(struct udevice *dev)
+{
+       static int num_controllers;
+
+       /*
+        * Without this hack, if we return ENODEV for USB Controller 0, on
+        * probe for the next controller, USB Controller 1 will be given a
+        * sequence number of 0. This conflicts with our requirement of
+        * sequence numbers while initialising the peripherals.
+        */
+       dev->req_seq = num_controllers;
+       num_controllers++;
+
+       return 0;
+}
+
 static int ehci_usb_probe(struct udevice *dev)
 {
        struct usb_platdata *plat = dev_get_platdata(dev);
@@ -362,6 +378,7 @@ U_BOOT_DRIVER(usb_mx5) = {
        .id     = UCLASS_USB,
        .of_match = mx5_usb_ids,
        .ofdata_to_platdata = ehci_usb_ofdata_to_platdata,
+       .bind   = ehci_usb_bind,
        .probe  = ehci_usb_probe,
        .remove = ehci_deregister,
        .ops    = &ehci_usb_ops,
-- 
2.20.1

_______________________________________________
U-Boot mailing list
[email protected]
https://lists.denx.de/listinfo/u-boot

Reply via email to