diff options
Diffstat (limited to 'arch/arm/mach-omap1/include/mach/debug-macro.S')
| -rw-r--r-- | arch/arm/mach-omap1/include/mach/debug-macro.S | 90 | 
1 files changed, 76 insertions, 14 deletions
diff --git a/arch/arm/mach-omap1/include/mach/debug-macro.S b/arch/arm/mach-omap1/include/mach/debug-macro.S index aedb746fc33..b6d9584544b 100644 --- a/arch/arm/mach-omap1/include/mach/debug-macro.S +++ b/arch/arm/mach-omap1/include/mach/debug-macro.S @@ -11,18 +11,80 @@   *  */ -		.macro	addruart,rx +#include <linux/serial_reg.h> + +#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 @@ -30,13 +92,13 @@  		.endm  		.macro	busyuart,rd,rx -1001:		ldrb	\rd, [\rx, #(0x5 << 2)]	@ OMAP-1510 and friends -		and	\rd, \rd, #0x60 -		teq	\rd, #0x60 +1001:		ldrb	\rd, [\rx, #(UART_LSR << OMAP_PORT_SHIFT)] +		and	\rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE) +		teq	\rd, #(UART_LSR_TEMT | UART_LSR_THRE)  		beq	1002f -		ldrb	\rd, [\rx, #(0x5 << 0)]	@ OMAP-730 only -		and	\rd, \rd, #0x60 -		teq	\rd, #0x60 +		ldrb	\rd, [\rx, #(UART_LSR << OMAP7XX_PORT_SHIFT)] +		and	\rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE) +		teq	\rd, #(UART_LSR_TEMT | UART_LSR_THRE)  		bne	1001b  1002:  		.endm  |