summaryrefslogtreecommitdiff
path: root/lib/utils
diff options
context:
space:
mode:
Diffstat (limited to 'lib/utils')
-rw-r--r--lib/utils/fdt/fdt_helper.c7
-rw-r--r--lib/utils/serial/fdt_serial_uart8250.c3
-rw-r--r--lib/utils/serial/uart8250.c4
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;