kernel boot stuck at udbg_putc_cpm()

Shawn Jin shawnxjin at gmail.com
Fri Jul 9 17:35:43 EST 2010


I changed my toolchain and rebuilt the kernel image. This time all the
messages below magically displayed on the serial port. :-D Are all
these the early debugging messages?

> Here is the kernel log buf dump. Anything suspicious?
>
> <6>Using My MPC870 machine description
> <5>Linux version 2.6.33.5 (shawn at ubuntu) (gcc version 4.3.3 (GCC) )
> #10 Mon Jul 5 22:58:30 PDT 2010
> <7>Top of RAM: 0x8000000, Total RAM: 0x8000000
> <7>Memory hole size: 0MB
> <4>Zone PFN ranges:
...
<snipped>
...
> <7>time_init: decrementer frequency = 3.750000 MHz
> <7>time_init: processor frequency   = 120.000000 MHz
> <6>clocksource: timebase mult[42aaaaab] shift[22] registered
> <7>clockevent: decrementer mult[f5c28f] shift[32] cpu[0]
> <7>  alloc irq_desc for 18 on node 0
> <7>  alloc kstat_irqs on node 0
> <7>irq: irq 4 on host /soc at fa200000/cpm at 9c0/interrupt-controller at 930
> mapped to virtual irq 18

Now the kernel stuck at the while loop that waits for transmitter fifo
to be empty. It seems that the CPM UART stopped working in the middle
of printing a message. I'm using minicom to connect to the serial
port. I heard minicom is problematic. Will it be the cause here?

(gdb) target remote ppcbdi:2001
Remote debugging using ppcbdi:2001
0xc00f348c in cpm_uart_console_write (co=<value optimized out>,
    s=0xc0174df3 "console [ttyCPM0] enabled, bootconsole disabled\n", count=48)
    at /home/rayan/wti/code/wti-linux-2.6.33.5/arch/powerpc/include/asm/io.h:154
154     DEF_MMIO_IN_BE(in_be16, 16, lhz);
(gdb) next
1161                    while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0)
(gdb) next
154     DEF_MMIO_IN_BE(in_be16, 16, lhz);
(gdb) next
1161                    while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0)
(gdb) list
1156            for (i = 0; i < count; i++, s++) {
1157                    /* Wait for transmitter fifo to empty.
1158                     * Ready indicates output is ready, and xmt is doing
1159                     * that, not that it is ready for us to send.
1160                     */
1161                    while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0)
1162                            ;
1163
1164                    /* Send the character out.
1165                     * If the buffer address is in the CPM DPRAM, don't

Thanks,
-Shawn.


More information about the Linuxppc-dev mailing list