debug-armv.S
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:10k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* turn off all peripheral clocks */
  2. /*
  3.  *  linux/arch/arm/kernel/debug-armv.S
  4.  *
  5.  *  Copyright (C) 1994-1999 Russell King
  6.  *
  7.  * This program is free software; you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 2 as
  9.  * published by the Free Software Foundation.
  10.  *
  11.  *  32-bit debugging code
  12.  */
  13. #include <linux/config.h>
  14. #include <linux/linkage.h>
  15. #include <asm/hardware.h>
  16. .text
  17. /*
  18.  * Some debugging routines (useful if you've got MM problems and
  19.  * printk isn't working).  For DEBUGGING ONLY!!!  Do not leave
  20.  * references to these in a production kernel!
  21.  */
  22. #if defined(CONFIG_ARCH_RPC)
  23. .macro addruart,rx
  24. mov rx, #0xe0000000
  25. orr rx, rx, #0x00010000
  26. orr rx, rx, #0x00000fe0
  27. .endm
  28. .macro senduart,rd,rx
  29. strb rd, [rx]
  30. .endm
  31. .macro busyuart,rd,rx
  32. 1001: ldrb rd, [rx, #0x14]
  33. and rd, rd, #0x60
  34. teq rd, #0x60
  35. bne 1001b
  36. .endm
  37. .macro waituart,rd,rx
  38. 1001: ldrb rd, [rx, #0x18]
  39. tst rd, #0x10
  40. beq 1001b
  41. .endm
  42. #elif defined(CONFIG_ARCH_EBSA110)
  43. .macro addruart,rx
  44. mov rx, #0xf0000000
  45. orr rx, rx, #0x00000be0
  46. .endm
  47. .macro senduart,rd,rx
  48. strb rd, [rx]
  49. .endm
  50. .macro busyuart,rd,rx
  51. 1002: ldrb rd, [rx, #0x14]
  52. and rd, rd, #0x60
  53. teq rd, #0x60
  54. bne 1002b
  55. .endm
  56. .macro waituart,rd,rx
  57. 1001: ldrb rd, [rx, #0x18]
  58. tst rd, #0x10
  59. beq 1001b
  60. .endm
  61.  
  62. #elif defined(CONFIG_ARCH_SHARK)
  63. .macro addruart,rx
  64. mov rx, #0xe0000000
  65. orr rx, rx, #0x000003f8
  66. .endm
  67. .macro senduart,rd,rx
  68. strb rd, [rx]
  69. .endm
  70. .macro busyuart,rd,rx
  71. mov rd, #0
  72. 1001: add rd, rd, #1
  73. teq rd, #0x10000
  74. bne 1001b
  75. .endm
  76. .macro waituart,rd,rx
  77. .endm
  78. #elif defined(CONFIG_FOOTBRIDGE)
  79. #include <asm/hardware/dec21285.h>
  80. #ifndef CONFIG_DEBUG_DC21285_PORT
  81. /* For NetWinder debugging */
  82. .macro addruart,rx
  83. mrc p15, 0, rx, c1, c0
  84. tst rx, #1 @ MMU enabled?
  85. moveq rx, #0x7c000000 @ physical
  86. movne rx, #0xff000000 @ virtual
  87. orr rx, rx, #0x000003f8
  88. .endm
  89. .macro senduart,rd,rx
  90. strb rd, [rx]
  91. .endm
  92. .macro busyuart,rd,rx
  93. 1002: ldrb rd, [rx, #0x5]
  94. and rd, rd, #0x60
  95. teq rd, #0x60
  96. bne 1002b
  97. .endm
  98. .macro waituart,rd,rx
  99. 1001: ldrb rd, [rx, #0x6]
  100. tst rd, #0x10
  101. beq 1001b
  102. .endm
  103. #else
  104. /* For EBSA285 debugging */
  105. .equ dc21285_high, ARMCSR_BASE & 0xff000000
  106. .equ dc21285_low,  ARMCSR_BASE & 0x00ffffff
  107. .macro addruart,rx
  108. mov rx, #dc21285_high
  109. .if dc21285_low
  110. orr rx, rx, #dc21285_low
  111. .endif
  112. .endm
  113. .macro senduart,rd,rx
  114. str rd, [rx, #0x160] @ UARTDR
  115. .endm
  116. .macro busyuart,rd,rx
  117. 1001: ldr rd, [rx, #0x178] @ UARTFLG
  118. tst rd, #1 << 3
  119. bne 1001b
  120. .endm
  121. .macro waituart,rd,rx
  122. .endm
  123. #endif
  124. #elif defined(CONFIG_ARCH_FTVPCI)
  125. .macro addruart,rx
  126. mrc p15, 0, rx, c1, c0
  127. tst rx, #1 @ MMU enabled?
  128. movne rx, #0xe0000000
  129. moveq rx, #0x10000000
  130. .endm
  131. .macro senduart,rd,rx
  132. str rd, [rx, #0xc]
  133. .endm
  134. .macro busyuart,rd,rx
  135. 1001: ldr rd, [rx, #0x4]
  136. tst rd, #1 << 2
  137. beq 1001b
  138. .endm
  139. .macro waituart,rd,rx
  140. .endm
  141. #elif defined(CONFIG_ARCH_SA1100)
  142. .macro addruart,rx
  143. mrc p15, 0, rx, c1, c0
  144. tst rx, #1 @ MMU enabled?
  145. moveq rx, #0x80000000 @ physical base address
  146. movne rx, #0xf8000000 @ virtual address
  147. @ We probe for the active serial port here, coherently with
  148. @ the comment in include/asm-arm/arch-sa1100/uncompress.h.
  149. @ We assume r1 can be clobbered.
  150. @ see if Ser3 is active
  151. add rx, rx, #0x00050000
  152. ldr r1, [rx, #UTCR3]
  153. tst r1, #UTCR3_TXE
  154. @ if Ser3 is inactive, then try Ser1
  155. addeq rx, rx, #(0x00010000 - 0x00050000)
  156. ldreq r1, [rx, #UTCR3]
  157. tsteq r1, #UTCR3_TXE
  158. @ if Ser1 is inactive, then try Ser2
  159. addeq rx, rx, #(0x00030000 - 0x00010000)
  160. ldreq r1, [rx, #UTCR3]
  161. tsteq r1, #UTCR3_TXE
  162. @ if all ports are inactive, then there is nothing we can do
  163. moveq pc, lr
  164. .endm
  165. .macro senduart,rd,rx
  166. str rd, [rx, #UTDR]
  167. .endm
  168. .macro waituart,rd,rx
  169. 1001: ldr rd, [rx, #UTSR1]
  170. tst rd, #UTSR1_TNF
  171. beq 1001b
  172. .endm
  173. .macro busyuart,rd,rx
  174. 1001: ldr rd, [rx, #UTSR1]
  175. tst rd, #UTSR1_TBY
  176. bne 1001b
  177. .endm
  178. #elif defined(CONFIG_ARCH_PXA)
  179. .macro addruart,rx
  180. mrc p15, 0, rx, c1, c0
  181. tst rx, #1 @ MMU enabled?
  182. moveq rx, #0x40000000 @ physical
  183. movne rx, #io_p2v(0x40000000) @ virtual
  184. orr rx, rx, #0x00100000 @ FFUART
  185. .endm
  186. .macro senduart,rd,rx
  187. str rd, [rx, #0]
  188. .endm
  189. .macro busyuart,rd,rx
  190. 1002: ldr rd, [rx, #0x14]
  191. tst rd, #(1 << 6)
  192. beq 1002b
  193. .endm
  194. .macro waituart,rd,rx
  195. 1001: ldr rd, [rx, #0x14]
  196. tst rd, #(1 << 5)
  197. beq 1001b
  198. .endm
  199. #elif defined(CONFIG_ARCH_CLPS7500)
  200. .macro addruart,rx
  201. mov rx, #0xe0000000
  202. orr rx, rx, #0x00010000
  203. orr rx, rx, #0x00000be0
  204. .endm
  205. .macro senduart,rd,rx
  206. strb rd, [rx]
  207. .endm
  208. .macro busyuart,rd,rx
  209. .endm
  210. .macro waituart,rd,rx
  211. 1001: ldrb rd, [rx, #0x14]
  212. tst rd, #0x20
  213. beq 1001b
  214. .endm
  215. #elif defined(CONFIG_ARCH_L7200)
  216. .equ io_virt, IO_BASE
  217. .equ io_phys, IO_START
  218. .macro addruart,rx
  219. mrc p15, 0, rx, c1, c0
  220. tst rx, #1 @ MMU enabled?
  221. moveq rx, #io_phys @ physical base address
  222. movne rx, #io_virt @ virtual address
  223. add rx, rx, #0x00044000 @ UART1
  224. @ add rx, rx, #0x00045000 @ UART2
  225. .endm
  226. .macro senduart,rd,rx
  227. str rd, [rx, #0x0] @ UARTDR
  228. .endm
  229. .macro waituart,rd,rx
  230. 1001: ldr rd, [rx, #0x18] @ UARTFLG
  231. tst rd, #1 << 5 @ UARTFLGUTXFF - 1 when full
  232. bne 1001b
  233. .endm
  234. .macro busyuart,rd,rx
  235. 1001: ldr rd, [rx, #0x18] @ UARTFLG
  236. tst rd, #1 << 3 @ UARTFLGUBUSY - 1 when busy
  237. bne 1001b
  238. .endm
  239. #elif defined(CONFIG_ARCH_INTEGRATOR)
  240. #include <asm/hardware/serial_amba.h>
  241. .macro addruart,rx
  242. mrc p15, 0, rx, c1, c0
  243. tst rx, #1 @ MMU enabled?
  244. moveq rx, #0x16000000 @ physical base address
  245. movne rx, #0xf0000000 @ virtual base
  246. addne rx, rx, #0x16000000 >> 4
  247. .endm
  248. .macro senduart,rd,rx
  249. strb rd, [rx, #AMBA_UARTDR]
  250. .endm
  251. .macro waituart,rd,rx
  252. 1001: ldr rd, [rx, #0x18] @ UARTFLG
  253. tst rd, #1 << 5 @ UARTFLGUTXFF - 1 when full
  254. bne 1001b
  255. .endm
  256. .macro busyuart,rd,rx
  257. 1001: ldr rd, [rx, #0x18] @ UARTFLG
  258. tst rd, #1 << 3 @ UARTFLGUBUSY - 1 when busy
  259. bne 1001b
  260. .endm
  261. #elif defined(CONFIG_ARCH_CLPS711X)
  262. #include <asm/hardware/clps7111.h>
  263. .macro addruart,rx
  264. mrc p15, 0, rx, c1, c0
  265. tst rx, #1 @ MMU enabled?
  266. moveq rx, #CLPS7111_PHYS_BASE
  267. movne rx, #CLPS7111_VIRT_BASE
  268. #ifndef CONFIG_DEBUG_CLPS711X_UART2
  269. add rx, rx, #0x0000 @ UART1
  270. #else
  271. add rx, rx, #0x1000 @ UART2
  272. #endif
  273. .endm
  274. .macro senduart,rd,rx
  275. str rd, [rx, #0x0480] @ UARTDR
  276. .endm
  277. .macro waituart,rd,rx
  278. 1001: ldr rd, [rx, #0x0140] @ SYSFLGx
  279. tst rd, #1 << 11 @ UBUSYx
  280. bne 1001b
  281. .endm
  282. .macro busyuart,rd,rx
  283. tst rx, #0x1000 @ UART2 does not have CTS here
  284. bne 1002f
  285. 1001: ldr rd, [rx, #0x0140] @ SYSFLGx
  286. tst rd, #1 << 8 @ CTS
  287. bne 1001b
  288. 1002:
  289. .endm
  290. #elif defined(CONFIG_ARCH_ANAKIN)
  291. //#//include <asm/arch/serial_reg.h>
  292. .macro addruart,rx
  293. mrc p15, 0, rx, c1, c0
  294. tst rx, #1 @ MMU enabled?
  295. moveq rx, #IO_START
  296. movne rx, #IO_BASE
  297. add rx, rx, #UART0
  298. .endm
  299. .macro senduart,rd,rx
  300. str rd, [rx, #0x14] @ tx
  301. ldr rd, [rx, #0x18]
  302. orr rd, rd, #SENDREQUEST
  303. str rd, [rx, #0x18]
  304. .endm
  305. .macro waituart,rd,rx
  306. 1001: ldr rd, [rx, #0x10]
  307. tst rd, #TXEMPTY
  308. beq 1001b
  309. .endm
  310. .macro busyuart,rd,rx
  311. 1001: ldr rd, [rx, #0x10]
  312. tst rd, #CTS
  313. bne 1001b
  314. .endm
  315. #elif defined(CONFIG_ARCH_CAMELOT)
  316. #include <asm/arch/excalibur.h>
  317. #define UART00_TYPE
  318. #include <asm/arch/uart00.h>
  319. .macro addruart,rx
  320. mrc p15, 0, rx, c1, c0
  321. tst rx, #1 @ MMU enabled?
  322. ldr rx, =EXC_UART00_BASE @ physical base address
  323. orrne rx, rx, #0xff000000 @ virtual base
  324. orrne rx, rx, #0x00f00000
  325. .endm
  326. .macro senduart,rd,rx
  327. str rd, [rx, #UART_TD(0)]
  328. .endm
  329. .macro waituart,rd,rx
  330. 1001: ldr rd, [rx, #UART_TSR(0)]
  331. and  rd, rd,  #UART_TSR_TX_LEVEL_MSK
  332. cmp rd, #15
  333. beq 1001b
  334. .endm
  335. .macro busyuart,rd,rx
  336. 1001: ldr rd, [rx, #UART_TSR(0)]
  337. ands  rd, rd,  #UART_TSR_TX_LEVEL_MSK
  338. bne 1001b
  339. .endm
  340. #elif defined(CONFIG_ARCH_S3C2400)
  341.                .macro  addruart,rx
  342.                mrc     p15, 0, rx, c1, c0
  343.                tst     rx, #1         @ MMU enabled ?
  344.                moveq   rx, #0x15000000        @ physical base address
  345.                movne   rx, #0xf5000000        @ virtual address
  346.                .endm
  347.                .macro  senduart,rd,rx
  348.                str     rd, [rx, #0x20]       @ UTXH
  349.                .endm
  350.                .macro  waituart,rd,rx
  351.                .endm
  352.                .macro  busyuart,rd,rx
  353. 1001:  ldr     rd, [rx, #0x10]       @ read UTRSTAT
  354.                tst     rd, #1 << 2            @ TX_EMPTY ?
  355.                beq     1001b
  356.                .endm
  357. #elif defined(CONFIG_ARCH_S3C2410)
  358.                .macro  addruart,rx
  359.                mrc     p15, 0, rx, c1, c0
  360.                tst     rx, #1         @ MMU enabled ?
  361.                moveq   rx, #0x50000000        @ physical base address
  362.                movne   rx, #0xf0000000        @ virtual address
  363.                .endm
  364.                .macro  senduart,rd,rx
  365.                str     rd, [rx, #0x20]       @ UTXH
  366.                .endm
  367.                .macro  waituart,rd,rx
  368.                .endm
  369.                .macro  busyuart,rd,rx
  370. 1001:  ldr     rd, [rx, #0x10]       @ read UTRSTAT
  371.                tst     rd, #1 << 2            @ TX_EMPTY ?
  372.                beq     1001b
  373.                .endm
  374. #else
  375. #error Unknown architecture
  376. #endif
  377. /*
  378.  * Useful debugging routines
  379.  */
  380. ENTRY(printhex8)
  381. mov r1, #8
  382. b printhex
  383. ENTRY(printhex4)
  384. mov r1, #4
  385. b printhex
  386. ENTRY(printhex2)
  387. mov r1, #2
  388. printhex: adr r2, hexbuf
  389. add r3, r2, r1
  390. mov r1, #0
  391. strb r1, [r3]
  392. 1: and r1, r0, #15
  393. mov r0, r0, lsr #4
  394. cmp r1, #10
  395. addlt r1, r1, #'0'
  396. addge r1, r1, #'a' - 10
  397. strb r1, [r3, #-1]!
  398. teq r3, r2
  399. bne 1b
  400. mov r0, r2
  401. b printascii
  402. .ltorg
  403. ENTRY(printascii)
  404. addruart r3
  405. b 2f
  406. 1: waituart r2, r3
  407. senduart r1, r3
  408. busyuart r2, r3
  409. teq r1, #'n'
  410. moveq r1, #'r'
  411. beq 1b
  412. 2: teq r0, #0
  413. ldrneb r1, [r0], #1
  414. teqne r1, #0
  415. bne 1b
  416. mov pc, lr
  417. ENTRY(printch)
  418. addruart r3
  419. mov r1, r0
  420. mov r0, #0
  421. b 1b
  422. hexbuf: .space 16