blob: cf71867ee65d9f42aff5e4026a113aec71b3aad5 [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
36/* The size should be the number of 2^n */
37#define NAPOT_SIZE(size) (((size) - 1) >> 3)
38
39extern uint32_t _text;
40extern uint32_t _etext;
41
42uint32_t config_pmp(void);
43
Xiaohu.Huangf78b48b2022-01-17 10:41:38 +080044void pmp_open_all_space(void);
45
46void switch_m2u_mode(void);
47
48uint32_t get_mtime_freq(void);
49
50uint32_t mtime_lo(void);
51
52uint32_t mtime_hi(void);
53
54uint64_t get_mtime_value(void);
55
56uint64_t get_instret_value(void);
57
58uint64_t get_cycle_value(void);
59
60uint32_t get_cpu_freq(void);
61
xiaohu.huang38262102022-05-06 22:21:48 +080062uint32_t __noinline measure_cpu_freq(size_t n);
Xiaohu.Huangf78b48b2022-01-17 10:41:38 +080063
64void wfe(void);
65
66uint64_t get_timer_value(void);
67
68uint32_t get_timer_freq(void);
69
70void test_handler(void);
71
72int EnableIrq(uint32_t ulIrq);
73
74int DisableIrq(uint32_t ulIrq);
75
76int SetIrqPriority(uint32_t ulIrq, uint32_t ulProi);
77
78int ClearPendingIrq(uint32_t ulIrq);
79
80int RegisterIrq(uint32_t int_num, uint32_t int_priority, function_ptr_t handler);
81
82int UnRegisterIrq(uint32_t ulIrq);
83
84unsigned long interrupt_status_get(void);
85
86void interrupt_disable(void);
87
88void interrupt_enable(void);
89
Xiaohu.Huangf78b48b2022-01-17 10:41:38 +080090__END_DECLS
91
92#endif