uboot/arch/arm/lib/debug.S
<<
>>
Prefs
   1/*
   2 *  linux/arch/arm/kernel/debug.S
   3 *
   4 *  Copyright (C) 1994-1999 Russell King
   5 *
   6 * SPDX-License-Identifier:     GPL-2.0+
   7 *
   8 *  32-bit debugging code
   9 */
  10#include <linux/linkage.h>
  11#include <asm/assembler.h>
  12
  13                .text
  14
  15/*
  16 * Some debugging routines (useful if you've got MM problems and
  17 * printk isn't working).  For DEBUGGING ONLY!!!  Do not leave
  18 * references to these in a production kernel!
  19 */
  20
  21#if !defined(CONFIG_DEBUG_SEMIHOSTING)
  22#include CONFIG_DEBUG_LL_INCLUDE
  23#endif
  24
  25#ifdef CONFIG_MMU
  26                .macro  addruart_current, rx, tmp1, tmp2
  27                addruart        \tmp1, \tmp2, \rx
  28                mrc             p15, 0, \rx, c1, c0
  29                tst             \rx, #1
  30                moveq           \rx, \tmp1
  31                movne           \rx, \tmp2
  32                .endm
  33
  34#else /* !CONFIG_MMU */
  35                .macro  addruart_current, rx, tmp1, tmp2
  36                addruart        \rx, \tmp1, \tmp2
  37                .endm
  38
  39#endif /* CONFIG_MMU */
  40
  41/*
  42 * Useful debugging routines
  43 */
  44ENTRY(printhex8)
  45                mov     r1, #8
  46                b       printhex
  47ENDPROC(printhex8)
  48
  49ENTRY(printhex4)
  50                mov     r1, #4
  51                b       printhex
  52ENDPROC(printhex4)
  53
  54ENTRY(printhex2)
  55                mov     r1, #2
  56printhex:       adr     r2, hexbuf
  57                add     r3, r2, r1
  58                mov     r1, #0
  59                strb    r1, [r3]
  601:              and     r1, r0, #15
  61                mov     r0, r0, lsr #4
  62                cmp     r1, #10
  63                addlt   r1, r1, #'0'
  64                addge   r1, r1, #'a' - 10
  65                strb    r1, [r3, #-1]!
  66                teq     r3, r2
  67                bne     1b
  68                mov     r0, r2
  69                b       printascii
  70ENDPROC(printhex2)
  71
  72hexbuf:         .space 16
  73
  74                .ltorg
  75
  76#ifndef CONFIG_DEBUG_SEMIHOSTING
  77
  78ENTRY(printascii)
  79                addruart_current r3, r1, r2
  80                b       2f
  811:              waituart r2, r3
  82                senduart r1, r3
  83                busyuart r2, r3
  84                teq     r1, #'\n'
  85                moveq   r1, #'\r'
  86                beq     1b
  872:              teq     r0, #0
  88                ldrneb  r1, [r0], #1
  89                teqne   r1, #0
  90                bne     1b
  91                mov     pc, lr
  92ENDPROC(printascii)
  93
  94ENTRY(printch)
  95                addruart_current r3, r1, r2
  96                mov     r1, r0
  97                mov     r0, #0
  98                b       1b
  99ENDPROC(printch)
 100
 101#ifdef CONFIG_MMU
 102ENTRY(debug_ll_addr)
 103                addruart r2, r3, ip
 104                str     r2, [r0]
 105                str     r3, [r1]
 106                mov     pc, lr
 107ENDPROC(debug_ll_addr)
 108#endif
 109
 110#else
 111
 112ENTRY(printascii)
 113                mov     r1, r0
 114                mov     r0, #0x04               @ SYS_WRITE0
 115        ARM(    svc     #0x123456       )
 116        THUMB(  svc     #0xab           )
 117                mov     pc, lr
 118ENDPROC(printascii)
 119
 120ENTRY(printch)
 121                adr     r1, hexbuf
 122                strb    r0, [r1]
 123                mov     r0, #0x03               @ SYS_WRITEC
 124        ARM(    svc     #0x123456       )
 125        THUMB(  svc     #0xab           )
 126                mov     pc, lr
 127ENDPROC(printch)
 128
 129ENTRY(debug_ll_addr)
 130                mov     r2, #0
 131                str     r2, [r0]
 132                str     r2, [r1]
 133                mov     pc, lr
 134ENDPROC(debug_ll_addr)
 135
 136#endif
 137