Signed-off-by: Daniel Hellstrom <dan...@gaisler.com> --- arch/sparc/cpu/leon3/serial.c | 17 ++++++++++++++--- 1 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/arch/sparc/cpu/leon3/serial.c b/arch/sparc/cpu/leon3/serial.c index 8964310..1f17ede 100644 --- a/arch/sparc/cpu/leon3/serial.c +++ b/arch/sparc/cpu/leon3/serial.c @@ -47,11 +47,18 @@ DECLARE_GLOBAL_DATA_PTR; #endif ambapp_dev_apbuart *leon3_apbuart = NULL; +unsigned int apbuart_freq = CONFIG_SYS_CLK_FREQ; + +unsigned int apbuart_calc_scaler(unsigned int apbuart_freq, unsigned int baud) +{ + return ((((apbuart_freq*10)/(baud*8))-5)/10); +} int serial_init(void) { ambapp_apbdev apbdev; unsigned int tmp; + unsigned int freq; /* find UART */ if (ambapp_apb_find(&ambapp_plb, VENDOR_GAISLER, GAISLER_APBUART, @@ -65,7 +72,13 @@ int serial_init(void) * * Receiver & transmitter enable */ +#ifdef CONFIG_SYS_GRLIB_APBUART_SCALER leon3_apbuart->scaler = CONFIG_SYS_GRLIB_APBUART_SCALER; +#else + /* APBUART Frequency is equal to bus frequency */ + freq = ambapp_bus_freq(&ambapp_plb, apbdev.ahb_bus_index); + leon3_apbuart->scaler = apbuart_calc_scaler(freq, CONFIG_BAUDRATE); +#endif /* Let bit 11 be unchanged (debug bit for GRMON) */ tmp = READ_WORD(leon3_apbuart->ctrl); @@ -136,9 +149,7 @@ void serial_setbrg(void) /* update baud rate settings, read it from gd->baudrate */ unsigned int scaler; if (leon3_apbuart && (gd->baudrate > 0)) { - scaler = - (((CONFIG_SYS_CLK_FREQ * 10) / (gd->baudrate * 8)) - - 5) / 10; + scaler = apbuart_calc_scaler(apbuart_freq, gd->baudrate); leon3_apbuart->scaler = scaler; } return; -- 1.5.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot