[U-Boot] [PATCH] usb: ehci-mx5: Fix bus enumeration for DM case

Marek Vasut marex at denx.de
Thu Jun 20 20:53:58 UTC 2019


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 <marex at denx.de>
Cc: Abel Vesa <abel.vesa at nxp.com>
Cc: Adam Ford <aford173 at gmail.com>
Cc: Fabio Estevam <festevam at gmail.com>
Cc: Ludwig Zenz <lzenz at dh-electronics.com>
Cc: Peng Fan <peng.fan at nxp.com>
Cc: Stefano Babic <sbabic at denx.de>
Cc: Vagrant Cascadian <vagrant at debian.org>
---
 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



More information about the U-Boot mailing list