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