Messages in this thread | | | Subject | RE: [PATCH] bug in VIA PCI IRQ routing | Date | Mon, 23 May 2005 12:53:41 -0700 | From | "Aleksey Gorelov" <> |
| |
>-----Original Message----- >From: Ondrej Zary [mailto:linux@rainbow-software.org] >Sent: Monday, May 23, 2005 11:25 AM >To: Aleksey Gorelov >Cc: Karsten Keil; linux-kernel@vger.kernel.org; Andrew Morton; >jgarzik@pobox.com >Subject: Re: [PATCH] bug in VIA PCI IRQ routing > >Aleksey Gorelov wrote: >>>-----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. >> > >This is from 82C586B datasheet (the 82C586A datasheet shows the same >register layout): > >Note: The definitions of the fields of the following three >registers were incorrectly documented in some earlier >revisions of this document. The silicon has not changed >and the following definition should be used for all silicon >revisions: > >Offset 55 - PNP IRQ Routing 1 >....................................... RW >These bits control routing for external IRQ inputs MIRQ0-1. >7-4 PIRQD# Routing (see PnP IRQ routing table) >3-0 MIRQ0 Routing (see PnP IRQ routing table) > >Offset 56 - PNP IRQ Routing 2 >....................................... RW >7-4 PIRQA# Routing (see PnP IRQ routing table) >3-0 PIRQB# Routing (see PnP IRQ routing table) > >Offset 57 - PNP IRQ Routing 3 >....................................... RW >7-4 PIRQC# Routing (see PnP IRQ routing table) >3-0 MIRQ1 Routing (see PnP IRQ routing table) > >Note: these bits must be set to 0 if Rx48[4]=1 and >Rx59[1]=1 (input IRQ8# on MIRQ1 pin 106) > >PnP IRQ Routing Table >0000 Disabled................................................. default >0001 IRQ1 >0010 Reserved >0011 IRQ3 >0100 IRQ4 >0101 IRQ5 >0110 IRQ6 >0111 IRQ7 >1000 Reserved >1001 IRQ9 >1010 IRQ10 >1011 IRQ11 >1100 IRQ12 >1101 Reserved >1110 IRQ14 >1111 IRQ15
Hmm, this is way different.
Karsten,
could you please verify if attached patch works for you ? Another unknown C596 south bridge. I wonder if it the same as 586, or closer to 686 ?
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/ >> > > >-- >Ondrej Zary > [unhandled content-type:application/octet-stream]
| |