/* SPDX-License-Identifier: GPL-2.0-only */1/*2* linux/arch/arm/kernel/debug.S3*4* Copyright (C) 1994-1999 Russell King5*6* 32-bit debugging code7*/8#include <linux/linkage.h>9#include <asm/assembler.h>1011.text1213/*14* Some debugging routines (useful if you've got MM problems and15* printk isn't working). For DEBUGGING ONLY!!! Do not leave16* references to these in a production kernel!17*/1819#if !defined(CONFIG_DEBUG_SEMIHOSTING)20#include CONFIG_DEBUG_LL_INCLUDE21#endif2223#ifdef CONFIG_MMU24.macro addruart_current, rx, tmp1, tmp225addruart \tmp1, \tmp2, \rx26mrc p15, 0, \rx, c1, c027tst \rx, #128moveq \rx, \tmp129movne \rx, \tmp230.endm3132#else /* !CONFIG_MMU */33.macro addruart_current, rx, tmp1, tmp234addruart \rx, \tmp1, \tmp235.endm3637#endif /* CONFIG_MMU */3839/*40* Useful debugging routines41*/42ENTRY(printhex8)43mov r1, #844b printhex45ENDPROC(printhex8)4647ENTRY(printhex4)48mov r1, #449b printhex50ENDPROC(printhex4)5152ENTRY(printhex2)53mov r1, #254printhex: adr r2, hexbuf_rel55ldr r3, [r2]56add r2, r2, r357add r3, r2, r158mov r1, #059strb r1, [r3]601: and r1, r0, #1561mov r0, r0, lsr #462cmp r1, #1063addlt r1, r1, #'0'64addge r1, r1, #'a' - 1065strb r1, [r3, #-1]!66teq r3, r267bne 1b68mov r0, r269b printascii70ENDPROC(printhex2)7172.pushsection .bss73hexbuf_addr: .space 1674.popsection75.align76hexbuf_rel: .long hexbuf_addr - .7778.ltorg7980#ifndef CONFIG_DEBUG_SEMIHOSTING8182ENTRY(printascii)83addruart_current r3, r1, r2841: teq r0, #085ldrbne r1, [r0], #186teqne r1, #087reteq lr882: teq r1, #'\n'89bne 3f90mov r1, #'\r'91#ifdef CONFIG_DEBUG_UART_FLOW_CONTROL92waituartcts r2, r393#endif94waituarttxrdy r2, r395senduart r1, r396busyuart r2, r397mov r1, #'\n'983:99#ifdef CONFIG_DEBUG_UART_FLOW_CONTROL100waituartcts r2, r3101#endif102waituarttxrdy r2, r3103senduart r1, r3104busyuart r2, r3105b 1b106ENDPROC(printascii)107108ENTRY(printch)109addruart_current r3, r1, r2110mov r1, r0111mov r0, #0112b 2b113ENDPROC(printch)114115#ifdef CONFIG_MMU116ENTRY(debug_ll_addr)117addruart r2, r3, ip118str r2, [r0]119str r3, [r1]120ret lr121ENDPROC(debug_ll_addr)122#endif123124#else125126ENTRY(printascii)127mov r1, r0128mov r0, #0x04 @ SYS_WRITE0129ARM( svc #0x123456 )130#ifdef CONFIG_CPU_V7M131THUMB( bkpt #0xab )132#else133THUMB( svc #0xab )134#endif135ret lr136ENDPROC(printascii)137138ENTRY(printch)139adr r1, hexbuf_rel140ldr r2, [r1]141add r1, r1, r2142strb r0, [r1]143mov r0, #0x03 @ SYS_WRITEC144ARM( svc #0x123456 )145#ifdef CONFIG_CPU_V7M146THUMB( bkpt #0xab )147#else148THUMB( svc #0xab )149#endif150ret lr151ENDPROC(printch)152153ENTRY(debug_ll_addr)154mov r2, #0155str r2, [r0]156str r2, [r1]157ret lr158ENDPROC(debug_ll_addr)159160#endif161162163