diff options
| author | Jeremy Kerr <jeremy.kerr@canonical.com> | 2010-07-06 18:30:06 +0800 | 
|---|---|---|
| committer | Nicolas Pitre <nico@fluxnic.net> | 2010-10-20 00:27:33 -0400 | 
| commit | 0ea1293009826da45e1019f45dfde1e557bb30df (patch) | |
| tree | 7111bcd355921f03415182845e5f236ffe1896f4 /arch/arm/mach-omap2/include/mach/debug-macro.S | |
| parent | 1ea64615601229f0dc16dee91dc5b50216411baa (diff) | |
| download | olio-linux-3.10-0ea1293009826da45e1019f45dfde1e557bb30df.tar.xz olio-linux-3.10-0ea1293009826da45e1019f45dfde1e557bb30df.zip  | |
arm: return both physical and virtual addresses from addruart
Rather than checking the MMU status in every instance of addruart, do it
once in kernel/debug.S, and change the existing addruart macros to
return both physical and virtual addresses. The main debug code can then
select the appropriate address to use.
This will also allow us to retreive the address of a uart for the MMU
state that we're not current in.
Updated with fixes for OMAP from Jason Wang <jason77.wang@gmail.com>
and Tony Lindgren <tony@atomide.com>, and fix for versatile express from
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>.
Signed-off-by: Jeremy Kerr <jeremy.kerr@canonical.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Jason Wang <jason77.wang@gmail.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Tested-by: Kevin Hilman <khilman@deeprootsystems.com>
Diffstat (limited to 'arch/arm/mach-omap2/include/mach/debug-macro.S')
| -rw-r--r-- | arch/arm/mach-omap2/include/mach/debug-macro.S | 127 | 
1 files changed, 63 insertions, 64 deletions
diff --git a/arch/arm/mach-omap2/include/mach/debug-macro.S b/arch/arm/mach-omap2/include/mach/debug-macro.S index 09331bbbda5..6a4d4136002 100644 --- a/arch/arm/mach-omap2/include/mach/debug-macro.S +++ b/arch/arm/mach-omap2/include/mach/debug-macro.S @@ -31,95 +31,94 @@ omap_uart_lsr:	.word	0  		 * 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: @@ -131,9 +130,9 @@ omap_uart_lsr:	.word	0  		.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)  |