public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* pci-irq VIA82C586 problem on IBM 4694-205 kernel version 2.4.29
       [not found]     ` <20050513164654.GB30792@us.ibm.com>
@ 2005-05-17 14:27       ` Salomon, Frank
  2005-05-18 11:33         ` Marcelo Tosatti
  0 siblings, 1 reply; 4+ messages in thread
From: Salomon, Frank @ 2005-05-17 14:27 UTC (permalink / raw)
  To: linux-net, linux-kernel; +Cc: Don Fry

Hi All,

With kernel version 2.4.18 I have no problem to run pcnet32.o on the IBM 
4694-205. Now I switch to kernel version 2.4.29. insmod crc32 : ok , 
insmod mii : ok , insmod pcnet32 : ok.

But if I run ifconfig (ifup) the system fries. Can't toggle the numlock 
led. I find out that the system generates permanently interrupts from 
the pcnet32 chip after calling request_irq (irq=9).

lspci:
00:00.0 Host bridge: VIA Technologies, Inc. VT82C585VP [Apollo VP1/VPX] 
(rev 25)
00:07.0 ISA bridge: VIA Technologies, Inc. VT82C586/A/B PCI-to-ISA 
[Apollo VP] (rev 47)
00:07.1 IDE interface: VIA Technologies, Inc. VT82C586/B/686A/B PIPC Bus 
Master IDE (rev 06)
00:07.2 USB Controller: VIA Technologies, Inc. USB (rev 02)
00:07.3 Non-VGA unclassified device: VIA Technologies, Inc. VT82C586B 
ACPI (rev 10)
00:0a.0 VGA compatible controller: Cirrus Logic GD 5446
00:0b.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 
[PCnet32 LANCE] (rev 43)


A possible solution could be (only tested on IBM 4694-205 and I don't 
have other systems with VIA Tech.):


diff -u 2.4.29_orig/arch/i386/kernel/pci-irq.c 
2.4.29/arch/i386/kernel/pci-irq.c
--- 2.4.29_orig/arch/i386/kernel/pci-irq.c      Wed Jan 19 15:09:25 2005
+++ 2.4.29/arch/i386/kernel/pci-irq.c   Tue May 17 15:55:28 2005
@@ -214,6 +214,17 @@
         return 1;
  }

+static int pirq_via_586_get(struct pci_dev *router, struct pci_dev 
*dev, int pirq)
+{
+       return read_config_nybble(router, 0x55, pirq);
+}
+static int pirq_via_586_set(struct pci_dev *router, struct pci_dev 
*dev, int pirq, int irq)
+{
+       write_config_nybble(router, 0x55, pirq, irq);
+       return 1;
+}
+
+
  /*
   * ITE 8330G pirq rules are nibble-based
   * FIXME: pirqmap may be { 1, 0, 3, 2 },
@@ -649,6 +660,10 @@
         switch(device)
         {
                 case PCI_DEVICE_ID_VIA_82C586_0:
+                       r->name = "VIA";
+                       r->get = pirq_via_586_get;
+                       r->set = pirq_via_586_set;
+                       return 1;
                 case PCI_DEVICE_ID_VIA_82C596:
                 case PCI_DEVICE_ID_VIA_82C686:
                 case PCI_DEVICE_ID_VIA_8231:


Best regards, Frank

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: pci-irq VIA82C586 problem on IBM 4694-205 kernel version 2.4.29
  2005-05-17 14:27       ` pci-irq VIA82C586 problem on IBM 4694-205 kernel version 2.4.29 Salomon, Frank
@ 2005-05-18 11:33         ` Marcelo Tosatti
  2005-05-19  7:44           ` Salomon, Frank
  0 siblings, 1 reply; 4+ messages in thread
From: Marcelo Tosatti @ 2005-05-18 11:33 UTC (permalink / raw)
  To: Salomon, Frank; +Cc: linux-net, linux-kernel, Don Fry


Hi Frank,

