From: "Du, Alek" <alek.du@intel.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: "Du, Alek" <alek.du@intel.com>,
Ondrej Zary <linux@rainbow-software.org>,
Linux-pm mailing list <linux-pm@lists.linux-foundation.org>,
USB list <linux-usb@vger.kernel.org>,
Kernel development list <linux-kernel@vger.kernel.org>
Subject: Re: [linux-pm] [PATCH v2] [RFC] ehci: Disable wake on overcurrent (WKOC_E) and disconnect (WKDISC_E)
Date: Mon, 10 May 2010 10:25:57 +0800 [thread overview]
Message-ID: <20100510102557.0c30f15d@dxy2> (raw)
In-Reply-To: <6C44CD31806DCD4BB88546DAB7AFC9A201EB5A39FA@shsmsx502.ccr.corp.intel.com>
On Sat, 8 May 2010 10:00:59 +0800
"Du, Alek" <alek.du@intel.com> wrote:
> >On Fri, 7 May 2010, Du, Alek wrote:
> >
> >> Alan,
> >>
> >> As I tested, with the second patch, after entering phy low power mode, the
> >port cannot detect any USB devices that plugged in.
> >
> >Ooh, that's not good. It almost violates the EHCI spec (see the last
> >line on p.60 in table 4.4).
>
Alan,
The following patch (based on your previous two patches) works for me, could you
help to review and test on your machine? Basically, this will only affect those
"has_hostpc" HCDs.
Thanks,
Alek
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
index 004379b..a2d2fbe 100644
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
@@ -116,6 +116,17 @@ static void ehci_set_wakeup_flags(struct ehci_hcd *ehci)
u32 __iomem *reg = &ehci->regs->port_status[port];
u32 t1 = ehci_readl(ehci, reg) & ~PORT_RWC_BITS;
u32 t2 = t1 & ~PORT_WAKE_BITS;
+ u32 __iomem *hostpc_reg;
+ u32 temp;
+
+ /* clear phy low power mode first*/
+ if (ehci->has_hostpc) {
+ hostpc_reg = (u32 __iomem *)((u8 *)ehci->regs
+ + HOSTPC0 + 4 * (port & 0xff));
+ temp = ehci_readl(ehci, hostpc_reg);
+ ehci_writel(ehci, temp & ~HOSTPC_PHCD, hostpc_reg);
+ mdelay(5);
+ }
/* only enable appropriate wake bits, otherwise the
* hardware can not go phy low power mode. If a race
@@ -131,6 +142,16 @@ static void ehci_set_wakeup_flags(struct ehci_hcd *ehci)
port + 1, t1, t2);
}
ehci_writel(ehci, t2, reg);
+
+ /* enable phy low power mode again */
+ if (ehci->has_hostpc) {
+ temp = ehci_readl(ehci, hostpc_reg);
+ ehci_writel(ehci, temp | HOSTPC_PHCD, hostpc_reg);
+ temp = ehci_readl(ehci, hostpc_reg);
+ ehci_dbg(ehci, "Port%d phy low pwr mode %s\n",
+ port, (temp & HOSTPC_PHCD) ?
+ "succeeded" : "failed");
+ }
}
}
@@ -217,6 +238,14 @@ static int ehci_bus_suspend (struct usb_hcd *hcd)
u32 __iomem *hostpc_reg;
u32 t3;
+ if (t1 & PORT_CONNECT) {
+ t2 |= PORT_WKOC_E | PORT_WKDISC_E;
+ t2 &= ~PORT_WKCONN_E;
+ } else {
+ t2 |= PORT_WKOC_E | PORT_WKCONN_E;
+ t2 &= ~PORT_WKDISC_E;
+ }
+ ehci_writel(ehci, t2, reg);
hostpc_reg = (u32 __iomem *)((u8 *)ehci->regs
+ HOSTPC0 + 4 * (port & 0xff));
spin_unlock_irq(&ehci->lock);
next prev parent reply other threads:[~2010-05-10 2:28 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-27 13:23 ehci_hcd causes immediate wakeup from suspend to RAM or disk on Asus P4P800-VM Ondrej Zary
2010-04-27 14:22 ` [PATCH] ehci: Disable wake on overcurrent (WKOC_E) Ondrej Zary
2010-04-27 16:25 ` [PATCH v2] [RFC] ehci: Disable wake on overcurrent (WKOC_E) and disconnect (WKDISC_E) Ondrej Zary
2010-04-27 19:21 ` Alan Stern
2010-04-27 19:21 ` Alan Stern
2010-04-27 20:46 ` Ondrej Zary
2010-04-27 21:33 ` Greg KH
2010-04-27 21:33 ` Greg KH
2010-04-28 15:41 ` Alan Stern
2010-04-28 15:41 ` Alan Stern
2010-04-28 17:30 ` Ondrej Zary
2010-04-28 17:30 ` Ondrej Zary
2010-04-29 16:16 ` Alan Stern
2010-04-29 17:45 ` Alan Stern
2010-04-29 17:45 ` [linux-pm] " Alan Stern
2010-04-29 21:14 ` Ondrej Zary
2010-04-29 21:14 ` [linux-pm] " Ondrej Zary
2010-05-04 5:37 ` Du, Alek
2010-05-04 5:37 ` [linux-pm] " Du, Alek
2010-05-05 3:12 ` Du, Alek
2010-05-05 15:55 ` Alan Stern
2010-05-05 15:55 ` [linux-pm] " Alan Stern
2010-05-06 0:11 ` Du, Alek
2010-05-06 0:11 ` Du, Alek
2010-05-06 8:23 ` [linux-pm] " Du, Alek
2010-05-06 14:46 ` Alan Stern
2010-05-06 14:46 ` [linux-pm] " Alan Stern
2010-05-06 15:20 ` Du, Alek
2010-05-06 15:20 ` [linux-pm] " Du, Alek
2010-05-06 16:06 ` Alan Stern
2010-05-06 16:06 ` [linux-pm] " Alan Stern
2010-05-07 1:32 ` Du, Alek
2010-05-07 1:32 ` [linux-pm] " Du, Alek
2010-05-07 15:20 ` Alan Stern
2010-05-08 2:00 ` Du, Alek
2010-05-08 2:00 ` [linux-pm] " Du, Alek
[not found] ` <6C44CD31806DCD4BB88546DAB7AFC9A201EB5A39FA@shsmsx502.ccr.corp.intel.com>
2010-05-10 2:25 ` Du, Alek
2010-05-10 2:25 ` Du, Alek [this message]
2010-05-10 21:05 ` Alan Stern
2010-05-10 21:05 ` [linux-pm] " Alan Stern
2010-05-11 3:31 ` Du, Alek
2010-05-11 14:01 ` Alan Stern
2010-05-11 14:01 ` Alan Stern
2010-05-11 15:58 ` [linux-pm] " Alan Stern
2010-05-11 16:10 ` Du, Alek
2010-05-11 16:10 ` [linux-pm] " Du, Alek
2010-05-11 15:58 ` Alan Stern
2010-05-11 3:31 ` Du, Alek
2010-05-07 15:20 ` Alan Stern
2010-05-06 8:23 ` Du, Alek
2010-05-05 3:12 ` Du, Alek
2010-04-27 20:46 ` Ondrej Zary
2010-04-27 16:25 ` Ondrej Zary
2010-04-27 14:22 ` [PATCH] ehci: Disable wake on overcurrent (WKOC_E) Ondrej Zary
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100510102557.0c30f15d@dxy2 \
--to=alek.du@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@lists.linux-foundation.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@rainbow-software.org \
--cc=stern@rowland.harvard.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.