blob: 2b36a281dc842a55757459860164369b763edd28 [file] [log] [blame]
Tony Lindgrenaca59b82009-10-19 17:26:17 -07001/* arch/arm/mach-omap1/include/mach/debug-macro.S
2 *
3 * Debugging macro include header
4 *
5 * Copyright (C) 1994-1999 Russell King
6 * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
12*/
13
Tony Lindgren4f2c49f2010-02-15 08:48:53 -080014#include <linux/serial_reg.h>
15
16#include <plat/serial.h>
17
Tony Lindgren0c8219f2010-02-15 08:49:01 -080018 .pushsection .data
19omap_uart_phys: .word 0x0
20omap_uart_virt: .word 0x0
21 .popsection
22
23 /*
24 * Note that this code won't work if the bootloader passes
25 * a wrong machine ID number in r1. To debug, just hardcode
26 * the desired UART phys and virt addresses temporarily into
27 * the omap_uart_phys and omap_uart_virt above.
28 */
Nicolas Pitre639da5e2011-08-31 22:55:46 -040029 .macro addruart, rp, rv, tmp
Tony Lindgren0c8219f2010-02-15 08:49:01 -080030
31 /* Use omap_uart_phys/virt if already configured */
Nicolas Pitre28362d52011-09-01 19:17:43 -0400329: adr \rp, 99f @ get effective addr of 99f
33 ldr \rv, [\rp] @ get absolute addr of 99f
34 sub \rv, \rv, \rp @ offset between the two
35 ldr \rp, [\rp, #4] @ abs addr of omap_uart_phys
36 sub \tmp, \rp, \rv @ make it effective
37 ldr \rp, [\tmp, #0] @ omap_uart_phys
38 ldr \rv, [\tmp, #4] @ omap_uart_virt
Jeremy Kerr0ea12932010-07-06 18:30:06 +080039 cmp \rp, #0 @ is port configured?
40 cmpne \rv, #0
Nicolas Pitre28362d52011-09-01 19:17:43 -040041 bne 100f @ already configured
Tony Lindgren0c8219f2010-02-15 08:49:01 -080042
Tony Lindgren96554d72010-04-30 17:39:19 -070043 /* Check the debug UART configuration set in uncompress.h */
Nicolas Pitredd1854562011-08-31 13:57:37 -040044 and \rp, pc, #0xff000000
45 ldr \rv, =OMAP_UART_INFO_OFS
46 ldr \rp, [\rp, \rv]
Tony Lindgren0c8219f2010-02-15 08:49:01 -080047
48 /* Select the UART to use based on the UART1 scratchpad value */
Jeremy Kerr0ea12932010-07-06 18:30:06 +08004910: cmp \rp, #0 @ no port configured?
Tony Lindgren0c8219f2010-02-15 08:49:01 -080050 beq 11f @ if none, try to use UART1
Jeremy Kerr0ea12932010-07-06 18:30:06 +080051 cmp \rp, #OMAP1UART1
Tony Lindgren0c8219f2010-02-15 08:49:01 -080052 beq 11f @ configure OMAP1UART1
Jeremy Kerr0ea12932010-07-06 18:30:06 +080053 cmp \rp, #OMAP1UART2
Tony Lindgren0c8219f2010-02-15 08:49:01 -080054 beq 12f @ configure OMAP1UART2
Jeremy Kerr0ea12932010-07-06 18:30:06 +080055 cmp \rp, #OMAP1UART3
Tony Lindgren0c8219f2010-02-15 08:49:01 -080056 beq 13f @ configure OMAP2UART3
57
58 /* Configure the UART offset from the phys/virt base */
Jeremy Kerr0ea12932010-07-06 18:30:06 +08005911: mov \rp, #0x00fb0000 @ OMAP1UART1
Tony Lindgren0c8219f2010-02-15 08:49:01 -080060 b 98f
Jeremy Kerr0ea12932010-07-06 18:30:06 +08006112: mov \rp, #0x00fb0000 @ OMAP1UART1
62 orr \rp, \rp, #0x00000800 @ OMAP1UART2
Tony Lindgren0c8219f2010-02-15 08:49:01 -080063 b 98f
Jeremy Kerr0ea12932010-07-06 18:30:06 +08006413: mov \rp, #0x00fb0000 @ OMAP1UART1
65 orr \rp, \rp, #0x00000800 @ OMAP1UART2
66 orr \rp, \rp, #0x00009000 @ OMAP1UART3
Tony Lindgren0c8219f2010-02-15 08:49:01 -080067
68 /* Store both phys and virt address for the uart */
Jeremy Kerr0ea12932010-07-06 18:30:06 +08006998: add \rp, \rp, #0xff000000 @ phys base
Nicolas Pitre28362d52011-09-01 19:17:43 -040070 str \rp, [\tmp, #0] @ omap_uart_phys
Jeremy Kerr0ea12932010-07-06 18:30:06 +080071 sub \rp, \rp, #0xff000000 @ phys base
72 add \rp, \rp, #0xfe000000 @ virt base
Nicolas Pitre28362d52011-09-01 19:17:43 -040073 str \rp, [\tmp, #4] @ omap_uart_virt
Tony Lindgren0c8219f2010-02-15 08:49:01 -080074 b 9b
Nicolas Pitre28362d52011-09-01 19:17:43 -040075
76 .align
7799: .word .
78 .word omap_uart_phys
79 .ltorg
80
81100:
Tony Lindgrenaca59b82009-10-19 17:26:17 -070082 .endm
83
84 .macro senduart,rd,rx
85 strb \rd, [\rx]
86 .endm
87
88 .macro busyuart,rd,rx
Tony Lindgren4f2c49f2010-02-15 08:48:53 -0800891001: ldrb \rd, [\rx, #(UART_LSR << OMAP_PORT_SHIFT)]
90 and \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE)
91 teq \rd, #(UART_LSR_TEMT | UART_LSR_THRE)
Tony Lindgrenaca59b82009-10-19 17:26:17 -070092 beq 1002f
Tony Lindgren4f2c49f2010-02-15 08:48:53 -080093 ldrb \rd, [\rx, #(UART_LSR << OMAP7XX_PORT_SHIFT)]
94 and \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE)
95 teq \rd, #(UART_LSR_TEMT | UART_LSR_THRE)
Tony Lindgrenaca59b82009-10-19 17:26:17 -070096 bne 1001b
971002:
98 .endm
99
100 .macro waituart,rd,rx
101 .endm