ARM: PRIMA2: provide two DEBUG_LL ports for prima2 and marco
Barry Song [Thu, 20 Dec 2012 11:45:25 +0000 (19:45 +0800)]
prima2 and marco has different memory base, the old code will
fail if we enable DEBUG_LL in marco.
this patch adds two debuf port, while debugging, we select one
of PRIMA2 and MARCO debug ports, in the products, we disable
DEBUG_LL.

Signed-off-by: Barry Song <Baohua.Song@csr.com>

arch/arm/Kconfig.debug
arch/arm/mach-prima2/include/mach/uart.h
arch/arm/mach-prima2/include/mach/uncompress.h

index 661030d..00ad1f8 100644 (file)
@@ -386,6 +386,20 @@ choice
                  Say Y here if you want kernel low-level debugging support
                  on Tegra based platforms.
 
+       config DEBUG_SIRFPRIMA2_UART1
+               bool "Kernel low-level debugging messages via SiRFprimaII UART1"
+               depends on ARCH_PRIMA2
+               help
+                 Say Y here if you want the debug print routines to direct
+                 their output to the uart1 port on SiRFprimaII devices.
+
+       config DEBUG_SIRFMARCO_UART1
+               bool "Kernel low-level debugging messages via SiRFmarco UART1"
+               depends on ARCH_MARCO
+               help
+                 Say Y here if you want the debug print routines to direct
+                 their output to the uart1 port on SiRFmarco devices.
+
        config DEBUG_VEXPRESS_UART0_DETECT
                bool "Autodetect UART0 on Versatile Express Cortex-A core tiles"
                depends on ARCH_VEXPRESS && CPU_CP15_MMU
index c98b4d5..c10510d 100644 (file)
 #define __MACH_PRIMA2_SIRFSOC_UART_H
 
 /* UART-1: used as serial debug port */
+#if defined(CONFIG_DEBUG_SIRFPRIMA2_UART1)
 #define SIRFSOC_UART1_PA_BASE          0xb0060000
+#elif defined(CONFIG_DEBUG_SIRFMARCO_UART1)
+#define SIRFSOC_UART1_PA_BASE          0xcc060000
+#else
+#define SIRFSOC_UART1_PA_BASE          0
+#endif
 #define SIRFSOC_UART1_VA_BASE          SIRFSOC_VA(0x060000)
 #define SIRFSOC_UART1_SIZE             SZ_4K
 
index 0c898fc..15f3edc 100644 (file)
@@ -25,6 +25,9 @@ static __inline__ void putc(char c)
         * during kernel decompression, all mappings are flat:
         *  virt_addr == phys_addr
         */
+       if (!SIRFSOC_UART1_PA_BASE)
+               return;
+
        while (__raw_readl((void __iomem *)SIRFSOC_UART1_PA_BASE + SIRFSOC_UART_TXFIFO_STATUS)
                & SIRFSOC_UART1_TXFIFO_FULL)
                barrier();