All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] xhci: EHCI/xHCI ports switching on Intense-PC.
@ 2012-07-16 16:46 Denis Turischev
  2012-07-17  4:54 ` Sarah Sharp
  2012-07-17 12:20 ` [PATCH] xhci: EHCI/xHCI ports switching on Intense-PC Sergei Shtylyov
  0 siblings, 2 replies; 21+ messages in thread
From: Denis Turischev @ 2012-07-16 16:46 UTC (permalink / raw)
  To: Sarah Sharp; +Cc: linux-kernel, linux-usb, Greg Kroah-Hartman

Intense-PC is Compulab's mini-desktop with Intel Panther Point
chipset.

Unconditional ports switching provided by function
usb_enable_xhci_ports() leads to surprising results, after shutdown
system powered-on again after a few seconds. On Windows power
related problems were not observed.

The patch avoids ports switching for Intense-PC.

Signed-off-by: Denis Turischev <denis@compulab.co.il>
---
 drivers/usb/host/pci-quirks.c |    7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
index df0828c..6f72593 100644
--- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c
@@ -759,6 +759,13 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
 {
 	u32		ports_available;

+	const char *brd_name;
+	brd_name = dmi_get_system_info(DMI_BOARD_NAME);
+
+	/* quirk for Compulab's Intense-PC board */
+	if (brd_name && strstr(brd_name, "Intense-PC"))
+		return;
+
 	/* Don't switchover the ports if the user hasn't compiled the xHCI
 	 * driver.  Otherwise they will see "dead" USB ports that don't power
 	 * the devices.
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH] xhci: EHCI/xHCI ports switching on Intense-PC.
  2012-07-16 16:46 [PATCH] xhci: EHCI/xHCI ports switching on Intense-PC Denis Turischev
@ 2012-07-17  4:54 ` Sarah Sharp
  2012-07-18  6:57   ` Denis Turischev
  2012-07-17 12:20 ` [PATCH] xhci: EHCI/xHCI ports switching on Intense-PC Sergei Shtylyov
  1 sibling, 1 reply; 21+ messages in thread
From: Sarah Sharp @ 2012-07-17  4:54 UTC (permalink / raw)
  To: Denis Turischev; +Cc: linux-kernel, linux-usb, Greg Kroah-Hartman

On Mon, Jul 16, 2012 at 07:46:06PM +0300, Denis Turischev wrote:
> Intense-PC is Compulab's mini-desktop with Intel Panther Point
> chipset.
> 
> Unconditional ports switching provided by function
> usb_enable_xhci_ports() leads to surprising results, after shutdown
> system powered-on again after a few seconds. On Windows power
> related problems were not observed.

Do you have wake on lan enabled in the BIOS?  I have heard reports from
other users that this is a BIOS bug triggered by WOL.

> The patch avoids ports switching for Intense-PC.
> 
> Signed-off-by: Denis Turischev <denis@compulab.co.il>
> ---
>  drivers/usb/host/pci-quirks.c |    7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
> index df0828c..6f72593 100644
> --- a/drivers/usb/host/pci-quirks.c
> +++ b/drivers/usb/host/pci-quirks.c
> @@ -759,6 +759,13 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
>  {
>  	u32		ports_available;
> 
> +	const char *brd_name;
> +	brd_name = dmi_get_system_info(DMI_BOARD_NAME);
> +
> +	/* quirk for Compulab's Intense-PC board */
> +	if (brd_name && strstr(brd_name, "Intense-PC"))
> +		return;
> +

No, this fix is not acceptable.  You won't get USB 3.0 speeds if the
ports are not switched over.  Now, we can add a quirk to the xHCI
shutdown function to switch the ports back to EHCI on shutdown.  That
might not trigger the BIOS bug.

Sarah Sharp

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] xhci: EHCI/xHCI ports switching on Intense-PC.
  2012-07-16 16:46 [PATCH] xhci: EHCI/xHCI ports switching on Intense-PC Denis Turischev
  2012-07-17  4:54 ` Sarah Sharp
@ 2012-07-17 12:20 ` Sergei Shtylyov
  1 sibling, 0 replies; 21+ messages in thread
From: Sergei Shtylyov @ 2012-07-17 12:20 UTC (permalink / raw)
  To: Denis Turischev; +Cc: Sarah Sharp, linux-kernel, linux-usb, Greg Kroah-Hartman

Hello.

On 16-07-2012 20:46, Denis Turischev wrote:

> Intense-PC is Compulab's mini-desktop with Intel Panther Point
> chipset.

> Unconditional ports switching provided by function
> usb_enable_xhci_ports() leads to surprising results, after shutdown
> system powered-on again after a few seconds. On Windows power
> related problems were not observed.

> The patch avoids ports switching for Intense-PC.

> Signed-off-by: Denis Turischev <denis@compulab.co.il>
> ---
>   drivers/usb/host/pci-quirks.c |    7 +++++++
>   1 file changed, 7 insertions(+)

> diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
> index df0828c..6f72593 100644
> --- a/drivers/usb/host/pci-quirks.c
> +++ b/drivers/usb/host/pci-quirks.c
> @@ -759,6 +759,13 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
>   {
>   	u32		ports_available;
>
> +	const char *brd_name;

    Group this declaration with the above one please.

> +	brd_name = dmi_get_system_info(DMI_BOARD_NAME);

    Could be an initializer...

WBR, Sergei

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] xhci: EHCI/xHCI ports switching on Intense-PC.
  2012-07-17  4:54 ` Sarah Sharp
@ 2012-07-18  6:57   ` Denis Turischev
  2012-07-18 16:59     ` Sarah Sharp
  0 siblings, 1 reply; 21+ messages in thread
From: Denis Turischev @ 2012-07-18  6:57 UTC (permalink / raw)
  To: Sarah Sharp; +Cc: linux-kernel, linux-usb, Greg Kroah-Hartman

On 07/17/2012 07:54 AM, Sarah Sharp wrote:
> On Mon, Jul 16, 2012 at 07:46:06PM +0300, Denis Turischev wrote:
>> Intense-PC is Compulab's mini-desktop with Intel Panther Point
>> chipset.
>>
>> Unconditional ports switching provided by function
>> usb_enable_xhci_ports() leads to surprising results, after shutdown
>> system powered-on again after a few seconds. On Windows power
>> related problems were not observed.
> 
> Do you have wake on lan enabled in the BIOS?  I have heard reports from
> other users that this is a BIOS bug triggered by WOL.

Bug appears with WOL disabled too, moreover, it appears with PCH LAN
disabled at all in the BIOS.

> 
>> The patch avoids ports switching for Intense-PC.
>>
>> Signed-off-by: Denis Turischev <denis@compulab.co.il>
>> ---
>>  drivers/usb/host/pci-quirks.c |    7 +++++++
>>  1 file changed, 7 insertions(+)
>>
>> diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
>> index df0828c..6f72593 100644
>> --- a/drivers/usb/host/pci-quirks.c
>> +++ b/drivers/usb/host/pci-quirks.c
>> @@ -759,6 +759,13 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
>>  {
>>  	u32		ports_available;
>>
>> +	const char *brd_name;
>> +	brd_name = dmi_get_system_info(DMI_BOARD_NAME);
>> +
>> +	/* quirk for Compulab's Intense-PC board */
>> +	if (brd_name && strstr(brd_name, "Intense-PC"))
>> +		return;
>> +
> 
> No, this fix is not acceptable.  You won't get USB 3.0 speeds if the
> ports are not switched over.  Now, we can add a quirk to the xHCI
> shutdown function to switch the ports back to EHCI on shutdown.  That
> might not trigger the BIOS bug.

Yes, switching back to EHCI in xhci_shutdown() solves the problem.

I suppose to do something like this in xhci_shutdown:
	pdev = to_pci_dev(hcd->self.controller);

	if (usb_is_intel_switchable_xhci(pdev)){
		brd_name = dmi_get_system_info(DMI_BOARD_NAME);

		/* quirk for Compulab's Intense-PC board */
		if (brd_name && strstr(brd_name, "Intense-PC"))
			usb_disable_xhci_ports(pdev);
	}

Is it ok?

May be it worth to disable xhci ports for all intel switchable
devices, not only for Intense-PC?


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] xhci: EHCI/xHCI ports switching on Intense-PC.
  2012-07-18  6:57   ` Denis Turischev
