
Being global variable with 0 value it falls into .bss area which we may only use after relocation to RAM. And right after relocation we zero .bss - effectively cleaing register address set for early console.
Now with pre-set value "regs" variable is no longer in .bss and this way safely survives relocation.
Signed-off-by: Alexey Brodkin abrodkin@synopsys.com --- drivers/serial/serial_arc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/serial/serial_arc.c b/drivers/serial/serial_arc.c index 2ddbf32..0ee8ce5 100644 --- a/drivers/serial/serial_arc.c +++ b/drivers/serial/serial_arc.c @@ -28,7 +28,7 @@ struct arc_serial_regs { #define UART_OVERFLOW_ERR (1 << 1) #define UART_TXEMPTY (1 << 7)
-struct arc_serial_regs *regs; +struct arc_serial_regs *regs = (struct arc_serial_regs *)CONFIG_ARC_UART_BASE;
static void arc_serial_setbrg(void) { @@ -60,7 +60,6 @@ static void arc_serial_setbrg(void)
static int arc_serial_init(void) { - regs = (struct arc_serial_regs *)CONFIG_ARC_UART_BASE; serial_setbrg(); return 0; }