Now the DEBUG_LL code is the same for all omaps. Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx> --- arch/arm/mach-omap1/include/mach/debug-macro.S | 140 ------------- arch/arm/mach-omap2/include/mach/debug-macro.S | 191 ------------------ arch/arm/plat-omap/include/plat/debug-macro.S | 257 ++++++++++++++++++++++++ 3 files changed, 259 insertions(+), 329 deletions(-) create mode 100644 arch/arm/plat-omap/include/plat/debug-macro.S diff --git a/arch/arm/mach-omap1/include/mach/debug-macro.S b/arch/arm/mach-omap1/include/mach/debug-macro.S index bae924e..fbf6f34 100644 --- a/arch/arm/mach-omap1/include/mach/debug-macro.S +++ b/arch/arm/mach-omap1/include/mach/debug-macro.S @@ -11,142 +11,4 @@ * */ -#include <linux/serial_reg.h> - -#include <asm/memory.h> -#include <asm/mach-types.h> - -#include <plat/io.h> -#include <plat/serial.h> - -#define omap_uart_v2p(x) ((x) - PAGE_OFFSET + PLAT_PHYS_OFFSET) - - /* - * Intialize the debug serial port based on machine ID - */ - .macro inituart, id, a, v - mrc p15, 0, \a, c1, c0 - tst \a, #1 @ MMU enabled? -#ifdef CONFIG_AUTO_ZRELADDR - ldreq \a, =omap_uart_phys - biceq \a, \a, #0xf8000000 @ clear top bits of virt addr - moveq \v, pc @ copy pc - andeq \v, \v, #0xf8000000 @ clear lower bits - orreq \a, \v @ combile to get phys addr -#else - ldreq \a, =omap_uart_v2p(omap_uart_phys) -#endif - ldrne \a, =omap_uart_phys - mov \v, #(UART_LSR << OMAP_PORT_SHIFT) - str \v, [\a, #8] @ save lsr, different for 7xx - - /* omap7xx/8xx based boards using uart1 with shift 0 */ - ldr \v, =MACH_TYPE_HERALD - cmp \id, \v - ldrne \v, =MACH_TYPE_OMAP_PERSEUS2 - cmpne \id, \v - ldreq \v, =OMAP1_UART1_BASE - streq \v, [\a, #0] @ save port phys addr - ldreq \v, =(OMAP1_UART1_BASE - OMAP1_IO_OFFSET) - streq \v, [\a, #4] @ save port virt addr - moveq \v, #(UART_LSR << OMAP7XX_PORT_SHIFT) - streq \v, [\a, #8] @ save lsr, different for 7xx - beq 999f - - /* omap15xx/16xx based boards using uart1 */ - ldr \v, =MACH_TYPE_AMS_DELTA - cmp \id, \v - ldrne \v, =MACH_TYPE_NOKIA770 - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP_H2 - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP_H3 - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP_INNOVATOR - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP_OSK - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP_PALMTE - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP_PALMZ71 - cmpne \id, \v - ldreq \v, =OMAP1_UART1_BASE - streq \v, [\a, #0] @ save port phys addr - ldreq \v, =(OMAP1_UART1_BASE - OMAP1_IO_OFFSET) - streq \v, [\a, #4] @ save port virt addr - beq 999f - - /* omap15xx/16xx based boards using uart2 */ - ldr \v, =MACH_TYPE_OMAP_PALMTT - cmp \id, \v - ldreq \v, =OMAP1_UART2_BASE - streq \v, [\a, #0] @ save port phys addr - ldreq \v, =(OMAP1_UART2_BASE - OMAP1_IO_OFFSET) - streq \v, [\a, #4] @ save port virt addr - beq 999f - - /* omap15xx/16xx based boards using uart3 */ - ldr \v, =MACH_TYPE_SX1 - cmp \id, \v - ldreq \v, =OMAP1_UART3_BASE - streq \v, [\a, #0] @ save port phys addr - ldreq \v, =(OMAP1_UART3_BASE - OMAP1_IO_OFFSET) - streq \v, [\a, #4] @ save port virt addr - beq 999f - -999: - .endm - - /* - * Note that this code won't work if the bootloader passes - * a wrong machine ID number in r1. To debug, just hardcode - * the desired omap_uart_phys, omap_uart_virt and omap_uart_lsr - * temporarily into mach-omap[12]/serial.c and comment out - * the inituart macro above. - */ - .macro addruart, rp, rv - - /* Use omap_uart_phys/virt if already configured */ - mrc p15, 0, \rp, c1, c0 - tst \rp, #1 @ MMU enabled? -#ifdef CONFIG_AUTO_ZRELADDR - ldreq \rp, =omap_uart_phys @ MMU disabled - biceq \rp, \rp, #0xf8000000 @ clear top bits of virt addr - moveq \rv, pc @ copy pc - andeq \rv, \rv, #0xf8000000 @ clear lower bits - orreq \rp, \rv @ combine to get phys addr -#else - ldreq \rp, =omap_uart_v2p(omap_uart_phys) @ MMU disabled -#endif - ldrne \rp, =omap_uart_phys @ MMU enabled - add \rv, \rp, #4 @ omap_uart_virt - ldr \rp, [\rp, #0] - ldr \rv, [\rv, #0] - .endm - - .macro senduart,rd,rx - strb \rd, [\rx] - .endm - - .macro busyuart,rd,rx -1001: mrc p15, 0, \rd, c1, c0 - tst \rd, #1 @ MMU enabled? -#ifdef CONFIG_AUTO_ZRELADDR - ldreq \rd, =omap_uart_lsr @ MMU disabled - biceq \rd, \rd, #0xf8000000 @ clear top bits of virt addr - roreq \rd, \rd, #27 @ rotate bits - orreq \rd, pc, lsr #27 @ orr with top bits of pc - roreq \rd, \rd, #5 @ rotate bits back -#else - ldreq \rd, =omap_uart_v2p(omap_uart_lsr) @ MMU disabled -#endif - ldrne \rd, =omap_uart_lsr @ MMU enabled - ldr \rd, [\rd, #0] - ldrb \rd, [\rx, \rd] - and \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE) - teq \rd, #(UART_LSR_TEMT | UART_LSR_THRE) - bne 1001b - .endm - - .macro waituart,rd,rx - .endm +#include <plat/debug-macro.S> diff --git a/arch/arm/mach-omap2/include/mach/debug-macro.S b/arch/arm/mach-omap2/include/mach/debug-macro.S index 80e0bdc..9a7edaf 100644 --- a/arch/arm/mach-omap2/include/mach/debug-macro.S +++ b/arch/arm/mach-omap2/include/mach/debug-macro.S @@ -11,193 +11,4 @@ * */ -#include <linux/serial_reg.h> - -#include <asm/memory.h> -#include <asm/mach-types.h> - -#include <plat/io.h> -#include <plat/serial.h> - -#define omap_uart_v2p(x) ((x) - PAGE_OFFSET + PLAT_PHYS_OFFSET) - - /* - * Intialize the debug serial port based on machine ID - */ - .macro inituart, id, a, v - mrc p15, 0, \a, c1, c0 - tst \a, #1 @ MMU enabled? - ldreq \a, =omap_uart_phys -#ifdef CONFIG_AUTO_ZRELADDR - ldreq \a, =omap_uart_phys - biceq \a, \a, #0xf8000000 @ clear top bits of virt addr - moveq \v, pc @ copy pc - andeq \v, \v, #0xf8000000 @ clear lower bits - orreq \a, \v @ combile to get phys addr -#else - ldreq \a, =omap_uart_v2p(omap_uart_phys) -#endif - ldrne \a, =omap_uart_phys @ MMU enabled - mov \v, #(UART_LSR << OMAP_PORT_SHIFT) - str \v, [\a, #8] @ save lsr, different for zoom - - /* omap2 based boards using uart1 */ - ldr \v, =MACH_TYPE_OMAP2EVM - cmp \id, \v - ldrne \v, =MACH_TYPE_OMAP_2430SDP - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP_APOLLON - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP_H4 - cmpne \id, \v - ldreq \v, =OMAP2_UART1_BASE - streq \v, [\a, #0] @ save port phys addr - ldreq \v, =(OMAP2_UART1_BASE + OMAP2_L4_IO_OFFSET) - streq \v, [\a, #4] @ save port virt addr - beq 999f - - /* omap2 based boards using uart3 */ - ldr \v, =MACH_TYPE_NOKIA_N800 - cmp \id, \v - ldrne \v, =MACH_TYPE_NOKIA_N810 - cmpne \id, \v - ldrne \v, =MACH_TYPE_NOKIA_N810_WIMAX - cmpne \id, \v - ldreq \v, =OMAP2_UART3_BASE - streq \v, [\a, #0] @ save port phys addr - ldreq \v, =(OMAP2_UART3_BASE + OMAP2_L4_IO_OFFSET) - streq \v, [\a, #4] @ save port virt addr - beq 999f - - /* omap3 based boards using uart1 */ - ldr \v, =MACH_TYPE_OMAP3EVM - cmp \id, \v - ldrne \v, =MACH_TYPE_OMAP_3430SDP - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP_3630SDP - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP3530_LV_SOM - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP3_TORPEDO - cmpne \id, \v - ldreq \v, =OMAP3_UART1_BASE - streq \v, [\a, #0] @ save port phys addr - ldreq \v, =(OMAP3_UART1_BASE + OMAP2_L4_IO_OFFSET) - streq \v, [\a, #4] @ save port virt addr - beq 999f - - /* omap3 based boards using uart3 */ - ldr \v, =MACH_TYPE_CM_T35 - cmp \id, \v - ldrne \v, =MACH_TYPE_CM_T3517 - cmpne \id, \v - ldrne \v, =MACH_TYPE_CRANEBOARD - cmpne \id, \v - ldrne \v, =MACH_TYPE_DEVKIT8000 - cmpne \id, \v - ldrne \v, =MACH_TYPE_IGEP0020 - cmpne \id, \v - ldrne \v, =MACH_TYPE_IGEP0030 - cmpne \id, \v - ldrne \v, =MACH_TYPE_NOKIA_RM680 - cmpne \id, \v - ldrne \v, =MACH_TYPE_NOKIA_RX51 - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP3517EVM - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP3_BEAGLE - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP3_PANDORA - cmpne \id, \v - ldrne \v, =MACH_TYPE_OMAP_LDP - cmpne \id, \v - ldrne \v, =MACH_TYPE_OVERO - cmpne \id, \v - ldrne \v, =MACH_TYPE_TOUCHBOOK - cmpne \id, \v - ldreq \v, =OMAP3_UART3_BASE - streq \v, [\a, #0] @ save port phys addr - ldreq \v, =(OMAP3_UART3_BASE + OMAP2_L4_IO_OFFSET) - streq \v, [\a, #4] @ save port virt addr - beq 999f - - /* omap4 based boards using uart3 */ - ldr \v, =MACH_TYPE_OMAP_4430SDP - cmp \id, \v - ldrne \v, =MACH_TYPE_OMAP4_PANDA - cmpne \id, \v - ldreq \v, =OMAP4_UART3_BASE - streq \v, [\a, #0] @ save port phys addr - ldreq \v, =(OMAP4_UART3_BASE + OMAP2_L4_IO_OFFSET) - streq \v, [\a, #4] @ save port virt addr - beq 999f - - /* zoom2/3 external uart */ - ldr \v, =MACH_TYPE_OMAP_ZOOM2 - cmp \id, \v - ldrne \v, =MACH_TYPE_OMAP_ZOOM3 - cmpne \id, \v - ldreq \v, =ZOOM_UART_BASE - streq \v, [\a, #0] @ save port phys addr - ldreq \v, =ZOOM_UART_VIRT - streq \v, [\a, #4] @ save port virt addr - moveq \v, #(UART_LSR << ZOOM_PORT_SHIFT) - streq \v, [\a, #8] @ save lsr, different for zoom - beq 999f - -999: - .endm - - /* - * Note that this code won't work if the bootloader passes - * a wrong machine ID number in r1. To debug, just hardcode - * the desired omap_uart_phys, omap_uart_virt and omap_uart_lsr - * temporarily into mach-omap[12]/serial.c and comment out - * the inituart macro above. - */ - .macro addruart, rp, rv - - /* Use omap_uart_phys/virt if already configured */ - mrc p15, 0, \rp, c1, c0 - tst \rp, #1 @ MMU enabled? -#ifdef CONFIG_AUTO_ZRELADDR - ldreq \rp, =omap_uart_phys @ MMU disabled - biceq \rp, \rp, #0xf8000000 @ clear top bits of virt addr - moveq \rv, pc @ copy pc - andeq \rv, \rv, #0xf8000000 @ clear lower bits - orreq \rp, \rv @ combine to get phys addr -#else - ldreq \rp, =omap_uart_v2p(omap_uart_phys) @ MMU disabled -#endif - ldrne \rp, =omap_uart_phys @ MMU enabled - add \rv, \rp, #4 @ omap_uart_virt - ldr \rp, [\rp, #0] - ldr \rv, [\rv, #0] - .endm - - .macro senduart,rd,rx - strb \rd, [\rx] - .endm - - .macro busyuart,rd,rx -1001: mrc p15, 0, \rd, c1, c0 - tst \rd, #1 @ MMU enabled? -#ifdef CONFIG_AUTO_ZRELADDR - ldreq \rd, =omap_uart_lsr @ MMU disabled - biceq \rd, \rd, #0xf8000000 @ clear top bits of virt addr - roreq \rd, \rd, #27 @ rotate bits - orreq \rd, pc, lsr #27 @ orr with top bits of pc - roreq \rd, \rd, #5 @ rotate bits back -#else - ldreq \rd, =omap_uart_v2p(omap_uart_lsr) @ MMU disabled -#endif - ldrne \rd, =omap_uart_lsr @ MMU enabled - ldr \rd, [\rd, #0] - ldrb \rd, [\rx, \rd] - and \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE) - teq \rd, #(UART_LSR_TEMT | UART_LSR_THRE) - bne 1001b - .endm - - .macro waituart,rd,rx - .endm +#include <plat/debug-macro.S> diff --git a/arch/arm/plat-omap/include/plat/debug-macro.S b/arch/arm/plat-omap/include/plat/debug-macro.S new file mode 100644 index 0000000..1a1a5e8 --- /dev/null +++ b/arch/arm/plat-omap/include/plat/debug-macro.S @@ -0,0 +1,257 @@ +/* arch/arm/plat-omap/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. + * +*/ + +#include <linux/serial_reg.h> + +#include <asm/memory.h> +#include <asm/mach-types.h> + +#include <plat/io.h> +#include <plat/serial.h> + +#define omap_uart_v2p(x) ((x) - PAGE_OFFSET + PLAT_PHYS_OFFSET) + + /* + * Intialize the debug serial port based on machine ID + */ + .macro inituart, id, a, v + mrc p15, 0, \a, c1, c0 + tst \a, #1 @ MMU enabled? + ldreq \a, =omap_uart_phys +#ifdef CONFIG_AUTO_ZRELADDR + ldreq \a, =omap_uart_phys + biceq \a, \a, #0xf8000000 @ clear top bits of virt addr + moveq \v, pc @ copy pc + andeq \v, \v, #0xf8000000 @ clear lower bits + orreq \a, \v @ combile to get phys addr +#else + ldreq \a, =omap_uart_v2p(omap_uart_phys) +#endif + ldrne \a, =omap_uart_phys @ MMU enabled + mov \v, #(UART_LSR << OMAP_PORT_SHIFT) + str \v, [\a, #8] @ save lsr, different for zoom + + /* omap7xx/8xx based boards using uart1 with shift 0 */ + ldr \v, =MACH_TYPE_HERALD + cmp \id, \v + ldrne \v, =MACH_TYPE_OMAP_PERSEUS2 + cmpne \id, \v + ldreq \v, =OMAP1_UART1_BASE + streq \v, [\a, #0] @ save port phys addr + ldreq \v, =(OMAP1_UART1_BASE - OMAP1_IO_OFFSET) + streq \v, [\a, #4] @ save port virt addr + moveq \v, #(UART_LSR << OMAP7XX_PORT_SHIFT) + streq \v, [\a, #8] @ save lsr, different for 7xx + beq 999f + + /* omap15xx/16xx based boards using uart1 */ + ldr \v, =MACH_TYPE_AMS_DELTA + cmp \id, \v + ldrne \v, =MACH_TYPE_NOKIA770 + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP_H2 + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP_H3 + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP_INNOVATOR + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP_OSK + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP_PALMTE + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP_PALMZ71 + cmpne \id, \v + ldreq \v, =OMAP1_UART1_BASE + streq \v, [\a, #0] @ save port phys addr + ldreq \v, =(OMAP1_UART1_BASE - OMAP1_IO_OFFSET) + streq \v, [\a, #4] @ save port virt addr + beq 999f + + /* omap15xx/16xx based boards using uart2 */ + ldr \v, =MACH_TYPE_OMAP_PALMTT + cmp \id, \v + ldreq \v, =OMAP1_UART2_BASE + streq \v, [\a, #0] @ save port phys addr + ldreq \v, =(OMAP1_UART2_BASE - OMAP1_IO_OFFSET) + streq \v, [\a, #4] @ save port virt addr + beq 999f + + /* omap15xx/16xx based boards using uart3 */ + ldr \v, =MACH_TYPE_SX1 + cmp \id, \v + ldreq \v, =OMAP1_UART3_BASE + streq \v, [\a, #0] @ save port phys addr + ldreq \v, =(OMAP1_UART3_BASE - OMAP1_IO_OFFSET) + streq \v, [\a, #4] @ save port virt addr + beq 999f + + /* omap2 based boards using uart1 */ + ldr \v, =MACH_TYPE_OMAP2EVM + cmp \id, \v + ldrne \v, =MACH_TYPE_OMAP_2430SDP + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP_APOLLON + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP_H4 + cmpne \id, \v + ldreq \v, =OMAP2_UART1_BASE + streq \v, [\a, #0] @ save port phys addr + ldreq \v, =(OMAP2_UART1_BASE + OMAP2_L4_IO_OFFSET) + streq \v, [\a, #4] @ save port virt addr + beq 999f + + /* omap2 based boards using uart3 */ + ldr \v, =MACH_TYPE_NOKIA_N800 + cmp \id, \v + ldrne \v, =MACH_TYPE_NOKIA_N810 + cmpne \id, \v + ldrne \v, =MACH_TYPE_NOKIA_N810_WIMAX + cmpne \id, \v + ldreq \v, =OMAP2_UART3_BASE + streq \v, [\a, #0] @ save port phys addr + ldreq \v, =(OMAP2_UART3_BASE + OMAP2_L4_IO_OFFSET) + streq \v, [\a, #4] @ save port virt addr + beq 999f + + /* omap3 based boards using uart1 */ + ldr \v, =MACH_TYPE_OMAP3EVM + cmp \id, \v + ldrne \v, =MACH_TYPE_OMAP_3430SDP + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP_3630SDP + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP3530_LV_SOM + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP3_TORPEDO + cmpne \id, \v + ldreq \v, =OMAP3_UART1_BASE + streq \v, [\a, #0] @ save port phys addr + ldreq \v, =(OMAP3_UART1_BASE + OMAP2_L4_IO_OFFSET) + streq \v, [\a, #4] @ save port virt addr + beq 999f + + /* omap3 based boards using uart3 */ + ldr \v, =MACH_TYPE_CM_T35 + cmp \id, \v + ldrne \v, =MACH_TYPE_CM_T3517 + cmpne \id, \v + ldrne \v, =MACH_TYPE_CRANEBOARD + cmpne \id, \v + ldrne \v, =MACH_TYPE_DEVKIT8000 + cmpne \id, \v + ldrne \v, =MACH_TYPE_IGEP0020 + cmpne \id, \v + ldrne \v, =MACH_TYPE_IGEP0030 + cmpne \id, \v + ldrne \v, =MACH_TYPE_NOKIA_RM680 + cmpne \id, \v + ldrne \v, =MACH_TYPE_NOKIA_RX51 + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP3517EVM + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP3_BEAGLE + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP3_PANDORA + cmpne \id, \v + ldrne \v, =MACH_TYPE_OMAP_LDP + cmpne \id, \v + ldrne \v, =MACH_TYPE_OVERO + cmpne \id, \v + ldrne \v, =MACH_TYPE_TOUCHBOOK + cmpne \id, \v + ldreq \v, =OMAP3_UART3_BASE + streq \v, [\a, #0] @ save port phys addr + ldreq \v, =(OMAP3_UART3_BASE + OMAP2_L4_IO_OFFSET) + streq \v, [\a, #4] @ save port virt addr + beq 999f + + /* omap4 based boards using uart3 */ + ldr \v, =MACH_TYPE_OMAP_4430SDP + cmp \id, \v + ldrne \v, =MACH_TYPE_OMAP4_PANDA + cmpne \id, \v + ldreq \v, =OMAP4_UART3_BASE + streq \v, [\a, #0] @ save port phys addr + ldreq \v, =(OMAP4_UART3_BASE + OMAP2_L4_IO_OFFSET) + streq \v, [\a, #4] @ save port virt addr + beq 999f + + /* zoom2/3 external uart */ + ldr \v, =MACH_TYPE_OMAP_ZOOM2 + cmp \id, \v + ldrne \v, =MACH_TYPE_OMAP_ZOOM3 + cmpne \id, \v + ldreq \v, =ZOOM_UART_BASE + streq \v, [\a, #0] @ save port phys addr + ldreq \v, =ZOOM_UART_VIRT + streq \v, [\a, #4] @ save port virt addr + moveq \v, #(UART_LSR << ZOOM_PORT_SHIFT) + streq \v, [\a, #8] @ save lsr, different for zoom + beq 999f + +999: + .endm + + /* + * Note that this code won't work if the bootloader passes + * a wrong machine ID number in r1. To debug, just hardcode + * the desired omap_uart_phys, omap_uart_virt and omap_uart_lsr + * temporarily into mach-omap[12]/serial.c and comment out + * the inituart macro above. + */ + .macro addruart, rp, rv + + /* Use omap_uart_phys/virt if already configured */ + mrc p15, 0, \rp, c1, c0 + tst \rp, #1 @ MMU enabled? +#ifdef CONFIG_AUTO_ZRELADDR + ldreq \rp, =omap_uart_phys @ MMU disabled + biceq \rp, \rp, #0xf8000000 @ clear top bits of virt addr + moveq \rv, pc @ copy pc + andeq \rv, \rv, #0xf8000000 @ clear lower bits + orreq \rp, \rv @ combine to get phys addr +#else + ldreq \rp, =omap_uart_v2p(omap_uart_phys) @ MMU disabled +#endif + ldrne \rp, =omap_uart_phys @ MMU enabled + add \rv, \rp, #4 @ omap_uart_virt + ldr \rp, [\rp, #0] + ldr \rv, [\rv, #0] + .endm + + .macro senduart,rd,rx + strb \rd, [\rx] + .endm + + .macro busyuart,rd,rx +1001: mrc p15, 0, \rd, c1, c0 + tst \rd, #1 @ MMU enabled? +#ifdef CONFIG_AUTO_ZRELADDR + ldreq \rd, =omap_uart_lsr @ MMU disabled + biceq \rd, \rd, #0xf8000000 @ clear top bits of virt addr + roreq \rd, \rd, #27 @ rotate bits + orreq \rd, pc, lsr #27 @ orr with top bits of pc + roreq \rd, \rd, #5 @ rotate bits back +#else + ldreq \rd, =omap_uart_v2p(omap_uart_lsr) @ MMU disabled +#endif + ldrne \rd, =omap_uart_lsr @ MMU enabled + ldr \rd, [\rd, #0] + ldrb \rd, [\rx, \rd] + and \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE) + teq \rd, #(UART_LSR_TEMT | UART_LSR_THRE) + bne 1001b + .endm + + .macro waituart,rd,rx + .endm -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html