blackfin: Enable early print via the generic serial API.

Remove blackfin specific implementation of the generic serial API when
early print macro is defined.

In BFIN_BOOT_BYPASS mode, don't call generic serial_puts, because
early print in bypass mode is running before code binary is relocated
to the link address.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
This commit is contained in:
Sonic Zhang 2013-03-13 19:06:16 +08:00
parent d4d4f90377
commit 50aadcc560
3 changed files with 32 additions and 58 deletions

View file

@ -197,13 +197,16 @@ static void uart_loop(uint32_t uart_base, int state)
static inline void __serial_set_baud(uint32_t uart_base, uint32_t baud)
{
#ifdef CONFIG_DEBUG_EARLY_SERIAL
serial_early_set_baud(uart_base, baud);
#else
uint16_t divisor = (get_uart_clk() + (baud * 8)) / (baud * 16)
- ANOMALY_05000230;
/* Program the divisor to get the baud rate we want */
serial_set_divisor(uart_base, divisor);
#endif
}
#ifdef CONFIG_SYS_BFIN_UART
static void uart_puts(uint32_t uart_base, const char *s)
{
@ -313,65 +316,39 @@ void bfin_serial_initialize(void)
#endif
}
#else
#ifdef CONFIG_DEBUG_EARLY_SERIAL
inline void uart_early_putc(uint32_t uart_base, const char c)
{
/* send a \r for compatibility */
if (c == '\n')
uart_early_putc(uart_base, '\r');
/* wait for the hardware fifo to clear up */
while (!(_lsr_read(pUART) & THRE))
continue;
/* queue the character for transmission */
bfin_write(&pUART->thr, c);
SSYNC();
}
void uart_early_puts(const char *s)
{
while (*s)
uart_early_putc(UART_BASE, *s++);
}
/* Symbol for our assembly to call. */
void serial_set_baud(uint32_t baud)
void _serial_early_set_baud(uint32_t baud)
{
serial_early_set_baud(UART_BASE, baud);
}
/* Symbol for common u-boot code to call.
* Setup the baudrate (brg: baudrate generator).
*/
void serial_setbrg(void)
{
serial_set_baud(gd->baudrate);
}
/* Symbol for our assembly to call. */
void serial_initialize(void)
void _serial_early_init(void)
{
serial_early_init(UART_BASE);
}
/* Symbol for common u-boot code to call. */
int serial_init(void)
{
serial_initialize();
serial_setbrg();
uart_lsr_clear(UART_BASE);
return 0;
}
int serial_tstc(void)
{
return uart_tstc(UART_BASE);
}
int serial_getc(void)
{
return uart_getc(UART_BASE);
}
void serial_putc(const char c)
{
uart_putc(UART_BASE, c);
}
void serial_puts(const char *s)
{
while (*s)
serial_putc(*s++);
}
LOOP(
void serial_loop(int state)
{
uart_loop(UART_BASE, state);
}
)
#endif
#endif

View file

@ -78,16 +78,16 @@ static inline void serial_early_puts(const char *s)
#else
.macro serial_early_init
#if defined(CONFIG_DEBUG_EARLY_SERIAL) && defined(BFIN_BOOT_BYPASS)
call _serial_initialize;
#if defined(CONFIG_DEBUG_EARLY_SERIAL) && !defined(CONFIG_UART_MEM)
call __serial_early_init;
#endif
.endm
.macro serial_early_set_baud
#if defined(CONFIG_DEBUG_EARLY_SERIAL) && defined(BFIN_BOOT_BYPASS)
#if defined(CONFIG_DEBUG_EARLY_SERIAL) && !defined(CONFIG_UART_MEM)
R0.L = LO(CONFIG_BAUDRATE);
R0.H = HI(CONFIG_BAUDRATE);
call _serial_set_baud;
call __serial_early_set_baud;
#endif
.endm
@ -121,7 +121,7 @@ static inline void serial_early_puts(const char *s)
R0.L = 7b; \
R0.H = 7b; \
update_serial_early_string_addr \
call _serial_puts;
call _uart_early_puts;
#else
# define serial_early_puts(str)
#endif

View file

@ -111,9 +111,6 @@
#ifndef CONFIG_BAUDRATE
# define CONFIG_BAUDRATE 57600
#endif
#ifndef CONFIG_DEBUG_EARLY_SERIAL
# define CONFIG_SYS_BFIN_UART
#endif
/*
* Debug Settings