Mian Yousaf Kaukab db7ddd
From 594d6e7a9f529110fadd72b89edb87518e5856bd Mon Sep 17 00:00:00 2001
Mian Yousaf Kaukab db7ddd
From: William Wu <william.wu@rock-chips.com>
Mian Yousaf Kaukab db7ddd
Date: Fri, 2 Jun 2017 11:20:24 +0800
Mian Yousaf Kaukab db7ddd
Subject: [PATCH 33/86] phy: rockchip-inno-usb2: increase otg sm work first
Mian Yousaf Kaukab db7ddd
 schedule time
Mian Yousaf Kaukab db7ddd
Mian Yousaf Kaukab db7ddd
Git-commit: 5a74a8b74233f0e3c018d4e1c2a52e9393605f47
Mian Yousaf Kaukab db7ddd
Patch-mainline: v4.13-rc1
Mian Yousaf Kaukab db7ddd
References: fate#323912
Mian Yousaf Kaukab db7ddd
Mian Yousaf Kaukab db7ddd
In rockchip-inno-usb2 phy driver, we use otg_sm_work to
Mian Yousaf Kaukab db7ddd
dynamically manage power consumption for phy otg-port.
Mian Yousaf Kaukab db7ddd
If the otg-port works as peripheral mode and does not
Mian Yousaf Kaukab db7ddd
communicate with usb host, we will suspend phy.
Mian Yousaf Kaukab db7ddd
Mian Yousaf Kaukab db7ddd
But once suspend phy, the phy no longer has any internal
Mian Yousaf Kaukab db7ddd
clock running, include the utmi_clk which supplied for
Mian Yousaf Kaukab db7ddd
usb controller. So if we suspend phy before usb controller
Mian Yousaf Kaukab db7ddd
init, it will cause usb controller fail to initialize.
Mian Yousaf Kaukab db7ddd
Mian Yousaf Kaukab db7ddd
Specifically, without this patch, the observed order is:
Mian Yousaf Kaukab db7ddd
 1. unplug usb cable
Mian Yousaf Kaukab db7ddd
 2. start system, do dwc2 controller probe
Mian Yousaf Kaukab db7ddd
 3. dwc2_lowlevel_hw_enable()
Mian Yousaf Kaukab db7ddd
    - phy_init()
Mian Yousaf Kaukab db7ddd
     - rockchip_usb2phy_init()
Mian Yousaf Kaukab db7ddd
      - schedule otg_sm_work after 2s
Mian Yousaf Kaukab db7ddd
        put phy in suspend, and close utmi_clk
Mian Yousaf Kaukab db7ddd
 4. dwc2_hsotg_udc_start() - fail to initialize the usb core
Mian Yousaf Kaukab db7ddd
Mian Yousaf Kaukab db7ddd
Generally, dwc2_hsotg_udc_start() can be called within 5s
Mian Yousaf Kaukab db7ddd
after start system on Rockchip platform, so we increase the
Mian Yousaf Kaukab db7ddd
the first schedule delay time to 6s for otg_sm_work afer usb
Mian Yousaf Kaukab db7ddd
controller calls phy_init(), this can make sure that the usb
Mian Yousaf Kaukab db7ddd
controller completes initialization before phy enter suspend.
Mian Yousaf Kaukab db7ddd
Mian Yousaf Kaukab db7ddd
Signed-off-by: William Wu <william.wu@rock-chips.com>
Mian Yousaf Kaukab db7ddd
Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
Mian Yousaf Kaukab db7ddd
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Mian Yousaf Kaukab db7ddd
Signed-off-by: Mian Yousaf Kaukab <yousaf.kaukab@suse.com>
Mian Yousaf Kaukab db7ddd
---
Mian Yousaf Kaukab db7ddd
 drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 2 +-
Mian Yousaf Kaukab db7ddd
 1 file changed, 1 insertion(+), 1 deletion(-)
Mian Yousaf Kaukab db7ddd
Mian Yousaf Kaukab db7ddd
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
Mian Yousaf Kaukab db7ddd
index f12dc8db5230..d6e459d7094a 100644
Mian Yousaf Kaukab db7ddd
--- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
Mian Yousaf Kaukab db7ddd
+++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
Mian Yousaf Kaukab db7ddd
@@ -421,7 +421,7 @@ static int rockchip_usb2phy_init(struct phy *phy)
Mian Yousaf Kaukab db7ddd
 				goto out;
Mian Yousaf Kaukab db7ddd
 
Mian Yousaf Kaukab db7ddd
 			schedule_delayed_work(&rport->otg_sm_work,
Mian Yousaf Kaukab db7ddd
-					      OTG_SCHEDULE_DELAY);
Mian Yousaf Kaukab db7ddd
+					      OTG_SCHEDULE_DELAY * 3);
Mian Yousaf Kaukab db7ddd
 		} else {
Mian Yousaf Kaukab db7ddd
 			/* If OTG works in host only mode, do nothing. */
Mian Yousaf Kaukab db7ddd
 			dev_dbg(&rport->phy->dev, "mode %d\n", rport->mode);
Mian Yousaf Kaukab db7ddd
-- 
Mian Yousaf Kaukab db7ddd
2.11.0
Mian Yousaf Kaukab db7ddd