1*d2912cb1SThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */ 21da177e4SLinus Torvalds/* 31da177e4SLinus Torvalds * linux/arch/arm/kernel/debug.S 41da177e4SLinus Torvalds * 51da177e4SLinus Torvalds * Copyright (C) 1994-1999 Russell King 61da177e4SLinus Torvalds * 71da177e4SLinus Torvalds * 32-bit debugging code 81da177e4SLinus Torvalds */ 91da177e4SLinus Torvalds#include <linux/linkage.h> 106f6f6a70SRob Herring#include <asm/assembler.h> 111da177e4SLinus Torvalds 121da177e4SLinus Torvalds .text 131da177e4SLinus Torvalds 141da177e4SLinus Torvalds/* 151da177e4SLinus Torvalds * Some debugging routines (useful if you've got MM problems and 161da177e4SLinus Torvalds * printk isn't working). For DEBUGGING ONLY!!! Do not leave 171da177e4SLinus Torvalds * references to these in a production kernel! 181da177e4SLinus Torvalds */ 191da177e4SLinus Torvalds 2091a9fec0SRob Herring#if !defined(CONFIG_DEBUG_SEMIHOSTING) 2191a9fec0SRob Herring#include CONFIG_DEBUG_LL_INCLUDE 2291a9fec0SRob Herring#endif 231da177e4SLinus Torvalds 240ea12930SJeremy Kerr#ifdef CONFIG_MMU 250ea12930SJeremy Kerr .macro addruart_current, rx, tmp1, tmp2 26639da5eeSNicolas Pitre addruart \tmp1, \tmp2, \rx 270ea12930SJeremy Kerr mrc p15, 0, \rx, c1, c0 280ea12930SJeremy Kerr tst \rx, #1 290ea12930SJeremy Kerr moveq \rx, \tmp1 300ea12930SJeremy Kerr movne \rx, \tmp2 310ea12930SJeremy Kerr .endm 320ea12930SJeremy Kerr 330ea12930SJeremy Kerr#else /* !CONFIG_MMU */ 340ea12930SJeremy Kerr .macro addruart_current, rx, tmp1, tmp2 357505f042SStefan Agner addruart \rx, \tmp1, \tmp2 360ea12930SJeremy Kerr .endm 370ea12930SJeremy Kerr 380ea12930SJeremy Kerr#endif /* CONFIG_MMU */ 390ea12930SJeremy Kerr 401da177e4SLinus Torvalds/* 411da177e4SLinus Torvalds * Useful debugging routines 421da177e4SLinus Torvalds */ 431da177e4SLinus TorvaldsENTRY(printhex8) 441da177e4SLinus Torvalds mov r1, #8 451da177e4SLinus Torvalds b printhex 4693ed3970SCatalin MarinasENDPROC(printhex8) 471da177e4SLinus Torvalds 481da177e4SLinus TorvaldsENTRY(printhex4) 491da177e4SLinus Torvalds mov r1, #4 501da177e4SLinus Torvalds b printhex 5193ed3970SCatalin MarinasENDPROC(printhex4) 521da177e4SLinus Torvalds 531da177e4SLinus TorvaldsENTRY(printhex2) 541da177e4SLinus Torvalds mov r1, #2 55e11d1314SNicolas Pitreprinthex: adr r2, hexbuf_rel 56e11d1314SNicolas Pitre ldr r3, [r2] 57e11d1314SNicolas Pitre add r2, r2, r3 581da177e4SLinus Torvalds add r3, r2, r1 591da177e4SLinus Torvalds mov r1, #0 601da177e4SLinus Torvalds strb r1, [r3] 611da177e4SLinus Torvalds1: and r1, r0, #15 621da177e4SLinus Torvalds mov r0, r0, lsr #4 631da177e4SLinus Torvalds cmp r1, #10 641da177e4SLinus Torvalds addlt r1, r1, #'0' 651da177e4SLinus Torvalds addge r1, r1, #'a' - 10 661da177e4SLinus Torvalds strb r1, [r3, #-1]! 671da177e4SLinus Torvalds teq r3, r2 681da177e4SLinus Torvalds bne 1b 691da177e4SLinus Torvalds mov r0, r2 701da177e4SLinus Torvalds b printascii 7193ed3970SCatalin MarinasENDPROC(printhex2) 721da177e4SLinus Torvalds 73e11d1314SNicolas Pitre .pushsection .bss 74e11d1314SNicolas Pitrehexbuf_addr: .space 16 75e11d1314SNicolas Pitre .popsection 76e11d1314SNicolas Pitre .align 77e11d1314SNicolas Pitrehexbuf_rel: .long hexbuf_addr - . 78b55fa188SAfzal Mohammed 791da177e4SLinus Torvalds .ltorg 801da177e4SLinus Torvalds 819b5a146aSNicolas Pitre#ifndef CONFIG_DEBUG_SEMIHOSTING 829b5a146aSNicolas Pitre 831da177e4SLinus TorvaldsENTRY(printascii) 840ea12930SJeremy Kerr addruart_current r3, r1, r2 852a14b80cSNicolas Pitre1: teq r0, #0 86e44fc388SStefan Agner ldrbne r1, [r0], #1 871da177e4SLinus Torvalds teqne r1, #0 882a14b80cSNicolas Pitre reteq lr 892a14b80cSNicolas Pitre2: teq r1, #'\n' 902a14b80cSNicolas Pitre bne 3f 912a14b80cSNicolas Pitre mov r1, #'\r' 922a14b80cSNicolas Pitre waituart r2, r3 932a14b80cSNicolas Pitre senduart r1, r3 942a14b80cSNicolas Pitre busyuart r2, r3 952a14b80cSNicolas Pitre mov r1, #'\n' 962a14b80cSNicolas Pitre3: waituart r2, r3 972a14b80cSNicolas Pitre senduart r1, r3 982a14b80cSNicolas Pitre busyuart r2, r3 992a14b80cSNicolas Pitre b 1b 10093ed3970SCatalin MarinasENDPROC(printascii) 1011da177e4SLinus Torvalds 1021da177e4SLinus TorvaldsENTRY(printch) 1030ea12930SJeremy Kerr addruart_current r3, r1, r2 1041da177e4SLinus Torvalds mov r1, r0 1051da177e4SLinus Torvalds mov r0, #0 1062a14b80cSNicolas Pitre b 2b 10793ed3970SCatalin MarinasENDPROC(printch) 1089b5a146aSNicolas Pitre 109a73b59c5SUwe Kleine-König#ifdef CONFIG_MMU 110e5c5f2adSRob HerringENTRY(debug_ll_addr) 111e5c5f2adSRob Herring addruart r2, r3, ip 112e5c5f2adSRob Herring str r2, [r0] 113e5c5f2adSRob Herring str r3, [r1] 1146ebbf2ceSRussell King ret lr 115e5c5f2adSRob HerringENDPROC(debug_ll_addr) 116a73b59c5SUwe Kleine-König#endif 117e5c5f2adSRob Herring 1189b5a146aSNicolas Pitre#else 1199b5a146aSNicolas Pitre 1209b5a146aSNicolas PitreENTRY(printascii) 1219b5a146aSNicolas Pitre mov r1, r0 1229b5a146aSNicolas Pitre mov r0, #0x04 @ SYS_WRITE0 1239b5a146aSNicolas Pitre ARM( svc #0x123456 ) 124ee3eaee6SNicolas Pitre#ifdef CONFIG_CPU_V7M 125ee3eaee6SNicolas Pitre THUMB( bkpt #0xab ) 126ee3eaee6SNicolas Pitre#else 1279b5a146aSNicolas Pitre THUMB( svc #0xab ) 128ee3eaee6SNicolas Pitre#endif 1296ebbf2ceSRussell King ret lr 1309b5a146aSNicolas PitreENDPROC(printascii) 1319b5a146aSNicolas Pitre 1329b5a146aSNicolas PitreENTRY(printch) 133e11d1314SNicolas Pitre adr r1, hexbuf_rel 134e11d1314SNicolas Pitre ldr r2, [r1] 135e11d1314SNicolas Pitre add r1, r1, r2 1369b5a146aSNicolas Pitre strb r0, [r1] 1379b5a146aSNicolas Pitre mov r0, #0x03 @ SYS_WRITEC 1389b5a146aSNicolas Pitre ARM( svc #0x123456 ) 139ee3eaee6SNicolas Pitre#ifdef CONFIG_CPU_V7M 140ee3eaee6SNicolas Pitre THUMB( bkpt #0xab ) 141ee3eaee6SNicolas Pitre#else 1429b5a146aSNicolas Pitre THUMB( svc #0xab ) 143ee3eaee6SNicolas Pitre#endif 1446ebbf2ceSRussell King ret lr 1459b5a146aSNicolas PitreENDPROC(printch) 1469b5a146aSNicolas Pitre 147e5c5f2adSRob HerringENTRY(debug_ll_addr) 148e5c5f2adSRob Herring mov r2, #0 149e5c5f2adSRob Herring str r2, [r0] 150e5c5f2adSRob Herring str r2, [r1] 1516ebbf2ceSRussell King ret lr 152e5c5f2adSRob HerringENDPROC(debug_ll_addr) 153e5c5f2adSRob Herring 1549b5a146aSNicolas Pitre#endif 155