microblaze: usable uart16550 for big endian systems
authorStephan Linz <linz@li-pro.net>
Thu, 24 Nov 2011 12:32:52 +0000 (12:32 +0000)
committerWolfgang Denk <wd@denx.de>
Sun, 27 Nov 2011 14:49:48 +0000 (15:49 +0100)
As a result of the commit 6833260 the uart16550 driver
is broken for Microblaze big endian systems, because of
the missing 3 byte offset. Other than as described, not
all U-Boot BSP will treat properly the 3 byte offset.

This why prefer to mask out the 3 byte offset in general
and setup correct _REG_SIZE value depending on edianess.

Signed-off-by: Stephan Linz <linz@li-pro.net>
Tested-by: Michal Simek <monstr@monstr.eu>
include/configs/microblaze-generic.h

index 6b3fd7600371cdbc66f428b3d53c7f3f915a5bcf..03a6f5ad0b8d3eb741fe64774888aca54e38b4b0 100644 (file)
 #elif XILINX_UART16550_BASEADDR
 # define CONFIG_SYS_NS16550            1
 # define CONFIG_SYS_NS16550_SERIAL
-# define CONFIG_SYS_NS16550_REG_SIZE   -4
+# if defined(__MICROBLAZEEL__)
+#  define CONFIG_SYS_NS16550_REG_SIZE  -4
+# else
+#  define CONFIG_SYS_NS16550_REG_SIZE  4
+# endif
 # define CONFIG_CONS_INDEX             1
 # define CONFIG_SYS_NS16550_COM1 \
-                       (XILINX_UART16550_BASEADDR + 0x1000)
+               ((XILINX_UART16550_BASEADDR & ~0xF) + 0x1000)
 # define CONFIG_SYS_NS16550_CLK        XILINX_UART16550_CLOCK_HZ
 # define CONFIG_BAUDRATE       115200