FEC_IEVENT_RFIFO_ERROR
Babarovic Ivica
ivica at asist-traffic.com
Fri Mar 4 00:14:54 EST 2005
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
....
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;
}
------------------------------------------------------------------------------------------
When fec_interrupt() is called also from fec.c.
------------------------------------------------------------------------------------------
static irqreturn_t fec_interrupt(int irq, void *dev_id, struct pt_regs
*regs)
{
struct net_device *dev = (struct net_device *)dev_id;
struct fec_priv *priv = (struct fec_priv *)dev->priv;
struct mpc52xx_fec *fec = priv->fec;
int ievent;
ievent = in_be32(&fec->ievent);
out_be32(&fec->ievent, ievent); /* clear pending events */
if (ievent & (FEC_IEVENT_RFIFO_ERROR | FEC_IEVENT_XFIFO_ERROR)) {
if (ievent & FEC_IEVENT_RFIFO_ERROR)
--> printk(KERN_WARNING "FEC_IEVENT_RFIFO_ERROR\n");
if (ievent & FEC_IEVENT_XFIFO_ERROR)
printk(KERN_WARNING "FEC_IEVENT_XFIFO_ERROR\n");
fec_reinit(dev);
}
else if (ievent & FEC_IEVENT_MII)
fec_mii(dev);
return IRQ_HANDLED;
}
-------------------------------------------------------------------------------------------------
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?
More information about the Linuxppc-embedded
mailing list