[U-Boot] GT-64120 PCI init

Richard Danter radanter at googlemail.com
Tue Aug 12 04:20:56 CEST 2008


2008/8/8 Richard Danter <radanter at googlemail.com>:
> I now have a driver that initialises the 64120 and U-Boot sees the
> bridge and Ethernet card. So far so good! But the Ethernet card can
> not ping anything on my network.
>
> This is what I see...
>
> --8<--
> U-Boot 1.3.3-svn19 (Aug  8 2008 - 15:32:31)
>
> Board: PPMC MIPS
> DRAM:  64 MB
> Flash:  4 MB
> In:    serial
> Out:   serial
> Err:   serial
> Net:   i82559#0
> => pci
> Scanning PCI devices on bus 0
> BusDevFun  VendorId   DeviceId   Device Class       Sub-Class
> _____________________________________________________________
> 00.00.00   0x11ab     0x4620     Bridge device           0x00
> 00.07.00   0x8086     0x1030     Network controller      0x00
> 00.08.00   0x1011     0x0026     Bridge device           0x04
> => printenv
> baudrate=9600
> ethact=i82559#0
> ipaddr=192.168.1.84
> netmask=255.255.255.0
> stdin=serial
> stdout=serial
> stderr=serial
>
> Environment size: 113/32764 bytes
> => ping 192.168.1.1
> i82559#0: Tx error buffer not ready
> ping failed; host 192.168.1.1 is not alive
> --8<--
>
> My guess is that there is probably still something I did not do in the
> PCI init code, but I have looked at as many examples as I can find and
> I can't see anything amiss. Any thoughts on what would case the buffer
> not to work even though the Ethernet card itself is seen and appears
> to be detected correctly?

OK, I think I figured this out but still not sure what the correct
solution is...

The tx_ring and rx_ring buffers are being placed in SDRAM accessed via
kseg0 (cached) at 0x8nnnnnnn. After trying to ping and getting the
timeout I see the following at this location...

83ff8d30: 00000240 308dff03 16080001 00002203    ... at 0.........".
83ff8d40: 01002e00 60088868 0040f284 31050000    ....`..h. at ..1...

But if I look at the same physical address via kseg1 (uncached) at
0xAnnnnnnn then I see...

a3ff8d30: 00a00240 308dff03 16080001 00002203    ... at 0.........".
a3ff8d40: 01002e00 60088868 0040f284 31050000    ....`..h. at ..1...

I think the 00a0 at the start is the correct value (Tx done). Can
anyone confirm this?

If so then the problem seems to be that I need to read/write the Tx/Rx
buffers via kseg1 and not kseg0. But in general I want as much data
and code in kseg0 as possible to get the best performance.

What is the correct way to do this?

Thanks
Rich



More information about the U-Boot mailing list