system.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * Copyright (c) 2021 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #include "hpm_common.h"
  8. #include "hpm_soc.h"
  9. #include "hpm_l1c_drv.h"
  10. #ifndef CONFIG_DISABLE_GLOBAL_IRQ_ON_STARTUP
  11. #define CONFIG_DISABLE_GLOBAL_IRQ_ON_STARTUP 0
  12. #endif
  13. void enable_plic_feature(void)
  14. {
  15. uint32_t plic_feature = 0;
  16. #ifndef USE_NONVECTOR_MODE
  17. /* enabled vector mode and preemptive priority interrupt */
  18. plic_feature |= HPM_PLIC_FEATURE_VECTORED_MODE;
  19. #endif
  20. #if !defined(DISABLE_IRQ_PREEMPTIVE) || (DISABLE_IRQ_PREEMPTIVE == 0)
  21. /* enabled preemptive priority interrupt */
  22. plic_feature |= HPM_PLIC_FEATURE_PREEMPTIVE_PRIORITY_IRQ;
  23. #endif
  24. __plic_set_feature(HPM_PLIC_BASE, plic_feature);
  25. }
  26. __attribute__((weak)) void system_init(void)
  27. {
  28. disable_global_irq(CSR_MSTATUS_MIE_MASK);
  29. disable_irq_from_intc();
  30. enable_plic_feature();
  31. enable_irq_from_intc();
  32. #if !CONFIG_DISABLE_GLOBAL_IRQ_ON_STARTUP
  33. enable_global_irq(CSR_MSTATUS_MIE_MASK);
  34. #endif
  35. #ifndef CONFIG_NOT_ENALBE_ACCESS_TO_CYCLE_CSR
  36. uint32_t mcounteren = read_csr(CSR_MCOUNTEREN);
  37. write_csr(CSR_MCOUNTEREN, mcounteren | 1); /* Enable MCYCLE */
  38. #endif
  39. #ifndef CONFIG_NOT_ENABLE_ICACHE
  40. l1c_ic_enable();
  41. #endif
  42. #ifndef CONFIG_NOT_ENABLE_DCACHE
  43. l1c_dc_enable();
  44. l1c_dc_invalidate_all();
  45. #endif
  46. }