/arch/h8300/platform/h8s/edosk2674/crt0_rom.S

https://bitbucket.org/evzijst/gittest · Assembly · 187 lines · 128 code · 22 blank · 37 comment · 0 complexity · f2e5e775a4fde0f61c79ce3ae0f0099d MD5 · raw file

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