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 | |
| 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>
| -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 | } |
