diff options
author | Michal Simek <michal.simek@xilinx.com> | 2016-02-16 16:05:23 +0100 |
---|---|---|
committer | Michal Simek <michal.simek@xilinx.com> | 2016-02-22 16:21:10 +0100 |
commit | d9a3bec682f9756621615f4306718a356a3230e3 (patch) | |
tree | 60d313b23d9b671bf88eedfce54f196cf76c5643 /drivers/serial | |
parent | 39bc1a8c8f5eb3238a3349bd4810fabac4118104 (diff) | |
download | u-boot-imx-d9a3bec682f9756621615f4306718a356a3230e3.zip u-boot-imx-d9a3bec682f9756621615f4306718a356a3230e3.tar.gz u-boot-imx-d9a3bec682f9756621615f4306718a356a3230e3.tar.bz2 |
dm: ns16550: Add support for reg-offset property
reg-offset is the part of standard 8250 binding in the kernel.
It is shifting start of address space by reg-offset.
On Xilinx platform this offset is typically 0x1000.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Tom Rini <trini@konsulko.com>
Diffstat (limited to 'drivers/serial')
-rw-r--r-- | drivers/serial/ns16550.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index 93dad33..28da9dd 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -105,7 +105,7 @@ static void ns16550_writeb(NS16550_t port, int offset, int value) * As far as we know it doesn't make sense to support selection of * these options at run-time, so use the existing CONFIG options. */ - serial_out_shift(addr, plat->reg_shift, value); + serial_out_shift(addr + plat->reg_offset, plat->reg_shift, value); } static int ns16550_readb(NS16550_t port, int offset) @@ -116,7 +116,7 @@ static int ns16550_readb(NS16550_t port, int offset) offset *= 1 << plat->reg_shift; addr = map_physmem(plat->base, 0, MAP_NOCACHE) + offset; - return serial_in_shift(addr, plat->reg_shift); + return serial_in_shift(addr + plat->reg_offset, plat->reg_shift); } /* We can clean these up once everything is moved to driver model */ @@ -401,6 +401,8 @@ int ns16550_serial_ofdata_to_platdata(struct udevice *dev) return -EINVAL; plat->base = addr; + plat->reg_offset = fdtdec_get_int(gd->fdt_blob, dev->of_offset, + "reg-offset", 0); plat->reg_shift = fdtdec_get_int(gd->fdt_blob, dev->of_offset, "reg-shift", 0); plat->clock = fdtdec_get_int(gd->fdt_blob, dev->of_offset, |