Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Nov 2005 15:00:09 -0500
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-sparc64@freebsd.org
Cc:        phk@freebsd.org
Subject:   Re: uart(4) busted on sparc64 now?
Message-ID:  <200511211500.10174.jhb@freebsd.org>
In-Reply-To: <200511211431.31051.jhb@freebsd.org>
References:  <200511211422.57431.jhb@freebsd.org> <200511211431.31051.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Monday 21 November 2005 02:31 pm, John Baldwin wrote:
> On Monday 21 November 2005 02:22 pm, John Baldwin wrote:
> > So on Friday I updated my ultra60 to HEAD.  It had been running HEAD from
> > about a month ago.  Today I came in and rebooted into the new kernel and
> > now it hangs probing uart1 off of a PUC device.  Note that I do not have
> > a keyboard and mouse plugged into this box.
> >
> > New dmesg:
> >
> > puc0: <Siemens SAB 82532 dual channel SCC> addr 0x1400400000-0x140040007f
> > irq 43 on ebus0 uart0: <SAB 82532 v3.2, channel A> on puc0
> > uart0: CTS oflow
> > uart0: console (9600,n,8,1)
> > uart1: <SAB 82532 v3.2, channel B> on puc0
> > <hang>
>
> Looks like maybe it is spinning here:
>
> sab82532_bus_setsig(struct uart_softc *sc, int sig)
> {
>         struct uart_bas *bas;
>         uint32_t new, old;
>         uint8_t mode, pvr;
>
>         bas = &sc->sc_bas;
>         do {
>                 old = sc->sc_hwsig;
>                 new = old;
>                 if (sig & SER_DDTR) {
>                         SIGCHG(sig & SER_DTR, new, SER_DTR,
>                             SER_DDTR);
>                 }
>                 if (sig & SER_DRTS) {
>                         SIGCHG(sig & SER_RTS, new, SER_RTS,
>                             SER_DRTS);
>                 }
>         } while (!atomic_cmpset_32(&sc->sc_hwsig, old, new));
>
>
> [halt - sent]
> KDB: enter: Line break on console
> [thread pid 0 tid 0 ]
> Stopped at      kdb_enter+0x3c: ta              %xcc, 1
> db> tr
> Tracing pid 0 tid 0 td 0xc035a1f8
> uart_intr_break() at uart_intr_break+0x24
> uart_intr() at uart_intr+0x94
> puc_intr() at puc_intr+0x54
> psycho_intr_stub() at psycho_intr_stub+0x8
> intr_execute_handlers() at intr_execute_handlers+0x78
> intr_fast() at intr_fast+0x7c
> -- interrupt level=0xd pil=0 %o7=0xc00ddb5c --
> sab82532_bus_setsig() at sab82532_bus_setsig+0xa0
> sab82532_bus_attach() at sab82532_bus_attach+0xf0
> uart_bus_attach() at uart_bus_attach+0x2d4
> ...

FYI, turning PUC_FASTINTR back off fixes it.  I'll probably move that over to 
DEFAULTS rather than hardcoding it in the source so that it's feasible for 
folks to turn it off in the kernel configs instead of having to hack the 
kernel to turn this (mis)feature off.

-- 
John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200511211500.10174.jhb>