[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#287278: kernel-image-2.6.8-1-386: ehci-hcd does not initialize on some motherboards



Package: kernel-image-2.6.8-1-386
Version: at least 5 and 10, supposedly all
Severity: important
Tags: d-i, patch

On some motherboards, notably some in Asus P4P800 series, ehci-hcd driver
fails to init with the following diagnostics:

ehci_hcd 0000:00:1d.7: BIOS handoff failed (104, 1010001)
ehci_hcd 0000:00:1d.7: can't reset
ehci_hcd 0000:00:1d.7: init 0000:00:1d.7 fail, -95
ehci_hcd: probe of 0000:00:1d.7 failed with error -95

As I could trace, this is a consequence of "proper bios handoff" patch
included in 2.6.8 kernel (and yes, 2.6.7 does not have this problem), when it
encounters BIOS that does not handle handoff properly.  See,
e.g. http://www.ussg.iu.edu/hypermail/linux/kernel/0407.1/1336.html and
further on the thread.  Kernel developers argue that kernel cannot guarantee
anything if BIOS does not handle handoff properly, but in practice the driver
works (that is, I did not found any reports when it doesn't).  So backporters
to 2.4.27 changed this error to warning (the first line also presents in dmesg
of 2.4.27 but also as warning).

As a consequence, such motherboards cannot work with USB flash drives and as
an example, you cannot install Debian on 3ware 9xxx RAID controller from USB
flash drive (so tag d-i and severity "important") - 2.4.27 kernel has no its
driver, and 2.6.8 kernel cannot find distribution ISO image because it cannot
init ehci-hcd.  I am not sure that this must be only warning in the upstream
kernel (maybe it should be a module parameter enabling workaround), but it
definitely should work in Debian installation kernels, when you cannot patch a
kernel.  I'm sorry, I now have no time to learn Debian kernel patch system, so
attached patch was made after debian/rules unpack.

-- System Information
Debian Release: testing
Architecture: i386

-- 
Artem Chuprina <ran{}ran.pp.ru>
--- kernel-source-2.6.8/drivers/usb/host/ehci-hcd.c.orig	2004-08-14 05:37:25.000000000 +0000
+++ kernel-source-2.6.8/drivers/usb/host/ehci-hcd.c	2004-12-25 20:00:02.000000000 +0000
@@ -303,9 +303,9 @@
 			pci_read_config_dword(pdev, where, &cap);
 		} while ((cap & (1 << 16)) && msec);
 		if (cap & (1 << 16)) {
-			ehci_err (ehci, "BIOS handoff failed (%d, %04x)\n",
+			ehci_err (ehci, "BIOS handoff failed (%d, %04x), continuing anyway\n",
 				where, cap);
-			return 1;
+			return 0;
 		} 
 		ehci_dbg (ehci, "BIOS handoff succeeded\n");
 	}

Reply to: