[U-Boot-Users] FEC problem on MPC5200 board (Men PP01)

Jerry Van Baren gerald.vanbaren at smiths-aerospace.com
Thu Jan 5 15:05:14 CET 2006

Felipe Gil Castiñeira wrote:
> On Mér, 2006-01-04 at 11:13 -0500, Jerry Van Baren wrote:
>> Felipe Gil Castiñeira wrote:
>> > Hi everyone!
>> > > I am porting U-Boot to "Men mikro elektronik" PP01 module 
>> (MPC5200). The
>> > FEC is integrated on the MPC5200 and the PHY is a LXT971ALE 
>> transceiver.
>> > > U-Boot boots and recognizes the Ethernet device (I can read the PHY
>> > transceiver registers, change the LED status, etc.), but when I try to
>> > ping a target the system freezes (and the Watchdog resets the board).
>> > The behavior is just the same with tftp or bootp. > > I am sure it 
>> is not a hardware problem, as I can transfer files (for
>> > example u-boot.bin) from a computer to the same module using the
>> > original monitor (MENMON).
>> > >>From the debugging information *it seems the code fails in the 
>> function
>> > "mpc5xxx_fec_recv"*.  Furthermore, analyzing the network with 
>> Ethereal I
>> > can observe an ARP request generated by the PING and the corresponding
>> > answer (at this moment the watchdog resets the board). If I ping a non
>> > existent address the timer expires and I receive a "ping failed; host
>> > is not alive" (Ethereal detects the ARP request, but of
>> > course, there is not an ARP answer).
>> > > Any idea? Thanks in advance.
>> > > Best regards,
>> >     Felipe.
>> I don't know anything about your hardware, but from your description 
>> of the results I would guess that you have your ethernet receive 
>> buffer pointer(s) pointing into non-existant memory (very likely) or 
>> else pointing in the middle of important code (e.g. u-boot or your 
>> variables).
>> Scenario A: When you receive a packet, you get a bus fault which 
>> crashes your machine.
>> Scenario B: When you receive a packet, it scribbles on your code and 
>> crashes your machine.
>> I suggest you check your memory configuration and Rx buffer 
>> initialization.
>> gvb
>> P.S. If you send a broadcast (ping your target will cause an arp 
>> broadcast) or a packet directed to your target's MAC address (use the 
>> command line arp command to add your MAC address on your host machine 
>> and then send a ping), I bet your target will crash.
> Thanks Jerry,
> As you supposed if I send a packet to the board's MAC it crashes
> immediately or in the next access to the FEC (a ping from the MPC5200 
> board).
> I tried to understand where is the Rx buffer but the code is complex and
> I am not completely sure how it works. I think there is a "TxBD ring" 
> and a "RxBD ring" which store pointers (among other things) to the data 
> to be sent or received. These pointers are in SRAM and are read by the 
> SDMA (Smart DMA). In the case of the received data, I think that the 
> memory is "malloced"in "fec.c", so the received data should be in the 
> "malloc area" (DRAM).
> I increased the malloc area to 1 MB, so there is enough space. The TxBD 
> and RxBD rings are defined in a similar way and the Tx works correctly 
> so I suppose the problem is not here (I couldn't find anything wrong 
> with the SRAM).
> It seems that you are right, but I can't find anything wrong. As I 
> stated before, I am not sure this is the way the packet reception works: 
> perhaps Wolfgang can confirm/reject this. Any other suggestion?
> Best regards,
>     Felipe.

Hi Felipe,

Time to crank up the debugger, set a breakpoint in mpc5xxx_fec_recv, and 
start to learn the code.  The good news is that identifying _where_ the 
problem is and how to easily reproduce it on demand is 80% (or more!) of 
the debug time.

If you don't have a JTAG debugger, sprinkle in print statements.  Look 
for invalid pointers - print out pointers before they are used.


More information about the U-Boot mailing list