1*1da177e4SLinus Torvalds/* 2*1da177e4SLinus Torvalds * linux/arch/arm/kernel/debug.S 3*1da177e4SLinus Torvalds * 4*1da177e4SLinus Torvalds * Copyright (C) 1994-1999 Russell King 5*1da177e4SLinus Torvalds * 6*1da177e4SLinus Torvalds * This program is free software; you can redistribute it and/or modify 7*1da177e4SLinus Torvalds * it under the terms of the GNU General Public License version 2 as 8*1da177e4SLinus Torvalds * published by the Free Software Foundation. 9*1da177e4SLinus Torvalds * 10*1da177e4SLinus Torvalds * 32-bit debugging code 11*1da177e4SLinus Torvalds */ 12*1da177e4SLinus Torvalds#include <linux/config.h> 13*1da177e4SLinus Torvalds#include <linux/linkage.h> 14*1da177e4SLinus Torvalds#include <asm/hardware.h> 15*1da177e4SLinus Torvalds 16*1da177e4SLinus Torvalds .text 17*1da177e4SLinus Torvalds 18*1da177e4SLinus Torvalds/* 19*1da177e4SLinus Torvalds * Some debugging routines (useful if you've got MM problems and 20*1da177e4SLinus Torvalds * printk isn't working). For DEBUGGING ONLY!!! Do not leave 21*1da177e4SLinus Torvalds * references to these in a production kernel! 22*1da177e4SLinus Torvalds */ 23*1da177e4SLinus Torvalds 24*1da177e4SLinus Torvalds#if defined(CONFIG_DEBUG_ICEDCC) 25*1da177e4SLinus Torvalds @@ debug using ARM EmbeddedICE DCC channel 26*1da177e4SLinus Torvalds .macro addruart, rx 27*1da177e4SLinus Torvalds .endm 28*1da177e4SLinus Torvalds 29*1da177e4SLinus Torvalds .macro senduart, rd, rx 30*1da177e4SLinus Torvalds mcr p14, 0, \rd, c1, c0, 0 31*1da177e4SLinus Torvalds .endm 32*1da177e4SLinus Torvalds 33*1da177e4SLinus Torvalds .macro busyuart, rd, rx 34*1da177e4SLinus Torvalds1001: 35*1da177e4SLinus Torvalds mrc p14, 0, \rx, c0, c0, 0 36*1da177e4SLinus Torvalds tst \rx, #2 37*1da177e4SLinus Torvalds beq 1001b 38*1da177e4SLinus Torvalds 39*1da177e4SLinus Torvalds .endm 40*1da177e4SLinus Torvalds 41*1da177e4SLinus Torvalds .macro waituart, rd, rx 42*1da177e4SLinus Torvalds mov \rd, #0x2000000 43*1da177e4SLinus Torvalds1001: 44*1da177e4SLinus Torvalds subs \rd, \rd, #1 45*1da177e4SLinus Torvalds bmi 1002f 46*1da177e4SLinus Torvalds mrc p14, 0, \rx, c0, c0, 0 47*1da177e4SLinus Torvalds tst \rx, #2 48*1da177e4SLinus Torvalds bne 1001b 49*1da177e4SLinus Torvalds1002: 50*1da177e4SLinus Torvalds .endm 51*1da177e4SLinus Torvalds#else 52*1da177e4SLinus Torvalds#include <asm/arch/debug-macro.S> 53*1da177e4SLinus Torvalds#endif 54*1da177e4SLinus Torvalds 55*1da177e4SLinus Torvalds/* 56*1da177e4SLinus Torvalds * Useful debugging routines 57*1da177e4SLinus Torvalds */ 58*1da177e4SLinus TorvaldsENTRY(printhex8) 59*1da177e4SLinus Torvalds mov r1, #8 60*1da177e4SLinus Torvalds b printhex 61*1da177e4SLinus Torvalds 62*1da177e4SLinus TorvaldsENTRY(printhex4) 63*1da177e4SLinus Torvalds mov r1, #4 64*1da177e4SLinus Torvalds b printhex 65*1da177e4SLinus Torvalds 66*1da177e4SLinus TorvaldsENTRY(printhex2) 67*1da177e4SLinus Torvalds mov r1, #2 68*1da177e4SLinus Torvaldsprinthex: adr r2, hexbuf 69*1da177e4SLinus Torvalds add r3, r2, r1 70*1da177e4SLinus Torvalds mov r1, #0 71*1da177e4SLinus Torvalds strb r1, [r3] 72*1da177e4SLinus Torvalds1: and r1, r0, #15 73*1da177e4SLinus Torvalds mov r0, r0, lsr #4 74*1da177e4SLinus Torvalds cmp r1, #10 75*1da177e4SLinus Torvalds addlt r1, r1, #'0' 76*1da177e4SLinus Torvalds addge r1, r1, #'a' - 10 77*1da177e4SLinus Torvalds strb r1, [r3, #-1]! 78*1da177e4SLinus Torvalds teq r3, r2 79*1da177e4SLinus Torvalds bne 1b 80*1da177e4SLinus Torvalds mov r0, r2 81*1da177e4SLinus Torvalds b printascii 82*1da177e4SLinus Torvalds 83*1da177e4SLinus Torvalds .ltorg 84*1da177e4SLinus Torvalds 85*1da177e4SLinus TorvaldsENTRY(printascii) 86*1da177e4SLinus Torvalds addruart r3 87*1da177e4SLinus Torvalds b 2f 88*1da177e4SLinus Torvalds1: waituart r2, r3 89*1da177e4SLinus Torvalds senduart r1, r3 90*1da177e4SLinus Torvalds busyuart r2, r3 91*1da177e4SLinus Torvalds teq r1, #'\n' 92*1da177e4SLinus Torvalds moveq r1, #'\r' 93*1da177e4SLinus Torvalds beq 1b 94*1da177e4SLinus Torvalds2: teq r0, #0 95*1da177e4SLinus Torvalds ldrneb r1, [r0], #1 96*1da177e4SLinus Torvalds teqne r1, #0 97*1da177e4SLinus Torvalds bne 1b 98*1da177e4SLinus Torvalds mov pc, lr 99*1da177e4SLinus Torvalds 100*1da177e4SLinus TorvaldsENTRY(printch) 101*1da177e4SLinus Torvalds addruart r3 102*1da177e4SLinus Torvalds mov r1, r0 103*1da177e4SLinus Torvalds mov r0, #0 104*1da177e4SLinus Torvalds b 1b 105*1da177e4SLinus Torvalds 106*1da177e4SLinus Torvaldshexbuf: .space 16 107