162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/* arch/arm/mach-imx/include/mach/debug-macro.S
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Debugging macro include header
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci *  Copyright (C) 1994-1999 Russell King
762306a36Sopenharmony_ci *  Moved from linux/arch/arm/kernel/debug.S by Ben Dooks
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <asm/assembler.h>
1162306a36Sopenharmony_ci#include "imx-uart.h"
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci/*
1462306a36Sopenharmony_ci * FIXME: This is a copy of IMX_IO_P2V in hardware.h, and needs to
1562306a36Sopenharmony_ci * stay sync with that.  It's hard to maintain, and should be fixed
1662306a36Sopenharmony_ci * globally for multi-platform build to use a fixed virtual address
1762306a36Sopenharmony_ci * for low-level debug uart port across platforms.
1862306a36Sopenharmony_ci */
1962306a36Sopenharmony_ci#define IMX_IO_P2V(x)	(						\
2062306a36Sopenharmony_ci			(((x) & 0x80000000) >> 7) |			\
2162306a36Sopenharmony_ci			(0xf4000000 +					\
2262306a36Sopenharmony_ci			(((x) & 0x50000000) >> 6) +			\
2362306a36Sopenharmony_ci			(((x) & 0x0b000000) >> 4) +			\
2462306a36Sopenharmony_ci			(((x) & 0x000fffff))))
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#define UART_VADDR	IMX_IO_P2V(UART_PADDR)
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci		.macro	addruart, rp, rv, tmp
2962306a36Sopenharmony_ci		ldr	\rp, =UART_PADDR	@ physical
3062306a36Sopenharmony_ci		ldr	\rv, =UART_VADDR	@ virtual
3162306a36Sopenharmony_ci		.endm
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci		.macro	senduart,rd,rx
3462306a36Sopenharmony_ci		ARM_BE8(rev \rd, \rd)
3562306a36Sopenharmony_ci		str	\rd, [\rx, #0x40]	@ TXDATA
3662306a36Sopenharmony_ci		.endm
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci		.macro	waituartcts,rd,rx
3962306a36Sopenharmony_ci		.endm
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci		.macro	waituarttxrdy,rd,rx
4262306a36Sopenharmony_ci		.endm
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci		.macro	busyuart,rd,rx
4562306a36Sopenharmony_ci1002:		ldr	\rd, [\rx, #0x98]	@ SR2
4662306a36Sopenharmony_ci		ARM_BE8(rev \rd, \rd)
4762306a36Sopenharmony_ci		tst	\rd, #1 << 3		@ TXDC
4862306a36Sopenharmony_ci		beq	1002b			@ wait until transmit done
4962306a36Sopenharmony_ci		.endm
50