RE: [PATCH] bug in VIA PCI IRQ routing

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

 



 

>-----Original Message-----
>From: Ondrej Zary [mailto:[email protected]] 
>Sent: Monday, May 23, 2005 11:25 AM
>To: Aleksey Gorelov
>Cc: Karsten Keil; [email protected]; Andrew Morton; 
>[email protected]
>Subject: Re: [PATCH] bug in VIA PCI IRQ routing
>
>Aleksey Gorelov wrote:
>>>-----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.
>> 
>
>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 [email protected]
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at  http://www.tux.org/lkml/
>> 
>
>
>-- 
>Ondrej Zary
>

Attachment: via.patch
Description: via.patch


[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