From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: "R. Herbst" <ruediger.herbst@googlemail.com>
Cc: linux-kernel@vger.kernel.org, David Miller <davem@davemloft.net>,
Matt <jackdachef@gmail.com>,
geert@linux-m68k.org
Subject: Re: Sun GEM PPC32 Bug?
Date: Sun, 06 Feb 2011 10:39:21 +1100 [thread overview]
Message-ID: <1296949161.2349.839.camel@pasglop> (raw)
In-Reply-To: <4D4D9882.107@googlemail.com>
On Sat, 2011-02-05 at 19:35 +0100, R. Herbst wrote:
> > I think we're simply not resetting enough when the RX FIFO overflow
> > happens.
> >
> > Just for fun I checked the OpenBSD GEM driver to see what they do.
> > When an overflow occurs, they bump the statistic, record the current
> > read and write fifo pointer registers, and schedule a watchdog timer
> > for 400ms into the future.
> >
> > If the watchdog timer sees that the RX FIFO overflow bit is still set
> > in the RX status register, and the RX FIFO read and write pointers
> > have not changed, it resets the entire chip.
> >
> > We unconditionally reset the RX MAC when an overflow occurs, that may
> > simply not be enough to unwedge this thing.
Right. It would be quite easy for us to do the same thing. Interestingly
enough, I have never observed this behaviour on any of my machines (a
wide range of 32-bit and 64-bit Apple machines).
Also, Apple's own driver does things differently. In case of overflow
interrupt, it seems to only bump some statistics. However, it has a
timeout if no packets have been received for a while (5 seconds) and the
Rx fifo overflow bit is set. In that case, they restart the receiver
(and the receiver only).
Their sequence for restarting the receiver however is a tad different
than ours (mostly slightly different ordering of things), it's hard to
tell whether that's relevant or not, but some of the things do make
sense, such as they stop the DMA before resetting the MAC and restart it
after re-enabling the MAC.
If I find some time tonight, else tomorrow, I'll whip up a couple of
patches:
- One simpler re-arranging our Rx reset sequence and adding a test for
the overflow bit at the end, printing out the results, etc...
- One that basically always reset the chip on overflow.
>From there we can decide what works and maybe add a bit of a timeout
to the second approach if needed etc... but how often does that overflow
happens in practice ?
Cheers,
Ben.
next prev parent reply other threads:[~2011-02-05 23:39 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-04 16:55 Sun GEM PPC32 Bug? Matt
2011-02-04 20:51 ` Benjamin Herrenschmidt
2011-02-04 22:55 ` David Miller
2011-02-05 18:35 ` R. Herbst
2011-02-05 23:39 ` Benjamin Herrenschmidt [this message]
2011-02-05 23:45 ` Benjamin Herrenschmidt
2011-02-06 0:20 ` Matt
2011-02-05 20:32 ` Matt
2011-02-05 23:20 ` Benjamin Herrenschmidt
2011-02-06 14:22 ` R. Herbst
-- strict thread matches above, loose matches on Subject: below --
2011-02-06 15:01 R. Herbst
2011-02-07 5:34 ` Benjamin Herrenschmidt
2011-02-08 18:28 ` R. Herbst
2011-02-08 19:58 ` Andreas Schwab
2011-02-09 0:18 ` Benjamin Herrenschmidt
2011-02-09 17:37 ` Andreas Schwab
2011-02-03 19:47 R. Herbst
2011-02-04 8:02 ` Geert Uytterhoeven
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1296949161.2349.839.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=davem@davemloft.net \
--cc=geert@linux-m68k.org \
--cc=jackdachef@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ruediger.herbst@googlemail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox