diff options
author | aleksey_gorelov@phoenix.com <aleksey_gorelov@phoenix.com> | 2005-10-30 17:59:36 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-30 20:37:12 -0500 |
commit | 750deaa4021da1cf9fdb1e20861a10c76fd7f2bc (patch) | |
tree | 662e9c2e22c44e3610d979f7c5e6b1b33bd2dc53 /arch/i386/pci | |
parent | 434440a2804639f11858d9d384c9505927feb186 (diff) |
[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>
Diffstat (limited to 'arch/i386/pci')
-rw-r--r-- | arch/i386/pci/irq.c | 55 |
1 files changed, 36 insertions, 19 deletions
diff --git a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c index cddafe33ff7c..19e6f4871d1e 100644 --- a/arch/i386/pci/irq.c +++ b/arch/i386/pci/irq.c | |||
@@ -547,31 +547,48 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *route | |||
547 | return 0; | 547 | return 0; |
548 | } | 548 | } |
549 | 549 | ||
550 | static __init int via_router_probe(struct irq_router *r, struct pci_dev *router, u16 device) | 550 | static __init int via_router_probe(struct irq_router *r, |
551 | struct pci_dev *router, u16 device) | ||
551 | { | 552 | { |
552 | /* FIXME: We should move some of the quirk fixup stuff here */ | 553 | /* FIXME: We should move some of the quirk fixup stuff here */ |
553 | 554 | ||
554 | if (router->device == PCI_DEVICE_ID_VIA_82C686 && | 555 | /* |
555 | device == PCI_DEVICE_ID_VIA_82C586_0) { | 556 | * work arounds for some buggy BIOSes |
556 | /* Asus k7m bios wrongly reports 82C686A as 586-compatible */ | 557 | */ |
557 | device = PCI_DEVICE_ID_VIA_82C686; | 558 | if (device == PCI_DEVICE_ID_VIA_82C586_0) { |
559 | switch(router->device) { | ||
560 | case PCI_DEVICE_ID_VIA_82C686: | ||
561 | /* | ||
562 | * Asus k7m bios wrongly reports 82C686A | ||
563 | * as 586-compatible | ||
564 | */ | ||
565 | device = PCI_DEVICE_ID_VIA_82C686; | ||
566 | break; | ||
567 | case PCI_DEVICE_ID_VIA_8235: | ||
568 | /** | ||
569 | * Asus a7v-x bios wrongly reports 8235 | ||
570 | * as 586-compatible | ||
571 | */ | ||
572 | device = PCI_DEVICE_ID_VIA_8235; | ||
573 | break; | ||
574 | } | ||
558 | } | 575 | } |
559 | 576 | ||
560 | switch(device) | 577 | switch(device) { |
561 | { | 578 | case PCI_DEVICE_ID_VIA_82C586_0: |
562 | case PCI_DEVICE_ID_VIA_82C586_0: | 579 | r->name = "VIA"; |
563 | r->name = "VIA"; | 580 | r->get = pirq_via586_get; |
564 | r->get = pirq_via586_get; | 581 | r->set = pirq_via586_set; |
565 | r->set = pirq_via586_set; | 582 | return 1; |
566 | return 1; | 583 | case PCI_DEVICE_ID_VIA_82C596: |
567 | case PCI_DEVICE_ID_VIA_82C596: | 584 | case PCI_DEVICE_ID_VIA_82C686: |
568 | case PCI_DEVICE_ID_VIA_82C686: | 585 | case PCI_DEVICE_ID_VIA_8231: |
569 | case PCI_DEVICE_ID_VIA_8231: | 586 | case PCI_DEVICE_ID_VIA_8235: |
570 | /* FIXME: add new ones for 8233/5 */ | 587 | /* FIXME: add new ones for 8233/5 */ |
571 | r->name = "VIA"; | 588 | r->name = "VIA"; |
572 | r->get = pirq_via_get; | 589 | r->get = pirq_via_get; |
573 | r->set = pirq_via_set; | 590 | r->set = pirq_via_set; |
574 | return 1; | 591 | return 1; |
575 | } | 592 | } |
576 | return 0; | 593 | return 0; |
577 | } | 594 | } |