1808b7e07STony Lindgren/* 2808b7e07STony Lindgren * Debugging macro include header 3808b7e07STony Lindgren * 4808b7e07STony Lindgren * Copyright (C) 1994-1999 Russell King 5808b7e07STony Lindgren * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks 6808b7e07STony Lindgren * 7808b7e07STony Lindgren * This program is free software; you can redistribute it and/or modify 8808b7e07STony Lindgren * it under the terms of the GNU General Public License version 2 as 9808b7e07STony Lindgren * published by the Free Software Foundation. 10808b7e07STony Lindgren * 11808b7e07STony Lindgren*/ 12808b7e07STony Lindgren 13808b7e07STony Lindgren#include <linux/serial_reg.h> 14808b7e07STony Lindgren 15808b7e07STony Lindgren/* OMAP2 serial ports */ 16808b7e07STony Lindgren#define OMAP2_UART1_BASE 0x4806a000 17808b7e07STony Lindgren#define OMAP2_UART2_BASE 0x4806c000 18808b7e07STony Lindgren#define OMAP2_UART3_BASE 0x4806e000 19808b7e07STony Lindgren 20808b7e07STony Lindgren/* OMAP3 serial ports */ 21808b7e07STony Lindgren#define OMAP3_UART1_BASE OMAP2_UART1_BASE 22808b7e07STony Lindgren#define OMAP3_UART2_BASE OMAP2_UART2_BASE 23808b7e07STony Lindgren#define OMAP3_UART3_BASE 0x49020000 24808b7e07STony Lindgren#define OMAP3_UART4_BASE 0x49042000 /* Only on 36xx */ 25808b7e07STony Lindgren#define OMAP3_UART4_AM35XX_BASE 0x4809E000 /* Only on AM35xx */ 26808b7e07STony Lindgren 27808b7e07STony Lindgren/* OMAP4 serial ports */ 28808b7e07STony Lindgren#define OMAP4_UART1_BASE OMAP2_UART1_BASE 29808b7e07STony Lindgren#define OMAP4_UART2_BASE OMAP2_UART2_BASE 30808b7e07STony Lindgren#define OMAP4_UART3_BASE 0x48020000 31808b7e07STony Lindgren#define OMAP4_UART4_BASE 0x4806e000 32808b7e07STony Lindgren 33808b7e07STony Lindgren/* TI81XX serial ports */ 34808b7e07STony Lindgren#define TI81XX_UART1_BASE 0x48020000 35808b7e07STony Lindgren#define TI81XX_UART2_BASE 0x48022000 36808b7e07STony Lindgren#define TI81XX_UART3_BASE 0x48024000 37808b7e07STony Lindgren 38808b7e07STony Lindgren/* AM3505/3517 UART4 */ 39808b7e07STony Lindgren#define AM35XX_UART4_BASE 0x4809E000 /* Only on AM3505/3517 */ 40808b7e07STony Lindgren 41808b7e07STony Lindgren/* AM33XX serial port */ 42808b7e07STony Lindgren#define AM33XX_UART1_BASE 0x44E09000 43808b7e07STony Lindgren 44808b7e07STony Lindgren/* OMAP5 serial ports */ 45808b7e07STony Lindgren#define OMAP5_UART1_BASE OMAP2_UART1_BASE 46808b7e07STony Lindgren#define OMAP5_UART2_BASE OMAP2_UART2_BASE 47808b7e07STony Lindgren#define OMAP5_UART3_BASE OMAP4_UART3_BASE 48808b7e07STony Lindgren#define OMAP5_UART4_BASE OMAP4_UART4_BASE 49808b7e07STony Lindgren#define OMAP5_UART5_BASE 0x48066000 50808b7e07STony Lindgren#define OMAP5_UART6_BASE 0x48068000 51808b7e07STony Lindgren 52808b7e07STony Lindgren/* External port on Zoom2/3 */ 53808b7e07STony Lindgren#define ZOOM_UART_BASE 0x10000000 54808b7e07STony Lindgren#define ZOOM_UART_VIRT 0xfa400000 55808b7e07STony Lindgren 56808b7e07STony Lindgren#define OMAP_PORT_SHIFT 2 57808b7e07STony Lindgren#define ZOOM_PORT_SHIFT 1 58808b7e07STony Lindgren 59808b7e07STony Lindgren#define UART_OFFSET(addr) ((addr) & 0x00ffffff) 60808b7e07STony Lindgren 61808b7e07STony Lindgren .pushsection .data 62808b7e07STony Lindgrenomap_uart_phys: .word 0 63808b7e07STony Lindgrenomap_uart_virt: .word 0 64808b7e07STony Lindgrenomap_uart_lsr: .word 0 65808b7e07STony Lindgren .popsection 66808b7e07STony Lindgren 67808b7e07STony Lindgren .macro addruart, rp, rv, tmp 68808b7e07STony Lindgren 69808b7e07STony Lindgren /* Use omap_uart_phys/virt if already configured */ 70808b7e07STony Lindgren10: adr \rp, 99f @ get effective addr of 99f 71808b7e07STony Lindgren ldr \rv, [\rp] @ get absolute addr of 99f 72808b7e07STony Lindgren sub \rv, \rv, \rp @ offset between the two 73808b7e07STony Lindgren ldr \rp, [\rp, #4] @ abs addr of omap_uart_phys 74808b7e07STony Lindgren sub \tmp, \rp, \rv @ make it effective 75808b7e07STony Lindgren ldr \rp, [\tmp, #0] @ omap_uart_phys 76808b7e07STony Lindgren ldr \rv, [\tmp, #4] @ omap_uart_virt 77808b7e07STony Lindgren cmp \rp, #0 @ is port configured? 78808b7e07STony Lindgren cmpne \rv, #0 79808b7e07STony Lindgren bne 100f @ already configured 80808b7e07STony Lindgren 81808b7e07STony Lindgren /* Configure the UART offset from the phys/virt base */ 82808b7e07STony Lindgren#ifdef CONFIG_DEBUG_OMAP2UART1 83808b7e07STony Lindgren mov \rp, #UART_OFFSET(OMAP2_UART1_BASE) @ omap2/3/4 84808b7e07STony Lindgren b 98f 85808b7e07STony Lindgren#endif 86808b7e07STony Lindgren#ifdef CONFIG_DEBUG_OMAP2UART2 87808b7e07STony Lindgren mov \rp, #UART_OFFSET(OMAP2_UART2_BASE) @ omap2/3/4 88808b7e07STony Lindgren b 98f 89808b7e07STony Lindgren#endif 90808b7e07STony Lindgren#ifdef CONFIG_DEBUG_OMAP2UART3 91808b7e07STony Lindgren mov \rp, #UART_OFFSET(OMAP2_UART3_BASE) 92808b7e07STony Lindgren b 98f 93808b7e07STony Lindgren#endif 94808b7e07STony Lindgren#ifdef CONFIG_DEBUG_OMAP3UART3 95808b7e07STony Lindgren mov \rp, #UART_OFFSET(OMAP3_UART1_BASE) 96808b7e07STony Lindgren add \rp, \rp, #0x00fb0000 97808b7e07STony Lindgren add \rp, \rp, #0x00006000 @ OMAP3_UART3_BASE 98808b7e07STony Lindgren b 98f 99808b7e07STony Lindgren#endif 100808b7e07STony Lindgren#ifdef CONFIG_DEBUG_OMAP4UART3 101808b7e07STony Lindgren mov \rp, #UART_OFFSET(OMAP4_UART3_BASE) 102808b7e07STony Lindgren b 98f 103808b7e07STony Lindgren#endif 104808b7e07STony Lindgren#ifdef CONFIG_DEBUG_OMAP3UART4 105808b7e07STony Lindgren mov \rp, #UART_OFFSET(OMAP3_UART1_BASE) 106808b7e07STony Lindgren add \rp, \rp, #0x00fb0000 107808b7e07STony Lindgren add \rp, \rp, #0x00028000 @ OMAP3_UART4_BASE 108808b7e07STony Lindgren b 98f 109808b7e07STony Lindgren#endif 110808b7e07STony Lindgren#ifdef CONFIG_DEBUG_OMAP4UART4 111808b7e07STony Lindgren mov \rp, #UART_OFFSET(OMAP4_UART4_BASE) 112808b7e07STony Lindgren b 98f 113808b7e07STony Lindgren#endif 114808b7e07STony Lindgren#ifdef CONFIG_DEBUG_TI81XXUART1 115808b7e07STony Lindgren mov \rp, #UART_OFFSET(TI81XX_UART1_BASE) 116808b7e07STony Lindgren b 98f 117808b7e07STony Lindgren#endif 118808b7e07STony Lindgren#ifdef CONFIG_DEBUG_TI81XXUART2 119808b7e07STony Lindgren mov \rp, #UART_OFFSET(TI81XX_UART2_BASE) 120808b7e07STony Lindgren b 98f 121808b7e07STony Lindgren#endif 122808b7e07STony Lindgren#ifdef CONFIG_DEBUG_TI81XXUART3 123808b7e07STony Lindgren mov \rp, #UART_OFFSET(TI81XX_UART3_BASE) 124808b7e07STony Lindgren b 98f 125808b7e07STony Lindgren#endif 126808b7e07STony Lindgren#ifdef CONFIG_DEBUG_AM33XXUART1 127808b7e07STony Lindgren ldr \rp, =AM33XX_UART1_BASE 128808b7e07STony Lindgren and \rp, \rp, #0x00ffffff 129808b7e07STony Lindgren b 97f 130808b7e07STony Lindgren#endif 131808b7e07STony Lindgren#ifdef CONFIG_DEBUG_ZOOM_UART 132808b7e07STony Lindgren ldr \rp, =ZOOM_UART_BASE 133808b7e07STony Lindgren str \rp, [\tmp, #0] @ omap_uart_phys 134808b7e07STony Lindgren ldr \rp, =ZOOM_UART_VIRT 135808b7e07STony Lindgren str \rp, [\tmp, #4] @ omap_uart_virt 136808b7e07STony Lindgren mov \rp, #(UART_LSR << ZOOM_PORT_SHIFT) 137808b7e07STony Lindgren str \rp, [\tmp, #8] @ omap_uart_lsr 138808b7e07STony Lindgren#endif 139808b7e07STony Lindgren b 10b 140808b7e07STony Lindgren 141808b7e07STony Lindgren /* AM33XX: Store both phys and virt address for the uart */ 142808b7e07STony Lindgren97: add \rp, \rp, #0x44000000 @ phys base 143808b7e07STony Lindgren str \rp, [\tmp, #0] @ omap_uart_phys 144808b7e07STony Lindgren sub \rp, \rp, #0x44000000 @ phys base 145808b7e07STony Lindgren add \rp, \rp, #0xf9000000 @ virt base 146808b7e07STony Lindgren str \rp, [\tmp, #4] @ omap_uart_virt 147808b7e07STony Lindgren mov \rp, #(UART_LSR << OMAP_PORT_SHIFT) 148808b7e07STony Lindgren str \rp, [\tmp, #8] @ omap_uart_lsr 149808b7e07STony Lindgren 150808b7e07STony Lindgren b 10b 151808b7e07STony Lindgren 152808b7e07STony Lindgren /* Store both phys and virt address for the uart */ 153808b7e07STony Lindgren98: add \rp, \rp, #0x48000000 @ phys base 154808b7e07STony Lindgren str \rp, [\tmp, #0] @ omap_uart_phys 155808b7e07STony Lindgren sub \rp, \rp, #0x48000000 @ phys base 156808b7e07STony Lindgren add \rp, \rp, #0xfa000000 @ virt base 157808b7e07STony Lindgren str \rp, [\tmp, #4] @ omap_uart_virt 158808b7e07STony Lindgren mov \rp, #(UART_LSR << OMAP_PORT_SHIFT) 159808b7e07STony Lindgren str \rp, [\tmp, #8] @ omap_uart_lsr 160808b7e07STony Lindgren 161808b7e07STony Lindgren b 10b 162808b7e07STony Lindgren 163808b7e07STony Lindgren .align 164808b7e07STony Lindgren99: .word . 165808b7e07STony Lindgren .word omap_uart_phys 166808b7e07STony Lindgren .ltorg 167808b7e07STony Lindgren 168808b7e07STony Lindgren100: /* Pass the UART_LSR reg address */ 169808b7e07STony Lindgren ldr \tmp, [\tmp, #8] @ omap_uart_lsr 170808b7e07STony Lindgren add \rp, \rp, \tmp 171808b7e07STony Lindgren add \rv, \rv, \tmp 172808b7e07STony Lindgren .endm 173808b7e07STony Lindgren 174808b7e07STony Lindgren .macro senduart,rd,rx 175808b7e07STony Lindgren orr \rd, \rd, \rx, lsl #24 @ preserve LSR reg offset 176808b7e07STony Lindgren bic \rx, \rx, #0xff @ get base (THR) reg address 177808b7e07STony Lindgren strb \rd, [\rx] @ send lower byte of rd 178808b7e07STony Lindgren orr \rx, \rx, \rd, lsr #24 @ restore original rx (LSR) 179808b7e07STony Lindgren bic \rd, \rd, #(0xff << 24) @ restore original rd 180808b7e07STony Lindgren .endm 181808b7e07STony Lindgren 182808b7e07STony Lindgren .macro busyuart,rd,rx 183808b7e07STony Lindgren1001: ldrb \rd, [\rx] @ rx contains UART_LSR address 184808b7e07STony Lindgren and \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE) 185808b7e07STony Lindgren teq \rd, #(UART_LSR_TEMT | UART_LSR_THRE) 186808b7e07STony Lindgren bne 1001b 187808b7e07STony Lindgren .endm 188808b7e07STony Lindgren 189808b7e07STony Lindgren .macro waituart,rd,rx 190808b7e07STony Lindgren .endm 191