boot_head.S 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /*
  2. * Copyright (C) 1998-2003 Hewlett-Packard Co
  3. * David Mosberger-Tang <davidm@hpl.hp.com>
  4. */
  5. #include <asm/asmmacro.h>
  6. .bss
  7. .align 16
  8. stack_mem:
  9. .skip 16834
  10. .text
  11. /* This needs to be defined because lib/string.c:strlcat() calls it in case of error... */
  12. GLOBAL_ENTRY(printk)
  13. break 0
  14. END(printk)
  15. GLOBAL_ENTRY(_start)
  16. .prologue
  17. .save rp, r0
  18. .body
  19. movl gp = __gp
  20. movl sp = stack_mem
  21. bsw.1
  22. br.call.sptk.many rp=start_bootloader
  23. END(_start)
  24. /*
  25. * Set a break point on this function so that symbols are available to set breakpoints in
  26. * the kernel being debugged.
  27. */
  28. GLOBAL_ENTRY(debug_break)
  29. br.ret.sptk.many b0
  30. END(debug_break)
  31. GLOBAL_ENTRY(ssc)
  32. .regstk 5,0,0,0
  33. mov r15=in4
  34. break 0x80001
  35. br.ret.sptk.many b0
  36. END(ssc)
  37. GLOBAL_ENTRY(jmp_to_kernel)
  38. .regstk 2,0,0,0
  39. mov r28=in0
  40. mov b7=in1
  41. br.sptk.few b7
  42. END(jmp_to_kernel)
  43. GLOBAL_ENTRY(pal_emulator_static)
  44. mov r8=-1
  45. mov r9=256
  46. ;;
  47. cmp.gtu p6,p7=r9,r28 /* r28 <= 255? */
  48. (p6) br.cond.sptk.few static
  49. ;;
  50. mov r9=512
  51. ;;
  52. cmp.gtu p6,p7=r9,r28
  53. (p6) br.cond.sptk.few stacked
  54. ;;
  55. static: cmp.eq p6,p7=6,r28 /* PAL_PTCE_INFO */
  56. (p7) br.cond.sptk.few 1f
  57. ;;
  58. mov r8=0 /* status = 0 */
  59. movl r9=0x100000000 /* tc.base */
  60. movl r10=0x0000000200000003 /* count[0], count[1] */
  61. movl r11=0x1000000000002000 /* stride[0], stride[1] */
  62. br.cond.sptk.few rp
  63. 1: cmp.eq p6,p7=14,r28 /* PAL_FREQ_RATIOS */
  64. (p7) br.cond.sptk.few 1f
  65. mov r8=0 /* status = 0 */
  66. movl r9 =0x100000064 /* proc_ratio (1/100) */
  67. movl r10=0x100000100 /* bus_ratio<<32 (1/256) */
  68. movl r11=0x100000064 /* itc_ratio<<32 (1/100) */
  69. ;;
  70. 1: cmp.eq p6,p7=19,r28 /* PAL_RSE_INFO */
  71. (p7) br.cond.sptk.few 1f
  72. mov r8=0 /* status = 0 */
  73. mov r9=96 /* num phys stacked */
  74. mov r10=0 /* hints */
  75. mov r11=0
  76. br.cond.sptk.few rp
  77. 1: cmp.eq p6,p7=1,r28 /* PAL_CACHE_FLUSH */
  78. (p7) br.cond.sptk.few 1f
  79. mov r9=ar.lc
  80. movl r8=524288 /* flush 512k million cache lines (16MB) */
  81. ;;
  82. mov ar.lc=r8
  83. movl r8=0xe000000000000000
  84. ;;
  85. .loop: fc r8
  86. add r8=32,r8
  87. br.cloop.sptk.few .loop
  88. sync.i
  89. ;;
  90. srlz.i
  91. ;;
  92. mov ar.lc=r9
  93. mov r8=r0
  94. ;;
  95. 1: cmp.eq p6,p7=15,r28 /* PAL_PERF_MON_INFO */
  96. (p7) br.cond.sptk.few 1f
  97. mov r8=0 /* status = 0 */
  98. movl r9 =0x08122f04 /* generic=4 width=47 retired=8 cycles=18 */
  99. mov r10=0 /* reserved */
  100. mov r11=0 /* reserved */
  101. mov r16=0xffff /* implemented PMC */
  102. mov r17=0x3ffff /* implemented PMD */
  103. add r18=8,r29 /* second index */
  104. ;;
  105. st8 [r29]=r16,16 /* store implemented PMC */
  106. st8 [r18]=r0,16 /* clear remaining bits */
  107. ;;
  108. st8 [r29]=r0,16 /* clear remaining bits */
  109. st8 [r18]=r0,16 /* clear remaining bits */
  110. ;;
  111. st8 [r29]=r17,16 /* store implemented PMD */
  112. st8 [r18]=r0,16 /* clear remaining bits */
  113. mov r16=0xf0 /* cycles count capable PMC */
  114. ;;
  115. st8 [r29]=r0,16 /* clear remaining bits */
  116. st8 [r18]=r0,16 /* clear remaining bits */
  117. mov r17=0xf0 /* retired bundles capable PMC */
  118. ;;
  119. st8 [r29]=r16,16 /* store cycles capable */
  120. st8 [r18]=r0,16 /* clear remaining bits */
  121. ;;
  122. st8 [r29]=r0,16 /* clear remaining bits */
  123. st8 [r18]=r0,16 /* clear remaining bits */
  124. ;;
  125. st8 [r29]=r17,16 /* store retired bundle capable */
  126. st8 [r18]=r0,16 /* clear remaining bits */
  127. ;;
  128. st8 [r29]=r0,16 /* clear remaining bits */
  129. st8 [r18]=r0,16 /* clear remaining bits */
  130. ;;
  131. 1: br.cond.sptk.few rp
  132. stacked:
  133. br.ret.sptk.few rp
  134. END(pal_emulator_static)