[Soekris] net4801 and Routerboard 24 interrupt problem
Michael Smith
msmith at cbnco.com
Thu Mar 18 23:23:14 UTC 2004
Hi all,
We recently purchased a couple of 3.3v Mikrotik Routerboard 24 4-port
NICs. In a Soekris net4801 running Linux 2.4.25 and using the standard
in-kernel natsemi driver, the second and fourth ports on the Routerboard
don't generate interrupts when packets arrive. Packets are buffered, and
appear in the network stack only when the first or third interface
receives a packet and generates an interrupt.
If I leave a "ping" process running on another machine connected to the
Soekris' eth4 or eth6, nothing happens until I ping eth3 or eth5 from
another machine. Then I get a flurry of ICMP replies, and the interrupt
count goes up by only two.
I've tried two different Routerboards on two net4801s with the same
results. I tried going back to kernel 2.4.20 with the same result. I also
tried a couple of net4501s just in case, but couldn't get the interfaces
to come up: the Soekris assigned all the Routerboard NICs IRQ 0 (no IRQ?)
on boot.
I also tried on a recent PC running 2.4.24, in two configurations: all
Routerboard ports on different IRQs, and all ports on the same IRQ. It
worked as expected, so I think the problem is specific to the net4801.
The Soekris BIOS (1.23) reports the following PCI devices:
Slot Vend Dev ClassRev Cmd Stat CL LT HT Base1 Base2 Int
-------------------------------------------------------------------
0:00:0 1078 0001 06000000 0107 0280 00 00 00 00000000 00000000 00
0:06:0 100B 0020 02000000 0107 0290 00 3F 00 0000E101 A0000000 10
0:07:0 100B 0020 02000000 0107 0290 00 3F 00 0000E201 A0001000 10
0:08:0 100B 0020 02000000 0107 0290 00 3F 00 0000E301 A0002000 10
0:10:0 3388 0021 06040015 0107 0290 08 3F 01 00000000 00000000 I5
0:18:2 100B 0502 01018001 0005 0280 00 00 00 00000000 00000000 00
0:19:0 0E11 A0F8 0C031008 0117 0280 08 38 00 A0003000 00000000 11
1:08:0 100B 0020 02000000 0107 0290 00 3F 00 0000D001 A4000000 05
1:09:0 100B 0020 02000000 0107 0290 00 3F 00 0000D101 A4001000 05
1:10:0 100B 0020 02000000 0107 0290 00 3F 00 0000D201 A4002000 05
1:11:0 100B 0020 02000000 0107 0290 00 3F 00 0000D301 A4003000 05
The bottom four lines, on IRQ 5, are the Routerboard, I think.
In Linux:
# cat /proc/interrupts
CPU0
0: 18875 XT-PIC timer
1: 0 XT-PIC keyboard
2: 0 XT-PIC cascade
4: 1424 XT-PIC serial
5: 47 XT-PIC eth3, eth4, eth5, eth6
8: 0 XT-PIC rtc
10: 33 XT-PIC eth0, eth1, eth2
14: 11486 XT-PIC hd
NMI: 0
ERR: 0
I'm going to try adding a 100ms rx poll timer to the natsemi driver... not
pretty but it might work :)
Is there any way to change the way the net4801 assigns IRQs? If I could
force one or two of the ports to different IRQs, it might make for a
better workaround.
Thanks,
Mike
More information about the Soekris-tech
mailing list