11cfe9fa0SMasahiro Yamada/* 21cfe9fa0SMasahiro Yamada * linux/arch/arm/kernel/debug.S 31cfe9fa0SMasahiro Yamada * 41cfe9fa0SMasahiro Yamada * Copyright (C) 1994-1999 Russell King 51cfe9fa0SMasahiro Yamada * 693456512SMasahiro Yamada * SPDX-License-Identifier: GPL-2.0+ 71cfe9fa0SMasahiro Yamada * 81cfe9fa0SMasahiro Yamada * 32-bit debugging code 91cfe9fa0SMasahiro Yamada */ 101cfe9fa0SMasahiro Yamada#include <linux/linkage.h> 111cfe9fa0SMasahiro Yamada#include <asm/assembler.h> 121cfe9fa0SMasahiro Yamada 131cfe9fa0SMasahiro Yamada .text 141cfe9fa0SMasahiro Yamada 151cfe9fa0SMasahiro Yamada/* 161cfe9fa0SMasahiro Yamada * Some debugging routines (useful if you've got MM problems and 171cfe9fa0SMasahiro Yamada * printk isn't working). For DEBUGGING ONLY!!! Do not leave 181cfe9fa0SMasahiro Yamada * references to these in a production kernel! 191cfe9fa0SMasahiro Yamada */ 201cfe9fa0SMasahiro Yamada 211cfe9fa0SMasahiro Yamada#if !defined(CONFIG_DEBUG_SEMIHOSTING) 221cfe9fa0SMasahiro Yamada#include CONFIG_DEBUG_LL_INCLUDE 231cfe9fa0SMasahiro Yamada#endif 241cfe9fa0SMasahiro Yamada 251cfe9fa0SMasahiro Yamada#ifdef CONFIG_MMU 261cfe9fa0SMasahiro Yamada .macro addruart_current, rx, tmp1, tmp2 271cfe9fa0SMasahiro Yamada addruart \tmp1, \tmp2, \rx 281cfe9fa0SMasahiro Yamada mrc p15, 0, \rx, c1, c0 291cfe9fa0SMasahiro Yamada tst \rx, #1 301cfe9fa0SMasahiro Yamada moveq \rx, \tmp1 311cfe9fa0SMasahiro Yamada movne \rx, \tmp2 321cfe9fa0SMasahiro Yamada .endm 331cfe9fa0SMasahiro Yamada 341cfe9fa0SMasahiro Yamada#else /* !CONFIG_MMU */ 351cfe9fa0SMasahiro Yamada .macro addruart_current, rx, tmp1, tmp2 36*b81fa615SMasahiro Yamada addruart \rx, \tmp1, \tmp2 371cfe9fa0SMasahiro Yamada .endm 381cfe9fa0SMasahiro Yamada 391cfe9fa0SMasahiro Yamada#endif /* CONFIG_MMU */ 401cfe9fa0SMasahiro Yamada 411cfe9fa0SMasahiro Yamada/* 421cfe9fa0SMasahiro Yamada * Useful debugging routines 431cfe9fa0SMasahiro Yamada */ 441cfe9fa0SMasahiro YamadaENTRY(printhex8) 451cfe9fa0SMasahiro Yamada mov r1, #8 461cfe9fa0SMasahiro Yamada b printhex 471cfe9fa0SMasahiro YamadaENDPROC(printhex8) 481cfe9fa0SMasahiro Yamada 491cfe9fa0SMasahiro YamadaENTRY(printhex4) 501cfe9fa0SMasahiro Yamada mov r1, #4 511cfe9fa0SMasahiro Yamada b printhex 521cfe9fa0SMasahiro YamadaENDPROC(printhex4) 531cfe9fa0SMasahiro Yamada 541cfe9fa0SMasahiro YamadaENTRY(printhex2) 551cfe9fa0SMasahiro Yamada mov r1, #2 561cfe9fa0SMasahiro Yamadaprinthex: adr r2, hexbuf 571cfe9fa0SMasahiro Yamada add r3, r2, r1 581cfe9fa0SMasahiro Yamada mov r1, #0 591cfe9fa0SMasahiro Yamada strb r1, [r3] 601cfe9fa0SMasahiro Yamada1: and r1, r0, #15 611cfe9fa0SMasahiro Yamada mov r0, r0, lsr #4 621cfe9fa0SMasahiro Yamada cmp r1, #10 631cfe9fa0SMasahiro Yamada addlt r1, r1, #'0' 641cfe9fa0SMasahiro Yamada addge r1, r1, #'a' - 10 651cfe9fa0SMasahiro Yamada strb r1, [r3, #-1]! 661cfe9fa0SMasahiro Yamada teq r3, r2 671cfe9fa0SMasahiro Yamada bne 1b 681cfe9fa0SMasahiro Yamada mov r0, r2 691cfe9fa0SMasahiro Yamada b printascii 701cfe9fa0SMasahiro YamadaENDPROC(printhex2) 711cfe9fa0SMasahiro Yamada 721cfe9fa0SMasahiro Yamadahexbuf: .space 16 731cfe9fa0SMasahiro Yamada 741cfe9fa0SMasahiro Yamada .ltorg 751cfe9fa0SMasahiro Yamada 761cfe9fa0SMasahiro Yamada#ifndef CONFIG_DEBUG_SEMIHOSTING 771cfe9fa0SMasahiro Yamada 781cfe9fa0SMasahiro YamadaENTRY(printascii) 791cfe9fa0SMasahiro Yamada addruart_current r3, r1, r2 801cfe9fa0SMasahiro Yamada b 2f 811cfe9fa0SMasahiro Yamada1: waituart r2, r3 821cfe9fa0SMasahiro Yamada senduart r1, r3 831cfe9fa0SMasahiro Yamada busyuart r2, r3 841cfe9fa0SMasahiro Yamada teq r1, #'\n' 851cfe9fa0SMasahiro Yamada moveq r1, #'\r' 861cfe9fa0SMasahiro Yamada beq 1b 871cfe9fa0SMasahiro Yamada2: teq r0, #0 881cfe9fa0SMasahiro Yamada ldrneb r1, [r0], #1 891cfe9fa0SMasahiro Yamada teqne r1, #0 901cfe9fa0SMasahiro Yamada bne 1b 911cfe9fa0SMasahiro Yamada mov pc, lr 921cfe9fa0SMasahiro YamadaENDPROC(printascii) 931cfe9fa0SMasahiro Yamada 941cfe9fa0SMasahiro YamadaENTRY(printch) 951cfe9fa0SMasahiro Yamada addruart_current r3, r1, r2 961cfe9fa0SMasahiro Yamada mov r1, r0 971cfe9fa0SMasahiro Yamada mov r0, #0 981cfe9fa0SMasahiro Yamada b 1b 991cfe9fa0SMasahiro YamadaENDPROC(printch) 1001cfe9fa0SMasahiro Yamada 1011cfe9fa0SMasahiro Yamada#ifdef CONFIG_MMU 1021cfe9fa0SMasahiro YamadaENTRY(debug_ll_addr) 1031cfe9fa0SMasahiro Yamada addruart r2, r3, ip 1041cfe9fa0SMasahiro Yamada str r2, [r0] 1051cfe9fa0SMasahiro Yamada str r3, [r1] 1061cfe9fa0SMasahiro Yamada mov pc, lr 1071cfe9fa0SMasahiro YamadaENDPROC(debug_ll_addr) 1081cfe9fa0SMasahiro Yamada#endif 1091cfe9fa0SMasahiro Yamada 1101cfe9fa0SMasahiro Yamada#else 1111cfe9fa0SMasahiro Yamada 1121cfe9fa0SMasahiro YamadaENTRY(printascii) 1131cfe9fa0SMasahiro Yamada mov r1, r0 1141cfe9fa0SMasahiro Yamada mov r0, #0x04 @ SYS_WRITE0 1151cfe9fa0SMasahiro Yamada ARM( svc #0x123456 ) 1161cfe9fa0SMasahiro Yamada THUMB( svc #0xab ) 1171cfe9fa0SMasahiro Yamada mov pc, lr 1181cfe9fa0SMasahiro YamadaENDPROC(printascii) 1191cfe9fa0SMasahiro Yamada 1201cfe9fa0SMasahiro YamadaENTRY(printch) 1211cfe9fa0SMasahiro Yamada adr r1, hexbuf 1221cfe9fa0SMasahiro Yamada strb r0, [r1] 1231cfe9fa0SMasahiro Yamada mov r0, #0x03 @ SYS_WRITEC 1241cfe9fa0SMasahiro Yamada ARM( svc #0x123456 ) 1251cfe9fa0SMasahiro Yamada THUMB( svc #0xab ) 1261cfe9fa0SMasahiro Yamada mov pc, lr 1271cfe9fa0SMasahiro YamadaENDPROC(printch) 1281cfe9fa0SMasahiro Yamada 1291cfe9fa0SMasahiro YamadaENTRY(debug_ll_addr) 1301cfe9fa0SMasahiro Yamada mov r2, #0 1311cfe9fa0SMasahiro Yamada str r2, [r0] 1321cfe9fa0SMasahiro Yamada str r2, [r1] 1331cfe9fa0SMasahiro Yamada mov pc, lr 1341cfe9fa0SMasahiro YamadaENDPROC(debug_ll_addr) 1351cfe9fa0SMasahiro Yamada 1361cfe9fa0SMasahiro Yamada#endif 137