blob: 4dabc8891c8870381ce7229953e377ccce1b858c [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
42#define PMP_SHIFT 2
bangzheng.liuba6936f2023-09-20 17:39:09 +080043
44extern uint32_t _text;
45extern uint32_t _etext;
46
47uint32_t config_pmp(void);
48
Xiaohu.Huangf78b48b2022-01-17 10:41:38 +080049void pmp_open_all_space(void);
50
51void switch_m2u_mode(void);
52
53uint32_t get_mtime_freq(void);
54
55uint32_t mtime_lo(void);
56
57uint32_t mtime_hi(void);
58
59uint64_t get_mtime_value(void);
60
61uint64_t get_instret_value(void);
62
63uint64_t get_cycle_value(void);
64
65uint32_t get_cpu_freq(void);
66
xiaohu.huang38262102022-05-06 22:21:48 +080067uint32_t __noinline measure_cpu_freq(size_t n);
Xiaohu.Huangf78b48b2022-01-17 10:41:38 +080068
69void wfe(void);
70
71uint64_t get_timer_value(void);
72
73uint32_t get_timer_freq(void);
74
75void test_handler(void);
76
77int EnableIrq(uint32_t ulIrq);
78
79int DisableIrq(uint32_t ulIrq);
80
81int SetIrqPriority(uint32_t ulIrq, uint32_t ulProi);
82
83int ClearPendingIrq(uint32_t ulIrq);
84
85int RegisterIrq(uint32_t int_num, uint32_t int_priority, function_ptr_t handler);
86
87int UnRegisterIrq(uint32_t ulIrq);
88
89unsigned long interrupt_status_get(void);
90
91void interrupt_disable(void);
92
93void interrupt_enable(void);
94
Xiaohu.Huangf78b48b2022-01-17 10:41:38 +080095__END_DECLS
96
97#endif