mpc10x PCI Bus error

Eiji Ogata eiji_ogata at ooi.co.jp
Sat Nov 29 13:54:20 EST 2003


Hi all.

I am porting linuxppc to our custom board which based mpc8245.
cpu is connected two rtl8100 nics with PCI bus and detected them when
kernel startup. /proc/pci info and 'lspci -x' results are below.

PCI devices found:
  Bus  0, device   0, function  0:
    Host bridge: PCI device 1057:0006 (Motorola) (rev 20).
      Prefetchable 32 bit memory at 0x0 [0xffffffff].
      Non-prefetchable 32 bit memory at 0x0 [0xfff].
      Prefetchable 32 bit memory at 0x0 [0xffffffff].
  Bus  0, device  16, function  0:
    Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139 (rev 16).
      IRQ 16.
      Master Capable.  Latency=128.  Min Gnt=32.Max Lat=32.
      I/O at 0xfebfff00 [0xfebfffff].
      Non-prefetchable 32 bit memory at 0x8fffff00 [0x8fffffff].
  Bus  0, device  17, function  0:
    Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139 (#2) (rev 16).

      IRQ 17.
      Master Capable.  Latency=128.  Min Gnt=32.Max Lat=32.
      I/O at 0xfebffe00 [0xfebffeff].
      Non-prefetchable 32 bit memory at 0x8ffffe00 [0x8ffffeff].


00:00.0 Host bridge: Motorola: Unknown device 0006 (rev 14)
00: 57 10 06 00 04 00 20 20 14 00 00 06 00 00 00 00
10: 08 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff ff
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00

00:10.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139 (rev 10)
00: ec 10 39 81 07 00 00 22 10 00 00 02 00 80 00 00
10: 01 ff bf 00 00 ff ff 8f 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 ec 10 39 81
30: 00 00 00 00 00 00 00 00 00 00 00 00 10 01 20 20

00:11.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139 (rev 10)
00: ec 10 39 81 07 00 00 02 10 00 00 02 00 80 00 00
10: 01 fe bf 00 00 fe ff 8f 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 ec 10 39 81
30: 00 00 00 00 00 00 00 00 00 00 00 00 11 01 20 20


I tried ping command and no packets sent to network and got errors below.

myboard:~# ping 172.18.11.67
PING 172.18.11.67 (172.18.11.67): 56 data bytes

--- 172.18.11.67 ping statistics ---
8 packets transmitted, 0 packets received, 100% packet loss
myboard:~# NETDEV WATCHDOG: eth0: transmit timed out
NETDEV WATCHDOG: eth0: transmit timed out
eth0: Setting 100mbps half-duplex based on auto-negotiated partner ability 40a1.

eth0: Setting 100mbps half-duplex based on auto-negotiated partner ability 40a1.

eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 0200.
eth0: PCI Bus error 0200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: PCI Bus error 2200.
eth0: Too much work at interrupt, IntrStatus=0x8000.
eth0: Too much work at interrupt, IntrStatus=0x8000.


I checked rtl8100 registers with JTAG.

>BKM>dmb 8fffff00 100
 8FFFFF00: 00 10 C1 FF FF 01 00 00 80 00 00 00 00 00 00 00
 8FFFFF10: 00 20 00 00 00 20 00 00 00 20 00 00 00 20 00 00
 8FFFFF20: 00 80 A2 07 00 86 A2 07 00 8C A2 07 00 92 A2 07
 8FFFFF30: 00 00 A6 07 00 00 04 0D F0 FF 00 00 7F C0 42 80
 8FFFFF40: 80 06 40 74 8E F7 00 00 09 2A 18 41 7B 04 00 00
 8FFFFF50: 01 10 4C 00 00 00 00 00 10 00 80 00 00 00 10 00
 8FFFFF60: 0F 00 00 10 2D 78 E1 05 A1 40 01 00 00 00 00 00
 8FFFFF70: 00 00 00 00 C8 07 01 00 59 0C F6 60 60 26 73 7B
 8FFFFF80: 1A 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00
 8FFFFF90: 08 00 20 00 00 00 00 00 00 10 00 00 00 00 04 00
 8FFFFFA0: 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 08
 8FFFFFB0: 00 00 00 00 00 80 10 00 00 00 00 00 80 00 00 00
 8FFFFFC0: 00 00 00 C0 00 80 09 00 00 00 00 86 00 00 00 00
 8FFFFFD0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 8FFFFFE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 8FFFFFF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


Mentioned above Tx descriptors (offset 0x20-) are 0x07a28000,
0x07a28600, 0x07a28c00, 07a29200.

mpc8245's PCI bridge is supported by mpc10x_common.c.
mpc10x_common.c setup the bridge to 'PCI compatibility hole' mode which
 maps local memory between 0xa0000-0xbffff to PCI memory region.

I think bus error is caused by kernel did not assign PCI DMA memory
from 0xa0000-0xbffff.

I checked System.map and found no 'PCI compatibility hole'.
I think need to do two things which are PCI DMA memory assigned from
0xa0000-0xbffff and create 'PCI compatibility hole' to kernel image.

Q1.
How do I change kernel code to assign PCI DMA memory from 0xa0000-0xbffff
 ?

Q2.
How do I create 0xa0000-0xbffff hole to kernel image ?

Eiji Ogata


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-dev mailing list