lkml.org 
[lkml]   [2005]   [May]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRE: [PATCH] bug in VIA PCI IRQ routing
Date
From
>-----Original Message-----
>From: Karsten Keil [mailto:kkeil@suse.de]
>Sent: Monday, May 23, 2005 5:59 AM
>To: linux-kernel@vger.kernel.org
>Cc: Andrew Morton; Aleksey Gorelov
>Subject: [PATCH] bug in VIA PCI IRQ routing
>
>Hi,
>
>during certification of some systems with VIA 82C586_0 chipset
>we found that the PCI IRQ routing of PIRQD line goes wrong and
>the system
>will get stuck because of unacknowledged IRQs.
>It seems that the special case for PIRQD (pirq 4) is not needed for all
>VIA versions. With this patch, the IRQ routing on these systems works
>again (It did work with older 2.4 kernel versions prior the
>PIRQD change)

Does anybody have 82C586 datasheet to verify 0x57 register ?
For all I can say, both 82C686 & 8231 DO need special handling for
PIRQD,
since PIRQD routing is setup via bits 7-4 in 0x57 (see datasheets from
VIA
website). It seems like 82C586 might be different...

Aleks.

>
>diff -urN linux-2.6.12-rc4-git7.org/arch/i386/pci/irq.c
>linux-2.6.12-rc4-git7/arch/i386/pci/irq.c
>--- linux-2.6.12-rc4-git7.org/arch/i386/pci/irq.c
>2005-05-23 13:35:48.562759583 +0200
>+++ linux-2.6.12-rc4-git7/arch/i386/pci/irq.c 2005-05-23
>13:41:47.349473060 +0200
>@@ -26,6 +26,7 @@
>
> static int broken_hp_bios_irq9;
> static int acer_tm360_irqrouting;
>+static int via_pirq_patch_value = 5;
>
> static struct irq_routing_table *pirq_table;
>
>@@ -217,12 +218,12 @@
> */
> static int pirq_via_get(struct pci_dev *router, struct
>pci_dev *dev, int pirq)
> {
>- return read_config_nybble(router, 0x55, pirq == 4 ? 5 : pirq);
>+ return read_config_nybble(router, 0x55, pirq == 4 ?
>via_pirq_patch_value : pirq);
> }
>
> static int pirq_via_set(struct pci_dev *router, struct
>pci_dev *dev, int pirq, int irq)
> {
>- write_config_nybble(router, 0x55, pirq == 4 ? 5 : pirq, irq);
>+ write_config_nybble(router, 0x55, pirq == 4 ?
>via_pirq_patch_value : pirq, irq);
> return 1;
> }
>
>@@ -512,6 +513,7 @@
> switch(device)
> {
> case PCI_DEVICE_ID_VIA_82C586_0:
>+ via_pirq_patch_value = 4;
> case PCI_DEVICE_ID_VIA_82C596:
> case PCI_DEVICE_ID_VIA_82C686:
> case PCI_DEVICE_ID_VIA_8231:
>
>--
>Karsten Keil
>SuSE Labs
>ISDN development
>

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-05-23 19:49    [W:0.061 / U:0.156 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site