118 lines
2.2 KiB
C
118 lines
2.2 KiB
C
/*
|
|
* 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
|