
刘勇 wrote:
my cpu is 440gx and my board is OCOTEA.
(1)now i use bootm 0x400000, at the same time, i set bootargs into console=ttyS0,15200n8 or console=ttySICC,15200n8,
That's not a valid serial speed... try 115200 (you are missing a zero). On Ocotea the ttyS0 port is correct to use.
(2)i use ppc_md.progress as my print function.i find after kernel maps io address with ioremap64() and visit the address, kernel die. ....... when the 440gx goes into simple_strtoull, it never returns.
This is probably an indirect result of a bug present in arch/ppc/kernel/head_44x.S where temporary TLB mappings are created for early serial debugging. Check around line 214, inside an #ifdef CONFIG_SERIAL_TEXT_DEBUG section... there are two mappings created:
li r0,1 /* TLB slot 1 */
tlbwe r3,r0,PPC44x_TLB_PAGEID /* Load the pageid fields */ tlbwe r4,r0,PPC44x_TLB_XLAT /* Load the translation fields*/ tlbwe r5,r0,PPC44x_TLB_ATTRIB /* Load the attrib/access fields */
ori r3,r3,PPC44x_TLB_TS /* Translation state 1 */
li r0,2 /* TLB slot 2 */
tlbwe r3,r0,PPC44x_TLB_PAGEID /* Load the pageid fields */ tlbwe r4,r0,PPC44x_TLB_XLAT /* Load the translation fields */ tlbwe r5,r0,PPC44x_TLB_ATTRIB /* Load the attrib/access fields */
/* Force context change */ isync
The second "li" instruction is shown correctly above, but you will probably find in your source that it reads the same as the first one. In that case, the first attempt to use this TLB (which happens when serial operation is done) will cause a fault hang the system.
This is fixed in the current BK linux source tree.
Note you can also turn off CONFIG_SERIAL_TEXT_DEBUG to avoid the problem.
-Ralph