@ 2012-07-18 16:59     ` Sarah Sharp
  2012-07-23 11:46       ` [PATCH 1/2] xhci: provide usb_disable_xhci_ports function for Intel chipsets Denis Turischev
  2012-07-23 11:46       ` [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC Denis Turischev
  0 siblings, 2 replies; 21+ messages in thread
From: Sarah Sharp @ 2012-07-18 16:59 UTC (permalink / raw)
  To: Denis Turischev; +Cc: linux-kernel, linux-usb, Greg Kroah-Hartman

On Wed, Jul 18, 2012 at 09:57:30AM +0300, Denis Turischev wrote:
> On 07/17/2012 07:54 AM, Sarah Sharp wrote:
> > On Mon, Jul 16, 2012 at 07:46:06PM +0300, Denis Turischev wrote:
> >> Intense-PC is Compulab's mini-desktop with Intel Panther Point
> >> chipset.
> >>
> >> Unconditional ports switching provided by function
> >> usb_enable_xhci_ports() leads to surprising results, after shutdown
> >> system powered-on again after a few seconds. On Windows power
> >> related problems were not observed.
> > 
> > Do you have wake on lan enabled in the BIOS?  I have heard reports from
> > other users that this is a BIOS bug triggered by WOL.
> 
> Bug appears with WOL disabled too, moreover, it appears with PCH LAN
> disabled at all in the BIOS.

Hmm, ok, not the same bug then.

> > No, this fix is not acceptable.  You won't get USB 3.0 speeds if the
> > ports are not switched over.  Now, we can add a quirk to the xHCI
> > shutdown function to switch the ports back to EHCI on shutdown.  That
> > might not trigger the BIOS bug.
> 
> Yes, switching back to EHCI in xhci_shutdown() solves the problem.

Ok, good to know.

The other thing to try would be to turn off all "wake on" bits in the
port status registers in xhci_shutdown().  That might cause the xHCI
host to stop generating spurious PMEs.

It would actually be good to check that the xHCI host is the cause of
the PME that reboots the system.  I'm pretty sure there's a sysfs or
proc file that shows where the PMEs are coming from, but I can't
remember where it is off the top of my head.

> I suppose to do something like this in xhci_shutdown:
> 	pdev = to_pci_dev(hcd->self.controller);
> 
> 	if (usb_is_intel_switchable_xhci(pdev)){
> 		brd_name = dmi_get_system_info(DMI_BOARD_NAME);
> 
> 		/* quirk for Compulab's Intense-PC board */
> 		if (brd_name && strstr(brd_name, "Intense-PC"))
> 			usb_disable_xhci_ports(pdev);
> 	}
> 
> Is it ok?
> 
> May be it worth to disable xhci ports for all intel switchable
> devices, not only for Intense-PC?

I'm not sure.  I'm still talking with our hardware and BIOS team to
determine which boards have this issue.  I suspect it's more than just
your board.

The only thing I wonder is if the PCI quirks will run when the xHCI
driver is reloaded.  If not, the ports will never be switched back to
xHCI.

We might need to add a port switch back to xHCI in the xhci_init
function.  That means if someone unloads the xHCI driver and reloads it,
their devices will appear under EHCI, and then disconnect and switch
over to xHCI.

However, I suppose that's the same as what happens if you unload the
EHCI driver on a system with an OHCI or UHCI companion controller.  So I
think it should be OK to attempt to switchover the ports in xhci_init.

Sarah Sharp

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 1/2] xhci: provide usb_disable_xhci_ports function for Intel chipsets.
  2012-07-18 16:59     ` Sarah Sharp
@ 2012-07-23 11:46       ` Denis Turischev
  2012-07-23 14:45         ` Sergei Shtylyov
  2012-07-23 11:46       ` [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC Denis Turischev
  1 sibling, 1 reply; 21+ messages in thread
From: Denis Turischev @ 2012-07-23 11:46 UTC (permalink / raw)
  To: Sarah Sharp; +Cc: linux-kernel, linux-usb, Greg Kroah-Hartman

Some devices with Intel Panther Point chipset may require switchover
usb ports from XHCI back to EHCI controller before shutdown.
Overwise various BIOS bugs related to power management may be
triggered.

Signed-off-by: Denis Turischev <denis@compulab.co.il>
---
 drivers/usb/host/pci-quirks.c |   14 ++++++++++++++
 drivers/usb/host/pci-quirks.h |    1 +
 2 files changed, 15 insertions(+)

diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
index df0828c..b19a84a 100644
--- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c
@@ -800,6 +800,20 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
 }
 EXPORT_SYMBOL_GPL(usb_enable_xhci_ports);

+void usb_disable_xhci_ports(struct pci_dev *xhci_pdev)
+{
+	u32		ports_available;
+
+	ports_available = 0x0;
+
+	pci_write_config_dword(xhci_pdev, USB_INTEL_USB3_PSSEN,
+			cpu_to_le32(ports_available));
+
+	pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR,
+			cpu_to_le32(ports_available));
+}
+EXPORT_SYMBOL_GPL(usb_disable_xhci_ports);
+
 /**
  * PCI Quirks for xHCI.
  *
diff --git a/drivers/usb/host/pci-quirks.h b/drivers/usb/host/pci-quirks.h
index b1002a8..ef004a5 100644
--- a/drivers/usb/host/pci-quirks.h
+++ b/drivers/usb/host/pci-quirks.h
@@ -10,6 +10,7 @@ void usb_amd_quirk_pll_disable(void);
 void usb_amd_quirk_pll_enable(void);
 bool usb_is_intel_switchable_xhci(struct pci_dev *pdev);
 void usb_enable_xhci_ports(struct pci_dev *xhci_pdev);
+void usb_disable_xhci_ports(struct pci_dev *xhci_pdev);
 #else
 static inline void usb_amd_quirk_pll_disable(void) {}
 static inline void usb_amd_quirk_pll_enable(void) {}
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC.
  2012-07-18 16:59     ` Sarah Sharp
  2012-07-23 11:46       ` [PATCH 1/2] xhci: provide usb_disable_xhci_ports function for Intel chipsets Denis Turischev
@ 2012-07-23 11:46       ` Denis Turischev
  2012-07-23 17:44         ` Sarah Sharp
  2012-08-07 17:35         ` Sarah Sharp
  1 sibling, 2 replies; 21+ messages in thread
From: Denis Turischev @ 2012-07-23 11:46 UTC (permalink / raw)
  To: Sarah Sharp; +Cc: linux-kernel, linux-usb, Greg Kroah-Hartman

Intense-PC is Compulab's mini-desktop with Intel Panther Point
chipset.

Unconditional switchover to xHCI provided by function
usb_enable_xhci_ports() leads to surprising results, after shutdown
system powered-on again after a few seconds. On Windows power
related problems were not observed. Switching back to EHCI solves
the problem.

The patch switches usb ports back to EHCI during xhci shutdown
for Intense-PC.

Signed-off-by: Denis Turischev <denis@compulab.co.il>
---
 drivers/usb/host/xhci.c |   14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index a979cd0..541efaa 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -26,6 +26,8 @@
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/slab.h>
+#include <linux/dmi.h>
+#include "pci-quirks.h"

 #include "xhci.h"

@@ -656,8 +658,20 @@ void xhci_stop(struct usb_hcd *hcd)
  */
 void xhci_shutdown(struct usb_hcd *hcd)
 {
+	struct pci_dev *pdev;
+	const char *brd_name;
 	struct xhci_hcd *xhci = hcd_to_xhci(hcd);

+	pdev = to_pci_dev(hcd->self.controller);
+
+	if (usb_is_intel_switchable_xhci(pdev)) {
+		brd_name = dmi_get_system_info(DMI_BOARD_NAME);
+
+		/* quirk for Compulab's Intense-PC board */
+		if (brd_name && strstr(brd_name, "Intense-PC"))
+			usb_disable_xhci_ports(pdev);
+	}
+
 	spin_lock_irq(&xhci->lock);
 	xhci_halt(xhci);
 	spin_unlock_irq(&xhci->lock);
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/2] xhci: provide usb_disable_xhci_ports function for Intel chipsets.
  2012-07-23 11:46       ` [PATCH 1/2] xhci: provide usb_disable_xhci_ports function for Intel chipsets Denis Turischev
@ 2012-07-23 14:45         ` Sergei Shtylyov
  2012-07-23 15:59           ` [PATCH 1/2 v2] " Denis Turischev
  0 siblings, 1 reply; 21+ messages in thread
From: Sergei Shtylyov @ 2012-07-23 14:45 UTC (permalink / raw)
  To: Denis Turischev; +Cc: Sarah Sharp, linux-kernel, linux-usb, Greg Kroah-Hartman

Hello.

On 07/23/2012 03:46 PM, Denis Turischev wrote:

> Some devices with Intel Panther Point chipset may require switchover
> usb ports from XHCI back to EHCI controller before shutdown.
> Overwise various BIOS bugs related to power management may be
> triggered.

> Signed-off-by: Denis Turischev <denis@compulab.co.il>
> ---
>  drivers/usb/host/pci-quirks.c |   14 ++++++++++++++
>  drivers/usb/host/pci-quirks.h |    1 +
>  2 files changed, 15 insertions(+)

> diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
> index df0828c..b19a84a 100644
> --- a/drivers/usb/host/pci-quirks.c
> +++ b/drivers/usb/host/pci-quirks.c
> @@ -800,6 +800,20 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
>  }
>  EXPORT_SYMBOL_GPL(usb_enable_xhci_ports);
> 
> +void usb_disable_xhci_ports(struct pci_dev *xhci_pdev)
> +{
> +	u32		ports_available;
> +
> +	ports_available = 0x0;

   Why not make it an initializer? And why do you need the variable at all?

> +
> +	pci_write_config_dword(xhci_pdev, USB_INTEL_USB3_PSSEN,
> +			cpu_to_le32(ports_available));

   cpu_to_le32() not needed.

> +
> +	pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR,
> +			cpu_to_le32(ports_available));
> +}
> +EXPORT_SYMBOL_GPL(usb_disable_xhci_ports);
> +
>  /**
>   * PCI Quirks for xHCI.
>   *

WBR, Sergei


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 1/2 v2] xhci: provide usb_disable_xhci_ports function for Intel chipsets.
  2012-07-23 14:45         ` Sergei Shtylyov
