arm: tegra3: usb_phy: Fix warning message for lp1 resume
Preetham Chandru [Wed, 20 Jun 2012 10:25:21 +0000 (15:25 +0530)]
When the system resumes from lp1 for usb wake event we are seeing
the below warning message:
usb_phy_bringup_host_controller: timeout waiting for PORT_SUSPEND
The above warning message are seen only for lp1 resume and not for
lp0 resume.
This is happening only for lp1 resume because in
usb_phy_bringup_host_controller(), the port is suspended only
if we are not resuming from remote wakeup, in
case of lp0 remote_wake flag is set to true but not in case of lp1.
This is because in lp1, pmc is not responsible for waking the
system but it's the flow controller and hence UTMIP_WALK_PTR_VAL(inst)
will return 0 due to this remote wakeup flag was getting reset to
false.

Bug 985396
Signed-off-by: Preetham Chandru R <pchandru@nvidia.com>
Change-Id: I67fcf21d77cbc627315164b6e1c4f27b0b9ae2c3
Reviewed-on: http://git-master/r/110064
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>

arch/arm/mach-tegra/tegra3_usb_phy.c

index 07934fa..9f36413 100644 (file)
@@ -1643,10 +1643,18 @@ static void utmi_phy_restore_start(struct tegra_usb_phy *phy)
 
        DBG("%s(%d) inst:[%d]\n", __func__, __LINE__, phy->inst);
        val = readl(pmc_base + UTMIP_UHSIC_STATUS);
-       /* check whether we wake up from the remote resume */
+       /* Check whether we wake up from the remote resume.
+          For lp1 case, pmc is not responsible for waking the
+          system, it's the flow controller and hence
+          UTMIP_WALK_PTR_VAL(inst) will return 0.
+          Also, for lp1 case phy->remote_wakeup will already be set
+          to true by utmi_phy_irq() when the remote wakeup happens.
+          Hence change the logic in the else part to enter only
+          if phy->remote_wakeup is not set to true by the
+          utmi_phy_irq(). */
        if (UTMIP_WALK_PTR_VAL(inst) & val) {
                phy->remote_wakeup = true;
-       } else {
+       } else if(!phy->remote_wakeup) {
                if (!((UTMIP_USBON_VAL(phy->inst) |
                        UTMIP_USBOP_VAL(phy->inst)) & val)) {
                                utmip_phy_disable_pmc_bus_ctrl(phy);