--- /dev/null
+From 90d28fb53d4a51299ff324dede015d5cb11b88a2 Mon Sep 17 00:00:00 2001
+From: Chunfeng Yun <chunfeng.yun@mediatek.com>
+Date: Sat, 10 Apr 2021 09:20:45 +0800
+Subject: usb: core: reduce power-on-good delay time of root hub
+
+From: Chunfeng Yun <chunfeng.yun@mediatek.com>
+
+commit 90d28fb53d4a51299ff324dede015d5cb11b88a2 upstream.
+
+Return the exactly delay time given by root hub descriptor,
+this helps to reduce resume time etc.
+
+Due to the root hub descriptor is usually provided by the host
+controller driver, if there is compatibility for a root hub,
+we can fix it easily without affect other root hub
+
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
+Link: https://lore.kernel.org/r/1618017645-12259-1-git-send-email-chunfeng.yun@mediatek.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/usb/core/hub.h | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/core/hub.h
++++ b/drivers/usb/core/hub.h
+@@ -148,8 +148,10 @@ static inline unsigned hub_power_on_good
+ {
+ unsigned delay = hub->descriptor->bPwrOn2PwrGood * 2;
+
+- /* Wait at least 100 msec for power to become stable */
+- return max(delay, 100U);
++ if (!hub->hdev->parent) /* root hub */
++ return delay;
++ else /* Wait at least 100 msec for power to become stable */
++ return max(delay, 100U);
+ }
+
+ static inline int hub_port_debounce_be_connected(struct usb_hub *hub,