@ 2012-07-23 15:59           ` Denis Turischev
  0 siblings, 0 replies; 21+ messages in thread
From: Denis Turischev @ 2012-07-23 15:59 UTC (permalink / raw)
  To: Sergei Shtylyov; +Cc: Sarah Sharp, linux-kernel, linux-usb, Greg Kroah-Hartman

Some devices with Intel Panther Point chipset may require switchover
usb ports from XHCI back to EHCI controller before shutdown.
Otherwise various BIOS bugs related to power management may be
triggered.

v2: deleted unnecessary variables.

Signed-off-by: Denis Turischev <denis@compulab.co.il>
---
 drivers/usb/host/pci-quirks.c |    7 +++++++
 drivers/usb/host/pci-quirks.h |    1 +
 2 files changed, 8 insertions(+)

diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
index df0828c..c5e9e4a 100644
--- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c
@@ -800,6 +800,13 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
 }
 EXPORT_SYMBOL_GPL(usb_enable_xhci_ports);

+void usb_disable_xhci_ports(struct pci_dev *xhci_pdev)
+{
+	pci_write_config_dword(xhci_pdev, USB_INTEL_USB3_PSSEN, 0x0);
+	pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR, 0x0);
+}
+EXPORT_SYMBOL_GPL(usb_disable_xhci_ports);
+
 /**
  * PCI Quirks for xHCI.
  *
diff --git a/drivers/usb/host/pci-quirks.h b/drivers/usb/host/pci-quirks.h
index b1002a8..ef004a5 100644
--- a/drivers/usb/host/pci-quirks.h
+++ b/drivers/usb/host/pci-quirks.h
@@ -10,6 +10,7 @@ void usb_amd_quirk_pll_disable(void);
 void usb_amd_quirk_pll_enable(void);
 bool usb_is_intel_switchable_xhci(struct pci_dev *pdev);
 void usb_enable_xhci_ports(struct pci_dev *xhci_pdev);
+void usb_disable_xhci_ports(struct pci_dev *xhci_pdev);
 #else
 static inline void usb_amd_quirk_pll_disable(void) {}
 static inline void usb_amd_quirk_pll_enable(void) {}
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC.
  2012-07-23 11:46       ` [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC Denis Turischev
@ 2012-07-23 17:44         ` Sarah Sharp
  2012-07-24  8:50           ` Denis Turischev
  2012-08-07 17:35         ` Sarah Sharp
  1 sibling, 1 reply; 21+ messages in thread
From: Sarah Sharp @ 2012-07-23 17:44 UTC (permalink / raw)
  To: Denis Turischev; +Cc: linux-kernel, linux-usb, Greg Kroah-Hartman

Did you try disabling the wake on bits in the port status registers?  I
would prefer that solution if it works.

Otherwise this patchset looks fine.  I'll work with the hardware folks
and see if this is exposed on other boards.  Also, this is not a BIOS
bug, but a hardware issue that can be worked around in BIOS.  So I might
edit your description on the first patch a bit when I submit it to Greg.

Sarah Sharp

On Mon, Jul 23, 2012 at 02:46:32PM +0300, Denis Turischev wrote:
> Intense-PC is Compulab's mini-desktop with Intel Panther Point
> chipset.
> 
> Unconditional switchover to xHCI provided by function
> usb_enable_xhci_ports() leads to surprising results, after shutdown
> system powered-on again after a few seconds. On Windows power
> related problems were not observed. Switching back to EHCI solves
> the problem.
> 
> The patch switches usb ports back to EHCI during xhci shutdown
> for Intense-PC.
> 
> Signed-off-by: Denis Turischev <denis@compulab.co.il>
> ---
>  drivers/usb/host/xhci.c |   14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
> index a979cd0..541efaa 100644
> --- a/drivers/usb/host/xhci.c
> +++ b/drivers/usb/host/xhci.c
> @@ -26,6 +26,8 @@
>  #include <linux/module.h>
>  #include <linux/moduleparam.h>
>  #include <linux/slab.h>
> +#include <linux/dmi.h>
> +#include "pci-quirks.h"
> 
>  #include "xhci.h"
> 
> @@ -656,8 +658,20 @@ void xhci_stop(struct usb_hcd *hcd)
>   */
>  void xhci_shutdown(struct usb_hcd *hcd)
>  {
> +	struct pci_dev *pdev;
> +	const char *brd_name;
>  	struct xhci_hcd *xhci = hcd_to_xhci(hcd);
> 
> +	pdev = to_pci_dev(hcd->self.controller);
> +
> +	if (usb_is_intel_switchable_xhci(pdev)) {
> +		brd_name = dmi_get_system_info(DMI_BOARD_NAME);
> +
> +		/* quirk for Compulab's Intense-PC board */
> +		if (brd_name && strstr(brd_name, "Intense-PC"))
> +			usb_disable_xhci_ports(pdev);
> +	}
> +
>  	spin_lock_irq(&xhci->lock);
>  	xhci_halt(xhci);
>  	spin_unlock_irq(&xhci->lock);
> -- 
> 1.7.9.5
> 

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC.
  2012-07-23 17:44         ` Sarah Sharp
@ 2012-07-24  8:50           ` Denis Turischev
  2012-07-24 19:46             ` Sarah Sharp
  0 siblings, 1 reply; 21+ messages in thread
From: Denis Turischev @ 2012-07-24  8:50 UTC (permalink / raw)
  To: Sarah Sharp; +Cc: linux-kernel, linux-usb, Greg Kroah-Hartman

On 07/23/2012 08:44 PM, Sarah Sharp wrote:
> Did you try disabling the wake on bits in the port status registers?  I
> would prefer that solution if it works.
No, I didn't. Why we need to disable wake on capabilities?
> 
> Otherwise this patchset looks fine.  I'll work with the hardware folks
> and see if this is exposed on other boards.  Also, this is not a BIOS
> bug, but a hardware issue that can be worked around in BIOS.  So I might
> edit your description on the first patch a bit when I submit it to Greg.
Of course, please edit it if required.
> 
> Sarah Sharp
> 
> On Mon, Jul 23, 2012 at 02:46:32PM +0300, Denis Turischev wrote:
>> Intense-PC is Compulab's mini-desktop with Intel Panther Point
>> chipset.
>>
>> Unconditional switchover to xHCI provided by function
>> usb_enable_xhci_ports() leads to surprising results, after shutdown
>> system powered-on again after a few seconds. On Windows power
>> related problems were not observed. Switching back to EHCI solves
>> the problem.
>>
>> The patch switches usb ports back to EHCI during xhci shutdown
>> for Intense-PC.
>>
>> Signed-off-by: Denis Turischev <denis@compulab.co.il>
>> ---
>>  drivers/usb/host/xhci.c |   14 ++++++++++++++
>>  1 file changed, 14 insertions(+)
>>
>> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
>> index a979cd0..541efaa 100644
>> --- a/drivers/usb/host/xhci.c
>> +++ b/drivers/usb/host/xhci.c
>> @@ -26,6 +26,8 @@
>>  #include <linux/module.h>
>>  #include <linux/moduleparam.h>
>>  #include <linux/slab.h>
>> +#include <linux/dmi.h>
>> +#include "pci-quirks.h"
>>
>>  #include "xhci.h"
>>
>> @@ -656,8 +658,20 @@ void xhci_stop(struct usb_hcd *hcd)
>>   */
>>  void xhci_shutdown(struct usb_hcd *hcd)
>>  {
>> +	struct pci_dev *pdev;
>> +	const char *brd_name;
>>  	struct xhci_hcd *xhci = hcd_to_xhci(hcd);
>>
>> +	pdev = to_pci_dev(hcd->self.controller);
>> +
>> +	if (usb_is_intel_switchable_xhci(pdev)) {
>> +		brd_name = dmi_get_system_info(DMI_BOARD_NAME);
>> +
>> +		/* quirk for Compulab's Intense-PC board */
>> +		if (brd_name && strstr(brd_name, "Intense-PC"))
>> +			usb_disable_xhci_ports(pdev);
>> +	}
>> +
>>  	spin_lock_irq(&xhci->lock);
>>  	xhci_halt(xhci);
>>  	spin_unlock_irq(&xhci->lock);
>> -- 
>> 1.7.9.5
>>


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC.
  2012-07-24  8:50           ` Denis Turischev
@ 2012-07-24 19:46             ` Sarah Sharp
  2012-07-30 22:34               ` Sarah Sharp
  0 siblings, 1 reply; 21+ messages in thread
From: Sarah Sharp @ 2012-07-24 19:46 UTC (permalink / raw)
  To: Denis Turischev; +Cc: linux-kernel, linux-usb, Greg Kroah-Hartman

On Tue, Jul 24, 2012 at 11:50:42AM +0300, Denis Turischev wrote:
> On 07/23/2012 08:44 PM, Sarah Sharp wrote:
> > Did you try disabling the wake on bits in the port status registers?  I
> > would prefer that solution if it works.
> No, I didn't. Why we need to disable wake on capabilities?

My theory was that the xHCI host controller was waking up the system
because one of the wake on bits was set.  But you said that didn't help,
so we'll just switch the ports over on shutdown.

Sarah Sharp

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC.
  2012-07-24 19:46             ` Sarah Sharp
@ 2012-07-30 22:34               ` Sarah Sharp
  2012-07-31  4:49                 ` Oliver Neukum
  2012-07-31 10:42                 ` Denis Turischev
  0 siblings, 2 replies; 21+ messages in thread
From: Sarah Sharp @ 2012-07-30 22:34 UTC (permalink / raw)
  To: Denis Turischev; +Cc: linux-kernel, linux-usb, Greg Kroah-Hartman

Hi Denis,

Can you send me the output of `sudo dmidecode`?  I'd like to see if I
can make a more general patch apply to the Intense-PC.

Sarah Sharp

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC.
  2012-07-30 22:34               ` Sarah Sharp
@ 2012-07-31  4:49                 ` Oliver Neukum
  2012-07-31 17:06                   ` Sarah Sharp
  2012-07-31 10:42                 ` Denis Turischev
  1 sibling, 1 reply; 21+ messages in thread
From: Oliver Neukum @ 2012-07-31  4:49 UTC (permalink / raw)
  To: Sarah Sharp; +Cc: Denis Turischev, linux-kernel, linux-usb, Greg Kroah-Hartman

On Monday 30 July 2012 15:34:06 Sarah Sharp wrote:
> Hi Denis,
> 
> Can you send me the output of `sudo dmidecode`?  I'd like to see if I
> can make a more general patch apply to the Intense-PC.

As this is for shutdown, why not all systems?

	Regards
		Oliver


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC.
  2012-07-30 22:34               ` Sarah Sharp
  2012-07-31  4:49                 ` Oliver Neukum
@ 2012-07-31 10:42                 ` Denis Turischev
  1 sibling, 0 replies; 21+ messages in thread
From: Denis Turischev @ 2012-07-31 10:42 UTC (permalink / raw)
  To: Sarah Sharp; +Cc: linux-kernel, linux-usb, Greg Kroah-Hartman

[-- Attachment #1: Type: text/plain, Size: 278 bytes --]

Hi Sarah,
Attached dmidecode output of Intense-PC.

Denis Turischev


On 07/31/2012 01:34 AM, Sarah Sharp wrote:
> Hi Denis,
> 
> Can you send me the output of `sudo dmidecode`?  I'd like to see if I
> can make a more general patch apply to the Intense-PC.
> 
> Sarah Sharp
> 


[-- Attachment #2: dmidecode.intense-PC --]
[-- Type: text/plain, Size: 19893 bytes --]

# dmidecode 2.11
SMBIOS 2.7 present.
62 structures occupying 2533 bytes.
Table at 0x000E0840.

Handle 0x0004, DMI type 4, 42 bytes
Processor Information
	Socket Designation: CPU Socket - soldered on-board
	Type: Central Processor
	Family: Core i7
	Manufacturer: Intel(R) Corporation
	ID: A5 06 03 00 FF FB EB BF
	Signature: Type 0, Family 6, Model 58, Stepping 5
	Flags:
		FPU (Floating-point unit on-chip)
		VME (Virtual mode extension)
		DE (Debugging extension)
		PSE (Page size extension)
		TSC (Time stamp counter)
		MSR (Model specific registers)
		PAE (Physical address extension)
		MCE (Machine check exception)
		CX8 (CMPXCHG8 instruction supported)
		APIC (On-chip APIC hardware supported)
		SEP (Fast system call)
		MTRR (Memory type range registers)
		PGE (Page global enable)
		MCA (Machine check architecture)
		CMOV (Conditional move instruction supported)
		PAT (Page attribute table)
		PSE-36 (36-bit page size extension)
		CLFSH (CLFLUSH instruction supported)
		DS (Debug store)
		ACPI (ACPI supported)
		MMX (MMX technology supported)
		FXSR (FXSAVE and FXSTOR instructions supported)
		SSE (Streaming SIMD extensions)
		SSE2 (Streaming SIMD extensions 2)
		SS (Self-snoop)
		HTT (Multi-threading)
		TM (Thermal monitor supported)
		PBE (Pending break enabled)
	Version: Genuine Intel(R) CPU  @ 1.50GHz
	Voltage: 0.8 V
	External Clock: 100 MHz
	Max Speed: 2000 MHz
	Current Speed: 2000 MHz
	Status: Populated, Enabled
	Upgrade: Socket rPGA988B
	L1 Cache Handle: 0x0006
	L2 Cache Handle: 0x0007
	L3 Cache Handle: 0x0008
	Serial Number: To Be Filled By O.E.M.
	Asset Tag: To Be Filled By O.E.M.
	Part Number: To Be Filled By O.E.M.
	Core Count: 2
	Core Enabled: 2
	Thread Count: 4
	Characteristics:
		64-bit capable

Handle 0x0005, DMI type 7, 19 bytes
Cache Information
	Socket Designation: L1-Cache
	Configuration: Enabled, Not Socketed, Level 1
	Operational Mode: Write Through
	Location: Internal
	Installed Size: 32 kB
	Maximum Size: 32 kB
	Supported SRAM Types:
		Unknown
	Installed SRAM Type: Unknown
	Speed: Unknown
	Error Correction Type: Parity
	System Type: Data
	Associativity: 8-way Set-associative

Handle 0x0006, DMI type 7, 19 bytes
Cache Information
	Socket Designation: L1-Cache
	Configuration: Enabled, Not Socketed, Level 1
	Operational Mode: Write Through
	Location: Internal
	Installed Size: 32 kB
	Maximum Size: 32 kB
	Supported SRAM Types:
		Unknown
	Installed SRAM Type: Unknown
	Speed: Unknown
	Error Correction Type: Parity
	System Type: Instruction
	Associativity: 8-way Set-associative

Handle 0x0007, DMI type 7, 19 bytes
Cache Information
	Socket Designation: L2-Cache
	Configuration: Enabled, Not Socketed, Level 2
	Operational Mode: Write Through
	Location: Internal
	Installed Size: 256 kB
	Maximum Size: 256 kB
	Supported SRAM Types:
		Unknown
	Installed SRAM Type: Unknown
	Speed: Unknown
	Error Correction Type: Multi-bit ECC
	System Type: Unified
	Associativity: 8-way Set-associative

Handle 0x0008, DMI type 7, 19 bytes
Cache Information
	Socket Designation: L3-Cache
	Configuration: Enabled, Not Socketed, Level 3
	Operational Mode: Write Back
	Location: Internal
	Installed Size: 4096 kB
	Maximum Size: 4096 kB
	Supported SRAM Types:
		Unknown
	Installed SRAM Type: Unknown
	Speed: Unknown
	Error Correction Type: Multi-bit ECC
	System Type: Unified
	Associativity: 16-way Set-associative

Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
	Vendor: Phoenix Technologies Ltd.
	Version: CR_2.2.0.262 X64
	Release Date: 07/06/2012
	Address: 0xE0000
	Runtime Size: 128 kB
	ROM Size: 3072 kB
	Characteristics:
		PCI is supported
		BIOS is upgradeable
		BIOS shadowing is allowed
		Boot from CD is supported
		Selectable boot is supported
		EDD is supported
		Print screen service is supported (int 5h)
		8042 keyboard services are supported (int 9h)
		Serial services are supported (int 14h)
		Printer services are supported (int 17h)
		CGA/mono video services are supported (int 10h)
		NEC PC-98
		ACPI is supported
		USB legacy is supported
		BIOS boot specification is supported
		Function key-initiated network boot is supported
		Targeted content distribution is supported
		UEFI is supported
	BIOS Revision: 0.1

Handle 0x0001, DMI type 1, 27 bytes
System Information
	Manufacturer: CompuLab
	Product Name: Intense-PC
	Version: 1.x
	Serial Number: System Serial Number
	UUID: 5C4606FA-192F-453A-B299-7B088C63BB9B
	Wake-up Type: Other
	SKU Number: System SKUNumber
	Family: IPC System

Handle 0x0002, DMI type 2, 15 bytes
Base Board Information
	Manufacturer: CompuLab Ltd.
	Product Name: Intense-PC
	Version: 1.x
	Serial Number: 1
	Asset Tag: Base Board Asset Tag
	Features:
		Board is a hosting board
		Board is replaceable
	Location In Chassis: Part Component
	Chassis Handle: 0x0000
	Type: Motherboard
	Contained Object Handles: 0

Handle 0x0003, DMI type 3, 22 bytes
Chassis Information
	Manufacturer: CompuLab Ltd.
	Type: Laptop
	Lock: Not Present
	Version: 1.x
	Serial Number: serial#
	Asset Tag: Asset Tag
	Boot-up State: Safe
	Power Supply State: Safe
	Thermal State: Other
	Security Status: Other
	OEM Information: 0x00000000
	Height: Unspecified
	Number Of Power Cords: 1
	Contained Elements: 0
	SKU Number: System SKUNumber

Handle 0x0009, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: Keyboard
	External Connector Type: PS/2
	Port Type: Keyboard Port

Handle 0x000A, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: Mouse
	External Connector Type: PS/2
	Port Type: Mouse Port

Handle 0x000B, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: Other
	External Reference Designator: COM 1
	External Connector Type: DB-9 male
	Port Type: Serial Port 16550A Compatible

Handle 0x000C, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB3.0 - 1#/USB2.0 - 1#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x000D, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB3.0 - 2#/USB2.0 - 2#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x000E, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB3.0 - 3#/USB2.0 - 3#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x000F, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB3.0 - 4#/USB2.0 - 4#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x0010, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB2.0 - 5#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x0011, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB2.0 - 6#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x0012, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB2.0 - 7#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x0013, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB2.0 - 8#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x0014, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB2.0 - 9#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x0015, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB2.0 - 10#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x0016, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB2.0 - 11#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x0017, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB2.0 - 12#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x0018, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB2.0 - 13#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x0019, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: USB2.0 - 14#
	External Connector Type: Access Bus (USB)
	Port Type: USB

Handle 0x001A, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: Ethernet
	External Connector Type: RJ-45
	Port Type: Network Port

Handle 0x001B, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: SATA Port 1
	Internal Connector Type: SAS/SATA Plug Receptacle
	External Reference Designator: None
	External Connector Type: None
	Port Type: SATA

Handle 0x001C, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: SATA Port 2
	Internal Connector Type: SAS/SATA Plug Receptacle
	External Reference Designator: None
	External Connector Type: None
	Port Type: SATA

Handle 0x001D, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: SATA Port 3
	Internal Connector Type: SAS/SATA Plug Receptacle
	External Reference Designator: None
	External Connector Type: None
	Port Type: SATA

Handle 0x001E, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: eSATA Port 1
	External Connector Type: SAS/SATA Plug Receptacle
	Port Type: SATA

Handle 0x001F, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: eSATA Port 2
	External Connector Type: SAS/SATA Plug Receptacle
	Port Type: SATA

Handle 0x0020, DMI type 8, 9 bytes
Port Connector Information
	Internal Reference Designator: None
	Internal Connector Type: None
	External Reference Designator: SATA Port 6
	External Connector Type: SAS/SATA Plug Receptacle
	Port Type: SATA

Handle 0x0021, DMI type 9, 17 bytes
System Slot Information
	Designation: PEG Gen1/Gen2/Gen3 X16
	Type: x16 PCI Express
	Current Usage: Available
	Length: Long
	ID: 0
	Characteristics:
		3.3 V is provided
		Opening is shared
		PME signal is supported
	Bus Address: 0000:00:00.0

Handle 0x0022, DMI type 9, 17 bytes
System Slot Information
	Designation: PCI-Express 1 X1
	Type: x1 PCI Express
	Current Usage: Available
	Length: Short
	ID: 1
	Characteristics:
		3.3 V is provided
		Opening is shared
		PME signal is supported
	Bus Address: 0000:00:00.0

Handle 0x0023, DMI type 9, 17 bytes
System Slot Information
	Designation: PCI-Express 2 X1
	Type: x1 PCI Express
	Current Usage: Available
	Length: Short
	ID: 2
	Characteristics:
		3.3 V is provided
		Opening is shared
		PME signal is supported
	Bus Address: 0000:00:00.0

Handle 0x0024, DMI type 9, 17 bytes
System Slot Information
	Designation: PCI-Express 3 X1
	Type: x1 PCI Express
	Current Usage: Available
	Length: Short
	ID: 3
	Characteristics:
		3.3 V is provided
		Opening is shared
		PME signal is supported
	Bus Address: 0000:00:00.0

Handle 0x0025, DMI type 9, 17 bytes
System Slot Information
	Designation: PCI-Express 4 X1
	Type: x1 PCI Express
	Current Usage: In Use
	Length: Short
	ID: 4
	Characteristics:
		3.3 V is provided
		Opening is shared
		PME signal is supported
	Bus Address: 0000:00:00.0

Handle 0x0026, DMI type 9, 17 bytes
System Slot Information
	Designation: PCI-Express 5 X4
	Type: x4 PCI Express
	Current Usage: In Use
	Length: Short
	ID: 5
	Characteristics:
		3.3 V is provided
		Opening is shared
		PME signal is supported
	Bus Address: 0000:00:00.0

Handle 0x0027, DMI type 10, 6 bytes
On Board Device Information
	Type: Video
	Status: Enabled
	Description: Intel(R) Extreme Graphics 3 Controller

Handle 0x0028, DMI type 10, 6 bytes
On Board Device Information
	Type: Sound
	Status: Enabled
	Description: Intel(R) Azalia Audio Device

Handle 0x0029, DMI type 11, 5 bytes
OEM Strings
	String 1: Intense-PC

Handle 0x002A, DMI type 12, 5 bytes
System Configuration Options

Handle 0x002B, DMI type 13, 22 bytes
BIOS Language Information
	Language Description Format: Abbreviated
	Installable Languages: 7
		enUS
		frFR
		jaJP
		koKR
		zhCA
		zhCA
		ruRU
	Currently Installed Language: enUS

Handle 0x002C, DMI type 22, 26 bytes
Portable Battery
	Location: None
	Manufacturer: None
	Manufacture Date: None
	Serial Number: None
	Name: None
	Design Capacity: Unknown
	Design Voltage: Unknown
	SBDS Version: None
	Maximum Error: Unknown
	SBDS Chemistry: None
	OEM-specific Information: 0x00000000

Handle 0x002D, DMI type 32, 11 bytes
System Boot Information
	Status: No errors detected

Handle 0x002E, DMI type 18, 23 bytes
32-bit Memory Error Information
	Type: OK
	Granularity: Unknown
	Operation: Unknown
	Vendor Syndrome: Unknown
	Memory Array Address: Unknown
	Device Address: Unknown
	Resolution: Unknown

Handle 0x002F, DMI type 21, 7 bytes
Built-in Pointing Device
	Type: Mouse
	Interface: PS/2
	Buttons: 2

Handle 0x0030, DMI type 23, 13 bytes
System Reset
	Status: Disabled
	Watchdog Timer: Present
	Boot Option: Do Not Reboot
	Boot Option On Limit: Do Not Reboot
	Reset Count: Unknown
	Reset Limit: Unknown
	Timer Interval: Unknown
	Timeout: Unknown

Handle 0x0031, DMI type 24, 5 bytes
Hardware Security
	Power-On Password Status: Unknown
	Keyboard Password Status: Unknown
	Administrator Password Status: Unknown
	Front Panel Reset Status: Unknown

Handle 0x0032, DMI type 27, 14 bytes
Cooling Device
	Type: Unknown
	Status: Unknown
	OEM-specific Information: 0x00000090
	Nominal Speed: Unknown Or Non-rotating

Handle 0x0033, DMI type 39, 22 bytes
System Power Supply
	Location: TBD by ODM
	Name: TBD by ODM
	Manufacturer: TBD by ODM
	Serial Number: TBD by ODM
	Asset Tag: TBD by ODM
	Model Part Number: TBD by ODM
	Revision: 1.0
	Max Power Capacity: Unknown
	Status: Present, OK
	Type: Battery
	Input Voltage Range Switching: Other
	Plugged: Yes
	Hot Replaceable: Yes

Handle 0x0034, DMI type 16, 23 bytes
Physical Memory Array
	Location: System Board Or Motherboard
	Use: System Memory
	Error Correction Type: None
	Maximum Capacity: 32 GB
	Error Information Handle: Not Provided
	Number Of Devices: 4

Handle 0x0035, DMI type 17, 34 bytes
Memory Device
	Array Handle: 0x0034
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 2048 MB
	Form Factor: SODIMM
	Set: None
	Locator: ChannelA-DIMM0
	Bank Locator: BANK 0
	Type: DDR3
	Type Detail: Synchronous
	Speed: 1333 MHz
	Manufacturer: Hynix/Hyundai
	Serial Number: 6146B1E7
	Asset Tag: 9876543210
	Part Number: HMT325S6BFR8C-H9  
	Rank: Unknown
	Configured Clock Speed: 1333 MHz

Handle 0x0036, DMI type 17, 34 bytes
Memory Device
	Array Handle: 0x0034
	Error Information Handle: Not Provided
	Total Width: Unknown
	Data Width: Unknown
	Size: No Module Installed
	Form Factor: DIMM
	Set: None
	Locator: ChannelA-DIMM1
	Bank Locator: BANK 1
	Type: Unknown
	Type Detail: None
	Speed: Unknown
	Manufacturer: Not Specified
	Serial Number: Not Specified
	Asset Tag: 9876543210
	Part Number: Not Specified
	Rank: Unknown
	Configured Clock Speed: Unknown

Handle 0x0037, DMI type 17, 34 bytes
Memory Device
	Array Handle: 0x0034
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 2048 MB
	Form Factor: SODIMM
	Set: None
	Locator: ChannelB-DIMM0
	Bank Locator: BANK 2
	Type: DDR3
	Type Detail: Synchronous
	Speed: 1333 MHz
	Manufacturer: Hynix/Hyundai
	Serial Number: 0D32B144
	Asset Tag: 9876543210
	Part Number: HMT325S6BFR8C-H9  
	Rank: Unknown
	Configured Clock Speed: 1333 MHz

Handle 0x0038, DMI type 17, 34 bytes
Memory Device
	Array Handle: 0x0034
	Error Information Handle: Not Provided
	Total Width: Unknown
	Data Width: Unknown
	Size: No Module Installed
	Form Factor: DIMM
	Set: None
	Locator: ChannelB-DIMM1
	Bank Locator: BANK 3
	Type: Unknown
	Type Detail: None
	Speed: Unknown
	Manufacturer: Not Specified
	Serial Number: Not Specified
	Asset Tag: 9876543210
	Part Number: Not Specified
	Rank: Unknown
	Configured Clock Speed: Unknown

Handle 0x0039, DMI type 20, 35 bytes
Memory Device Mapped Address
	Starting Address: 0x00000000000
	Ending Address: 0x000FFFFFFFF
	Range Size: 4 GB
	Physical Device Handle: 0x0035
	Memory Array Mapped Address Handle: 0x003B
	Partition Row Position: 1
	Interleave Position: 1
	Interleaved Data Depth: 2

Handle 0x003A, DMI type 20, 35 bytes
Memory Device Mapped Address
	Starting Address: 0x00000000000
	Ending Address: 0x000FFFFFFFF
	Range Size: 4 GB
	Physical Device Handle: 0x0036
	Memory Array Mapped Address Handle: 0x003B
	Partition Row Position: 1
	Interleave Position: 2
	Interleaved Data Depth: 2

Handle 0x003B, DMI type 19, 31 bytes
Memory Array Mapped Address
	Starting Address: 0x00000000000
	Ending Address: 0x000FFFFFFFF
	Range Size: 4 GB
	Physical Array Handle: 0x0034
	Partition Width: 4

Handle 0x003C, DMI type 15, 81 bytes
System Event Log
	Area Length: 18 bytes
	Header Start Offset: 0x0000
	Header Length: 16 bytes
	Data Start Offset: 0x0010
	Access Method: General-purpose non-volatile data functions
	Access Address: 0x00F0
	Status: Valid, Not Full
	Change Token: 0x00000000
	Header Format: Type 1
	Supported Log Type Descriptors: 29
	Descriptor 1: Single-bit ECC memory error
	Data Format 1: Multiple-event handle
	Descriptor 2: Multi-bit ECC memory error
	Data Format 2: Multiple-event handle
	Descriptor 3: Parity memory error
	Data Format 3: None
	Descriptor 4: Bus timeout
	Data Format 4: None
	Descriptor 5: I/O channel block
	Data Format 5: None
	Descriptor 6: Software NMI
	Data Format 6: None
	Descriptor 7: POST memory resize
	Data Format 7: None
	Descriptor 8: POST error
	Data Format 8: POST results bitmap
	Descriptor 9: PCI parity error
	Data Format 9: None
	Descriptor 10: PCI system error
	Data Format 10: None
	Descriptor 11: CPU failure
	Data Format 11: None
	Descriptor 12: EISA failsafe timer timeout
	Data Format 12: None
	Descriptor 13: Correctable memory log disabled
	Data Format 13: None
	Descriptor 14: Logging disabled
	Data Format 14: None
	Descriptor 15: System limit exceeded
	Data Format 15: None
	Descriptor 16: Asynchronous hardware timer expired
	Data Format 16: None
	Descriptor 17: System configuration information
	Data Format 17: None
	Descriptor 18: Hard disk information
	Data Format 18: None
	Descriptor 19: System reconfigured
	Data Format 19: None
	Descriptor 20: Uncorrectable CPU-complex error
	Data Format 20: None
	Descriptor 21: Log area reset/cleared
	Data Format 21: None
	Descriptor 22: System boot
	Data Format 22: None
	Descriptor 23: OEM-specific
	Data Format 23: None
	Descriptor 24: OEM-specific
	Data Format 24: None
	Descriptor 25: OEM-specific
	Data Format 25: None
	Descriptor 26: OEM-specific
	Data Format 26: None
	Descriptor 27: OEM-specific
	Data Format 27: None
	Descriptor 28: OEM-specific
	Data Format 28: None
	Descriptor 29: OEM-specific
	Data Format 29: None

Handle 0xFEFF, DMI type 127, 4 bytes
End Of Table


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC.
  2012-07-31  4:49                 ` Oliver Neukum
@ 2012-07-31 17:06                   ` Sarah Sharp
  2012-07-31 18:39                     ` Sarah Sharp
  0 siblings, 1 reply; 21+ messages in thread
From: Sarah Sharp @ 2012-07-31 17:06 UTC (permalink / raw)
  To: Oliver Neukum
  Cc: Denis Turischev, linux-kernel, linux-usb, Greg Kroah-Hartman

On Tue, Jul 31, 2012 at 06:49:50AM +0200, Oliver Neukum wrote:
> On Monday 30 July 2012 15:34:06 Sarah Sharp wrote:
> > Hi Denis,
> > 
> > Can you send me the output of `sudo dmidecode`?  I'd like to see if I
> > can make a more general patch apply to the Intense-PC.
> 
> As this is for shutdown, why not all systems?

Because it will cause a BIOS delay on the next boot.  Approximately
100 ms.  Some people trying to do extremely fast boot will care about
that delay.

Sarah Sharp

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC.
  2012-07-31 17:06                   ` Sarah Sharp
@ 2012-07-31 18:39                     ` Sarah Sharp
  0 siblings, 0 replies; 21+ messages in thread
From: Sarah Sharp @ 2012-07-31 18:39 UTC (permalink / raw)
  To: Oliver Neukum
  Cc: Denis Turischev, linux-kernel, linux-usb, Greg Kroah-Hartman

On Tue, Jul 31, 2012 at 10:06:34AM -0700, Sarah Sharp wrote:
> On Tue, Jul 31, 2012 at 06:49:50AM +0200, Oliver Neukum wrote:
> > On Monday 30 July 2012 15:34:06 Sarah Sharp wrote:
> > > Hi Denis,
> > > 
> > > Can you send me the output of `sudo dmidecode`?  I'd like to see if I
> > > can make a more general patch apply to the Intense-PC.
> > 
> > As this is for shutdown, why not all systems?
> 
> Because it will cause a BIOS delay on the next boot.  Approximately
> 100 ms.  Some people trying to do extremely fast boot will care about
> that delay.

However, looking at the Intense-PC SMBIOS info, it looks like I can't
make the patch more generic.  I'll have to key off of PCI ID, and all
PPT systems will have the ports switched back to EHCI.

Sarah Sharp

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC.
  2012-07-23 11:46       ` [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC Denis Turischev
  2012-07-23 17:44         ` Sarah Sharp
@ 2012-08-07 17:35         ` Sarah Sharp
  2012-08-07 17:39           ` [RFT] xhci: Switch PPT ports to EHCI on shutdown Sarah Sharp
  1 sibling, 1 reply; 21+ messages in thread
From: Sarah Sharp @ 2012-08-07 17:35 UTC (permalink / raw)
  To: Denis Turischev; +Cc: linux-kernel, linux-usb, Greg Kroah-Hartman

Hi Denis,

I found a couple issues with your second patch.  There are non-PCI xHCI
host controllers, so we can't assume the xHCI host is a PCI host.  So
this code can't run in the generic xHCI shutdown method:

>  void xhci_shutdown(struct usb_hcd *hcd)
>  {
> +	struct pci_dev *pdev;
> +	const char *brd_name;
>  	struct xhci_hcd *xhci = hcd_to_xhci(hcd);
> 
> +	pdev = to_pci_dev(hcd->self.controller);
> +
> +	if (usb_is_intel_switchable_xhci(pdev)) {
> +		brd_name = dmi_get_system_info(DMI_BOARD_NAME);
> +
> +		/* quirk for Compulab's Intense-PC board */
> +		if (brd_name && strstr(brd_name, "Intense-PC"))
> +			usb_disable_xhci_ports(pdev);
> +	}
> +
>  	spin_lock_irq(&xhci->lock);
>  	xhci_halt(xhci);
>  	spin_unlock_irq(&xhci->lock);

I think the to_pci_dev call will oops if this isn't a PCI host.  Plus,
I've found out from the BIOS and chipset folks that this quirk needs to
be more broadly applied.  I'll send you a revised patch.  Can you test
it and make sure it works for you?

Sarah Sharp

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [RFT] xhci: Switch PPT ports to EHCI on shutdown.
  2012-08-07 17:35         ` Sarah Sharp
@ 2012-08-07 17:39           ` Sarah Sharp
  2012-08-09 14:31             ` Denis Turischev
  2012-08-23  4:30             ` Robert Hancock
  0 siblings, 2 replies; 21+ messages in thread
From: Sarah Sharp @ 2012-08-07 17:39 UTC (permalink / raw)
  To: Denis Turischev; +Cc: linux-usb, Greg KH, linux-kernel

The Intel desktop boards DH77EB and DH77DF have a hardware issue that
can be worked around by BIOS.  If the USB ports are switched to xHCI on
shutdown, the xHCI host will send a spurious interrupt, which will wake
the system.  Some BIOS will work around this, but not all.

The bug can be avoided if the USB ports are switched back to EHCI on
shutdown.  The Intel Windows driver switches the ports back to EHCI, so
change the Linux xHCI driver to do the same.

Unfortunately, we can't tell the two effected boards apart from other
working motherboards, because the vendors will change the DMI strings
for the DH77EB and DH77DF boards to their own custom names.  One example
is Compulab's mini-desktop, the Intense-PC.  Instead, key off the
Panther Point xHCI host PCI vendor and device ID, and switch the ports
over for all PPT xHCI hosts.

The only impact this will have on non-effected boards is to add a couple
hundred milliseconds delay on boot when the BIOS has to switch the ports
over from EHCI to xHCI.

This patch should be backported to kernels as old as 3.0, that contain
the commit 69e848c2090aebba5698a1620604c7dccb448684 "Intel xhci: Support
EHCI/xHCI port switching."

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Reported-by: Denis Turischev <denis@compulab.co.il>
Cc: stable@vger.kernel.org
---
 drivers/usb/host/pci-quirks.c |    7 +++++++
 drivers/usb/host/pci-quirks.h |    1 +
 drivers/usb/host/xhci-pci.c   |    9 +++++++++
 drivers/usb/host/xhci.c       |    3 +++
 drivers/usb/host/xhci.h       |    1 +
 5 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
index df0828c..c5e9e4a 100644
--- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c
@@ -800,6 +800,13 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
 }
 EXPORT_SYMBOL_GPL(usb_enable_xhci_ports);
 
+void usb_disable_xhci_ports(struct pci_dev *xhci_pdev)
+{
+	pci_write_config_dword(xhci_pdev, USB_INTEL_USB3_PSSEN, 0x0);
+	pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR, 0x0);
+}
+EXPORT_SYMBOL_GPL(usb_disable_xhci_ports);
+
 /**
  * PCI Quirks for xHCI.
  *
diff --git a/drivers/usb/host/pci-quirks.h b/drivers/usb/host/pci-quirks.h
index b1002a8..ef004a5 100644
--- a/drivers/usb/host/pci-quirks.h
+++ b/drivers/usb/host/pci-quirks.h
@@ -10,6 +10,7 @@ void usb_amd_quirk_pll_disable(void);
 void usb_amd_quirk_pll_enable(void);
 bool usb_is_intel_switchable_xhci(struct pci_dev *pdev);
 void usb_enable_xhci_ports(struct pci_dev *xhci_pdev);
+void usb_disable_xhci_ports(struct pci_dev *xhci_pdev);
 #else
 static inline void usb_amd_quirk_pll_disable(void) {}
 static inline void usb_amd_quirk_pll_enable(void) {}
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index 92eaff6..9bfd4ca11 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -94,6 +94,15 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
 		xhci->quirks |= XHCI_EP_LIMIT_QUIRK;
 		xhci->limit_active_eps = 64;
 		xhci->quirks |= XHCI_SW_BW_CHECKING;
+		/*
+		 * PPT desktop boards DH77EB and DH77DF will power back on after
+		 * a few seconds of being shutdown.  The fix for this is to
+		 * switch the ports from xHCI to EHCI on shutdown.  We can't use
+		 * DMI information to find those particular boards (since each
+		 * vendor will change the board name), so we have to key off all
+		 * PPT chipsets.
+		 */
+		xhci->quirks |= XHCI_SPURIOUS_REBOOT;
 	}
 	if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
 			pdev->device == PCI_DEVICE_ID_ASROCK_P67) {
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 95394e5..81aa10c 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -659,6 +659,9 @@ void xhci_shutdown(struct usb_hcd *hcd)
 {
 	struct xhci_hcd *xhci = hcd_to_xhci(hcd);
 
+	if (xhci->quirks && XHCI_SPURIOUS_REBOOT)
+		usb_disable_xhci_ports(to_pci_dev(hcd->self.controller));
+
 	spin_lock_irq(&xhci->lock);
 	xhci_halt(xhci);
 	spin_unlock_irq(&xhci->lock);
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
index 96f49db..c713256 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1494,6 +1494,7 @@ struct xhci_hcd {
 #define XHCI_TRUST_TX_LENGTH	(1 << 10)
 #define XHCI_LPM_SUPPORT	(1 << 11)
 #define XHCI_INTEL_HOST		(1 << 12)
+#define XHCI_SPURIOUS_REBOOT	(1 << 13)
 	unsigned int		num_active_eps;
 	unsigned int		limit_active_eps;
 	/* There are two roothubs to keep track of bus suspend info for */
-- 
1.7.9


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [RFT] xhci: Switch PPT ports to EHCI on shutdown.
  2012-08-07 17:39           ` [RFT] xhci: Switch PPT ports to EHCI on shutdown Sarah Sharp
@ 2012-08-09 14:31             ` Denis Turischev
  2012-08-23  4:30             ` Robert Hancock
  1 sibling, 0 replies; 21+ messages in thread
From: Denis Turischev @ 2012-08-09 14:31 UTC (permalink / raw)
  To: Sarah Sharp; +Cc: linux-usb, Greg KH, linux-kernel

Hi Sarah,

Yes, it fixes unexpected wake-up on Intense-PC.
Thanks!

Denis.

On 08/07/2012 08:39 PM, Sarah Sharp wrote:
> The Intel desktop boards DH77EB and DH77DF have a hardware issue that
> can be worked around by BIOS.  If the USB ports are switched to xHCI on
> shutdown, the xHCI host will send a spurious interrupt, which will wake
> the system.  Some BIOS will work around this, but not all.
> 
> The bug can be avoided if the USB ports are switched back to EHCI on
> shutdown.  The Intel Windows driver switches the ports back to EHCI, so
> change the Linux xHCI driver to do the same.
> 
> Unfortunately, we can't tell the two effected boards apart from other
> working motherboards, because the vendors will change the DMI strings
> for the DH77EB and DH77DF boards to their own custom names.  One example
> is Compulab's mini-desktop, the Intense-PC.  Instead, key off the
> Panther Point xHCI host PCI vendor and device ID, and switch the ports
> over for all PPT xHCI hosts.
> 
> The only impact this will have on non-effected boards is to add a couple
> hundred milliseconds delay on boot when the BIOS has to switch the ports
> over from EHCI to xHCI.
> 
> This patch should be backported to kernels as old as 3.0, that contain
> the commit 69e848c2090aebba5698a1620604c7dccb448684 "Intel xhci: Support
> EHCI/xHCI port switching."
> 
> Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
> Reported-by: Denis Turischev <denis@compulab.co.il>
> Cc: stable@vger.kernel.org
> ---
>  drivers/usb/host/pci-quirks.c |    7 +++++++
>  drivers/usb/host/pci-quirks.h |    1 +
>  drivers/usb/host/xhci-pci.c   |    9 +++++++++
>  drivers/usb/host/xhci.c       |    3 +++
>  drivers/usb/host/xhci.h       |    1 +
>  5 files changed, 21 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
> index df0828c..c5e9e4a 100644
> --- a/drivers/usb/host/pci-quirks.c
> +++ b/drivers/usb/host/pci-quirks.c
> @@ -800,6 +800,13 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
>  }
>  EXPORT_SYMBOL_GPL(usb_enable_xhci_ports);
>  
> +void usb_disable_xhci_ports(struct pci_dev *xhci_pdev)
> +{
> +	pci_write_config_dword(xhci_pdev, USB_INTEL_USB3_PSSEN, 0x0);
> +	pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR, 0x0);
> +}
> +EXPORT_SYMBOL_GPL(usb_disable_xhci_ports);
> +
>  /**
>   * PCI Quirks for xHCI.
>   *
> diff --git a/drivers/usb/host/pci-quirks.h b/drivers/usb/host/pci-quirks.h
> index b1002a8..ef004a5 100644
> --- a/drivers/usb/host/pci-quirks.h
> +++ b/drivers/usb/host/pci-quirks.h
> @@ -10,6 +10,7 @@ void usb_amd_quirk_pll_disable(void);
>  void usb_amd_quirk_pll_enable(void);
>  bool usb_is_intel_switchable_xhci(struct pci_dev *pdev);
>  void usb_enable_xhci_ports(struct pci_dev *xhci_pdev);
> +void usb_disable_xhci_ports(struct pci_dev *xhci_pdev);
>  #else
>  static inline void usb_amd_quirk_pll_disable(void) {}
>  static inline void usb_amd_quirk_pll_enable(void) {}
> diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
> index 92eaff6..9bfd4ca11 100644
> --- a/drivers/usb/host/xhci-pci.c
> +++ b/drivers/usb/host/xhci-pci.c
> @@ -94,6 +94,15 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
>  		xhci->quirks |= XHCI_EP_LIMIT_QUIRK;
>  		xhci->limit_active_eps = 64;
>  		xhci->quirks |= XHCI_SW_BW_CHECKING;
> +		/*
> +		 * PPT desktop boards DH77EB and DH77DF will power back on after
> +		 * a few seconds of being shutdown.  The fix for this is to
> +		 * switch the ports from xHCI to EHCI on shutdown.  We can't use
> +		 * DMI information to find those particular boards (since each
> +		 * vendor will change the board name), so we have to key off all
> +		 * PPT chipsets.
> +		 */
> +		xhci->quirks |= XHCI_SPURIOUS_REBOOT;
>  	}
>  	if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
>  			pdev->device == PCI_DEVICE_ID_ASROCK_P67) {
> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
> index 95394e5..81aa10c 100644
> --- a/drivers/usb/host/xhci.c
> +++ b/drivers/usb/host/xhci.c
> @@ -659,6 +659,9 @@ void xhci_shutdown(struct usb_hcd *hcd)
>  {
>  	struct xhci_hcd *xhci = hcd_to_xhci(hcd);
>  
> +	if (xhci->quirks && XHCI_SPURIOUS_REBOOT)
> +		usb_disable_xhci_ports(to_pci_dev(hcd->self.controller));
> +
>  	spin_lock_irq(&xhci->lock);
>  	xhci_halt(xhci);
>  	spin_unlock_irq(&xhci->lock);
> diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
> index 96f49db..c713256 100644
> --- a/drivers/usb/host/xhci.h
> +++ b/drivers/usb/host/xhci.h
> @@ -1494,6 +1494,7 @@ struct xhci_hcd {
>  #define XHCI_TRUST_TX_LENGTH	(1 << 10)
>  #define XHCI_LPM_SUPPORT	(1 << 11)
>  #define XHCI_INTEL_HOST		(1 << 12)
> +#define XHCI_SPURIOUS_REBOOT	(1 << 13)
>  	unsigned int		num_active_eps;
>  	unsigned int		limit_active_eps;
>  	/* There are two roothubs to keep track of bus suspend info for */
> 


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [RFT] xhci: Switch PPT ports to EHCI on shutdown.
  2012-08-07 17:39           ` [RFT] xhci: Switch PPT ports to EHCI on shutdown Sarah Sharp
  2012-08-09 14:31             ` Denis Turischev
@ 2012-08-23  4:30             ` Robert Hancock
  1 sibling, 0 replies; 21+ messages in thread
From: Robert Hancock @ 2012-08-23  4:30 UTC (permalink / raw)
  To: Sarah Sharp; +Cc: Denis Turischev, linux-usb, Greg KH, linux-kernel

On 08/07/2012 11:39 AM, Sarah Sharp wrote:
> The Intel desktop boards DH77EB and DH77DF have a hardware issue that
> can be worked around by BIOS.  If the USB ports are switched to xHCI on
> shutdown, the xHCI host will send a spurious interrupt, which will wake
> the system.  Some BIOS will work around this, but not all.
>
> The bug can be avoided if the USB ports are switched back to EHCI on
> shutdown.  The Intel Windows driver switches the ports back to EHCI, so
> change the Linux xHCI driver to do the same.
>
> Unfortunately, we can't tell the two effected boards apart from other
> working motherboards, because the vendors will change the DMI strings
> for the DH77EB and DH77DF boards to their own custom names.  One example
> is Compulab's mini-desktop, the Intense-PC.  Instead, key off the
> Panther Point xHCI host PCI vendor and device ID, and switch the ports
> over for all PPT xHCI hosts.
>
> The only impact this will have on non-effected boards is to add a couple
> hundred milliseconds delay on boot when the BIOS has to switch the ports
> over from EHCI to xHCI.
>
> This patch should be backported to kernels as old as 3.0, that contain
> the commit 69e848c2090aebba5698a1620604c7dccb448684 "Intel xhci: Support
> EHCI/xHCI port switching."
>
> Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
> Reported-by: Denis Turischev <denis@compulab.co.il>
> Cc: stable@vger.kernel.org
> ---
>   drivers/usb/host/pci-quirks.c |    7 +++++++
>   drivers/usb/host/pci-quirks.h |    1 +
>   drivers/usb/host/xhci-pci.c   |    9 +++++++++
>   drivers/usb/host/xhci.c       |    3 +++
>   drivers/usb/host/xhci.h       |    1 +
>   5 files changed, 21 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
> index df0828c..c5e9e4a 100644
> --- a/drivers/usb/host/pci-quirks.c
> +++ b/drivers/usb/host/pci-quirks.c
> @@ -800,6 +800,13 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
>   }
>   EXPORT_SYMBOL_GPL(usb_enable_xhci_ports);
>
> +void usb_disable_xhci_ports(struct pci_dev *xhci_pdev)
> +{
> +	pci_write_config_dword(xhci_pdev, USB_INTEL_USB3_PSSEN, 0x0);
> +	pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR, 0x0);
> +}
> +EXPORT_SYMBOL_GPL(usb_disable_xhci_ports);
> +
>   /**
>    * PCI Quirks for xHCI.
>    *
> diff --git a/drivers/usb/host/pci-quirks.h b/drivers/usb/host/pci-quirks.h
> index b1002a8..ef004a5 100644
> --- a/drivers/usb/host/pci-quirks.h
> +++ b/drivers/usb/host/pci-quirks.h
> @@ -10,6 +10,7 @@ void usb_amd_quirk_pll_disable(void);
>   void usb_amd_quirk_pll_enable(void);
>   bool usb_is_intel_switchable_xhci(struct pci_dev *pdev);
>   void usb_enable_xhci_ports(struct pci_dev *xhci_pdev);
> +void usb_disable_xhci_ports(struct pci_dev *xhci_pdev);
>   #else
>   static inline void usb_amd_quirk_pll_disable(void) {}
>   static inline void usb_amd_quirk_pll_enable(void) {}
> diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
> index 92eaff6..9bfd4ca11 100644
> --- a/drivers/usb/host/xhci-pci.c
> +++ b/drivers/usb/host/xhci-pci.c
> @@ -94,6 +94,15 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
>   		xhci->quirks |= XHCI_EP_LIMIT_QUIRK;
>   		xhci->limit_active_eps = 64;
>   		xhci->quirks |= XHCI_SW_BW_CHECKING;
> +		/*
> +		 * PPT desktop boards DH77EB and DH77DF will power back on after
> +		 * a few seconds of being shutdown.  The fix for this is to
> +		 * switch the ports from xHCI to EHCI on shutdown.  We can't use
> +		 * DMI information to find those particular boards (since each
> +		 * vendor will change the board name), so we have to key off all
> +		 * PPT chipsets.
> +		 */
> +		xhci->quirks |= XHCI_SPURIOUS_REBOOT;
>   	}
>   	if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
>   			pdev->device == PCI_DEVICE_ID_ASROCK_P67) {
> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
> index 95394e5..81aa10c 100644
> --- a/drivers/usb/host/xhci.c
> +++ b/drivers/usb/host/xhci.c
> @@ -659,6 +659,9 @@ void xhci_shutdown(struct usb_hcd *hcd)
>   {
>   	struct xhci_hcd *xhci = hcd_to_xhci(hcd);
>
> +	if (xhci->quirks && XHCI_SPURIOUS_REBOOT)
> +		usb_disable_xhci_ports(to_pci_dev(hcd->self.controller));

This looks like a typo, think it should be & not &&. With this code, it 
appears the quirk will always be triggered since XHCI_SPURIOUS_REBOOT is 
non-zero.

> +
>   	spin_lock_irq(&xhci->lock);
>   	xhci_halt(xhci);
>   	spin_unlock_irq(&xhci->lock);
> diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
> index 96f49db..c713256 100644
> --- a/drivers/usb/host/xhci.h
> +++ b/drivers/usb/host/xhci.h
> @@ -1494,6 +1494,7 @@ struct xhci_hcd {
>   #define XHCI_TRUST_TX_LENGTH	(1 << 10)
>   #define XHCI_LPM_SUPPORT	(1 << 11)
>   #define XHCI_INTEL_HOST		(1 << 12)
> +#define XHCI_SPURIOUS_REBOOT	(1 << 13)
>   	unsigned int		num_active_eps;
>   	unsigned int		limit_active_eps;
>   	/* There are two roothubs to keep track of bus suspend info for */
>


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2012-08-23  4:30 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-16 16:46 [PATCH] xhci: EHCI/xHCI ports switching on Intense-PC Denis Turischev
2012-07-17  4:54 ` Sarah Sharp
2012-07-18  6:57   ` Denis Turischev
2012-07-18 16:59     ` Sarah Sharp
2012-07-23 11:46       ` [PATCH 1/2] xhci: provide usb_disable_xhci_ports function for Intel chipsets Denis Turischev
2012-07-23 14:45         ` Sergei Shtylyov
2012-07-23 15:59           ` [PATCH 1/2 v2] " Denis Turischev
2012-07-23 11:46       ` [PATCH 2/2] xhci: EHCI/XHCI ports switching on Intense-PC Denis Turischev
2012-07-23 17:44         ` Sarah Sharp
2012-07-24  8:50           ` Denis Turischev
2012-07-24 19:46             ` Sarah Sharp
2012-07-30 22:34               ` Sarah Sharp
2012-07-31  4:49                 ` Oliver Neukum
2012-07-31 17:06                   ` Sarah Sharp
2012-07-31 18:39                     ` Sarah Sharp
2012-07-31 10:42                 ` Denis Turischev
2012-08-07 17:35         ` Sarah Sharp
2012-08-07 17:39           ` [RFT] xhci: Switch PPT ports to EHCI on shutdown Sarah Sharp
2012-08-09 14:31             ` Denis Turischev
2012-08-23  4:30             ` Robert Hancock
2012-07-17 12:20 ` [PATCH] xhci: EHCI/xHCI ports switching on Intense-PC Sergei Shtylyov

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.