cpm_uart_console_write() stuck in waiting for transmitter fifo ready

Shawn Jin shawnxjin at gmail.com
Fri Jul 16 08:33:04 EST 2010

> The problem is that after/when the kernel switches to the real console
> from the boot console, printk() calls cpm_uart_console_write() to
> print the first (?) message using the cpm_uart driver. But the
> transmitter buffer never becomes ready. It's shown below with the gdb
> session.
> Program received signal SIGSTOP, Stopped (signal).
> 0xc00f3510 in cpm_uart_console_write (co=<value optimized out>,
> s=0xc017703e "console [ttyCPM0] enabled, bootconsole disabled\n",
> count=0x30) at /home/code/linux-
> (gdb) next
> (gdb) x/4h bdbase
> 0xfddfa020:     0xffff  0xffff  0xffff  0xffff
> (gdb)
> Why would the TxBD be filled with all 0xF? Would it be possible that
> the bdbase actually points somewhere else other than the TxBD?

The virtual address 0xfddfa000 is mapped to 0xfa202000. I suspect that
the TxBD of my MPC870 may not start at 0xfa202020.

I notice that for adder875, ep88xc and mpc885ads, the muram data's reg
= <0 0x1c00> but for mgsuvd, its reg = <0x800 0x1800>. How does the
kernel use muram for 885 family SoCs? How much muram should be
reserved for data?

My RCCR=0x1, meaning the first 512B is for microcode. So the data and
the TxBD should really be starting at 0xfa202200? Then my muram data's
reg should be <0x200 ?>? What size shall I specify?

Scott, you instructed
me to change the buffer address to 0xfa203fb8 from 0xfa202008 for the
bootwrapper's cpm-serial driver, assuming reg=<0 0x1c00>. If I need to
change to the reg not starting at 0x0, how should I accordingly change
this buffer address?

Thanks a lot,

I went back to 2.4.18 kernel and noticed that the

More information about the Linuxppc-dev mailing list