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