mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-11 05:02:26 -04:00
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:
parent
d4d4f90377
commit
50aadcc560
@ -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)
|
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)
|
uint16_t divisor = (get_uart_clk() + (baud * 8)) / (baud * 16)
|
||||||
- ANOMALY_05000230;
|
- ANOMALY_05000230;
|
||||||
|
|
||||||
/* Program the divisor to get the baud rate we want */
|
/* Program the divisor to get the baud rate we want */
|
||||||
serial_set_divisor(uart_base, divisor);
|
serial_set_divisor(uart_base, divisor);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_SYS_BFIN_UART
|
|
||||||
|
|
||||||
static void uart_puts(uint32_t uart_base, const char *s)
|
static void uart_puts(uint32_t uart_base, const char *s)
|
||||||
{
|
{
|
||||||
@ -313,65 +316,39 @@ void bfin_serial_initialize(void)
|
|||||||
#endif
|
#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. */
|
/* 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);
|
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. */
|
/* Symbol for our assembly to call. */
|
||||||
void serial_initialize(void)
|
void _serial_early_init(void)
|
||||||
{
|
{
|
||||||
serial_early_init(UART_BASE);
|
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
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -78,16 +78,16 @@ static inline void serial_early_puts(const char *s)
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
.macro serial_early_init
|
.macro serial_early_init
|
||||||
#if defined(CONFIG_DEBUG_EARLY_SERIAL) && defined(BFIN_BOOT_BYPASS)
|
#if defined(CONFIG_DEBUG_EARLY_SERIAL) && !defined(CONFIG_UART_MEM)
|
||||||
call _serial_initialize;
|
call __serial_early_init;
|
||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro serial_early_set_baud
|
.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.L = LO(CONFIG_BAUDRATE);
|
||||||
R0.H = HI(CONFIG_BAUDRATE);
|
R0.H = HI(CONFIG_BAUDRATE);
|
||||||
call _serial_set_baud;
|
call __serial_early_set_baud;
|
||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
@ -121,7 +121,7 @@ static inline void serial_early_puts(const char *s)
|
|||||||
R0.L = 7b; \
|
R0.L = 7b; \
|
||||||
R0.H = 7b; \
|
R0.H = 7b; \
|
||||||
update_serial_early_string_addr \
|
update_serial_early_string_addr \
|
||||||
call _serial_puts;
|
call _uart_early_puts;
|
||||||
#else
|
#else
|
||||||
# define serial_early_puts(str)
|
# define serial_early_puts(str)
|
||||||
#endif
|
#endif
|
||||||
|
@ -111,9 +111,6 @@
|
|||||||
#ifndef CONFIG_BAUDRATE
|
#ifndef CONFIG_BAUDRATE
|
||||||
# define CONFIG_BAUDRATE 57600
|
# define CONFIG_BAUDRATE 57600
|
||||||
#endif
|
#endif
|
||||||
#ifndef CONFIG_DEBUG_EARLY_SERIAL
|
|
||||||
# define CONFIG_SYS_BFIN_UART
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Debug Settings
|
* Debug Settings
|
||||||
|
Loading…
x
Reference in New Issue
Block a user