Thread (15 messages) 15 messages, 4 authors, 2010-06-30

Re: b44: Reset due to FIFO overflow.

From: James Courtier-Dutton <hidden>
Date: 2010-06-28 21:37:22

On 28 June 2010 12:11, Eric Dumazet [off-list ref] wrote:
Le lundi 28 juin 2010 à 11:24 +0100, James Courtier-Dutton a écrit :
quoted
On 28 June 2010 10:13, Eric Dumazet [off-list ref] wrote:
quoted
Hi

Problem is we dont know if a Receive Fifo overflow is a minor or major
indication from b44 chip.

A minor indication would be : Chip tells us one or more frame were lost.
No special action needed from driver.

A major indication (as of current implemented in b44 driver) is :
I am completely out of order and need a reset. Please do it.

Patch to switch from major to minor indication is easy, but we dont know
if its valid or not.
diff --git a/drivers/net/b44.h b/drivers/net/b44.h
index e1905a4..514dc3a 100644
--- a/drivers/net/b44.h
+++ b/drivers/net/b44.h
@@ -42,7 +42,7 @@
 #define  ISTAT_EMAC            0x04000000 /* EMAC Interrupt */
 #define  ISTAT_MII_WRITE       0x08000000 /* MII Write Interrupt */
 #define  ISTAT_MII_READ                0x10000000 /* MII Read Interrupt */
-#define  ISTAT_ERRORS (ISTAT_DSCE|ISTAT_DATAE|ISTAT_DPE|ISTAT_RDU|ISTAT_RFO|ISTAT_TFU)
+#define  ISTAT_ERRORS (ISTAT_DSCE|ISTAT_DATAE|ISTAT_DPE|ISTAT_RDU|ISTAT_TFU)
 #define B44_IMASK      0x0024UL /* Interrupt Mask */
 #define  IMASK_DEF             (ISTAT_ERRORS | ISTAT_TO | ISTAT_RX | ISTAT_TX)
 #define B44_GPTIMER    0x0028UL /* General Purpose Timer */

Ok, are you saying that all I have to do is apply this patch,
reproduce the problem condition, and if it recovers OK, then we can go
with this fix?
If so, I will try it out after work.
Yes, please try the patch and tell us what happens.

Note : It can be better, it can be worse.

It can work on your b44 chip, and freeze another computer with another
b44 chip. Use at your own risk.
I tried the patch.
I also tried without the patch, but bypassed the hw reset in the RFO case.

In both cases, the hardware did not recover from the overflow.
An "ifconfig eth0 down" then "ifconfig eth0 up" was required to bring
it back to life, I.e. A manual hw reset.

What I did find is that once the RFO state is reached, it is not cleared.
I think we need to find a way to clear the RFO state.
The RFO state is cleared after a HW reset.

Kind Regards

James
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help