#if defined(CONFIG_DEBUG_ICEDCC)
                @@ debug using ARM EmbeddedICE DCC channel
 
-               .macro  addruart, rx, tmp
+               .macro  addruart, rp, rv
                .endm
 
 #if defined(CONFIG_CPU_V6)
 #include <mach/debug-macro.S>
 #endif /* CONFIG_DEBUG_ICEDCC */
 
+#ifdef CONFIG_MMU
+               .macro  addruart_current, rx, tmp1, tmp2
+               addruart        \tmp1, \tmp2
+               mrc             p15, 0, \rx, c1, c0
+               tst             \rx, #1
+               moveq           \rx, \tmp1
+               movne           \rx, \tmp2
+               .endm
+
+#else /* !CONFIG_MMU */
+               .macro  addruart_current, rx, tmp1, tmp2
+               addruart        \rx, \tmp1
+               .endm
+
+#endif /* CONFIG_MMU */
+
 /*
  * Useful debugging routines
  */
                .ltorg
 
 ENTRY(printascii)
-               addruart r3, r1
+               addruart_current r3, r1, r2
                b       2f
 1:             waituart r2, r3
                senduart r1, r3
 ENDPROC(printascii)
 
 ENTRY(printch)
-               addruart r3, r1
+               addruart_current r3, r1, r2
                mov     r1, r0
                mov     r0, #0
                b       1b
 
  */
 
 #include "hardware.h"
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx, #0x80000000                @ physical
-               movne   \rx, #io_p2v(0x80000000)        @ virtual
-               orr     \rx, \rx, #0x00000800
+               .macro  addruart, rp, rv
+               mov     \rp, 0x00000800
+               orr     \rv, \rp, #io_p2v(0x80000000)   @ virtual
+               orr     \rp, \rp, #0x80000000           @ physical
                .endm
 
                .macro  senduart,rd,rx
 
 #include <mach/hardware.h>
 #include <mach/at91_dbgu.h>
 
-       .macro  addruart, rx, tmp
-       mrc     p15, 0, \rx, c1, c0
-       tst     \rx, #1                                         @ MMU enabled?
-       ldreq   \rx, =(AT91_BASE_SYS + AT91_DBGU)               @ System peripherals (phys address)
-       ldrne   \rx, =(AT91_VA_BASE_SYS + AT91_DBGU)            @ System peripherals (virt address)
+       .macro  addruart, rp, rv
+       ldr     \rp, =(AT91_BASE_SYS + AT91_DBGU)               @ System peripherals (phys address)
+       ldr     \rv, =(AT91_VA_BASE_SYS + AT91_DBGU)            @ System peripherals (virt address)
        .endm
 
        .macro  senduart,rd,rx
 
 #include <mach/hardware.h>
 #include <asm/hardware/clps7111.h>
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx, #CLPS7111_PHYS_BASE
-               movne   \rx, #CLPS7111_VIRT_BASE
+               .macro  addruart, rp, rv
 #ifndef CONFIG_DEBUG_CLPS711X_UART2
-               add     \rx, \rx, #0x0000       @ UART1
+               mov     \rp, #0x0000    @ UART1
 #else
-               add     \rx, \rx, #0x1000       @ UART2
+               mov     \rp, #0x1000    @ UART2
 #endif
+               orr     \rv, \rp, #CLPS7111_VIRT_BASE
+               orr     \rp, \rp, #CLPS7111_PHYS_BASE
                .endm
 
                .macro  senduart,rd,rx
 
  * published by the Free Software Foundation.
  */
 
-               .macro  addruart,rx
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx,      #0x10000000
-               movne   \rx,      #0xf0000000   @ virtual base
-               orr     \rx, \rx, #0x00009000
+               .macro  addruart,rp,rv
+               mov     \rp, #0x00009000
+               orr     \rv, \rp, #0xf0000000   @ virtual base
+               orr     \rp, \rp, #0x10000000
                .endm
 
 #include <asm/hardware/debug-pl01x.S>
 
 davinci_uart_virt:     .word   0
                .popsection
 
-               .macro addruart, rx, tmp
+               .macro addruart, rp, rv
 
                /* Use davinci_uart_phys/virt if already configured */
