start.S 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * Copyright (c) 2021-2023 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #include <rtconfig.h>
  8. #include "hpm_csr_regs.h"
  9. .section .start, "ax"
  10. .global _start
  11. .type _start,@function
  12. _start:
  13. /* Initialize global pointer */
  14. .option push
  15. .option norelax
  16. la gp, __global_pointer$
  17. la tp, __thread_pointer
  18. .option pop
  19. #ifdef __riscv_flen
  20. /* Enable FPU */
  21. li t0, CSR_MSTATUS_FS_MASK
  22. csrrs t0, mstatus, t0
  23. /* Initialize FCSR */
  24. fscsr zero
  25. #endif
  26. /* Initialize stack pointer */
  27. la t0, _stack
  28. mv sp, t0
  29. #ifdef __nds_execit
  30. /* Initialize EXEC.IT table */
  31. la t0, _ITB_BASE_
  32. csrw uitb, t0
  33. #endif
  34. #ifdef __riscv_flen
  35. /* Enable FPU */
  36. li t0, CSR_MSTATUS_FS_MASK
  37. csrrs t0, mstatus, t0
  38. /* Initialize FCSR */
  39. fscsr zero
  40. #endif
  41. /* Disable Vector mode */
  42. csrci CSR_MMISC_CTL, 2
  43. /* Initialize trap_entry base */
  44. la t0, SW_handler
  45. csrw mtvec, t0
  46. /* System reset handler */
  47. call reset_handler
  48. /* Infinite loop, if returned accidently */
  49. 1: j 1b
  50. .weak nmi_handler
  51. nmi_handler:
  52. 1: j 1b
  53. .weak default_irq_handler
  54. .align 2
  55. default_irq_handler:
  56. 1: j 1b
  57. .macro IRQ_HANDLER irq
  58. .weak default_isr_\irq
  59. .set default_isr_\irq, default_irq_handler
  60. .long default_isr_\irq
  61. .endm
  62. #include "vectors.S"