Commit 389b175f authored by Alan Stern's avatar Alan Stern Committed by Ben Hutchings

USB: EHCI: avoid BIOS handover on the HASEE E200

commit b0a50e92 upstream.

Leandro Liptak reports that his HASEE E200 computer hangs when we ask
the BIOS to hand over control of the EHCI host controller.  This
definitely sounds like a bug in the BIOS, but at the moment there is
no way to fix it.

This patch works around the problem by avoiding the handoff whenever
the motherboard and BIOS version match those of Leandro's computer.
Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Reported-by: default avatarLeandro Liptak <leandroliptak@gmail.com>
Tested-by: default avatarLeandro Liptak <leandroliptak@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
parent b5177f73
...@@ -555,6 +555,14 @@ static const struct dmi_system_id __devinitconst ehci_dmi_nohandoff_table[] = { ...@@ -555,6 +555,14 @@ static const struct dmi_system_id __devinitconst ehci_dmi_nohandoff_table[] = {
DMI_MATCH(DMI_BIOS_VERSION, "Lucid-"), DMI_MATCH(DMI_BIOS_VERSION, "Lucid-"),
}, },
}, },
{
/* HASEE E200 */
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "HASEE"),
DMI_MATCH(DMI_BOARD_NAME, "E210"),
DMI_MATCH(DMI_BIOS_VERSION, "6.00"),
},
},
{ } { }
}; };
...@@ -564,9 +572,14 @@ static void __devinit ehci_bios_handoff(struct pci_dev *pdev, ...@@ -564,9 +572,14 @@ static void __devinit ehci_bios_handoff(struct pci_dev *pdev,
{ {
int try_handoff = 1, tried_handoff = 0; int try_handoff = 1, tried_handoff = 0;
/* The Pegatron Lucid tablet sporadically waits for 98 seconds trying /*
* the handoff on its unused controller. Skip it. */ * The Pegatron Lucid tablet sporadically waits for 98 seconds trying
if (pdev->vendor == 0x8086 && pdev->device == 0x283a) { * the handoff on its unused controller. Skip it.
*
* The HASEE E200 hangs when the semaphore is set (bugzilla #77021).
*/
if (pdev->vendor == 0x8086 && (pdev->device == 0x283a ||
pdev->device == 0x27cc)) {
if (dmi_check_system(ehci_dmi_nohandoff_table)) if (dmi_check_system(ehci_dmi_nohandoff_table))
try_handoff = 0; try_handoff = 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment