162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Debugging macro include header 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 1994-1999 Russell King 662306a36Sopenharmony_ci * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks 762306a36Sopenharmony_ci*/ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/serial_reg.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci/* External port on Zoom2/3 */ 1262306a36Sopenharmony_ci#define ZOOM_UART_BASE 0x10000000 1362306a36Sopenharmony_ci#define ZOOM_UART_VIRT 0xfa400000 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#define OMAP_PORT_SHIFT 2 1662306a36Sopenharmony_ci#define ZOOM_PORT_SHIFT 1 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#define UART_OFFSET(addr) ((addr) & 0x00ffffff) 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci .pushsection .data 2162306a36Sopenharmony_ci .align 2 2262306a36Sopenharmony_ciomap_uart_phys: .word 0 2362306a36Sopenharmony_ciomap_uart_virt: .word 0 2462306a36Sopenharmony_ciomap_uart_lsr: .word 0 2562306a36Sopenharmony_ci .popsection 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci .macro addruart, rp, rv, tmp 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci /* Use omap_uart_phys/virt if already configured */ 3062306a36Sopenharmony_ci10: adr \rp, 99f @ get effective addr of 99f 3162306a36Sopenharmony_ci ldr \rv, [\rp] @ get absolute addr of 99f 3262306a36Sopenharmony_ci sub \rv, \rv, \rp @ offset between the two 3362306a36Sopenharmony_ci ldr \rp, [\rp, #4] @ abs addr of omap_uart_phys 3462306a36Sopenharmony_ci sub \tmp, \rp, \rv @ make it effective 3562306a36Sopenharmony_ci ldr \rp, [\tmp, #0] @ omap_uart_phys 3662306a36Sopenharmony_ci ldr \rv, [\tmp, #4] @ omap_uart_virt 3762306a36Sopenharmony_ci cmp \rp, #0 @ is port configured? 3862306a36Sopenharmony_ci cmpne \rv, #0 3962306a36Sopenharmony_ci bne 100f @ already configured 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci /* Configure the UART offset from the phys/virt base */ 4262306a36Sopenharmony_ci#ifdef CONFIG_DEBUG_ZOOM_UART 4362306a36Sopenharmony_ci ldr \rp, =ZOOM_UART_BASE 4462306a36Sopenharmony_ci str \rp, [\tmp, #0] @ omap_uart_phys 4562306a36Sopenharmony_ci ldr \rp, =ZOOM_UART_VIRT 4662306a36Sopenharmony_ci str \rp, [\tmp, #4] @ omap_uart_virt 4762306a36Sopenharmony_ci mov \rp, #(UART_LSR << ZOOM_PORT_SHIFT) 4862306a36Sopenharmony_ci str \rp, [\tmp, #8] @ omap_uart_lsr 4962306a36Sopenharmony_ci#endif 5062306a36Sopenharmony_ci b 10b 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci .align 5362306a36Sopenharmony_ci99: .word . 5462306a36Sopenharmony_ci .word omap_uart_phys 5562306a36Sopenharmony_ci .ltorg 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci100: /* Pass the UART_LSR reg address */ 5862306a36Sopenharmony_ci ldr \tmp, [\tmp, #8] @ omap_uart_lsr 5962306a36Sopenharmony_ci add \rp, \rp, \tmp 6062306a36Sopenharmony_ci add \rv, \rv, \tmp 6162306a36Sopenharmony_ci .endm 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci .macro senduart,rd,rx 6462306a36Sopenharmony_ci orr \rd, \rd, \rx, lsl #24 @ preserve LSR reg offset 6562306a36Sopenharmony_ci bic \rx, \rx, #0xff @ get base (THR) reg address 6662306a36Sopenharmony_ci strb \rd, [\rx] @ send lower byte of rd 6762306a36Sopenharmony_ci orr \rx, \rx, \rd, lsr #24 @ restore original rx (LSR) 6862306a36Sopenharmony_ci bic \rd, \rd, #(0xff << 24) @ restore original rd 6962306a36Sopenharmony_ci .endm 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci .macro busyuart,rd,rx 7262306a36Sopenharmony_ci1001: ldrb \rd, [\rx] @ rx contains UART_LSR address 7362306a36Sopenharmony_ci and \rd, \rd, #(UART_LSR_TEMT | UART_LSR_THRE) 7462306a36Sopenharmony_ci teq \rd, #(UART_LSR_TEMT | UART_LSR_THRE) 7562306a36Sopenharmony_ci bne 1001b 7662306a36Sopenharmony_ci .endm 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci .macro waituartcts,rd,rx 7962306a36Sopenharmony_ci .endm 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci .macro waituarttxrdy,rd,rx 8262306a36Sopenharmony_ci .endm 83