-10:            mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               ldreq   \rx, =__virt_to_phys(davinci_uart_phys)
-               ldrne   \rx, =davinci_uart_virt
-               ldr     \rx, [\rx]
-               cmp     \rx, #0                 @ is port configured?
+10:            mrc     p15, 0, \rp, c1, c0
+               tst     \rp, #1                 @ MMU enabled?
+               ldreq   \rp, =__virt_to_phys(davinci_uart_phys)
+               ldrne   \rp, =davinci_uart_phys
+               add     \rv, \rp, #4            @ davinci_uart_virt
+               ldr     \rp, [\rp, #0]
+               ldr     \rv, [\rv, #0]
+               cmp     \rp, #0                 @ is port configured?
+               cmpne   \rv, #0
                bne     99f                     @ already configured
 
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
+               /* Check the debug UART address set in uncompress.h */
+               mrc     p15, 0, \rp, c1, c0
+               tst     \rp, #1                 @ MMU enabled?
 
                /* Copy uart phys address from decompressor uart info */
-               ldreq   \tmp, =__virt_to_phys(davinci_uart_phys)
-               ldrne   \tmp, =davinci_uart_phys
-               ldreq   \rx, =DAVINCI_UART_INFO
-               ldrne   \rx, =__phys_to_virt(DAVINCI_UART_INFO)
-               ldr     \rx, [\rx, #0]
-               str     \rx, [\tmp]
+               ldreq   \rv, =__virt_to_phys(davinci_uart_phys)
+               ldrne   \rv, =davinci_uart_phys
+               ldreq   \rp, =DAVINCI_UART_INFO
+               ldrne   \rp, =__phys_to_virt(DAVINCI_UART_INFO)
+               ldr     \rp, [\rp, #0]
+               str     \rp, [\rv]
 
                /* Copy uart virt address from decompressor uart info */
-               ldreq   \tmp, =__virt_to_phys(davinci_uart_virt)
-               ldrne   \tmp, =davinci_uart_virt
-               ldreq   \rx, =DAVINCI_UART_INFO
-               ldrne   \rx, =__phys_to_virt(DAVINCI_UART_INFO)
-               ldr     \rx, [\rx, #4]
-               str     \rx, [\tmp]
+               ldreq   \rv, =__virt_to_phys(davinci_uart_virt)
+               ldrne   \rv, =davinci_uart_virt
+               ldreq   \rp, =DAVINCI_UART_INFO
+               ldrne   \rp, =__phys_to_virt(DAVINCI_UART_INFO)
+               ldr     \rp, [\rp, #4]
+               str     \rp, [\rv]
 
                b       10b
 99:
 
 
 #include <mach/bridge-regs.h>
 
-       .macro  addruart, rx, tmp
-       mrc     p15, 0, \rx, c1, c0
-       tst     \rx, #1                                 @ MMU enabled?
-       ldreq   \rx, =DOVE_SB_REGS_PHYS_BASE
-       ldrne   \rx, =DOVE_SB_REGS_VIRT_BASE
-       orr     \rx, \rx, #0x00012000
+       .macro  addruart, rp, rv
+       ldr     \rp, =DOVE_SB_REGS_PHYS_BASE
+       ldr     \rv, =DOVE_SB_REGS_VIRT_BASE
+       orr     \rp, \rp, #0x00012000
+       orr     \rv, \rv, #0x00012000
        .endm
 
 #define UART_SHIFT     2
 
  *
 **/
 
-               .macro  addruart, rx, tmp
-               mov     \rx, #0xf0000000
-               orr     \rx, \rx, #0x00000be0
+               .macro  addruart, rp, rv
+               mov     \rp, #0xf0000000
+               orr     \rp, \rp, #0x00000be0
+               mov     \rp, \rv
                .endm
 
 #define UART_SHIFT     2
 
  */
 #include <mach/ep93xx-regs.h>
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                         @ MMU enabled?
-               ldreq   \rx, =EP93XX_APB_PHYS_BASE      @ Physical base
-               ldrne   \rx, =EP93XX_APB_VIRT_BASE      @ virtual base
-               orr     \rx, \rx, #0x000c0000
+               .macro  addruart, rp, rv
+               ldr     \rp, =EP93XX_APB_PHYS_BASE      @ Physical base
+               ldr     \rv, =EP93XX_APB_VIRT_BASE      @ virtual base
+               orr     \rp, \rp, #0x000c0000
+               orr     \rv, \rv, #0x000c0000
                .endm
 
 #include <asm/hardware/debug-pl01x.S>
 
 
 #ifndef CONFIG_DEBUG_DC21285_PORT
        /* For NetWinder debugging */
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx, #0x7c000000        @ physical
-               movne   \rx, #0xff000000        @ virtual
-               orr     \rx, \rx, #0x000003f8
+               .macro  addruart, rp, rv
+               mov     \rp, #0x000003f8
+               orr     \rv, \rp, #0x7c000000   @ physical
+               orr     \rp, \rp, #0xff000000   @ virtual
                .endm
 
 #define UART_SHIFT     0
                .equ    dc21285_high, ARMCSR_BASE & 0xff000000
                .equ    dc21285_low,  ARMCSR_BASE & 0x00ffffff
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx, #0x42000000
-               movne   \rx, #dc21285_high
+               .macro  addruart, rp, rv
                .if     dc21285_low
-               orrne   \rx, \rx, #dc21285_low
+               mov     \rp, #dc21285_low
+               .else
+               mov     \rp, #0
                .endif
+               orr     \rv, \rp, #0x42000000
+               orr     \rp, \rp, #dc21285_high
                .endm
 
                .macro  senduart,rd,rx
 
  */
 #include <mach/hardware.h>
 
-       .macro  addruart, rx, tmp
-       mrc     p15, 0, \rx, c1, c0
-       tst     \rx, #1                                 @ MMU enabled?
-       ldreq   \rx, =GEMINI_UART_BASE                  @ physical
-       ldrne   \rx, =IO_ADDRESS(GEMINI_UART_BASE)      @ virtual
+       .macro  addruart, rp, rv
+       ldr     \rp, =GEMINI_UART_BASE                  @ physical
+       ldr     \rv, =IO_ADDRESS(GEMINI_UART_BASE)      @ virtual
        .endm
 
 #define UART_SHIFT     2
 
                .equ    io_virt, IO_VIRT
                .equ    io_phys, IO_PHYS
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                @ MMU enabled?
-               moveq   \rx, #io_phys          @ physical base address
-               movne   \rx, #io_virt          @ virtual address
-               add     \rx, \rx, #0x00020000   @ UART1
+               .macro  addruart, rp, rv
+               mov     \rp, #0x00020000        @ UART1
+               add     \rv, \rp, #io_virt      @ virtual address
+               add     \rp, \rp, #io_phys      @ physical base address
                .endm
 
                .macro  senduart,rd,rx
 
  *
 */
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx, #0x16000000        @ physical base address
-               movne   \rx, #0xf0000000        @ virtual base
-               addne   \rx, \rx, #0x16000000 >> 4
+               .macro  addruart, rp, rv
+               mov     \rp, #0x16000000        @ physical base address
+               mov     \rv, #0xf0000000        @ virtual base
+               add     \rv, \rv, #0x16000000 >> 4
                .endm
 
 #include <asm/hardware/debug-pl01x.S>
 
  * published by the Free Software Foundation.
  */
 
-       .macro  addruart, rx, tmp
-       mrc     p15, 0, \rx, c1, c0
-       tst     \rx, #1                 @ mmu enabled?
-       moveq   \rx, #0xff000000        @ physical
-       orreq   \rx, \rx, #0x00d80000
-       movne   \rx, #0xfe000000        @ virtual
-       orrne   \rx, \rx, #0x00e80000
-       orr     \rx, \rx, #0x00002300
-       orr     \rx, \rx, #0x00000040
+       .macro  addruart, rp, rv
+       mov     \rp, #0x00002300
+       orr     \rp, \rp, #0x00000040
+       orr     \rv, \rp, #0xfe000000   @ virtual
+       orr     \rv, \rv, #0x00e80000
+       orr     \rp, \rp, #0xff000000   @ physical
+       orr     \rp, \rp, #0x00d80000
        .endm
 
 #define UART_SHIFT     2
 
  * published by the Free Software Foundation.
  */
 
-               .macro  addruart, rx, tmp
-               mov     \rx, #0xfe000000        @ physical as well as virtual
-               orr     \rx, \rx, #0x00800000   @ location of the UART
+               .macro  addruart, rp, rv
+               mov     \rp, #0xfe000000        @ physical as well as virtual
+               orr     \rp, \rp, #0x00800000   @ location of the UART
+               mov     \rv, \rp
                .endm
 
 #define UART_SHIFT     0
 
  * published by the Free Software Foundation.
  */
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ mmu enabled?
-               moveq   \rx, #0xff000000        @ physical
-               movne   \rx, #0xfe000000        @ virtual
-               orr     \rx, \rx, #0x00ff0000
-               orr     \rx, \rx, #0x0000f700
+               .macro  addruart, rp, rv
+               mov     \rp, #0x00ff0000
+               orr     \rp, \rp, #0x0000f700
+               orr     \rv, #0xfe000000        @ virtual
+               orr     \rp, #0xff000000        @ physical
                .endm
 
 #define UART_SHIFT     2
 
  *
 */
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx, #0xc0000000        @ Physical base
-               movne   \rx, #0xfe000000        @ virtual base
-               orrne   \rx, \rx, #0x00f00000
-               orr     \rx, \rx, #0x00030000
+               .macro  addruart, rp, rv
+               mov     \rp, #0x00030000
 #ifdef __ARMEB__
-               orr     \rx, \rx, #0x00000003
+               orr     \rp, \rp, #0x00000003
 #endif
+               orr     \rv, \rp, #0xfe000000   @ virtual base
+               orr     \rv, \rv, #0x00f00000
+               orr     \rp, \rp, #0xc0000000   @ Physical base
                .endm
 
 #define UART_SHIFT     2
 
  */
 #include <mach/ixp23xx.h>
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                         @ mmu enabled?
-               ldreq   \rx, =IXP23XX_PERIPHERAL_PHYS   @ physical
-               ldrne   \rx, =IXP23XX_PERIPHERAL_VIRT   @ virtual
+               .macro  addruart, rp, rv
+               ldr     \rp, =IXP23XX_PERIPHERAL_PHYS   @ physical
+               ldr     \rv, =IXP23XX_PERIPHERAL_VIRT   @ virtual
 #ifdef __ARMEB__
-               orr     \rx, \rx, #0x00000003
+               orr     \rp, \rp, #0x00000003
+               orr     \rv, \rv, #0x00000003
 #endif
                .endm
 
 
  * published by the Free Software Foundation.
 */
 
-                .macro  addruart, rx, tmp
-                mrc     p15, 0, \rx, c1, c0
-                tst     \rx, #1                 @ MMU enabled?
-                moveq   \rx, #0xc8000000
-                movne   \rx, #0xff000000
-               orrne   \rx, \rx, #0x00b00000
+                .macro  addruart, rp, rv
 #ifdef __ARMEB__
-                add     \rx,\rx,#3              @ Uart regs are at off set of 3 if
-                                               @ byte writes used - Big Endian.
+                mov     \rp, #3         @ Uart regs are at off set of 3 if
+                                       @ byte writes used - Big Endian.
+#else
+               mov     \rp, #0
 #endif
+                orr     \rv, \rp, #0xff000000  @ virtual
+               orr     \rv, \rv, #0x00b00000
+                orr     \rp, \rp, #0xc8000000  @ physical
                 .endm
 
 #define UART_SHIFT     2
 
 
 #include <mach/bridge-regs.h>
 
-       .macro  addruart, rx, tmp
-       mrc     p15, 0, \rx, c1, c0
-       tst     \rx, #1                                 @ MMU enabled?
-       ldreq   \rx, =KIRKWOOD_REGS_PHYS_BASE
-       ldrne   \rx, =KIRKWOOD_REGS_VIRT_BASE
-       orr     \rx, \rx, #0x00012000
+       .macro  addruart, rp, rv
+       ldr     \rp, =KIRKWOOD_REGS_PHYS_BASE
+       ldr     \rv, =KIRKWOOD_REGS_VIRT_BASE
+       orr     \rp, \rp, #0x00012000
+       orr     \rv, \rv, #0x00012000
        .endm
 
 #define UART_SHIFT     2
 
 #include <mach/hardware.h>
 #include <mach/regs-uart.h>
 
-       .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                         @ MMU enabled?
-               ldreq   \rx, =KS8695_UART_PA            @ physical base address
-               ldrne   \rx, =KS8695_UART_VA            @ virtual base address
+       .macro  addruart, rp, rv
+               ldr     \rp, =KS8695_UART_PA            @ physical base address
+               ldr     \rv, =KS8695_UART_VA            @ virtual base address
        .endm
 
        .macro  senduart, rd, rx
 
--- /dev/null
+/* arch/arm/mach-l7200/include/mach/debug-macro.S
+ *
+ * Debugging macro include header
+ *
+ *  Copyright (C) 1994-1999 Russell King
+ *  Moved from linux/arch/arm/kernel/debug.S by Ben Dooks
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+*/
+
+               .equ    io_virt, IO_BASE
+               .equ    io_phys, IO_START
+
+               .macro  addruart, rp, rv
+               mov     \rp, #0x00044000        @ UART1
+@              mov     \rp, #0x00045000        @ UART2
+               add     \rv, \rp, #io_virt      @ virtual address
+               add     \rp, \rp, #io_phys      @ physical base address
+               .endm
+
+               .macro  senduart,rd,rx
+               str     \rd, [\rx, #0x0]        @ UARTDR
+               .endm
+
+               .macro  waituart,rd,rx
+1001:          ldr     \rd, [\rx, #0x18]       @ UARTFLG
+               tst     \rd, #1 << 5            @ UARTFLGUTXFF - 1 when full
+               bne     1001b
+               .endm
+
+               .macro  busyuart,rd,rx
+1001:          ldr     \rd, [\rx, #0x18]       @ UARTFLG
+               tst     \rd, #1 << 3            @ UARTFLGUBUSY - 1 when busy
+               bne     1001b
+               .endm
 
        @ It is not known if this will be appropriate for every 40x
        @ board.
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               mov     \rx, #0x00000700        @ offset from base
-               orreq   \rx, \rx, #0x80000000   @ physical base
-               orrne   \rx, \rx, #0xf8000000   @ virtual base
+               .macro  addruart, rp, rv
+               mov     \rp, #0x00000700        @ offset from base
+               orr     \rv, \rp, #0xf8000000   @ virtual base
+               orr     \rp, \rp, #0x80000000   @ physical base
                .endm
 
                .macro  senduart,rd,rx
 
 
 #include <mach/loki.h>
 
-       .macro  addruart, rx, tmp
-       mrc     p15, 0, \rx, c1, c0
-       tst     \rx, #1                                 @ MMU enabled?
-       ldreq   \rx, =LOKI_REGS_PHYS_BASE
-       ldrne   \rx, =LOKI_REGS_VIRT_BASE
-       orr     \rx, \rx, #0x00012000
+       .macro  addruart, rp, rv
+       ldr     \rp, =LOKI_REGS_PHYS_BASE
+       ldr     \rv, =LOKI_REGS_VIRT_BASE
+       orr     \rp, \rp, #0x00012000
+       orr     \rv, \rv, #0x00012000
        .endm
 
 #define UART_SHIFT     2
 
  * Debug output is hardcoded to standard UART 5
 */
 
-       .macro  addruart,rx, tmp
-       mrc     p15, 0, \rx, c1, c0
-       tst     \rx, #1                         @ MMU enabled?
-       ldreq   \rx, =0x40090000
-       ldrne   \rx, =0xF4090000
+       .macro  addruart, rp, rv
+       ldreq   \rp, =0x40090000
+       ldrne   \rv, =0xF4090000
        .endm
 
 #define UART_SHIFT     2
 
 
 #include <mach/addr-map.h>
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                         @ MMU enabled?
-               ldreq   \rx, =APB_PHYS_BASE             @ physical
-               ldrne   \rx, =APB_VIRT_BASE             @ virtual
-               orr     \rx, \rx, #0x00017000
+               .macro  addruart, rp, rv
+               ldr     \rp, =APB_PHYS_BASE             @ physical
+               ldr     \rv, =APB_VIRT_BASE             @ virtual
+               orr     \rp, \rp, #0x00017000
+               orr     \rv, \rv, #0x00017000
                .endm
 
 #define UART_SHIFT     2
 
 #include <mach/msm_iomap.h>
 
 #ifdef CONFIG_HAS_MSM_DEBUG_UART_PHYS
-       .macro  addruart, rx, tmp
-       @ see if the MMU is enabled and select appropriate base address
-       mrc     p15, 0, \rx, c1, c0
-       tst     \rx, #1
-       ldreq   \rx, =MSM_DEBUG_UART_PHYS
-       ldrne   \rx, =MSM_DEBUG_UART_BASE
+       .macro  addruart, rp, rv
+       ldr     \rp, =MSM_DEBUG_UART_PHYS
+       ldr     \rv, =MSM_DEBUG_UART_BASE
        .endm
 
        .macro  senduart,rd,rx
        tst     \rd, #0x04
        beq     1001b
        .endm
-#else
-       .macro  addruart, rx, tmp
-       .endm
-
-       .macro  senduart,rd,rx
-       .endm
-
-       .macro  waituart,rd,rx
-       .endm
-#endif
 
        .macro  busyuart,rd,rx
        .endm
+#endif
 
 
 #include <mach/mv78xx0.h>
 
-       .macro  addruart, rx, tmp
-       mrc     p15, 0, \rx, c1, c0
-       tst     \rx, #1                                 @ MMU enabled?
-       ldreq   \rx, =MV78XX0_REGS_PHYS_BASE
-       ldrne   \rx, =MV78XX0_REGS_VIRT_BASE
-       orr     \rx, \rx, #0x00012000
+       .macro  addruart, rp, rv
+       ldr     \rp, =MV78XX0_REGS_PHYS_BASE
+       ldr     \rv, =MV78XX0_REGS_VIRT_BASE
+       orr     \rp, \rp, #0x00012000
+       orr     \rv, \rv, #0x00012000
        .endm
 
 #define UART_SHIFT     2
 
 
 #include "hardware.h"
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx, #0x00100000                @ physical
-               movne   \rx, #io_p2v(0x00100000)        @ virtual
-               orr     \rx, \rx, #0x00000a00
+               .macro  addruart, rp, rv
+               mov     \rp, #0x00000a00
+               orr     \rv, \rp, #io_p2v(0x00100000)   @ virtual
+               orr     \rp, \rp, #0x00100000           @ physical
                .endm
 
                .macro  senduart,rd,rx
 
  *
 */
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx, #0x10000000        @ physical base address
-               movne   \rx, #0xf0000000        @ virtual base
-               add     \rx, \rx, #0x00100000
-               add     \rx, \rx, #0x000fb000
+               .macro  addruart, rp, rv
+               mov     \rp, #0x00100000
+               add     \rp, \rp, #0x000fb000
+               add     \rv, \rp, #0xf0000000   @ virtual base
+               add     \rp, \rp, #0x10000000   @ physical base address
                .endm
 
 #include <asm/hardware/debug-pl01x.S>
 
 
 #include <mach/regs-board-a9m9750dev.h>
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1
-               ldreq   \rx, =NS9XXX_CSxSTAT_PHYS(0)
-               ldrne   \rx, =io_p2v(NS9XXX_CSxSTAT_PHYS(0))
+               .macro  addruart, rp, rv
+               ldr     \rp, =NS9XXX_CSxSTAT_PHYS(0)
+               ldr     \rv, =io_p2v(NS9XXX_CSxSTAT_PHYS(0))
                .endm
 
 #define UART_SHIFT     2
 
                 * the desired UART phys and virt addresses temporarily into
                 * the omap_uart_phys and omap_uart_virt above.
                 */
-               .macro  addruart, rx, tmp
+               .macro  addruart, rp, rv
 
                /* Use omap_uart_phys/virt if already configured */
-9:             mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               ldreq   \rx, =__virt_to_phys(omap_uart_phys)    @ physical base address
-               ldrne   \rx, =omap_uart_virt    @ virtual base
-               ldr     \rx, [\rx, #0]
-               cmp     \rx, #0                 @ is port configured?
+9:             mrc     p15, 0, \rp, c1, c0
+               tst     \rp, #1                 @ MMU enabled?
+               ldreq   \rp, =__virt_to_phys(omap_uart_phys)    @ MMU not enabled
+               ldrne   \rp, =omap_uart_phys    @ MMU enabled
+               add     \rv, \rp, #4            @ omap_uart_virt
+               ldr     \rp, [\rp, #0]
+               ldr     \rv, [\rv, #0]
+               cmp     \rp, #0                 @ is port configured?
+               cmpne   \rv, #0
                bne     99f                     @ already configured
 
                /* Check the debug UART configuration set in uncompress.h */
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               ldreq   \rx, =OMAP_UART_INFO
-               ldrne   \rx, =__phys_to_virt(OMAP_UART_INFO)
-               ldr     \rx, [\rx, #0]
+               mrc     p15, 0, \rp, c1, c0
+               tst     \rp, #1                 @ MMU enabled?
+               ldreq   \rp, =OMAP_UART_INFO    @ MMU not enabled
+               ldrne   \rp, =__phys_to_virt(OMAP_UART_INFO)    @ MMU enabled
+               ldr     \rp, [\rp, #0]
 
                /* Select the UART to use based on the UART1 scratchpad value */
-10:            cmp     \rx, #0                 @ no port configured?
+10:            cmp     \rp, #0                 @ no port configured?
                beq     11f                     @ if none, try to use UART1
-               cmp     \rx, #OMAP1UART1
+               cmp     \rp, #OMAP1UART1
                beq     11f                     @ configure OMAP1UART1
-               cmp     \rx, #OMAP1UART2
+               cmp     \rp, #OMAP1UART2
                beq     12f                     @ configure OMAP1UART2
-               cmp     \rx, #OMAP1UART3
+               cmp     \rp, #OMAP1UART3
                beq     13f                     @ configure OMAP2UART3
 
                /* Configure the UART offset from the phys/virt base */
-11:            mov     \rx, #0x00fb0000        @ OMAP1UART1
+11:            mov     \rp, #0x00fb0000        @ OMAP1UART1
                b       98f
-12:            mov     \rx, #0x00fb0000        @ OMAP1UART1
-               orr     \rx, \rx, #0x00000800   @ OMAP1UART2
+12:            mov     \rp, #0x00fb0000        @ OMAP1UART1
+               orr     \rp, \rp, #0x00000800   @ OMAP1UART2
                b       98f
-13:            mov     \rx, #0x00fb0000        @ OMAP1UART1
-               orr     \rx, \rx, #0x00000800   @ OMAP1UART2
-               orr     \rx, \rx, #0x00009000   @ OMAP1UART3
+13:            mov     \rp, #0x00fb0000        @ OMAP1UART1
+               orr     \rp, \rp, #0x00000800   @ OMAP1UART2
+               orr     \rp, \rp, #0x00009000   @ OMAP1UART3
 
                /* Store both phys and virt address for the uart */
-98:            add     \rx, \rx, #0xff000000   @ phys base
-               mrc     p15, 0, \tmp, c1, c0
-               tst     \tmp, #1                @ MMU enabled?
-               ldreq   \tmp, =__virt_to_phys(omap_uart_phys)
-               ldrne   \tmp, =omap_uart_phys
-               str     \rx, [\tmp, #0]
-               sub     \rx, \rx, #0xff000000   @ phys base
-               add     \rx, \rx, #0xfe000000   @ virt base
-               ldreq   \tmp, =__virt_to_phys(omap_uart_virt)
-               ldrne   \tmp, =omap_uart_virt
-               str     \rx, [\tmp, #0]
+98:            add     \rp, \rp, #0xff000000   @ phys base
+               mrc     p15, 0, \rv, c1, c0
+               tst     \rv, #1                 @ MMU enabled?
+               ldreq   \rv, =__virt_to_phys(omap_uart_phys)    @ MMU not enabled
+               ldrne   \rv, =omap_uart_phys    @ MMU enabled
+               str     \rp, [\rv, #0]
+               sub     \rp, \rp, #0xff000000   @ phys base
+               add     \rp, \rp, #0xfe000000   @ virt base
+               add     \rv, \rv, #4            @ omap_uart_lsr
+               str     \rp, [\rv, #0]
                b       9b
 99:
                .endm
 
                 * the desired UART phys and virt addresses temporarily into
                 * the omap_uart_phys and omap_uart_virt above.
                 */
-               .macro  addruart, rx, tmp
+               .macro  addruart, rp, rv
 
                /* Use omap_uart_phys/virt if already configured */
-10:            mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               ldreq   \rx, =__virt_to_phys(omap_uart_phys)    @ physical base address
-               ldrne   \rx, =omap_uart_virt    @ virtual base address
-               ldr     \rx, [\rx, #0]
-               cmp     \rx, #0                 @ is port configured?
+10:            mrc     p15, 0, \rp, c1, c0
+               tst     \rp, #1                 @ MMU enabled?
+               ldreq   \rp, =__virt_to_phys(omap_uart_phys)    @ MMU not enabled
+               ldrne   \rp, =omap_uart_phys    @ MMU enabled
+               add     \rv, \rp, #4            @ omap_uart_virt
+               ldr     \rp, [\rp, #0]
+               ldr     \rv, [\rv, #0]
+               cmp     \rp, #0                 @ is port configured?
+               cmpne   \rv, #0
                bne     99f                     @ already configured
 
                /* Check the debug UART configuration set in uncompress.h */
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               ldreq   \rx, =OMAP_UART_INFO
-               ldrne   \rx, =__phys_to_virt(OMAP_UART_INFO)
-               ldr     \rx, [\rx, #0]
+               mrc     p15, 0, \rp, c1, c0
+               tst     \rp, #1                 @ MMU enabled?
+               ldreq   \rp, =OMAP_UART_INFO    @ MMU not enabled
+               ldrne   \rp, =__phys_to_virt(OMAP_UART_INFO)    @ MMU enabled
+               ldr     \rp, [\rp, #0]
 
                /* Select the UART to use based on the UART1 scratchpad value */
-               cmp     \rx, #0                 @ no port configured?
+               cmp     \rp, #0                 @ no port configured?
                beq     21f                     @ if none, try to use UART1
-               cmp     \rx, #OMAP2UART1        @ OMAP2/3/4UART1
+               cmp     \rp, #OMAP2UART1        @ OMAP2/3/4UART1
                beq     21f                     @ configure OMAP2/3/4UART1
-               cmp     \rx, #OMAP2UART2        @ OMAP2/3/4UART2
+               cmp     \rp, #OMAP2UART2        @ OMAP2/3/4UART2
                beq     22f                     @ configure OMAP2/3/4UART2
-               cmp     \rx, #OMAP2UART3        @ only on 24xx
+               cmp     \rp, #OMAP2UART3        @ only on 24xx
                beq     23f                     @ configure OMAP2UART3
-               cmp     \rx, #OMAP3UART3        @ only on 34xx
+               cmp     \rp, #OMAP3UART3        @ only on 34xx
                beq     33f                     @ configure OMAP3UART3
-               cmp     \rx, #OMAP4UART3        @ only on 44xx
+               cmp     \rp, #OMAP4UART3        @ only on 44xx
                beq     43f                     @ configure OMAP4UART3
-               cmp     \rx, #OMAP3UART4        @ only on 36xx
+               cmp     \rp, #OMAP3UART4        @ only on 36xx
                beq     34f                     @ configure OMAP3UART4
-               cmp     \rx, #OMAP4UART4        @ only on 44xx
+               cmp     \rp, #OMAP4UART4        @ only on 44xx
                beq     44f                     @ configure OMAP4UART4
-               cmp     \rx, #ZOOM_UART         @ only on zoom2/3
+               cmp     \rp, #ZOOM_UART         @ only on zoom2/3
                beq     95f                     @ configure ZOOM_UART
 
                /* Configure the UART offset from the phys/virt base */
-21:            mov     \rx, #UART_OFFSET(OMAP2_UART1_BASE)     @ omap2/3/4
+21:            mov     \rp, #UART_OFFSET(OMAP2_UART1_BASE)     @ omap2/3/4
                b       98f
-22:            mov     \rx, #UART_OFFSET(OMAP2_UART2_BASE)     @ omap2/3/4
+22:            mov     \rp, #UART_OFFSET(OMAP2_UART2_BASE)     @ omap2/3/4
                b       98f
-23:            mov     \rx, #UART_OFFSET(OMAP2_UART3_BASE)
+23:            mov     \rp, #UART_OFFSET(OMAP2_UART3_BASE)
                b       98f
-33:            mov     \rx, #UART_OFFSET(OMAP3_UART1_BASE)
-               add     \rx, \rx, #0x00fb0000
-               add     \rx, \rx, #0x00006000           @ OMAP3_UART3_BASE
+33:            mov     \rp, #UART_OFFSET(OMAP3_UART1_BASE)
+               add     \rp, \rp, #0x00fb0000
+               add     \rp, \rp, #0x00006000           @ OMAP3_UART3_BASE
                b       98f
-34:            mov     \rx, #UART_OFFSET(OMAP3_UART1_BASE)
-               add     \rx, \rx, #0x00fb0000
-               add     \rx, \rx, #0x00028000           @ OMAP3_UART4_BASE
+34:            mov     \rp, #UART_OFFSET(OMAP3_UART1_BASE)
+               add     \rp, \rp, #0x00fb0000
+               add     \rp, \rp, #0x00028000           @ OMAP3_UART4_BASE
                b       98f
-43:            mov     \rx, #UART_OFFSET(OMAP4_UART3_BASE)
+43:            mov     \rp, #UART_OFFSET(OMAP4_UART3_BASE)
                b       98f
-44:            mov     \rx, #UART_OFFSET(OMAP4_UART4_BASE)
+44:            mov     \rp, #UART_OFFSET(OMAP4_UART4_BASE)
                b       98f
-95:            ldr     \rx, =ZOOM_UART_BASE
-               mrc     p15, 0, \tmp, c1, c0
-               tst     \tmp, #1                @ MMU enabled?
-               ldreq   \tmp, =__virt_to_phys(omap_uart_phys)
-               ldrne   \tmp, =omap_uart_phys
-               str     \rx, [\tmp, #0]
-               ldr     \rx, =ZOOM_UART_VIRT
-               ldreq   \tmp, =__virt_to_phys(omap_uart_virt)
-               ldrne   \tmp, =omap_uart_virt
-               str     \rx, [\tmp, #0]
-               mov     \rx, #(UART_LSR << ZOOM_PORT_SHIFT)
-               ldreq   \tmp, =__virt_to_phys(omap_uart_lsr)
-               ldrne   \tmp, =omap_uart_lsr
-               str     \rx, [\tmp, #0]
+95:            ldr     \rp, =ZOOM_UART_BASE
+               mrc     p15, 0, \rv, c1, c0
+               tst     \rv, #1                 @ MMU enabled?
+               ldreq   \rv, =__virt_to_phys(omap_uart_phys)    @ MMU not enabled
+               ldrne   \rv, =omap_uart_phys    @ MMU enabled
+               str     \rp, [\rv, #0]
+               ldr     \rp, =ZOOM_UART_VIRT
+               add     \rv, \rv, #4            @ omap_uart_virt
+               str     \rp, [\rv, #0]
+               mov     \rp, #(UART_LSR << ZOOM_PORT_SHIFT)
+               add     \rv, \rv, #4            @ omap_uart_lsr
+               str     \rp, [\rv, #0]
                b       10b
 
                /* Store both phys and virt address for the uart */
-98:            add     \rx, \rx, #0x48000000   @ phys base
-               mrc     p15, 0, \tmp, c1, c0
-               tst     \tmp, #1                @ MMU enabled?
-               ldreq   \tmp, =__virt_to_phys(omap_uart_phys)
-               ldrne   \tmp, =omap_uart_phys
-               str     \rx, [\tmp, #0]
-               sub     \rx, \rx, #0x48000000   @ phys base
-               add     \rx, \rx, #0xfa000000   @ virt base
-               ldreq   \tmp, =__virt_to_phys(omap_uart_virt)
-               ldrne   \tmp, =omap_uart_virt
-               str     \rx, [\tmp, #0]
-               mov     \rx, #(UART_LSR << OMAP_PORT_SHIFT)
-               ldreq   \tmp, =__virt_to_phys(omap_uart_lsr)
-               ldrne   \tmp, =omap_uart_lsr
-               str     \rx, [\tmp, #0]
+98:            add     \rp, \rp, #0x48000000   @ phys base
+               mrc     p15, 0, \rv, c1, c0
+               tst     \rv, #1                 @ MMU enabled?
+               ldreq   \rv, =__virt_to_phys(omap_uart_phys)    @ MMU not enabled
+               ldrne   \rv, =omap_uart_phys    @ MMU enabled
+               str     \rp, [\rv, #0]
+               sub     \rp, \rp, #0x48000000   @ phys base
+               add     \rp, \rp, #0xfa000000   @ virt base
+               add     \rv, \rv, #4            @ omap_uart_virt
+               str     \rp, [\rv, #0]
+               mov     \rp, #(UART_LSR << OMAP_PORT_SHIFT)
+               add     \rv, \rv, #4            @ omap_uart_lsr
+               str     \rp, [\rv, #0]
 
                b       10b
 99:
 
                .macro  busyuart,rd,rx
 1001:          mrc     p15, 0, \rd, c1, c0
-               tst     \rd, #1         @ MMU enabled?
-               ldreq   \rd, =__virt_to_phys(omap_uart_lsr)
-               ldrne   \rd, =omap_uart_lsr
+               tst     \rd, #1                 @ MMU enabled?
+               ldreq   \rd, =__virt_to_phys(omap_uart_lsr)     @ MMU not enabled
+               ldrne   \rd, =omap_uart_lsr     @ MMU enabled
                ldr     \rd, [\rd, #0]
                ldrb    \rd, [\rx, \rd]
                and     \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE)
 
 
 #include <mach/orion5x.h>
 
-       .macro  addruart, rx, tmp
-       mrc     p15, 0, \rx, c1, c0
-       tst     \rx, #1                                 @ MMU enabled?
-       ldreq   \rx, =ORION5X_REGS_PHYS_BASE
-       ldrne   \rx, =ORION5X_REGS_VIRT_BASE
-       orr     \rx, \rx, #0x00012000
+       .macro  addruart, rp, rv
+       ldr     \rp, =ORION5X_REGS_PHYS_BASE
+       ldr     \rv, =ORION5X_REGS_VIRT_BASE
+       orr     \rp, \rp, #0x00012000
+       orr     \rv, \rv, #0x00012000
        .endm
 
 #define UART_SHIFT     2
 
  *
 */
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               mov     \rx, #0x00090000
-               addeq   \rx, \rx, #0x40000000
-               addne   \rx, \rx, #0xf4000000
+               .macro  addruart, rp, rv
+               mov     \rp, #0x00090000
+               add     \rv, \rp, #0xf4000000   @ virtual
+               add     \rp, \rp, #0x40000000   @ physical
                .endm
 
 #define UART_SHIFT     2
 
 
 #include "hardware.h"
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx, #0x40000000                @ physical
-               movne   \rx, #io_p2v(0x40000000)        @ virtual
-               orr     \rx, \rx, #0x00100000
+               .macro  addruart, rp, rv
+               mov     \rp, #0x00100000
+               orr     \rv, \rp, #io_p2v(0x40000000)   @ virtual
+               orr     \rp, \rp, #0x40000000           @ physical
                .endm
 
 #define UART_SHIFT     2
 
 #error "Unknown RealView platform"
 #endif
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx,      #0x10000000
-               movne   \rx,      #0xfb000000   @ virtual base
-               orr     \rx, \rx, #DEBUG_LL_UART_OFFSET
+               .macro  addruart, rp, rv
+               mov     \rp, #DEBUG_LL_UART_OFFSET
+               orr     \rv, \rp, #0xfb000000   @ virtual base
+               orr     \rp, \rp, #0x10000000   @ physical base
                .endm
 
 #include <asm/hardware/debug-pl01x.S>
 
  *
 */
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx, #0x03000000
-               movne   \rx, #0xe0000000
-               orr     \rx, \rx, #0x00010000
-               orr     \rx, \rx, #0x00000fe0
+               .macro  addruart, rp, rv
+               mov     \rp, #0x00010000
+               orr     \rp, \rp, #0x00000fe0
+               orr     \rv, \rp, #0xe0000000   @ virtual
+               orr     \rp, \rp, #0x03000000   @ physical
                .endm
 
 #define UART_SHIFT     2
 
 #define S3C2410_UART1_OFF (0x4000)
 #define SHIFT_2440TXF (14-9)
 
-       .macro addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1
-               ldreq   \rx, = S3C24XX_PA_UART
-               ldrne   \rx, = S3C24XX_VA_UART
+       .macro addruart, rp, rv
+               ldr     \rp, = S3C24XX_PA_UART
+               ldr     \rv, = S3C24XX_VA_UART
 #if CONFIG_DEBUG_S3C_UART != 0
-               add     \rx, \rx, #(S3C2410_UART1_OFF * CONFIG_DEBUG_S3C_UART)
+               add     \rp, \rp, #(S3C2410_UART1_OFF * CONFIG_DEBUG_S3C_UART)
+               add     \rv, \rv, #(S3C2410_UART1_OFF * CONFIG_DEBUG_S3C_UART)
 #endif
        .endm
 
 
 #include <mach/map.h>
 #include <plat/regs-serial.h>
 
-       .macro addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1
-               ldreq   \rx, = S3C24XX_PA_UART
-               ldrne   \rx, = S3C24XX_VA_UART
+       .macro addruart, rp, rv
+               ldr     \rp, = S3C24XX_PA_UART
+               ldr     \rv, = S3C24XX_VA_UART
 #if CONFIG_DEBUG_S3C_UART != 0
-               add     \rx, \rx, #(S3C2410_UART1_OFF * CONFIG_DEBUG_S3C_UART)
+               add     \rp, \rp, #(S3C2410_UART1_OFF * CONFIG_DEBUG_S3C_UART)
+               add     \rv, \rv, #(S3C2410_UART1_OFF * CONFIG_DEBUG_S3C_UART)
 #endif
        .endm
 
 
         * aligned and add in the offset when we load the value here.
         */
 
-       .macro addruart, rx, rtmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1
-               ldreq   \rx, = S3C_PA_UART
-               ldrne   \rx, = (S3C_VA_UART + S3C_PA_UART & 0xfffff)
+       .macro addruart, rp, rv
+               ldr     \rp, = S3C_PA_UART
+               ldr     \rv, = (S3C_VA_UART + S3C_PA_UART & 0xfffff)
 #if CONFIG_DEBUG_S3C_UART != 0
-               add     \rx, \rx, #(0x400 * CONFIG_DEBUG_S3C_UART)
+               add     \rp, \rp, #(0x400 * CONFIG_DEBUG_S3C_UART)
+               add     \rv, \rv, #(0x400 * CONFIG_DEBUG_S3C_UART)
 #endif
        .endm
 
 
 #include <mach/map.h>
 #include <plat/regs-serial.h>
 
-       .macro addruart, rx, rtmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1
-               ldreq   \rx, = S3C_PA_UART
-               ldrne   \rx, = S3C_VA_UART
+       .macro addruart, rp, rv
+               ldr     \rp, = S3C_PA_UART
+               ldr     \rv, = S3C_VA_UART
 #if CONFIG_DEBUG_S3C_UART != 0
-               add     \rx, \rx, #(0x400 * CONFIG_DEBUG_S3C_UART)
+               add     \rp, \rp, #(0x400 * CONFIG_DEBUG_S3C_UART)
+               add     \rv, \rv, #(0x400 * CONFIG_DEBUG_S3C_UART)
 #endif
        .endm
 
 
         * aligned and add in the offset when we load the value here.
         */
 
-       .macro addruart, rx, rtmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1
-               ldreq   \rx, = S3C_PA_UART
-               ldrne   \rx, = S3C_VA_UART
+       .macro addruart, rp, rv
+               ldr     \rp, = S3C_PA_UART
+               ldr     \rv, = S3C_VA_UART
 #if CONFIG_DEBUG_S3C_UART != 0
-               add     \rx, \rx, #(0x400 * CONFIG_DEBUG_S3C_UART)
+               add     \rp, \rp, #(0x400 * CONFIG_DEBUG_S3C_UART)
+               add     \rv, \rv, #(0x400 * CONFIG_DEBUG_S3C_UART)
 #endif
        .endm
 
 
         * aligned and add in the offset when we load the value here.
         */
 
-       .macro addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1
-               ldreq   \rx, = S3C_PA_UART
-               ldrne   \rx, = S3C_VA_UART
+       .macro addruart, rp, rv
+               ldr     \rp, = S3C_PA_UART
+               ldr     \rv, = S3C_VA_UART
 #if CONFIG_DEBUG_S3C_UART != 0
-               add     \rx, \rx, #(0x400 * CONFIG_DEBUG_S3C_UART)
+               add     \rp, \rp, #(0x400 * CONFIG_DEBUG_S3C_UART)
+               add     \rv, \rv, #(0x400 * CONFIG_DEBUG_S3C_UART)
 #endif
        .endm
 
 
         * aligned and add in the offset when we load the value here.
         */
 
-       .macro addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1
-               ldreq   \rx, = S3C_PA_UART
-               ldrne   \rx, = S3C_VA_UART
+       .macro addruart, rp, rv
+               ldreq   \rp, = S3C_PA_UART
+               ldrne   \rv, = S3C_VA_UART
 #if CONFIG_DEBUG_S3C_UART != 0
-               add     \rx, \rx, #(0x10000 * CONFIG_DEBUG_S3C_UART)
+               add     \rp, \rp, #(0x10000 * CONFIG_DEBUG_S3C_UART)
+               add     \rv, \rv, #(0x10000 * CONFIG_DEBUG_S3C_UART)
 #endif
        .endm
 
 
 */
 #include <mach/hardware.h>
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx, #0x80000000        @ physical base address
-               movne   \rx, #0xf8000000        @ virtual address
+               .macro  addruart, rp, rv
+               mrc     p15, 0, \rp, c1, c0
+               tst     \rp, #1                 @ MMU enabled?
+               moveq   \rp, #0x80000000        @ physical base address
+               movne   \rp, #0xf8000000        @ virtual address
 
                @ We probe for the active serial port here, coherently with
                @ the comment in arch/arm/mach-sa1100/include/mach/uncompress.h.
                @ We assume r1 can be clobbered.
 
                @ see if Ser3 is active
-               add     \rx, \rx, #0x00050000
-               ldr     r1, [\rx, #UTCR3]
-               tst     r1, #UTCR3_TXE
+               add     \rp, \rp, #0x00050000
+               ldr     \rv, [\rp, #UTCR3]
+               tst     \rv, #UTCR3_TXE
 
                @ if Ser3 is inactive, then try Ser1
-               addeq   \rx, \rx, #(0x00010000 - 0x00050000)
-               ldreq   r1, [\rx, #UTCR3]
-               tsteq   r1, #UTCR3_TXE
+               addeq   \rp, \rp, #(0x00010000 - 0x00050000)
+               ldreq   \rv, [\rp, #UTCR3]
+               tsteq   \rv, #UTCR3_TXE
 
                @ if Ser1 is inactive, then try Ser2
-               addeq   \rx, \rx, #(0x00030000 - 0x00010000)
-               ldreq   r1, [\rx, #UTCR3]
-               tsteq   r1, #UTCR3_TXE
+               addeq   \rp, \rp, #(0x00030000 - 0x00010000)
+               ldreq   \rv, [\rp, #UTCR3]
+               tsteq   \rv, #UTCR3_TXE
+
+               @ clear top bits, and generate both phys and virt addresses
+               lsl     \rp, \rp, #8
+               lsr     \rp, \rp, #8
+               orr     \rv, \rp, #0xf8000000   @ virtual
+               orr     \rp, \rp, #0x80000000   @ physical
 
-               @ if all ports are inactive, then there is nothing we can do
-               moveq   pc, lr
                .endm
 
                .macro  senduart,rd,rx
 
  *
 */
 
-               .macro  addruart, rx, tmp
-               mov     \rx, #0xe0000000
-               orr     \rx, \rx, #0x000003f8
+               .macro  addruart, rp, rv
+               mov     \rp, #0xe0000000
+               orr     \rp, \rp, #0x000003f8
+               mov     \rv, \rp
                .endm
 
                .macro  senduart,rd,rx
 
 
 #include <mach/io.h>
 
-       .macro  addruart,rx, tmp
-        mrc     p15, 0, \rx, c1, c0
-        tst     \rx, #1                 @ MMU enabled?
-        ldreq   \rx, =IO_APB_PHYS       @ physical
-        ldrne   \rx, =IO_APB_VIRT        @ virtual
+       .macro  addruart, rp, rv
+        ldreq   \rp, =IO_APB_PHYS       @ physical
+        ldrne   \rv, =IO_APB_VIRT        @ virtual
 #if defined(CONFIG_TEGRA_DEBUG_UART_NONE)
 #error "A debug UART must be selected in the kernel config to use DEBUG_LL"
 #elif defined(CONFIG_TEGRA_DEBUG_UARTA)
-        orr     \rx, \rx, #0x6000
+        orr     \rp, \rp, #0x6000
+        orr     \rv, \rv, #0x6000
 #elif defined(CONFIG_TEGRA_DEBUG_UARTB)
-       ldr     \tmp, =0x6040
-        orr     \rx, \rx, \tmp
+        orr     \rp, \rp, #0x6000
+       orr     \rp, \rp, #0x40
+        orr     \rv, \rv, #0x6000
+       orr     \rv, \rv, #0x40
 #elif defined(CONFIG_TEGRA_DEBUG_UARTC)
-        orr     \rx, \rx, #0x6200
+        orr     \rp, \rp, #0x6200
+        orr     \rv, \rv, #0x6200
 #elif defined(CONFIG_TEGRA_DEBUG_UARTD)
-        orr     \rx, \rx, #0x6300
+        orr     \rp, \rp, #0x6300
+        orr     \rv, \rv, #0x6300
 #elif defined(CONFIG_TEGRA_DEBUG_UARTE)
-        orr     \rx, \rx, #0x6400
+        orr     \rp, \rp, #0x6400
+        orr     \rv, \rv, #0x6400
 #endif
        .endm
 
 
  */
 #include <mach/hardware.h>
 
-       .macro  addruart, rx, tmp
+       .macro  addruart, rp, rv
        /* If we move the address using MMU, use this. */
-       mrc     p15, 0, \rx, c1, c0
-       tst     \rx, #1                 @ MMU enabled?
-       ldreq   \rx,      = U300_SLOW_PER_PHYS_BASE @ MMU off, physical address
-       ldrne   \rx,      = U300_SLOW_PER_VIRT_BASE @ MMU on, virtual address
-       orr     \rx, \rx, #0x00003000
+       ldr     \rp,      = U300_SLOW_PER_PHYS_BASE @ MMU off, physical address
+       ldr     \rv,      = U300_SLOW_PER_VIRT_BASE @ MMU on, virtual address
+       orr     \rp, \rp, #0x00003000
+       orr     \rv, \rv, #0x00003000
        .endm
 
 #include <asm/hardware/debug-pl01x.S>
 
 #define UX500_UART(n)  __UX500_UART(n)
 #define UART_BASE      UX500_UART(CONFIG_UX500_DEBUG_UART)
 
-       .macro  addruart, rx, tmp
-       mrc     p15, 0, \rx, c1, c0
-       tst     \rx, #1                                 @ MMU enabled?
-       ldreq   \rx, =UART_BASE                         @ no, physical address
-       ldrne   \rx, =IO_ADDRESS(UART_BASE)             @ yes, virtual address
+       .macro  addruart, rp, rv
+       ldr     \rp, =UART_BASE                         @ no, physical address
+       ldr     \rv, =IO_ADDRESS(UART_BASE)             @ yes, virtual address
        .endm
 
 #include <asm/hardware/debug-pl01x.S>
 
  *
 */
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx,      #0x10000000
-               movne   \rx,      #0xf1000000   @ virtual base
-               orr     \rx, \rx, #0x001F0000
-               orr     \rx, \rx, #0x00001000
+               .macro  addruart, rp, rv
+               mov     \rp,      #0x001F0000
+               orr     \rp, \rp, #0x00001000
+               orr     \rv, \rp, #0xf1000000   @ virtual base
+               orr     \rp, \rp,  #0x10000000  @ physical base
                .endm
 
 #include <asm/hardware/debug-pl01x.S>
 
 
 #define DEBUG_LL_UART_OFFSET   0x00009000
 
-               .macro  addruart,rx,tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx,      #0x10000000
-               movne   \rx,      #0xf8000000   @ virtual base
-               orr     \rx, \rx, #DEBUG_LL_UART_OFFSET
+               .macro  addruart,rp,rv
+               mov     \rp, #DEBUG_LL_UART_OFFSET
+               orr     \rv, \rp, #0xf8000000   @ virtual base
+               orr     \rp, \rp, #0x10000000   @ physical base
                .endm
 
 #include <asm/hardware/debug-pl01x.S>
 
 #define UART_PADDR     MXC91231_UART2_BASE_ADDR
 #define UART_VADDR     MXC91231_IO_ADDRESS(MXC91231_UART2_BASE_ADDR)
 #endif
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               ldreq   \rx, =UART_PADDR        @ physical
-               ldrne   \rx, =UART_VADDR        @ virtual
+               .macro  addruart, rp, rv
+               ldr     \rp, =UART_PADDR        @ physical
+               ldr     \rv, =UART_VADDR        @ virtual
                .endm
 
                .macro  senduart,rd,rx
 
 #include <linux/amba/serial.h>
 #include <mach/spear.h>
 
-               .macro  addruart, rx
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                                 @ MMU enabled?
-               moveq   \rx, #SPEAR_DBG_UART_BASE               @ Physical base
-               movne   \rx, #VA_SPEAR_DBG_UART_BASE            @ Virtual base
+               .macro  addruart, rp, rv
+               mov     \rp, #SPEAR_DBG_UART_BASE               @ Physical base
+               mov     \rv, #VA_SPEAR_DBG_UART_BASE            @ Virtual base
                .endm
 
                .macro  senduart, rd, rx
 
  * http://www.gnu.org/copyleft/gpl.html
  */
 
-               .macro  addruart, rx, tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx, #0x80000000        @ physical base address
-               addeq   \rx, \rx, #0x00070000
-               movne   \rx, #0xf0000000        @ virtual base
-               addne   \rx, \rx, #0x00070000
+               .macro  addruart, rp, rv
+               mov     \rp,      #0x00070000
+               add     \rv, \rp, #0xf0000000   @ virtual base
+               add     \rp, \rp, #0x80000000   @ physical base
                .endm
 
                .macro  senduart,rd,rx
 
  *
  */
 
-               .macro  addruart,rx,tmp
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               moveq   \rx, #0x90000000        @ physical base address
-               movne   \rx, #0xF1000000        @ virtual base
-               orr     \rx, \rx, #0x00007000   @ UART0
+               .macro  addruart, rp, rv
+               moveq   \rp, #0x90000000        @ physical base address
+               movne   \rv, #0xF1000000        @ virtual base
+               orr     \rp, \rp, #0x00007000   @ UART0
+               orr     \rv, \rv, #0x00007000   @ UART0
                .endm
 
                .macro  senduart,rd,rx