1d2912cb1SThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */ 2e6131fa3SDmitry Eremin-Solenikov/* arch/arm/include/debug/sa1100.S 3e6131fa3SDmitry Eremin-Solenikov * 4e6131fa3SDmitry Eremin-Solenikov * Debugging macro include header 5e6131fa3SDmitry Eremin-Solenikov * 6e6131fa3SDmitry Eremin-Solenikov * Copyright (C) 1994-1999 Russell King 7e6131fa3SDmitry Eremin-Solenikov * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks 8e6131fa3SDmitry Eremin-Solenikov*/ 9e6131fa3SDmitry Eremin-Solenikov 10e6131fa3SDmitry Eremin-Solenikov#define UTCR3 0x0c 11e6131fa3SDmitry Eremin-Solenikov#define UTDR 0x14 12e6131fa3SDmitry Eremin-Solenikov#define UTSR1 0x20 13e6131fa3SDmitry Eremin-Solenikov#define UTCR3_TXE 0x00000002 /* Transmit Enable */ 14e6131fa3SDmitry Eremin-Solenikov#define UTSR1_TBY 0x00000001 /* Transmitter BusY (read) */ 15e6131fa3SDmitry Eremin-Solenikov#define UTSR1_TNF 0x00000004 /* Transmit FIFO Not Full (read) */ 16e6131fa3SDmitry Eremin-Solenikov 17e6131fa3SDmitry Eremin-Solenikov .macro addruart, rp, rv, tmp 18e6131fa3SDmitry Eremin-Solenikov mrc p15, 0, \rp, c1, c0 19e6131fa3SDmitry Eremin-Solenikov tst \rp, #1 @ MMU enabled? 20e6131fa3SDmitry Eremin-Solenikov moveq \rp, #0x80000000 @ physical base address 21e6131fa3SDmitry Eremin-Solenikov movne \rp, #0xf8000000 @ virtual address 22e6131fa3SDmitry Eremin-Solenikov 23e6131fa3SDmitry Eremin-Solenikov @ We probe for the active serial port here, coherently with 24e6131fa3SDmitry Eremin-Solenikov @ the comment in arch/arm/mach-sa1100/include/mach/uncompress.h. 25e6131fa3SDmitry Eremin-Solenikov @ We assume r1 can be clobbered. 26e6131fa3SDmitry Eremin-Solenikov 27e6131fa3SDmitry Eremin-Solenikov @ see if Ser3 is active 28e6131fa3SDmitry Eremin-Solenikov add \rp, \rp, #0x00050000 29e6131fa3SDmitry Eremin-Solenikov ldr \rv, [\rp, #UTCR3] 30e6131fa3SDmitry Eremin-Solenikov tst \rv, #UTCR3_TXE 31e6131fa3SDmitry Eremin-Solenikov 32e6131fa3SDmitry Eremin-Solenikov @ if Ser3 is inactive, then try Ser1 33e6131fa3SDmitry Eremin-Solenikov addeq \rp, \rp, #(0x00010000 - 0x00050000) 34e6131fa3SDmitry Eremin-Solenikov ldreq \rv, [\rp, #UTCR3] 35e6131fa3SDmitry Eremin-Solenikov tsteq \rv, #UTCR3_TXE 36e6131fa3SDmitry Eremin-Solenikov 37e6131fa3SDmitry Eremin-Solenikov @ if Ser1 is inactive, then try Ser2 38e6131fa3SDmitry Eremin-Solenikov addeq \rp, \rp, #(0x00030000 - 0x00010000) 39e6131fa3SDmitry Eremin-Solenikov ldreq \rv, [\rp, #UTCR3] 40e6131fa3SDmitry Eremin-Solenikov tsteq \rv, #UTCR3_TXE 41e6131fa3SDmitry Eremin-Solenikov 42e6131fa3SDmitry Eremin-Solenikov @ clear top bits, and generate both phys and virt addresses 43e6131fa3SDmitry Eremin-Solenikov lsl \rp, \rp, #8 44e6131fa3SDmitry Eremin-Solenikov lsr \rp, \rp, #8 45e6131fa3SDmitry Eremin-Solenikov orr \rv, \rp, #0xf8000000 @ virtual 46e6131fa3SDmitry Eremin-Solenikov orr \rp, \rp, #0x80000000 @ physical 47e6131fa3SDmitry Eremin-Solenikov 48e6131fa3SDmitry Eremin-Solenikov .endm 49e6131fa3SDmitry Eremin-Solenikov 50e6131fa3SDmitry Eremin-Solenikov .macro senduart,rd,rx 51e6131fa3SDmitry Eremin-Solenikov str \rd, [\rx, #UTDR] 52e6131fa3SDmitry Eremin-Solenikov .endm 53e6131fa3SDmitry Eremin-Solenikov 54*2c50a570SLinus Walleij .macro waituartcts,rd,rx 55*2c50a570SLinus Walleij .endm 56*2c50a570SLinus Walleij 57*2c50a570SLinus Walleij .macro waituarttxrdy,rd,rx 58e6131fa3SDmitry Eremin-Solenikov1001: ldr \rd, [\rx, #UTSR1] 59e6131fa3SDmitry Eremin-Solenikov tst \rd, #UTSR1_TNF 60e6131fa3SDmitry Eremin-Solenikov beq 1001b 61e6131fa3SDmitry Eremin-Solenikov .endm 62e6131fa3SDmitry Eremin-Solenikov 63e6131fa3SDmitry Eremin-Solenikov .macro busyuart,rd,rx 64e6131fa3SDmitry Eremin-Solenikov1001: ldr \rd, [\rx, #UTSR1] 65e6131fa3SDmitry Eremin-Solenikov tst \rd, #UTSR1_TBY 66e6131fa3SDmitry Eremin-Solenikov bne 1001b 67e6131fa3SDmitry Eremin-Solenikov .endm 68