blob: 34595babda290705ce34709c916eac6afdd2750a [file] [log] [blame]
Xiaohu.Huangf78b48b2022-01-17 10:41:38 +08001/*
2 * Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.
3 *
4 * SPDX-License-Identifier: MIT
5 */
6
7#ifndef N200_FUNC_H
8#define N200_FUNC_H
9
10__BEGIN_DECLS
11
12#include "n200_timer.h"
bangzheng.liu4d71f922022-09-29 16:12:20 +080013#ifdef CONFIG_N200_REVA
14#include "interrupt_control_pic.h"
15#else
16#include "interrupt_control_eclic.h"
17#endif
xiaohu.huang38262102022-05-06 22:21:48 +080018#include "gcc_compiler_attributes.h"
Xiaohu.Huangf78b48b2022-01-17 10:41:38 +080019
bangzheng.liuba6936f2023-09-20 17:39:09 +080020#define PMP_CFG_R_NO (0<<0)
21#define PMP_CFG_R_EN (1<<0)
22
23#define PMP_CFG_W_NO (0<<1)
24#define PMP_CFG_W_EN (1<<1)
25
26#define PMP_CFG_X_NO (0<<2)
27#define PMP_CFG_X_EN (1<<2)
28
29#define PMP_CFG_A_OFF (0<<3)
30#define PMP_CFG_A_NA4 (2<<3)
31#define PMP_CFG_A_NAPOT (3<<3)
32
33#define PMP_CFG_L_NO (0<<7)
34#define PMP_CFG_L_EN (1<<7)
35
bangzheng.liua87a98d2023-12-22 09:45:11 +080036#define SIZE_1K 0x400
37#define SIZE_2K 0x800
38#define SIZE_4K 0x1000
39#define SIZE_8K 0x2000
40#define SIZE_16K 0x4000
41#define SIZE_32K 0x8000
bangzheng.liu780b0652024-06-18 20:39:50 +080042#define SIZE_64K 0x10000
bangzheng.liua87a98d2023-12-22 09:45:11 +080043#define PMP_SHIFT 2
bangzheng.liuba6936f2023-09-20 17:39:09 +080044
45extern uint32_t _text;
46extern uint32_t _etext;
47
48uint32_t config_pmp(void);
bangzheng.liu17e86982024-06-18 20:04:34 +080049#ifdef CONFIG_AOCPU_BUSRESPERR_DETECTION
50void config_eclic_busresperr_irq(void);
51#endif
Xiaohu.Huangf78b48b2022-01-17 10:41:38 +080052void pmp_open_all_space(void);
53
54void switch_m2u_mode(void);
55
56uint32_t get_mtime_freq(void);
57
58uint32_t mtime_lo(void);
59
60uint32_t mtime_hi(void);
61
62uint64_t get_mtime_value(void);
63
64uint64_t get_instret_value(void);
65
66uint64_t get_cycle_value(void);
67
68uint32_t get_cpu_freq(void);
69
xiaohu.huang38262102022-05-06 22:21:48 +080070uint32_t __noinline measure_cpu_freq(size_t n);
Xiaohu.Huangf78b48b2022-01-17 10:41:38 +080071
72void wfe(void);
73
74uint64_t get_timer_value(void);
75
76uint32_t get_timer_freq(void);
77
78void test_handler(void);
79
80int EnableIrq(uint32_t ulIrq);
81
82int DisableIrq(uint32_t ulIrq);
83
84int SetIrqPriority(uint32_t ulIrq, uint32_t ulProi);
85
86int ClearPendingIrq(uint32_t ulIrq);
87
88int RegisterIrq(uint32_t int_num, uint32_t int_priority, function_ptr_t handler);
89
90int UnRegisterIrq(uint32_t ulIrq);
91
92unsigned long interrupt_status_get(void);
93
94void interrupt_disable(void);
95
96void interrupt_enable(void);
97
Xiaohu.Huangf78b48b2022-01-17 10:41:38 +080098__END_DECLS
99
100#endif