uart(4) busted on sparc64 now?

John Baldwin jhb at freebsd.org
Mon Nov 21 12:00:04 PST 2005


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 at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-sparc64 mailing list