Subject: Re: FEC_IEVENT_RFIFO_ERROR

From: Babarovic Ivica <[email-masked]>
Date: Thu, 03 Mar 2005 16:52:01 +0100

Sylvain Munaut wrote:

> Hi
>
>> I run 2.6.10-rc2 kernel (http://www.246tNt.com/mpc52xx/)
>> for MPC5200 chip on a custom board that is almost lite5200 compatible.
>> I noticed a couple of times I have a strange error at bootup.
>> It was FEC_IEVENT_RFIFO_ERROR. Most of the times this
>> went trough without problems but since today system just hangs.
>> Sometimes with several printouts of this error.
>> ---boot sequence ------
>> FEC_IEVENT_RFIFO_ERROR
>> FEC_IEVENT_RFIFO_ERROR
>> FEC_IEVENT_RFIFO_ERROR
>> ....
>
>
> Theses are definitly not "normal" but you said "since today it just 
> hangs",
> did something change in the environment of the card ?

I changed the card yesterday and I got fresh bootloader on. I don't compile
bootloader, I receive it with the board. Maybe I should change this 
practice.
Anyway as I said I got the new board yesterday with some hardware fixes 
and I
managed to get it up after I set up bootloader environment. It worked 
until this mornig.
I was working on my ( noob :D ) custom drivers and executed another
cycle of make/copy image/reboot  and noticed that for some reason
fec.c and fec_phy.c got also recompiled. After that, things stoped working.
I really don't know why those two got into the make routine but that was
the end of fun. :D
I'm stuck at this error now and lot's of new stuff to learn. :D I don't 
mind that
though although I got completely of track with what I was doing before.

>
>> I traced a problem a bit and found that this happenes at
>> mpc52xx_fec_probe() function in fec.c at this point:
>> ----------------------------------------------------------------------------------------- 
>>
>>       /* Get the IRQ we need one by one */
>>                /* Control */
>>        dev->irq = ocp->def->irq;
>> -->       if (request_irq(dev->irq, &fec_interrupt, SA_INTERRUPT, 
>>                        "mpc52xx_fec_ctrl", dev)) {
>>                printk(KERN_ERR "mpc52xx_fec: ctrl interrupt request 
>> failed\n");
>>                ret = -EBUSY;
>>                dev->irq = -1;  /* Don't try to free it */
>>                goto probe_error;
>>        }
>> ------------------------------------------------------------------------------------------ 
>>
>
>
> It ovbiously can't happen before since the message it printed in that 
> interrupt
> handler. But it should not happen there either (not so early) !
>
> This error globally says : "Somthing got wrong with the receive 
> buffer". But
> at this point, frame reception is not yet enabled, how could it go 
> wrong ? Unless
> your bootloader don't take care of shutting down the fec, then frames 
> may be
> stuck in the fifo between the bootloader and the fec init ...

I think I understand what you're saying.
Hmmm. I really don't know what bootloader takes care of.
What should I do to check this? Should I try with another
version of bootloader? BTW I got the board with U-Boot 1.1.1.

>
>> This is what I found in MPC5200 Users Manual:
>> Receive FIFO Error--indicates error occurred within the forest green 
>> version
>> RX FIFO. When RFIFO_ERROR bit is set, ECNTRL.ETHER_EN is cleared,
>> halting FEC frame processing. When this occurs, software must ensure 
>> both
>> the FIFO Controller and BestComm are soft-reset.
>>
>> Any ideas on what could be causing this?
>
>
> I can't explain why this happen so early at init (as I said before) 
> but other things that could
> cause such an event :
> - We don't have enough buffer descriptors : The bescomm task just fill 
> them all and runs out
>   of them before the interrupt is handled.
> - The bestcomm engine don't flush the RX fifo quicly enough. Currently 
> the only tasks
> - Bestcomm stopped processing for whatever reason ...
> - Something else that I don't see at the moment. I'll try to "stress 
> test" network a little bit,
> see if I can reproduce the issue.
>
> In the mean time, pull the latest change, I just pushed some fixes 
> related to frame reception,
> I don't think it's related to your issue but ...
>
Ok. I will try with this now.