[U-Boot-Users] [Patch] mcf52x2 change baudrate

Hello,
if you are use LOADS, LOADB or set baudrate on mcf52x2 boards the changing of baudrate never works. This patch fixed the problem.
CHANGELOG
* Fix: stops receiver and transmitter before changing the baudrate * restarts receiver and transmitter after changing the baudrate register * Fix: use gd->baudrate instead of gd->bd->bi_baudrate in serial_setbrg(void)
diff --git a/cpu/mcf52x2/serial.c b/cpu/mcf52x2/serial.c index 8be09e3..8f0a892 100644 --- a/cpu/mcf52x2/serial.c +++ b/cpu/mcf52x2/serial.c @@ -65,6 +65,9 @@ void rs_serial_setbaudrate(int port,int else uartp = (volatile unsigned char *) (CFG_MBAR + MCFUART_BASE2);
+ uartp[MCFUART_UCR] = MCFUART_UCR_CMDRESETTX; /* reset TX */ + uartp[MCFUART_UCR] = MCFUART_UCR_CMDRESETRX; /* reset RX */ + clock = DoubleClock(baudrate); /* Set baud above */
uartp[MCFUART_UBG1] = (((int)clock >> 8) & 0xff); /* set msb baud */ @@ -74,6 +77,7 @@ void rs_serial_setbaudrate(int port,int fraction = ((clock - (int)clock) * 16.0) + 0.5; uartp[MCFUART_UFPD] = ((int)fraction & 0xf); /* set baud fraction adjust */ # endif + #endif
#if defined(CONFIG_M5282) @@ -91,12 +95,17 @@ void rs_serial_setbaudrate(int port,int uartp = (volatile unsigned char *) (CFG_MBAR + MCFUART_BASE1); }
+ uartp[MCFUART_UCR] = MCFUART_UCR_CMDRESETTX; /* reset TX */ + uartp[MCFUART_UCR] = MCFUART_UCR_CMDRESETRX; /* reset RX */ + clock = (long) CFG_CLK / ((long) 32 * baudrate); /* Set baud above */
uartp[MCFUART_UBG1] = (((int)clock >> 8) & 0xff); /* set msb baud */ uartp[MCFUART_UBG2] = ((int) clock & 0xff); /* set lsb baud */ - #endif + + /* Enable Tx/Rx */ + uartp[MCFUART_UCR] = MCFUART_UCR_RXENABLE | MCFUART_UCR_TXENABLE; };
void rs_serial_init (int port, int baudrate) @@ -139,9 +148,6 @@ void rs_serial_init (int port, int baudr
rs_serial_setbaudrate (port, baudrate);
- /* Enable Tx/Rx */ - uartp[MCFUART_UCR] = MCFUART_UCR_RXENABLE | MCFUART_UCR_TXENABLE; - return; }
@@ -183,7 +189,7 @@ int rs_get_char(void) }
void serial_setbrg(void) { - rs_serial_setbaudrate(0,gd->bd->bi_baudrate); + rs_serial_setbaudrate(0,gd->baudrate); }
int serial_init(void) {
participants (1)
-
Jens Scharsig