]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
MIPS: Lantiq: Fix early printk
authorJohn Crispin <blogic@openwrt.org>
Wed, 11 Jan 2012 20:44:24 +0000 (21:44 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Thu, 26 Apr 2012 23:22:54 +0000 (00:22 +0100)
The code was using a 32bit write operations in the early_printk code. This
resulted in 3 zero bytes also being written to the serial port. This patch
changes the memory access to 8bit.

Signed-off-by: Thomas Langer <thomas.langer@lantiq.com>
Signed-off-by: John Crispin <blogic@openwrt.org>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/3257/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
arch/mips/lantiq/early_printk.c

index b6e0a3601c480c2aa8cbc59470d8388e1499ddc8..59a6b4dfd47c5c7085357376f354b556ffc4869d 100644 (file)
 #define LTQ_ASC1_BASE_ADDR     0x1E100C00
 #define LTQ_ASC_SIZE           0x400
 
+/*
+ * during early_printk no ioremap is possible
+ * lets use KSEG1 instead
+ */
+#define LTQ_EARLY_ASC          KSEG1ADDR(LTQ_ASC1_BASE_ADDR)
+
 /* RCU - reset control unit */
 #define LTQ_RCU_BASE_ADDR      0x1F203000
 #define LTQ_RCU_SIZE           0x1000
index 972e05f8763193f903edfa64c3135d05beaedf33..508907533a6f972f9b4aa5d7496280a31b7a03f9 100644 (file)
 #include <lantiq.h>
 #include <lantiq_soc.h>
 
-/* no ioremap possible at this early stage, lets use KSEG1 instead  */
-#define LTQ_ASC_BASE   KSEG1ADDR(LTQ_ASC1_BASE_ADDR)
 #define ASC_BUF                1024
-#define LTQ_ASC_FSTAT  ((u32 *)(LTQ_ASC_BASE + 0x0048))
-#define LTQ_ASC_TBUF   ((u32 *)(LTQ_ASC_BASE + 0x0020))
+#define LTQ_ASC_FSTAT  ((u32 *)(LTQ_EARLY_ASC + 0x0048))
+#ifdef __BIG_ENDIAN
+#define LTQ_ASC_TBUF   ((u32 *)(LTQ_EARLY_ASC + 0x0020 + 3))
+#else
+#define LTQ_ASC_TBUF   ((u32 *)(LTQ_EARLY_ASC + 0x0020))
+#endif
 #define TXMASK         0x3F00
 #define TXOFFSET       8
 
@@ -27,7 +29,7 @@ void prom_putchar(char c)
        local_irq_save(flags);
        do { } while ((ltq_r32(LTQ_ASC_FSTAT) & TXMASK) >> TXOFFSET);
        if (c == '\n')
-               ltq_w32('\r', LTQ_ASC_TBUF);
-       ltq_w32(c, LTQ_ASC_TBUF);
+               ltq_w8('\r', LTQ_ASC_TBUF);
+       ltq_w8(c, LTQ_ASC_TBUF);
        local_irq_restore(flags);
 }