[POWERPC] Xilinx: boot support for Xilinx uart 16550.
authorJohn Linn <john.linn@xilinx.com>
Wed, 2 Apr 2008 16:52:14 +0000 (03:52 +1100)
committerJosh Boyer <jwboyer@linux.vnet.ibm.com>
Thu, 24 Apr 2008 18:32:46 +0000 (13:32 -0500)
The Xilinx 16550 uart core is not a standard 16550 because it uses
word-based addressing rather than byte-based adressing. With
additional properties it is compatible with the open firmware
'ns16550' compatible binding.

This code updates the ns16550 driver to use the reg-offset property
so that the Xilinx UART 16550 can be used with it. The reg-shift
was already being handled.

Signed-off-by: John Linn <john.linn@xilinx.com>
Acked-by: Grant Likely <grant.likely@secretlab.ca>
Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
arch/powerpc/boot/ns16550.c

index aef3bdc891605d30e664689bec5d7af43fae54d2..8c9ead94be06f70b891a6bd90b39f98a0d4bbbd4 100644 (file)
@@ -55,10 +55,15 @@ static u8 ns16550_tstc(void)
 int ns16550_console_init(void *devp, struct serial_console_data *scdp)
 {
        int n;
+       u32 reg_offset;
 
        if (dt_get_virtual_reg(devp, (void **)&reg_base, 1) < 1)
                return -1;
 
+       n = getprop(devp, "reg-offset", &reg_offset, sizeof(reg_offset));
+       if (n == sizeof(reg_offset))
+               reg_base += reg_offset;
+
        n = getprop(devp, "reg-shift", &reg_shift, sizeof(reg_shift));
        if (n != sizeof(reg_shift))
                reg_shift = 0;