crt0_rom.S 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /*
  2. * linux/arch/h8300/platform/h8s/edosk2674/crt0_rom.S
  3. *
  4. * Yoshinori Sato <ysato@users.sourceforge.jp>
  5. *
  6. * Platform depend startup
  7. * Target Archtecture: EDOSK-2674
  8. * Memory Layout : ROM
  9. */
  10. #define ASSEMBLY
  11. #include <asm/linkage.h>
  12. #include <asm/regs267x.h>
  13. .global SYMBOL_NAME(_start)
  14. .global SYMBOL_NAME(_command_line)
  15. .global SYMBOL_NAME(_platform_gpio_table)
  16. .global SYMBOL_NAME(_target_name)
  17. .h8300s
  18. .section .text
  19. .file "crt0_rom.S"
  20. /* CPU Reset entry */
  21. SYMBOL_NAME_LABEL(_start)
  22. mov.l #__ramend,sp
  23. ldc #0x80,ccr
  24. ldc #0,exr
  25. /* Peripheral Setup */
  26. ;BSC/GPIO setup
  27. mov.l #init_regs,er0
  28. mov.w #0xffff,e2
  29. 1:
  30. mov.w @er0+,r2
  31. beq 2f
  32. mov.w @er0+,r1
  33. mov.b r1l,@er2
  34. bra 1b
  35. 2:
  36. ;SDRAM setup
  37. #define SDRAM_SMR 0x400040
  38. mov.b #0,r0l
  39. mov.b r0l,@DRACCR:16
  40. mov.w #0x188,r0
  41. mov.w r0,@REFCR:16
  42. mov.w #0x85b4,r0
  43. mov.w r0,@DRAMCR:16
  44. mov.b #0,r1l
  45. mov.b r1l,@SDRAM_SMR
  46. mov.w #0x84b4,r0
  47. mov.w r0,@DRAMCR:16
  48. ;special thanks to Arizona Cooperative Power
  49. /* copy .data */
  50. mov.l #__begin_data,er5
  51. mov.l #__sdata,er6
  52. mov.l #__edata,er4
  53. sub.l er6,er4
  54. shlr.l #2,er4
  55. 1:
  56. mov.l @er5+,er0
  57. mov.l er0,@er6
  58. adds #4,er6
  59. dec.l #1,er4
  60. bne 1b
  61. /* .bss clear */
  62. mov.l #__sbss,er5
  63. mov.l #__ebss,er4
  64. sub.l er5,er4
  65. shlr.l #2,er4
  66. sub.l er0,er0
  67. 1:
  68. mov.l er0,@er5
  69. adds #4,er5
  70. dec.l #1,er4
  71. bne 1b
  72. /* copy kernel commandline */
  73. mov.l #COMMAND_START,er5
  74. mov.l #SYMBOL_NAME(_command_line),er6
  75. mov.w #512,r4
  76. eepmov.w
  77. /* linux kernel start */
  78. ldc #0x90,ccr /* running kernel */
  79. mov.l #SYMBOL_NAME(init_thread_union),sp
  80. add.l #0x2000,sp
  81. jsr @_start_kernel
  82. _exit:
  83. jmp _exit
  84. rts
  85. /* I/O port assign information */
  86. __platform_gpio_table:
  87. mov.l #gpio_table,er0
  88. rts
  89. #define INIT_REGS_DATA(REGS,DATA) \
  90. .word ((REGS) & 0xffff),DATA
  91. init_regs:
  92. INIT_REGS_DATA(ASTCR,0xff)
  93. INIT_REGS_DATA(RDNCR,0x00)
  94. INIT_REGS_DATA(ABWCR,0x80)
  95. INIT_REGS_DATA(WTCRAH,0x27)
  96. INIT_REGS_DATA(WTCRAL,0x77)
  97. INIT_REGS_DATA(WTCRBH,0x71)
  98. INIT_REGS_DATA(WTCRBL,0x22)
  99. INIT_REGS_DATA(CSACRH,0x80)
  100. INIT_REGS_DATA(CSACRL,0x80)
  101. INIT_REGS_DATA(BROMCRH,0xa0)
  102. INIT_REGS_DATA(BROMCRL,0xa0)
  103. INIT_REGS_DATA(P3DDR,0x3a)
  104. INIT_REGS_DATA(P3ODR,0x06)
  105. INIT_REGS_DATA(PADDR,0xff)
  106. INIT_REGS_DATA(PFDDR,0xfe)
  107. INIT_REGS_DATA(PGDDR,0x0f)
  108. INIT_REGS_DATA(PHDDR,0x0f)
  109. INIT_REGS_DATA(PFCR0,0xff)
  110. INIT_REGS_DATA(PFCR2,0x0d)
  111. INIT_REGS_DATA(ITSR, 0x00)
  112. INIT_REGS_DATA(ITSR+1,0x3f)
  113. INIT_REGS_DATA(INTCR,0x20)
  114. .word 0
  115. gpio_table:
  116. ;; P1DDR
  117. .byte 0x00,0x00
  118. ;; P2DDR
  119. .byte 0x00,0x00
  120. ;; P3DDR
  121. .byte 0x00,0x00
  122. ;; dummy
  123. .byte 0x00,0x00
  124. ;; P5DDR
  125. .byte 0x00,0x00
  126. ;; P6DDR
  127. .byte 0x00,0x00
  128. ;; P7DDR
  129. .byte 0x00,0x00
  130. ;; P8DDR
  131. .byte 0x00,0x00
  132. ;; dummy
  133. .byte 0x00,0x00
  134. ;; PADDR
  135. .byte 0x00,0x00
  136. ;; PBDDR
  137. .byte 0x00,0x00
  138. ;; PCDDR
  139. .byte 0x00,0x00
  140. ;; PDDDR
  141. .byte 0x00,0x00
  142. ;; PEDDR
  143. .byte 0x00,0x00
  144. ;; PFDDR
  145. .byte 0x00,0x00
  146. ;; PGDDR
  147. .byte 0x00,0x00
  148. ;; PHDDR
  149. .byte 0x00,0x00
  150. .section .rodata
  151. __target_name:
  152. .asciz "EDOSK-2674"
  153. .section .bss
  154. __command_line:
  155. .space 512
  156. /* interrupt vector */
  157. .section .vectors,"ax"
  158. .long __start
  159. .long __start
  160. vector = 2
  161. .rept 126
  162. .long _interrupt_redirect_table+vector*4
  163. vector = vector + 1
  164. .endr