[PATCH] asus vt8235 router buggy bios workaround

Hopefully fix http://bugzilla.kernel.org/show_bug.cgi?id=5235

Similar problem has been reported before here:
http://groups.google.com/group/linux.kernel/browse_thread/thread/def4ca19dbc3cd4/5cffbf349f2c87a4?tvc=2&q=Aleksey+Gorelov&hl=en#5cffbf349f2c87a4
and was related to bug in BIOS reporting 82C686 router compatible to 586.

I suspect BIOS on this board has similar issue: reports VT8235 router to be
compatible with 586 one - which is obviously not true.  Patch from the link
above has already incorporated in both 2.6 & 2.4 series, but might not work
in this particular case.

Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
aleksey_gorelov@phoenix.com 2005-10-30 14:59:36 -08:00 committed by Linus Torvalds
parent 434440a280
commit 750deaa402

View file

@ -547,31 +547,48 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *route
return 0; return 0;
} }
static __init int via_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) static __init int via_router_probe(struct irq_router *r,
struct pci_dev *router, u16 device)
{ {
/* FIXME: We should move some of the quirk fixup stuff here */ /* FIXME: We should move some of the quirk fixup stuff here */
if (router->device == PCI_DEVICE_ID_VIA_82C686 && /*
device == PCI_DEVICE_ID_VIA_82C586_0) { * work arounds for some buggy BIOSes
/* Asus k7m bios wrongly reports 82C686A as 586-compatible */ */
device = PCI_DEVICE_ID_VIA_82C686; if (device == PCI_DEVICE_ID_VIA_82C586_0) {
switch(router->device) {
case PCI_DEVICE_ID_VIA_82C686:
/*
* Asus k7m bios wrongly reports 82C686A
* as 586-compatible
*/
device = PCI_DEVICE_ID_VIA_82C686;
break;
case PCI_DEVICE_ID_VIA_8235:
/**
* Asus a7v-x bios wrongly reports 8235
* as 586-compatible
*/
device = PCI_DEVICE_ID_VIA_8235;
break;
}
} }
switch(device) switch(device) {
{ case PCI_DEVICE_ID_VIA_82C586_0:
case PCI_DEVICE_ID_VIA_82C586_0: r->name = "VIA";
r->name = "VIA"; r->get = pirq_via586_get;
r->get = pirq_via586_get; r->set = pirq_via586_set;
r->set = pirq_via586_set; return 1;
return 1; case PCI_DEVICE_ID_VIA_82C596:
case PCI_DEVICE_ID_VIA_82C596: case PCI_DEVICE_ID_VIA_82C686:
case PCI_DEVICE_ID_VIA_82C686: case PCI_DEVICE_ID_VIA_8231:
case PCI_DEVICE_ID_VIA_8231: case PCI_DEVICE_ID_VIA_8235:
/* FIXME: add new ones for 8233/5 */ /* FIXME: add new ones for 8233/5 */
r->name = "VIA"; r->name = "VIA";
r->get = pirq_via_get; r->get = pirq_via_get;
r->set = pirq_via_set; r->set = pirq_via_set;
return 1; return 1;
} }
return 0; return 0;
} }