I am now suspecting that the content of my bd_info structure is set or is handled incorrectly, thus causing incorrect behavior of the serial driver upon kernel booting (only 3 characters are printed correctly and the rest is the garbage - as I reported before), so I am trying (for debugging purposes) to over-write the values, passed from bd_info during the kernel booting, by the hard-coded "correct" values.
So far I tried forcing baud, bits, parity, flow directly in in cpm_uart_console_setup() ( drivers/serial/cpm_uart/cpm_uar t_core.c ) - see below - it didn't help ... Where in the kernel booting code the clock speed is handled (it also comes from the bd_info) - so I could try to force set clock speed there ? Thanks, Alex **************************************************************** static int __init cpm_uart_console_setup(struct console *co, char *options) { struct uart_port *port; struct uart_cpm_port *pinfo; int baud = 38400; int bits = 8; int parity = 'n'; int flow = 'n'; int ret; port = (struct uart_port *)&cpm_uart_ports[cpm_uart_port_map[co->index]]; pinfo = (struct uart_cpm_port *)port; pinfo->flags |= FLAG_CONSOLE; if (options) { uart_parse_options(options, &baud, &parity, &bits, &flow); } else { bd_t *bd = (bd_t *) __res; if (bd->bi_baudrate) baud = bd->bi_baudrate; else baud = 9600; } baud = 38400; <<=========================================== parity = 'n'; <<=========================================== flow = 'n'; <<=========================================== bits = 8; <<=========================================== /* * Setup any port IO, connect any baud rate generators, * etc. This is expected to be handled by board * dependant code */ if (pinfo->set_lineif) pinfo->set_lineif(pinfo); if (IS_SMC(pinfo)) { pinfo->smcp->smc_smcm &= ~(SMCM_RX | SMCM_TX); pinfo->smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN); } else { pinfo->sccp->scc_sccm &= ~(UART_SCCM_TX | UART_SCCM_RX); pinfo->sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); } ret = cpm_uart_allocbuf(pinfo, 1); if (ret) return ret; cpm_uart_initbd(pinfo); if (IS_SMC(pinfo)) cpm_uart_init_smc(pinfo); else cpm_uart_init_scc(pinfo); uart_set_options(port, co, baud, parity, bits, flow); return 0; }