diff options
Diffstat (limited to 'lib/utils')
-rw-r--r-- | lib/utils/fdt/fdt_helper.c | 7 | ||||
-rw-r--r-- | lib/utils/serial/fdt_serial_uart8250.c | 3 | ||||
-rw-r--r-- | lib/utils/serial/uart8250.c | 4 |
3 files changed, 11 insertions, 3 deletions
diff --git a/lib/utils/fdt/fdt_helper.c b/lib/utils/fdt/fdt_helper.c index 4dd0602..9a35969 100644 --- a/lib/utils/fdt/fdt_helper.c +++ b/lib/utils/fdt/fdt_helper.c @@ -21,6 +21,7 @@ #define DEFAULT_UART_BAUD 115200 #define DEFAULT_UART_REG_SHIFT 0 #define DEFAULT_UART_REG_IO_WIDTH 1 +#define DEFAULT_UART_REG_OFFSET 0 #define DEFAULT_SIFIVE_UART_FREQ 0 #define DEFAULT_SIFIVE_UART_BAUD 115200 @@ -449,6 +450,12 @@ int fdt_parse_uart8250_node(void *fdt, int nodeoffset, else uart->reg_io_width = DEFAULT_UART_REG_IO_WIDTH; + val = (fdt32_t *)fdt_getprop(fdt, nodeoffset, "reg-offset", &len); + if (len > 0 && val) + uart->reg_offset = fdt32_to_cpu(*val); + else + uart->reg_offset = DEFAULT_UART_REG_OFFSET; + return 0; } diff --git a/lib/utils/serial/fdt_serial_uart8250.c b/lib/utils/serial/fdt_serial_uart8250.c index 36f364c..544b741 100644 --- a/lib/utils/serial/fdt_serial_uart8250.c +++ b/lib/utils/serial/fdt_serial_uart8250.c @@ -22,7 +22,8 @@ static int serial_uart8250_init(void *fdt, int nodeoff, return rc; return uart8250_init(uart.addr, uart.freq, uart.baud, - uart.reg_shift, uart.reg_io_width); + uart.reg_shift, uart.reg_io_width, + uart.reg_offset); } static const struct fdt_match serial_uart8250_match[] = { diff --git a/lib/utils/serial/uart8250.c b/lib/utils/serial/uart8250.c index 141bd45..38ea11a 100644 --- a/lib/utils/serial/uart8250.c +++ b/lib/utils/serial/uart8250.c @@ -91,11 +91,11 @@ static struct sbi_console_device uart8250_console = { }; int uart8250_init(unsigned long base, u32 in_freq, u32 baudrate, u32 reg_shift, - u32 reg_width) + u32 reg_width, u32 reg_offset) { u16 bdiv; - uart8250_base = (volatile char *)base; + uart8250_base = (volatile char *)base + reg_offset; uart8250_reg_shift = reg_shift; uart8250_reg_width = reg_width; uart8250_in_freq = in_freq; |