strange behavior of 8139too on recent kernels
From: Christoph Gysin
Date: Thu Dec 04 2008 - 05:43:32 EST
I have custom board based on AMD GeodeLX with an RTL-8100C(L) network
chip. I was using 2.4 kernels for a long time without any problems.
With 2.6 I experience weird behaviour:
linux-2.4
The device works, ~10MByte/s Rx/Tx
<=linux-2.6.25
The device works, although with weak performance. Rx:8MByte/s Tx:1.4MByte/s
>=linux-2.6.26
The device is recognized, but fails while doing "ifconfig eth0 up" with:
eth0: SIOCSIFFLAGS: Device or resource busy
I tried various combination of the following options, no difference:
CONFIG_8139TOO_PIO
CONFIG_8139TOO_TUNE_TWISTER
CONFIG_8139TOO_8129
CONFIG_8139_OLD_RX_RESET
The relevant part of dmesg:
8139too Fast Ethernet driver 0.9.28
eth0: RealTek RTL8139 at 0xd0006000, 00:03:2d:0e:8e:75, IRQ 15
eth0: Identified 8139 chip type 'RTL-8100B/8139D'
$ lspci -s 00:10.0 -vv
00:10.0 Ethernet controller: Realtek Semiconductor Co., Ltd.
RTL-8139/8139C/8139C+ (rev 10)
Subsystem: Realtek Semiconductor Co., Ltd. RT8139
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR+ INTx-
Latency: 32 (8000ns min, 16000ns max)
Interrupt: pin A routed to IRQ 15
Region 0: I/O ports at fc00 [size=256]
Region 1: Memory at effff000 (32-bit, non-prefetchable) [size=256]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=375mA PME(D0-,D1+,D2+,D3hot+,D3cold+)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
Kernel driver in use: 8139too
$ ethtool -d eth0
RealTek RTL-8100B/8139D registers:
------------------------------
0x00: MAC Address 00:03:2d:0e:8e:75
0x08: Multicast Address Filter 0x80000000 0x00000000
0x10: Transmit Status Desc 0 0x0008a072
0x14: Transmit Status Desc 1 0x0008a072
0x18: Transmit Status Desc 2 0x0008a072
0x1C: Transmit Status Desc 3 0x0008a072
0x20: Transmit Start Addr 0 0x0e3b8000
0x24: Transmit Start Addr 1 0x0e3b8600
0x28: Transmit Start Addr 2 0x0e3b8c00
0x2C: Transmit Start Addr 3 0x0e3b9200
0x30: Rx buffer addr (C mode) 0x0e3d0000
0x34: Early Rx Byte Count 0
0x36: Early Rx Status 0x0a
ERxGood ERxOverWrite
0x37: Command 0x0d
Rx on, Tx on
0x38: Current Address of Packet Read (C mode) 0x40d8
0x3A: Current Rx buffer address (C mode) 0x40e8
0x3C: Interrupt Mask 0xc07f
SERR TimeOut RxFIFO LinkChg RxNoBuf TxErr TxOK RxErr RxOK
0x3E: Interrupt Status 0x0000
0x40: Tx Configuration 0x77400680
0x44: Rx Configuration 0x0000f78e
0x48: Timer count 0x0874473d
0x4C: Missed packet counter 0x000000
0x50: EEPROM Command 0x00
0x51: Config 0 0x10
0x52: Config 1 0x8d
0x54: Timer interrupt 0x00000000
0x58: Media status 0x10
0x59: Config 3 0xc5
0x5A: Config 4 0x88
0x5C: Multiple Interrupt Select 0x0000
0x5E: PCI revision id 0x10
0x60: Transmit Status of All Desc (C mode) 0xf00f
0x62: MII Basic Mode Control Register 0x1100
0x64: MII Basic Mode Status Register 0x782d
0x66: MII Autonegotiation Advertising 0x01e1
0x68: MII Link Partner Ability 0x45e1
0x6A: MII Expansion 0x0001
0x6C: MII Disconnect counter 0x0000
0x6E: MII False carrier sense counter 0x0000
0x70: MII Nway test 0x0704
0x72: MII RX_ER counter 0x0000
0x74: MII CS configuration 0x07c0
0x78: PHY parameter 1 0x60f60c59
0x7C: Twister parameter 0x7b732660
0x80: PHY parameter 2 0x1a
0x84: PM CRC for wakeup frame 0 0x01
0x85: PM CRC for wakeup frame 1 0x00
0x86: PM CRC for wakeup frame 2 0x0a
0x87: PM CRC for wakeup frame 3 0x80
0x88: PM CRC for wakeup frame 4 0x00
0x89: PM CRC for wakeup frame 5 0x00
0x8A: PM CRC for wakeup frame 6 0x00
0x8B: PM CRC for wakeup frame 7 0x00
0x8C: PM wakeup frame 0 0x00000020 0x01140040
0x94: PM wakeup frame 1 0x00000002 0x00800000
0x9C: PM wakeup frame 2 0x00000080 0x08024100
0xA4: PM wakeup frame 3 0x20000002 0x04000000
0xAC: PM wakeup frame 4 0x00000002 0x00000210
0xB4: PM wakeup frame 5 0x00008a10 0x09000100
0xBC: PM wakeup frame 6 0x00002000 0x00000010
0xC4: PM wakeup frame 7 0x84000300 0x00000000
0xCC: PM LSB CRC for wakeup frame 0 0x00
0xCD: PM LSB CRC for wakeup frame 1 0x01
0xCE: PM LSB CRC for wakeup frame 2 0x00
0xCF: PM LSB CRC for wakeup frame 3 0x81
0xD0: PM LSB CRC for wakeup frame 4 0x08
0xD1: PM LSB CRC for wakeup frame 5 0x00
0xD2: PM LSB CRC for wakeup frame 6 0x00
0xD3: PM LSB CRC for wakeup frame 7 0x00
0xD8: Config 5 0x07
throughput on 2.6.25:
$ netio -t 10.0.0.12
TCP connection established.
Packet size 1k bytes: 11520 KByte/s Tx, 11458 KByte/s Rx.
Packet size 2k bytes: 11518 KByte/s Tx, 4686 KByte/s Rx.
Packet size 4k bytes: 6428 KByte/s Tx, 1383 KByte/s Rx.
Packet size 8k bytes: 6194 KByte/s Tx, 1393 KByte/s Rx.
Packet size 16k bytes: 4370 KByte/s Tx, 1392 KByte/s Rx.
Packet size 32k bytes: 3188 KByte/s Tx, 1391 KByte/s Rx.
$ netio -u 10.0.0.12
UDP connection established.
Packet size 1k bytes: 8870 KByte/s (22%) Tx, 999 KByte/s (0%) Rx.
Packet size 2k bytes: 8958 KByte/s (22%) Tx, 999 KByte/s (0%) Rx.
Packet size 4k bytes: 8314 KByte/s (29%) Tx, 1331 KByte/s (0%) Rx.
Packet size 8k bytes: 7278 KByte/s (37%) Tx, 1331 KByte/s (0%) Rx.
Packet size 16k bytes: 5232 KByte/s (55%) Tx, 1329 KByte/s (0%) Rx.
Packet size 32k bytes: 1151 KByte/s (90%) Tx, 1384 KByte/s (0%) Rx.
I'd be grateful for any hint what could have went wrong here.
Chris
--
echo mailto: NOSPAM !#$.'<*>'|sed 's. ..'|tr "<*> !#:2" org@fr33z3
--
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html