/* * Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved. * * SPDX-License-Identifier: MIT */ #ifndef N200_FUNC_H #define N200_FUNC_H __BEGIN_DECLS #include "n200_timer.h" #include "register.h" #ifdef CONFIG_N200_REVA #include "interrupt_control_pic.h" #else #include "interrupt_control_eclic.h" #endif #include "gcc_compiler_attributes.h" #define PMP_CFG_R_NO (0<<0) #define PMP_CFG_R_EN (1<<0) #define PMP_CFG_W_NO (0<<1) #define PMP_CFG_W_EN (1<<1) #define PMP_CFG_X_NO (0<<2) #define PMP_CFG_X_EN (1<<2) #define PMP_CFG_A_OFF (0<<3) #define PMP_CFG_A_NA4 (2<<3) #define PMP_CFG_A_NAPOT (3<<3) #define PMP_CFG_L_NO (0<<7) #define PMP_CFG_L_EN (1<<7) #define SIZE_1K 0x400 #define SIZE_2K 0x800 #define SIZE_4K 0x1000 #define SIZE_8K 0x2000 #define SIZE_16K 0x4000 #define SIZE_32K 0x8000 #define SIZE_64K 0x10000 #define PMP_SHIFT 2 extern uint32_t _text; extern uint32_t _etext; uintptr_t handle_nmi(void); uintptr_t handle_trap(uintptr_t mcause, uintptr_t sp); #ifdef CONFIG_N200_REVA uint32_t handle_irq(uint32_t int_num); #endif uint32_t config_pmp(void); #if !defined(CONFIG_N200_REVA) && defined(CONFIG_AOCPU_BUSRESPERR_DETECTION) void config_eclic_busresperr_irq(void); void vBusRespERRHandler(void); #endif void pmp_open_all_space(void); void switch_m2u_mode(void); uint32_t get_mtime_freq(void); uint32_t mtime_lo(void); uint32_t mtime_hi(void); uint64_t get_mtime_value(void); inline void mtime_start(void); inline void mtime_stop(void); uint64_t get_instret_value(void); uint64_t get_cycle_value(void); uint32_t get_cpu_freq(void); uint32_t __noinline measure_cpu_freq(size_t n); void wfe(void); uint64_t get_timer_value(void); uint32_t get_timer_freq(void); void test_handler(void); int EnableIrq(uint32_t ulIrq); int DisableIrq(uint32_t ulIrq); int SetIrqPriority(uint32_t ulIrq, uint32_t ulProi); int ClearPendingIrq(uint32_t ulIrq); int RegisterIrq(uint32_t int_num, uint32_t int_priority, function_ptr_t handler); int UnRegisterIrq(uint32_t ulIrq); unsigned long interrupt_status_get(void); void interrupt_disable(void); void interrupt_enable(void); unsigned int xPortIsIsrContext(void); #ifdef AOCPU_TIMER_DIV void config_ao_timer_freq(uint32_t src, uint32_t freq); #endif __END_DECLS #endif