entry.s 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*****************************************************************
  2. * entry.s
  3. * by Zhiyi Huang, [email protected]
  4. * University of Otago
  5. *
  6. ********************************************************************/
  7. .section .init
  8. .globl _start
  9. _start:
  10. b entry /* branch to the actual entry code */
  11. .section .data
  12. .align 4
  13. .globl font
  14. font:
  15. .incbin "font1.bin"
  16. .align 4
  17. .global _binary_initcode_start
  18. _binary_initcode_start:
  19. .incbin "initcode"
  20. .global _binary_initcode_end
  21. _binary_initcode_end:
  22. .align 4
  23. .global _binary_fs_img_start
  24. _binary_fs_img_start:
  25. .incbin "fs.img"
  26. .global _binary_fs_img_end
  27. _binary_fs_img_end:
  28. .section .text
  29. entry:
  30. /* interrupts disabled, SVC mode by setting PSR_DISABLE_IRQ|PSR_DISABLE_FIQ|PSR_MODE_SVC */
  31. mov r1, #0x00000080 /* PSR_DISABLE_IRQ */
  32. orr r1, #0x00000040 /* PSR_DISABLE_FIQ */
  33. orr r1, #0x00000013 /* PSR_MODE_SVC */
  34. msr cpsr, r1
  35. mov sp, #0x3000
  36. bl mmuinit0
  37. /* switch SP and PC into KZERO space */
  38. mov r1, sp
  39. add r1, #0x80000000
  40. mov sp, r1
  41. ldr r1, =_pagingstart
  42. bx r1
  43. .global _pagingstart
  44. _pagingstart:
  45. bl cmain /* call C functions now */
  46. bl NotOkLoop
  47. .global dsb_barrier
  48. dsb_barrier:
  49. mov r0, #0
  50. mcr p15, 0, r0, c7, c10, 4
  51. bx lr
  52. .global flush_dcache_all
  53. flush_dcache_all:
  54. mov r0, #0
  55. mcr p15, 0, r0, c7, c10, 4 /* dsb */
  56. mov r0, #0
  57. mcr p15, 0, r0, c7, c14, 0 /* invalidate d-cache */
  58. bx lr
  59. .global flush_idcache
  60. flush_idcache:
  61. mov r0, #0
  62. mcr p15, 0, r0, c7, c10, 4 /* dsb */
  63. mov r0, #0
  64. mcr p15, 0, r0, c7, c14, 0 /* invalidate d-cache */
  65. mov r0, #0
  66. mcr p15, 0, r0, c7, c5, 0 /* invalidate i-cache */
  67. bx lr
  68. .global flush_tlb
  69. flush_tlb:
  70. mov r0, #0
  71. mcr p15, 0, r0, c8, c7, 0
  72. mcr p15, 0, r0, c7, c10, 4
  73. bx lr
  74. .global flush_dcache /* flush a range of data cache flush_dcache(va1, va2) */
  75. flush_dcache:
  76. mcrr p15, 0, r0, r1, c14
  77. bx lr
  78. .global set_pgtbase /* set the page table base set_pgtbase(base) */
  79. set_pgtbase:
  80. mcr p15, 0, r0, c2, c0
  81. bx lr
  82. .global getsystemtime
  83. getsystemtime:
  84. ldr r0, =0xFE003004 /* addr of the time-stamp lower 32 bits */
  85. ldrd r0, r1, [r0]
  86. bx lr