RE: [PATCH] bug in VIA PCI IRQ routing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>-----Original Message-----
>From: Karsten Keil [mailto:[email protected]] 
>Sent: Monday, May 23, 2005 5:59 AM
>To: [email protected]
>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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux