Finally, I figured out the problem. The main issue is in file irq.c, in
which the register starting at CHNL_OFFSET() is not set correctly in big
endian mode. With that problem, even though the serial port 8250 is
generating interrupt, the interrupt controller blocks it.
In big endian mode, the value written at line
writel(i << 24, REG(CHNL_OFFSET(i)));
I suspect this problem is applicable to AR7 running in big endian mode
since my board is almost the same to AR7. I am attaching a patch for
anyone's reference. Thanks to Florian, Kevin, Chris and Ralf for your
Best regards, Andrew
On Thu, 26 Nov 2009 09:45 +0100, "Florian Fainelli"
> Hi Andrew.
> Le jeudi 26 novembre 2009 01:24:13, firstname.lastname@example.org a écrit :
> > On Tue, 17 Nov 2009 20:03 -0500, "David VomLehn" <email@example.com>
> > wrote:
> > > On Tue, Nov 17, 2009 at 06:58:35PM -0600, firstname.lastname@example.org wrote:
> > > > On Wed, 18 Nov 2009 01:39 +0100, "Florian Fainelli"
> > > >
> > > > <email@example.com> wrote:
> > > > > -------------------------------
> > > >
> > > > Actually I already got this patch for the board in little endian mode,
> > > > and it is still there for the big endian mode. And this is one of the
> > > > place I have been wondering if that needs to be changed for big endian.
> > >
> > > It sounds like you've done a good job getting the bootloader and kernel
> > > to work, so this may be a silly suggestion, but are you sure your root
> > > filesystem and busybox are little-endian? It would be an easy mistake to
> > > make...
> > >
> > > > thanks. Andrew
> > >
> > > David VL
> > I have some clue on this issue now. It seems there is some problem with
> > the serial console operating in interrupt mode. If the 8250 is in
> > polling mode(set the IRQ for the 8250 serial port to 0), the output on
> > the console is fine. But with 8250 in interrupt mode, 8250 serial driver
> > does not receive any interrupt in serial8250_interrupt(). The same board
> > works just fine when operating in little endian mode with interruption.
> > I probably need to change something in IRQ initialization for big
> > endian. I will post my solution when I can get it to work. In the
> > meantime, any suggestion will be welcome.
> Do you need that patch to work in little-endian:
> serial_kludge.patch ? If so, you are likely to need it in big-endian too
> it works around a silicon issue.
> Best regards, Florian Fainelli
> Email: firstname.lastname@example.org
> Web: http://openwrt.org
> IRC: [florian] on irc.freenode.net
Description: Text Data