On Tue, May 17, 2005 at 04:27:20PM +0200, Salomon, Frank wrote:
> Hi All,
> 
> With kernel version 2.4.18 I have no problem to run pcnet32.o on the IBM 
> 4694-205. Now I switch to kernel version 2.4.29. insmod crc32 : ok , 
> insmod mii : ok , insmod pcnet32 : ok.
> 
> But if I run ifconfig (ifup) the system fries. Can't toggle the numlock 
> led. I find out that the system generates permanently interrupts from 
> the pcnet32 chip after calling request_irq (irq=9).
> 
> lspci:
> 00:00.0 Host bridge: VIA Technologies, Inc. VT82C585VP [Apollo VP1/VPX] 
> (rev 25)
> 00:07.0 ISA bridge: VIA Technologies, Inc. VT82C586/A/B PCI-to-ISA 
> [Apollo VP] (rev 47)
> 00:07.1 IDE interface: VIA Technologies, Inc. VT82C586/B/686A/B PIPC Bus 
> Master IDE (rev 06)
> 00:07.2 USB Controller: VIA Technologies, Inc. USB (rev 02)
> 00:07.3 Non-VGA unclassified device: VIA Technologies, Inc. VT82C586B 
> ACPI (rev 10)
> 00:0a.0 VGA compatible controller: Cirrus Logic GD 5446
> 00:0b.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 
> [PCnet32 LANCE] (rev 43)
> 
> 
> A possible solution could be (only tested on IBM 4694-205 and I don't 
> have other systems with VIA Tech.):

Why the current get/set methods for via pirq do not work as expected? 
                                                                                                                                                                                   
/*
 * The VIA pirq rules are nibble-based, like ALI,
 * but without the ugly irq number munging.
 * However, PIRQD is in the upper instead of lower nibble.
 */
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);
}
                                                                                
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);
        return 1;
}

Only difference is that your change ignores the "pirq" value... Is that 
the problem?


