summaryrefslogtreecommitdiff
path: root/payloads/libpayload/drivers
diff options
context:
space:
mode:
authorRaul E Rangel <rrangel@chromium.org>2018-07-17 13:27:44 -0600
committerMartin Roth <martinroth@google.com>2018-07-17 20:38:46 +0000
commit1b43ad7149ebae684b0cbd08d293117a7304249d (patch)
tree2fb0f96517574349ba9e13a37353ec9f976e87f0 /payloads/libpayload/drivers
parent5fed693a52ed9746900ce58ec12a2b245f08202e (diff)
libpayload/generic_hub: Detect port disconnect after reset
If a port disconnects after a reset we should abort any initialization on the port. This might mean the device has re-enumerated as a 3.0 device so the hub should be scanned again. BUG=b:76831439 TEST=Verified USB-C devices that get detected correctly in depthcharge. Change-Id: Iad899544684312df1bef08d69b5c7f41eac3a21c Signed-off-by: Raul E Rangel <rrangel@chromium.org> Reviewed-on: https://review.coreboot.org/27477 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
Diffstat (limited to 'payloads/libpayload/drivers')
-rw-r--r--payloads/libpayload/drivers/usb/generic_hub.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/payloads/libpayload/drivers/usb/generic_hub.c b/payloads/libpayload/drivers/usb/generic_hub.c
index 9f8670597e..9d444ee792 100644
--- a/payloads/libpayload/drivers/usb/generic_hub.c
+++ b/payloads/libpayload/drivers/usb/generic_hub.c
@@ -157,6 +157,15 @@ generic_hub_attach_dev(usbdev_t *const dev, const int port)
if (hub->ops->reset_port) {
if (hub->ops->reset_port(dev, port) < 0)
return -1;
+
+ if (!hub->ops->port_connected(dev, port)) {
+ usb_debug(
+ "generic_hub: Port %d disconnected after "
+ "reset. Possibly upgraded, rescan required.\n",
+ port);
+ return 0;
+ }
+
/* after reset the port will be enabled automatically */
const int ret = generic_hub_wait_for_port(
/* time out after 1,000 * 10us = 10ms */