]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - arch/arm/mach-omap1/include/mach/debug-macro.S
omap: Make uncompress code and DEBUG_LL code generic
[net-next-2.6.git] / arch / arm / mach-omap1 / include / mach / debug-macro.S
index 9ea12f29e0b6d8b9b548e25bfdd5c6f500703dac..b6d9584544b4a92ab213d500553fabd3571a2850 100644 (file)
 
 #include <plat/serial.h>
 
+               .pushsection .data
+omap_uart_phys:        .word   0x0
+omap_uart_virt:        .word   0x0
+               .popsection
+
+               /*
+                * Note that this code won't work if the bootloader passes
+                * a wrong machine ID number in r1. To debug, just hardcode
+                * the desired UART phys and virt addresses temporarily into
+                * the omap_uart_phys and omap_uart_virt above.
+                */
                .macro  addruart, rx, tmp
+
+               /* Use omap_uart_phys/virt if already configured */
+9:             mrc     p15, 0, \rx, c1, c0
+               tst     \rx, #1                 @ MMU enabled?
+               ldreq   \rx, =omap_uart_phys    @ physical base address
+               ldrne   \rx, =omap_uart_virt    @ virtual base
+               ldr     \rx, [\rx, #0]
+               cmp     \rx, #0                 @ is port configured?
+               bne     99f                     @ already configured
+
+               /* Check 7XX UART1 scratchpad register for uart to use */
+               mrc     p15, 0, \rx, c1, c0
+               tst     \rx, #1                 @ MMU enabled?
+               moveq   \rx, #0xff000000        @ physical base address
+               movne   \rx, #0xfe000000        @ virtual base
+               orr     \rx, \rx, #0x00fb0000   @ OMAP1UART1
+               ldrb    \rx, [\rx, #(UART_SCR << OMAP7XX_PORT_SHIFT)]
+               cmp     \rx, #0                 @ anything in 7XX scratchpad?
+               bne     10f                     @ found 7XX uart
+
+               /* Check 15xx/16xx UART1 scratchpad register for uart to use */
                mrc     p15, 0, \rx, c1, c0
                tst     \rx, #1                 @ MMU enabled?
                moveq   \rx, #0xff000000        @ physical base address
                movne   \rx, #0xfe000000        @ virtual base
-               orr     \rx, \rx, #0x00fb0000
-#ifdef CONFIG_OMAP_LL_DEBUG_UART3
-               orr     \rx, \rx, #0x00009000   @ UART 3
-#endif
-#if defined(CONFIG_OMAP_LL_DEBUG_UART2) || defined(CONFIG_OMAP_LL_DEBUG_UART3)
-               orr     \rx, \rx, #0x00000800   @ UART 2 & 3
-#endif
+               orr     \rx, \rx, #0x00fb0000   @ OMAP1UART1
+               ldrb    \rx, [\rx, #(UART_SCR << OMAP_PORT_SHIFT)]
+
+               /* Select the UART to use based on the UART1 scratchpad value */
+10:            cmp     \rx, #0                 @ no port configured?
+               beq     11f                     @ if none, try to use UART1
+               cmp     \rx, #OMAP1UART1
+               beq     11f                     @ configure OMAP1UART1
+               cmp     \rx, #OMAP1UART2
+               beq     12f                     @ configure OMAP1UART2
+               cmp     \rx, #OMAP1UART3
+               beq     13f                     @ configure OMAP2UART3
+
+               /* Configure the UART offset from the phys/virt base */
+11:            mov     \rx, #0x00fb0000        @ OMAP1UART1
+               b       98f
+12:            mov     \rx, #0x00fb0000        @ OMAP1UART1
+               orr     \rx, \rx, #0x00000800   @ OMAP1UART2
+               b       98f
+13:            mov     \rx, #0x00fb0000        @ OMAP1UART1
+               orr     \rx, \rx, #0x00000800   @ OMAP1UART2
+               orr     \rx, \rx, #0x00009000   @ OMAP1UART3
+
+               /* Store both phys and virt address for the uart */
+98:            add     \rx, \rx, #0xff000000   @ phys base
+               ldr     \tmp, =omap_uart_phys
+               str     \rx, [\tmp, #0]
+               sub     \rx, \rx, #0xff000000   @ phys base
+               add     \rx, \rx, #0xfe000000   @ virt base
+               ldr     \tmp, =omap_uart_virt
+               str     \rx, [\tmp, #0]
+               b       9b
+99:
                .endm
 
                .macro  senduart,rd,rx