| 
									
										
										
										
											2009-10-19 17:26:17 -07:00
										 |  |  | /* arch/arm/mach-omap1/include/mach/debug-macro.S | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:48:53 -08:00
										 |  |  | #include <linux/serial_reg.h> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-15 12:50:46 -07:00
										 |  |  | #include "serial.h" | 
					
						
							| 
									
										
										
										
											2010-02-15 08:48:53 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | 		.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. | 
					
						
							|  |  |  | 		 */ | 
					
						
							| 
									
										
										
										
											2011-08-31 22:55:46 -04:00
										 |  |  | 		.macro	addruart, rp, rv, tmp | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		/* Use omap_uart_phys/virt if already configured */ | 
					
						
							| 
									
										
										
										
											2011-09-01 19:17:43 -04:00
										 |  |  | 9:		adr	\rp, 99f		@ get effective addr of 99f
 | 
					
						
							|  |  |  | 		ldr	\rv, [\rp]		@ get absolute addr of 99f
 | 
					
						
							|  |  |  | 		sub	\rv, \rv, \rp		@ offset between the two
 | 
					
						
							|  |  |  | 		ldr	\rp, [\rp, #4]		@ abs addr of omap_uart_phys
 | 
					
						
							|  |  |  | 		sub	\tmp, \rp, \rv		@ make it effective
 | 
					
						
							|  |  |  | 		ldr	\rp, [\tmp, #0]		@ omap_uart_phys
 | 
					
						
							|  |  |  | 		ldr	\rv, [\tmp, #4]		@ omap_uart_virt
 | 
					
						
							| 
									
										
										
										
											2010-07-06 18:30:06 +08:00
										 |  |  | 		cmp	\rp, #0			@ is port configured?
 | 
					
						
							|  |  |  | 		cmpne	\rv, #0 | 
					
						
							| 
									
										
										
										
											2011-09-01 19:17:43 -04:00
										 |  |  | 		bne	100f			@ already configured
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-30 17:39:19 -07:00
										 |  |  | 		/* Check the debug UART configuration set in uncompress.h */ | 
					
						
							| 
									
										
										
										
											2011-08-31 13:57:37 -04:00
										 |  |  | 		and	\rp, pc, #0xff000000 | 
					
						
							|  |  |  | 		ldr	\rv, =OMAP_UART_INFO_OFS | 
					
						
							|  |  |  | 		ldr	\rp, [\rp, \rv] | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		/* Select the UART to use based on the UART1 scratchpad value */ | 
					
						
							| 
									
										
										
										
											2010-07-06 18:30:06 +08:00
										 |  |  | 10:		cmp	\rp, #0			@ no port configured?
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | 		beq	11f			@ if none, try to use UART1
 | 
					
						
							| 
									
										
										
										
											2010-07-06 18:30:06 +08:00
										 |  |  | 		cmp	\rp, #OMAP1UART1 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | 		beq	11f			@ configure OMAP1UART1
 | 
					
						
							| 
									
										
										
										
											2010-07-06 18:30:06 +08:00
										 |  |  | 		cmp	\rp, #OMAP1UART2 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | 		beq	12f			@ configure OMAP1UART2
 | 
					
						
							| 
									
										
										
										
											2010-07-06 18:30:06 +08:00
										 |  |  | 		cmp	\rp, #OMAP1UART3 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | 		beq	13f			@ configure OMAP2UART3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		/* Configure the UART offset from the phys/virt base */ | 
					
						
							| 
									
										
										
										
											2010-07-06 18:30:06 +08:00
										 |  |  | 11:		mov	\rp, #0x00fb0000	@ OMAP1UART1
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | 		b	98f | 
					
						
							| 
									
										
										
										
											2010-07-06 18:30:06 +08:00
										 |  |  | 12:		mov	\rp, #0x00fb0000	@ OMAP1UART1
 | 
					
						
							|  |  |  | 		orr	\rp, \rp, #0x00000800	@ OMAP1UART2
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | 		b	98f | 
					
						
							| 
									
										
										
										
											2010-07-06 18:30:06 +08:00
										 |  |  | 13:		mov	\rp, #0x00fb0000	@ OMAP1UART1
 | 
					
						
							|  |  |  | 		orr	\rp, \rp, #0x00000800	@ OMAP1UART2
 | 
					
						
							|  |  |  | 		orr	\rp, \rp, #0x00009000	@ OMAP1UART3
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		/* Store both phys and virt address for the uart */ | 
					
						
							| 
									
										
										
										
											2010-07-06 18:30:06 +08:00
										 |  |  | 98:		add	\rp, \rp, #0xff000000	@ phys base
 | 
					
						
							| 
									
										
										
										
											2011-09-01 19:17:43 -04:00
										 |  |  | 		str	\rp, [\tmp, #0]		@ omap_uart_phys
 | 
					
						
							| 
									
										
										
										
											2010-07-06 18:30:06 +08:00
										 |  |  | 		sub	\rp, \rp, #0xff000000	@ phys base
 | 
					
						
							|  |  |  | 		add	\rp, \rp, #0xfe000000	@ virt base
 | 
					
						
							| 
									
										
										
										
											2011-09-01 19:17:43 -04:00
										 |  |  | 		str	\rp, [\tmp, #4]		@ omap_uart_virt
 | 
					
						
							| 
									
										
										
										
											2010-02-15 08:49:01 -08:00
										 |  |  | 		b	9b | 
					
						
							| 
									
										
										
										
											2011-09-01 19:17:43 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		.align | 
					
						
							|  |  |  | 99:		.word	. | 
					
						
							|  |  |  | 		.word	omap_uart_phys
 | 
					
						
							|  |  |  | 		.ltorg | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 100: | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 		.endm | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		.macro	senduart,rd,rx | 
					
						
							|  |  |  | 		strb	\rd, [\rx] | 
					
						
							|  |  |  | 		.endm | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		.macro	busyuart,rd,rx | 
					
						
							| 
									
										
										
										
											2010-02-15 08:48:53 -08:00
										 |  |  | 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) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 		beq	1002f | 
					
						
							| 
									
										
										
										
											2010-02-15 08:48:53 -08:00
										 |  |  | 		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) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 		bne	1001b | 
					
						
							|  |  |  | 1002: | 
					
						
							|  |  |  | 		.endm | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		.macro	waituart,rd,rx | 
					
						
							|  |  |  | 		.endm |