Thomas Gleixner | d2912cb | 2019-06-04 10:11:33 +0200 | [diff] [blame^] | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
Tony Lindgren | 808b7e0 | 2013-01-11 11:24:19 -0800 | [diff] [blame] | 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 |
Tony Lindgren | 808b7e0 | 2013-01-11 11:24:19 -0800 | [diff] [blame] | 7 | */ |
| 8 | |
| 9 | #include <linux/serial_reg.h> |
| 10 | |
Tony Lindgren | 808b7e0 | 2013-01-11 11:24:19 -0800 | [diff] [blame] | 11 | /* External port on Zoom2/3 */ |
| 12 | #define ZOOM_UART_BASE 0x10000000 |
| 13 | #define ZOOM_UART_VIRT 0xfa400000 |
| 14 | |
| 15 | #define OMAP_PORT_SHIFT 2 |
| 16 | #define ZOOM_PORT_SHIFT 1 |
| 17 | |
| 18 | #define UART_OFFSET(addr) ((addr) & 0x00ffffff) |
| 19 | |
| 20 | .pushsection .data |
Russell King | 1abd350 | 2017-07-26 12:49:31 +0100 | [diff] [blame] | 21 | .align 2 |
Tony Lindgren | 808b7e0 | 2013-01-11 11:24:19 -0800 | [diff] [blame] | 22 | omap_uart_phys: .word 0 |
| 23 | omap_uart_virt: .word 0 |
| 24 | omap_uart_lsr: .word 0 |
| 25 | .popsection |
| 26 | |
| 27 | .macro addruart, rp, rv, tmp |
| 28 | |
| 29 | /* Use omap_uart_phys/virt if already configured */ |
| 30 | 10: adr \rp, 99f @ get effective addr of 99f |
| 31 | ldr \rv, [\rp] @ get absolute addr of 99f |
| 32 | sub \rv, \rv, \rp @ offset between the two |
| 33 | ldr \rp, [\rp, #4] @ abs addr of omap_uart_phys |
| 34 | sub \tmp, \rp, \rv @ make it effective |
| 35 | ldr \rp, [\tmp, #0] @ omap_uart_phys |
| 36 | ldr \rv, [\tmp, #4] @ omap_uart_virt |
| 37 | cmp \rp, #0 @ is port configured? |
| 38 | cmpne \rv, #0 |
| 39 | bne 100f @ already configured |
| 40 | |
| 41 | /* Configure the UART offset from the phys/virt base */ |
Tony Lindgren | 808b7e0 | 2013-01-11 11:24:19 -0800 | [diff] [blame] | 42 | #ifdef CONFIG_DEBUG_ZOOM_UART |
| 43 | ldr \rp, =ZOOM_UART_BASE |
| 44 | str \rp, [\tmp, #0] @ omap_uart_phys |
| 45 | ldr \rp, =ZOOM_UART_VIRT |
| 46 | str \rp, [\tmp, #4] @ omap_uart_virt |
| 47 | mov \rp, #(UART_LSR << ZOOM_PORT_SHIFT) |
| 48 | str \rp, [\tmp, #8] @ omap_uart_lsr |
| 49 | #endif |
| 50 | b 10b |
| 51 | |
Tony Lindgren | 808b7e0 | 2013-01-11 11:24:19 -0800 | [diff] [blame] | 52 | .align |
| 53 | 99: .word . |
| 54 | .word omap_uart_phys |
| 55 | .ltorg |
| 56 | |
| 57 | 100: /* Pass the UART_LSR reg address */ |
| 58 | ldr \tmp, [\tmp, #8] @ omap_uart_lsr |
| 59 | add \rp, \rp, \tmp |
| 60 | add \rv, \rv, \tmp |
| 61 | .endm |
| 62 | |
| 63 | .macro senduart,rd,rx |
| 64 | orr \rd, \rd, \rx, lsl #24 @ preserve LSR reg offset |
| 65 | bic \rx, \rx, #0xff @ get base (THR) reg address |
| 66 | strb \rd, [\rx] @ send lower byte of rd |
| 67 | orr \rx, \rx, \rd, lsr #24 @ restore original rx (LSR) |
| 68 | bic \rd, \rd, #(0xff << 24) @ restore original rd |
| 69 | .endm |
| 70 | |
| 71 | .macro busyuart,rd,rx |
| 72 | 1001: ldrb \rd, [\rx] @ rx contains UART_LSR address |
| 73 | and \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE) |
| 74 | teq \rd, #(UART_LSR_TEMT | UART_LSR_THRE) |
| 75 | bne 1001b |
| 76 | .endm |
| 77 | |
| 78 | .macro waituart,rd,rx |
| 79 | .endm |