> diff -u 2.4.29_orig/arch/i386/kernel/pci-irq.c 
> 2.4.29/arch/i386/kernel/pci-irq.c
> --- 2.4.29_orig/arch/i386/kernel/pci-irq.c      Wed Jan 19 15:09:25 2005
> +++ 2.4.29/arch/i386/kernel/pci-irq.c   Tue May 17 15:55:28 2005
> @@ -214,6 +214,17 @@
>         return 1;
>  }
> 
> +static int pirq_via_586_get(struct pci_dev *router, struct pci_dev 
> *dev, int pirq)
> +{
> +       return read_config_nybble(router, 0x55, pirq);
> +}
> +static int pirq_via_586_set(struct pci_dev *router, struct pci_dev 
> *dev, int pirq, int irq)
> +{
> +       write_config_nybble(router, 0x55, pirq, irq);
> +       return 1;
> +}
> +
> +
>  /*
>   * ITE 8330G pirq rules are nibble-based
>   * FIXME: pirqmap may be { 1, 0, 3, 2 },
> @@ -649,6 +660,10 @@
>         switch(device)
>         {
>                 case PCI_DEVICE_ID_VIA_82C586_0:
> +                       r->name = "VIA";
> +                       r->get = pirq_via_586_get;
> +                       r->set = pirq_via_586_set;
> +                       return 1;
>                 case PCI_DEVICE_ID_VIA_82C596:
>                 case PCI_DEVICE_ID_VIA_82C686:
>                 case PCI_DEVICE_ID_VIA_8231:

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: pci-irq VIA82C586 problem on IBM 4694-205 kernel version 2.4.29
  2005-05-18 11:33         ` Marcelo Tosatti
@ 2005-05-19  7:44           ` Salomon, Frank
       [not found]             ` <20050525115910.GA15873@logos.cnet>
  0 siblings, 1 reply; 4+ messages in thread
From: Salomon, Frank @ 2005-05-19  7:44 UTC (permalink / raw)
  To: Marcelo Tosatti; +Cc: linux-net, linux-kernel

Hi Marcelo,

sorry, I don't know why my solution is working correctly. I compared the 
sources of the kernel version 2.4.18 with the version 2.4.29. Don send 
me a very interesting link (http://lwn.net/Articles/38879/).
I try to switch back to the function from version 2.4.18 and it is 
working correctly too. But I only switch back for the VIA 82C586 which 
is included in the IBM 4694-205 and in the 4694-245.


Best regards, Frank





Marcelo Tosatti wrote:
> Hi Frank,
> 
> On Tue, May 17, 2005 at 04:27:20PM +0200, Salomon, Frank wrote:
> 
>>Hi All,
>>
>>With kernel version 2.4.18 I have no problem to run pcnet32.o on the IBM 
>>4694-205. Now I switch to kernel version 2.4.29. insmod crc32 : ok , 
>>insmod mii : ok , insmod pcnet32 : ok.
>>
>>But if I run ifconfig (ifup) the system fries. Can't toggle the numlock 
>>led. I find out that the system generates permanently interrupts from 
>>the pcnet32 chip after calling request_irq (irq=9).
>>
>>lspci:
>>00:00.0 Host bridge: VIA Technologies, Inc. VT82C585VP [Apollo VP1/VPX] 
>>(rev 25)
>>00:07.0 ISA bridge: VIA Technologies, Inc. VT82C586/A/B PCI-to-ISA 
>>[Apollo VP] (rev 47)
>>00:07.1 IDE interface: VIA Technologies, Inc. VT82C586/B/686A/B PIPC Bus 
>>Master IDE (rev 06)
>>00:07.2 USB Controller: VIA Technologies, Inc. USB (rev 02)
>>00:07.3 Non-VGA unclassified device: VIA Technologies, Inc. VT82C586B 
>>ACPI (rev 10)
>>00:0a.0 VGA compatible controller: Cirrus Logic GD 5446
>>00:0b.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 
>>[PCnet32 LANCE] (rev 43)
>>
>>
>>A possible solution could be (only tested on IBM 4694-205 and I don't 
>>have other systems with VIA Tech.):
> 
> 
> Why the current get/set methods for via pirq do not work as expected? 
>                                                                                                                                                                                    
> /*
>  * The VIA pirq rules are nibble-based, like ALI,
>  * but without the ugly irq number munging.
>  * However, PIRQD is in the upper instead of lower nibble.
>  */
> 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);
> }
>                                                                                 
> 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);
>         return 1;
> }
> 
> Only difference is that your change ignores the "pirq" value... Is that 
> the problem?
> 
> 
> 
>>diff -u 2.4.29_orig/arch/i386/kernel/pci-irq.c 
>>2.4.29/arch/i386/kernel/pci-irq.c
>>--- 2.4.29_orig/arch/i386/kernel/pci-irq.c      Wed Jan 19 15:09:25 2005
>>+++ 2.4.29/arch/i386/kernel/pci-irq.c   Tue May 17 15:55:28 2005
>>@@ -214,6 +214,17 @@
>>        return 1;
>> }
>>
>>+static int pirq_via_586_get(struct pci_dev *router, struct pci_dev 
>>*dev, int pirq)
>>+{
>>+       return read_config_nybble(router, 0x55, pirq);
>>+}
>>+static int pirq_via_586_set(struct pci_dev *router, struct pci_dev 
>>*dev, int pirq, int irq)
>>+{
>>+       write_config_nybble(router, 0x55, pirq, irq);
>>+       return 1;
>>+}
>>+
>>+
>> /*
>>  * ITE 8330G pirq rules are nibble-based
>>  * FIXME: pirqmap may be { 1, 0, 3, 2 },
>>@@ -649,6 +660,10 @@
>>        switch(device)
>>        {
>>                case PCI_DEVICE_ID_VIA_82C586_0:
>>+                       r->name = "VIA";
>>+                       r->get = pirq_via_586_get;
>>+                       r->set = pirq_via_586_set;
>>+                       return 1;
>>                case PCI_DEVICE_ID_VIA_82C596:
>>                case PCI_DEVICE_ID_VIA_82C686:
>>                case PCI_DEVICE_ID_VIA_8231:
> 
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: pci-irq VIA82C586 problem on IBM 4694-205 kernel version 2.4.29
       [not found]             ` <20050525115910.GA15873@logos.cnet>
@ 2005-05-31 13:54               ` Salomon, Frank
  0 siblings, 0 replies; 4+ messages in thread
From: Salomon, Frank @ 2005-05-31 13:54 UTC (permalink / raw)
  To: Marcelo Tosatti; +Cc: linux-kernel, linux-net, brazilnut

Hi Marcelo,

The patch you have referenced is working correctly on my IBM 4694-205.
Many thanks,
Frank


Marcelo Tosatti wrote:
> 
> 
> Hi Frank,
> 
> A fix for the problem has just been merged in v2.4.31-rc1 - I would 
> appreciate if you can test that.
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2005-05-31 13:56 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <428379AC.9080206@wincor-nixdorf.com>
     [not found] ` <20050512162803.GA15201@us.ibm.com>
     [not found]   ` <42847C64.5080405@wincor-nixdorf.com>
     [not found]     ` <20050513164654.GB30792@us.ibm.com>
2005-05-17 14:27       ` pci-irq VIA82C586 problem on IBM 4694-205 kernel version 2.4.29 Salomon, Frank
2005-05-18 11:33         ` Marcelo Tosatti
2005-05-19  7:44           ` Salomon, Frank
     [not found]             ` <20050525115910.GA15873@logos.cnet>
2005-05-31 13:54               ` Salomon, Frank

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox