1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     reg_access.h
4 
5   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 27499 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_HW_ARM_REG_ACCESS_H_
17 #define NN_HW_ARM_REG_ACCESS_H_
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 //TODO: もし CTR 依存のものがあれば切り出す
24 
25 //----------------------------------------------------------------------
26 //                  instruction level macros
27 //  NOTE:
28 //      v is a register int variable
29 //      a-e are symbols as like as c0, cpsr_c, etc.
30 //----------------------------------------------------------------------
31 
32 // MRS/MSR
33 #define HW_INST_MRS(a,v)            __asm { mrs a,v }
34 
35 #define HW_INST_MSR(a,v)            __asm { msr a,v }
36 
37 // MRC/MCR
38 // a: CP, b: Op1, c: CRn, d: CRm, e: Op2
39 #define HW_INST_MRC(a,b,c,d,e,v)    __asm { mrc a,b,v,c,d,e }
40 
41 #define HW_INST_MCR(a,b,c,d,e,v)    __asm { mcr a,b,v,c,d,e }
42 
43 /*
44     memo: read only
45         pc: __current_pc()
46         sp: __current_sp()
47         lr: __return_address()
48 */
49 
50 //----------------------------------------------------------------------
51 //                  mrs/msr family
52 //----------------------------------------------------------------------
53 
54 #define HW_GET_CPSR(v)              HW_INST_MRS(cpsr,v)
55 #define HW_GET_SPSR(v)              HW_INST_MRS(spsr,v)
56 
57 #define HW_SET_CPSR(f,v)            HW_INST_MSR(cpsr_##f,v) // f: fields
58 #define HW_SET_SPSR(f,v)            HW_INST_MSR(spsr_##f,v) // f: fields
59 
60 //----------------------------------------------------------------------
61 //                  cp15
62 //----------------------------------------------------------------------
63 
64 #define HW_GET_CP15_C0(c,o,v)       HW_INST_MRC(p15,0,c0,c,o,v)     // Opcode_1 is fixed
65 #define HW_GET_CP15_C1(o,v)         HW_INST_MRC(p15,0,c1,c0,o,v)    // Opcode_1 and CRm are fixed
66 #define HW_GET_CP15_C2(o,v)         HW_INST_MRC(p15,0,c2,c0,o,v)    // Opcode_1 and CRm are fixed
67 #define HW_GET_CP15_C3(v)           HW_INST_MRC(p15,0,c3,c0,0,v)    // fixed all
68 #define HW_GET_CP15_C5(o,v)         HW_INST_MRC(p15,0,c5,c0,o,v)    // Opcode_1 and CRm are fixed
69 
70 #if defined(SDK_ARM11) || defined(NN_PROCESSOR_ARM_V6)
71     #define HW_GET_CP15_C6(o,v)         HW_INST_MRC(p15,0,c6,c0,o,v)    // Opcode_1 and CRm are fixed
72 #else
73     #define HW_GET_CP15_C6(c,o,v)       HW_INST_MRC(p15,0,c6,c,o,v)     // Opcode_1 is fixed
74 #endif
75 
76 #define HW_GET_CP15_C7(c,o,v)       HW_INST_MRC(p15,0,c7,c,o,v)     // Opcode_1 is fixed
77 #define HW_GET_CP15_C8(c,o,v)       HW_INST_MRC(p15,0,c8,c,o,v)     // Opcode_1 is fixed
78 
79 #if defined(SDK_ARM11) || defined(NN_PROCESSOR_ARM_V6)
80     #define HW_GET_CP15_C9(v)           HW_INST_MRC(p15,0,c9,c0,0,v)    // fixed all
81 #else
82     #define HW_GET_CP15_C9(o,v)         HW_INST_MRC(p15,0,c9,c0,o,v)    // Opcode_1 and CRm are fixed
83 #endif
84 
85 #define HW_GET_CP15_C10(c,o,v)      HW_INST_MRC(p15,0,c10,c,o,v)    // Opcode_1 is fixed
86 #define HW_GET_CP15_C13(o,v)        HW_INST_MRC(p15,0,c13,c0,o,v)   // Opcode_1 and CRm are fixed
87 #define HW_GET_CP15_C15(o1,c,o2,v)  HW_INST_MRC(p15,o1,c15,c,o2,v)  // not fixed all
88 
89 #define HW_GET_CP15_C15_0(c,o,v)    HW_INST_MRC(p15,0,c15,c,o,v)
90 #define HW_GET_CP15_C15_1(c,o,v)    HW_INST_MRC(p15,1,c15,c,o,v)
91 #define HW_GET_CP15_C15_2(c,o,v)    HW_INST_MRC(p15,2,c15,c,o,v)
92 #define HW_GET_CP15_C15_5(c,o,v)    HW_INST_MRC(p15,5,c15,c,o,v)
93 #define HW_GET_CP15_C15_7(v)        HW_INST_MRC(p15,7,c15,c1,0,v)
94 
95 // NOTE: must set variable not constant
96 
97 #define HW_SET_CP15_C0(c,o,v)       HW_INST_MCR(p15,0,c0,c,o,v)     // Opcode_1 is fixed
98 #define HW_SET_CP15_C1(o,v)         HW_INST_MCR(p15,0,c1,c0,o,v)    // Opcode_1 and CRm are fixed
99 #define HW_SET_CP15_C2(o,v)         HW_INST_MCR(p15,0,c2,c0,o,v)    // Opcode_1 and CRm are fixed
100 #define HW_SET_CP15_C3(v)           HW_INST_MCR(p15,0,c3,c0,0,v)    // fixed all
101 #define HW_SET_CP15_C5(o,v)         HW_INST_MCR(p15,0,c5,c0,o,v)    // Opcode_1 and CRm are fixed
102 #define HW_SET_CP15_C6(o,v)         HW_INST_MCR(p15,0,c6,c0,o,v)    // Opcode_1 and CRm are fixed
103 #define HW_SET_CP15_C7(c,o,v)       HW_INST_MCR(p15,0,c7,c,o,v)     // Opcode_1 is fixed
104 #define HW_SET_CP15_C8(c,o,v)       HW_INST_MCR(p15,0,c8,c,o,v)     // Opcode_1 is fixed
105 #define HW_SET_CP15_C9(v)           HW_INST_MCR(p15,0,c9,c0,0,v)    // fixed all
106 #define HW_SET_CP15_C10(c,o,v)      HW_INST_MCR(p15,0,c10,c,o,v)    // Opcode_1 is fixed
107 #define HW_SET_CP15_C13(o,v)        HW_INST_MCR(p15,0,c13,c0,o,v)   // Opcode_1 and CRm are fixed
108 #define HW_SET_CP15_C15(o1,c,o2,v)  HW_INST_MCR(p15,o1,c15,c,o2,v)  // not fixed all
109 
110 #define HW_SET_CP15_C15_0(c,o,v)    HW_INST_MCR(p15,0,c15,c,o,v)
111 #define HW_SET_CP15_C15_5(c,o,v)    HW_INST_MCR(p15,5,c15,c,o,v)
112 #define HW_SET_CP15_C15_7(v)        HW_INST_MCR(p15,7,c15,c1,0,v)
113 
114 //
115 // special named macro
116 //
117 
118 #define HW_GET_CP15_MAIN_ID(v)                          HW_INST_MRC(p15,0,c0,c0,0,v)
119 #define HW_GET_CP15_CACHE_TYPE(v)                       HW_INST_MRC(p15,0,c0,c0,1,v)
120 #define HW_GET_CP15_TLB_TYPE(v)                         HW_INST_MRC(p15,0,c0,c0,3,v)
121 #define HW_GET_CP15_CPU_ID(v)                           HW_INST_MRC(p15,0,c0,c0,5,v)
122 #define HW_GET_CP15_PFR0(v)                             HW_INST_MRC(p15,0,c0,c1,0,v)
123 #define HW_GET_CP15_PFR1(v)                             HW_INST_MRC(p15,0,c0,c1,1,v)
124 #define HW_GET_CP15_DFR0(v)                             HW_INST_MRC(p15,0,c0,c1,2,v)
125 #define HW_GET_CP15_MMFR0(v)                            HW_INST_MRC(p15,0,c0,c1,4,v)
126 #define HW_GET_CP15_MMFR1(v)                            HW_INST_MRC(p15,0,c0,c1,5,v)
127 #define HW_GET_CP15_MMFR2(v)                            HW_INST_MRC(p15,0,c0,c1,6,v)
128 #define HW_GET_CP15_MMFR3(v)                            HW_INST_MRC(p15,0,c0,c1,7,v)
129 #define HW_GET_CP15_ISAR0(v)                            HW_INST_MRC(p15,0,c0,c2,0,v)
130 #define HW_GET_CP15_ISAR1(v)                            HW_INST_MRC(p15,0,c0,c2,1,v)
131 #define HW_GET_CP15_ISAR2(v)                            HW_INST_MRC(p15,0,c0,c2,2,v)
132 #define HW_GET_CP15_ISAR3(v)                            HW_INST_MRC(p15,0,c0,c2,3,v)
133 #define HW_GET_CP15_ISAR4(v)                            HW_INST_MRC(p15,0,c0,c2,4,v)
134 #define HW_GET_CP15_CONTROL(v)                          HW_INST_MRC(p15,0,c1,c0,0,v)
135 #define HW_GET_CP15_AUX_CONTROL(v)                      HW_INST_MRC(p15,0,c1,c0,1,v)
136 #define HW_GET_CP15_COPROCESSOR_ACCESS_CONTROL(v)       HW_INST_MRC(p15,0,c1,c0,2,v)
137 
138 #if defined(SDK_ARM11) || defined(NN_PROCESSOR_ARM_V6)
139     #define HW_GET_CP15_TTB0(v)                             HW_INST_MRC(p15,0,c2,c0,0,v)
140     #define HW_GET_CP15_TTB1(v)                             HW_INST_MRC(p15,0,c2,c0,1,v)
141     #define HW_GET_CP15_TTB_CONTROL(v)                      HW_INST_MRC(p15,0,c2,c0,2,v)
142     #define HW_GET_CP15_DOMAIN_ACCESS_CONTROL(v)            HW_INST_MRC(p15,0,c3,c0,0,v)
143     #define HW_GET_CP15_DATA_FAULT_STATUS(v)                HW_INST_MRC(p15,0,c5,c0,0,v)
144     #define HW_GET_CP15_INSTRUCTION_FAULT_STATUS(v)         HW_INST_MRC(p15,0,c5,c0,1,v)
145     #define HW_GET_CP15_DATA_FAULT_ADDRESS(v)               HW_INST_MRC(p15,0,c6,c0,0,v)
146     #define HW_GET_CP15_WATCHPOINT_FAULT_ADDRESS(v)         HW_INST_MRC(p15,0,c6,c0,1,v)
147 #else
148     #define HW_GET_CP15_CACHE_ENABLE(v)                     HW_INST_MRC(p15,0,c2,c0,0,v)
149     #define HW_GET_CP15_DATA_CACHE_ENABLE(v)                HW_GET_CP15_CACHE_ENABLE(v)
150     #define HW_GET_CP15_INSTRUCTION_CACHE_ENABLE(v)         HW_INST_MRC(p15,0,c2,c0,1,v)
151     #define HW_GET_CP15_WRITE_BUFFER_ENABLE(v)              HW_INST_MRC(p15,0,c3,c0,0,v)
152     #define HW_GET_CP15_ACCESS_PERMISSION(v)                HW_INST_MRC(p15,0,c5,c0,0,v)
153     #define HW_GET_CP15_DATA_ACCESS_PERMISSION(v)           HW_GET_CP15_ACCESS_PERMISSION(v)
154     #define HW_GET_CP15_INSTRUCTION_ACCESS_PERMISSION(v)    HW_INST_MRC(p15,0,c5,c0,1,v)
155     #define HW_GET_CP15_DATA_ACCESS_PERMISSION_EX(v)        HW_INST_MRC(p15,0,c5,c0,2,v)
156     #define HW_GET_CP15_INSTRUCTION_ACCESS_PERMISSION_EX(v) HW_INST_MRC(p15,0,c5,c0,3,v)
157     #define HW_GET_CP15_PROTECTION_REGION_0(v)              HW_INST_MRC(p15,0,c6,c0,0,v)
158     #define HW_GET_CP15_PROTECTION_REGION_1(v)              HW_INST_MRC(p15,0,c6,c1,0,v)
159     #define HW_GET_CP15_PROTECTION_REGION_2(v)              HW_INST_MRC(p15,0,c6,c2,0,v)
160     #define HW_GET_CP15_PROTECTION_REGION_3(v)              HW_INST_MRC(p15,0,c6,c3,0,v)
161     #define HW_GET_CP15_PROTECTION_REGION_4(v)              HW_INST_MRC(p15,0,c6,c4,0,v)
162     #define HW_GET_CP15_PROTECTION_REGION_5(v)              HW_INST_MRC(p15,0,c6,c5,0,v)
163     #define HW_GET_CP15_PROTECTION_REGION_6(v)              HW_INST_MRC(p15,0,c6,c6,0,v)
164     #define HW_GET_CP15_PROTECTION_REGION_7(v)              HW_INST_MRC(p15,0,c6,c7,0,v)
165 #endif
166 
167 #define HW_GET_CP15_PA(v)                               HW_INST_MRC(p15,0,c7,c4,0,v)
168 #define HW_GET_CP15_DATA_CACHE_LOCKDOWN(v)              HW_INST_MRC(p15,0,c9,c0,0,v)
169 
170 #if ! (defined(SDK_ARM11) || defined(NN_PROCESSOR_ARM_V6))
171     #define HW_GET_CP15_INSTRUCTION_CACHE_LOCKDOWN(v)       HW_INST_MRC(p15,0,c9,c0,1,v)
172     #define HW_GET_CP15_DTCM(v)                             HW_INST_MRC(p15,0,c9,c1,0,v)
173     #define HW_GET_CP15_ITCM(v)                             HW_INST_MRC(p15,0,c9,c1,1,v)
174 #endif
175 
176 #define HW_GET_CP15_TLB_LOCKDOWN(v)                     HW_INST_MRC(p15,0,c10,c0,0,v)
177 #define HW_GET_CP15_PRIMARY_REGION_REMAP(v)             HW_INST_MRC(p15,0,c10,c2,0,v)
178 #define HW_GET_CP15_NORMAL_REGION_REMAP(v)              HW_INST_MRC(p15,0,c10,c2,1,v)
179 #define HW_GET_CP15_FSCSE_PID(v)                        HW_INST_MRC(p15,0,c13,c0,0,v)
180 #define HW_GET_CP15_CONTEXT_ID(v)                       HW_INST_MRC(p15,0,c13,c0,1,v)
181 #define HW_GET_CP15_THREAD_ID(v)                        HW_INST_MRC(p15,0,c13,c0,2,v)
182 #define HW_GET_CP15_THREAD_ID_USER_READ_ONLY(v)         HW_INST_MRC(p15,0,c13,c0,3,v)
183 #define HW_GET_CP15_THREAD_ID_PRIVILEGED_ONLY(v)        HW_INST_MRC(p15,0,c13,c0,4,v)
184 
185 #if ! (defined(SDK_ARM11) || defined(NN_PROCESSOR_ARM_V6))
186     #define HW_GET_CP15_TEST_STATE(v)                       HW_INST_MRC(p15,0,c15,c0,0,v)
187     #define HW_GET_CP15_INSTRUCTIN_TAG_BIST_ADDRESS(v)      HW_INST_MRC(p15,0,c15,c0,2,v)
188     #define HW_GET_CP15_INSTRUCTIN_TAG_BIST_GENERAL(v)      HW_INST_MRC(p15,0,c15,c0,3,v)
189     #define HW_GET_CP15_DATA_TAG_BIST_ADDRESS(v)            HW_INST_MRC(p15,0,c15,c0,6,v)
190     #define HW_GET_CP15_DATA_TAG_BIST_GENERAL(v)            HW_INST_MRC(p15,0,c15,c0,7,v)
191     #define HW_GET_CP15_ITCM_BIST_ADDRESS(v)                HW_INST_MRC(p15,1,c15,c0,2,v)
192     #define HW_GET_CP15_ITCM_BIST_GENERAL(v)                HW_INST_MRC(p15,1,c15,c0,3,v)
193     #define HW_GET_CP15_DTCM_BIST_ADDRESS(v)                HW_INST_MRC(p15,1,c15,c0,6,v)
194     #define HW_GET_CP15_DTCM_BIST_GENERAL(v)                HW_INST_MRC(p15,1,c15,c0,7,v)
195     #define HW_GET_CP15_TRACE_STATE_CONTROL(v)              HW_INST_MRC(p15,1,c15,c1,0,v)
196     #define HW_GET_CP15_INSTRUCTIN_CACHE_RAM_BIST_ADDRESS(v)        HW_INST_MRC(p15,2,c15,c0,2,v)
197     #define HW_GET_CP15_INSTRUCTIN_CACHE_RAM_BIST_GENERAL(v)        HW_INST_MRC(p15,2,c15,c0,3,v)
198     #define HW_GET_CP15_DATA_CACHE_RAM_BIST_ADDRESS(v)      HW_INST_MRC(p15,2,c15,c0,6,v)
199     #define HW_GET_CP15_DATA_CACHE_RAM_BIST_GENERAL(v)      HW_INST_MRC(p15,2,c15,c0,7,v)
200 #endif
201 
202 #define HW_GET_CP15_PERFORMANCE_MONITOR_CONTROL(v)      HW_INST_MRC(p15,0,c15,c12,0,v)
203 #define HW_GET_CP15_CCNT(v)                             HW_INST_MRC(p15,0,c15,c12,1,v)
204 #define HW_GET_CP15_PMN0(v)                             HW_INST_MRC(p15,0,c15,c12,2,v)
205 #define HW_GET_CP15_PMN1(v)                             HW_INST_MRC(p15,0,c15,c12,3,v)
206 
207 #if ! (defined(SDK_ARM11) || defined(NN_PROCESSOR_ARM_V6))
208     #define HW_GET_CP15_CACHE_DEBUG_INDEX(v)                HW_INST_MRC(p15,3,c15,c0,0,v)
209     #define HW_GET_CP15_INSTRUCTION_TAG(v)                  HW_INST_MRC(p15,3,c15,c1,0,v)
210     #define HW_GET_CP15_DATA_TAG(v)                         HW_INST_MRC(p15,3,c15,c2,0,v)
211     #define HW_GET_CP15_INSTRUCTION_CACHE(v)                HW_INST_MRC(p15,3,c15,c3,0,v)
212     #define HW_GET_CP15_DATA_CACHE(v)                       HW_INST_MRC(p15,3,c15,c4,0,v)
213 #endif
214 
215 #define HW_GET_CP15_MAIN_TLB_LOCKDOWN_VA(v)             HW_INST_MRC(p15,5,c15,c5,2,v)
216 #define HW_GET_CP15_MAIN_TLB_LOCKDOWN_PA(v)             HW_INST_MRC(p15,5,c15,c6,2,v)
217 #define HW_GET_CP15_MAIN_TLB_LOCKDOWN_ATTRIBUTE(v)      HW_INST_MRC(p15,5,c15,c7,2,v)
218 #define HW_GET_CP15_TLB_DEBUG_CONTROL(v)                HW_INST_MRC(p15,7,c15,c1,0,v)
219 
220 #define HW_SET_CP15_CONTROL(v)                          HW_INST_MCR(p15,0,c1,c0,0,v)
221 #define HW_SET_CP15_AUX_CONTROL(v)                      HW_INST_MCR(p15,0,c1,c0,1,v)
222 #define HW_SET_CP15_COPROCESSOR_ACCESS_CONTROL(v)       HW_INST_MCR(p15,0,c1,c0,2,v)
223 
224 #if defined(SDK_ARM11) || defined(NN_PROCESSOR_ARM_V6)
225     #define HW_SET_CP15_TTB0(v)                             HW_INST_MCR(p15,0,c2,c0,0,v)
226     #define HW_SET_CP15_TTB1(v)                             HW_INST_MCR(p15,0,c2,c0,1,v)
227     #define HW_SET_CP15_TTB_CONTROL(v)                      HW_INST_MCR(p15,0,c2,c0,2,v)
228     #define HW_SET_CP15_DOMAIN_ACCESS_CONTROL(v)            HW_INST_MCR(p15,0,c3,c0,0,v)
229     #define HW_SET_CP15_DATA_FAULT_STATUS(v)                HW_INST_MCR(p15,0,c5,c0,0,v)
230     #define HW_SET_CP15_INSTRUCTION_FAULT_STATUS(v)         HW_INST_MCR(p15,0,c5,c0,1,v)
231     #define HW_SET_CP15_DATA_FAULT_ADDRESS(v)               HW_INST_MCR(p15,0,c6,c0,0,v)
232     #define HW_SET_CP15_WATCHPOINT_FAULT_ADDRESS(v)         HW_INST_MCR(p15,0,c6,c0,1,v)
233 #else
234     #define HW_SET_CP15_CACHE_ENABLE(v)                     HW_INST_MCR(p15,0,c2,c0,0,v)
235     #define HW_SET_CP15_DATA_CACHE_ENABLE(v)                HW_SET_CP15_CACHE_ENABLE(v)
236     #define HW_SET_CP15_INSTRUCTION_CACHE_ENABLE(v)         HW_INST_MCR(p15,0,c2,c0,1,v)
237     #define HW_SET_CP15_WRITE_BUFFER_ENABLE(v)              HW_INST_MCR(p15,0,c3,c0,0,v)
238     #define HW_SET_CP15_ACCESS_PERMISSION(v)                HW_INST_MCR(p15,0,c5,c0,0,v)
239     #define HW_SET_CP15_DATA_ACCESS_PERMISSION(v)           HW_SET_CP15_ACCESS_PERMISSION(v)
240     #define HW_SET_CP15_INSTRUCTION_ACCESS_PERMISSION(v)    HW_INST_MCR(p15,0,c5,c0,1,v)
241     #define HW_SET_CP15_DATA_ACCESS_PERMISSION_EX(v)        HW_INST_MCR(p15,0,c5,c0,2,v)
242     #define HW_SET_CP15_INSTRUCTION_ACCESS_PERMISSION_EX(v) HW_INST_MCR(p15,0,c5,c0,3,v)
243     #define HW_SET_CP15_PROTECTION_REGION_0(v)              HW_INST_MCR(p15,0,c6,c0,0,v)
244     #define HW_SET_CP15_PROTECTION_REGION_1(v)              HW_INST_MCR(p15,0,c6,c1,0,v)
245     #define HW_SET_CP15_PROTECTION_REGION_2(v)              HW_INST_MCR(p15,0,c6,c2,0,v)
246     #define HW_SET_CP15_PROTECTION_REGION_3(v)              HW_INST_MCR(p15,0,c6,c3,0,v)
247     #define HW_SET_CP15_PROTECTION_REGION_4(v)              HW_INST_MCR(p15,0,c6,c4,0,v)
248     #define HW_SET_CP15_PROTECTION_REGION_5(v)              HW_INST_MCR(p15,0,c6,c5,0,v)
249     #define HW_SET_CP15_PROTECTION_REGION_6(v)              HW_INST_MCR(p15,0,c6,c6,0,v)
250     #define HW_SET_CP15_PROTECTION_REGION_7(v)              HW_INST_MCR(p15,0,c6,c7,0,v)
251 #endif
252 
253 #define HW_SET_CP15_WFI(v)                              HW_INST_MCR(p15,0,c7,c0,4,v)
254 #define HW_SET_CP15_INVALIDATE_ENTIRE_INSTRUCTION_CACHE(v)      HW_INST_MCR(p15,0,c7,c5,0,v)
255 #define HW_SET_CP15_INVALIDATE_INSTRUCTION_CACHE_MVA(v)         HW_INST_MCR(p15,0,c7,c5,1,v)
256 #define HW_SET_CP15_INVALIDATE_INSTRUCTION_CACHE_INDEX(v)       HW_INST_MCR(p15,0,c7,c5,2,v)
257 #define HW_SET_CP15_FLUSH_PREFETCH_BUFFER(v)            HW_INST_MCR(p15,0,c7,c5,4,v)
258 #define HW_SET_CP15_FLUSH_ENTIRE_BRANCH_TARGET_CACHE(v) HW_INST_MCR(p15,0,c7,c5,6,v)
259 #define HW_SET_CP15_FLUSH_BRANCH_TARGET_CACHE_ENTRY(v)  HW_INST_MCR(p15,0,c7,c5,7,v)
260 #define HW_SET_CP15_INVALIDATE_ENTIRE_DATA_CACHE(v)     HW_INST_MCR(p15,0,c7,c6,0,v)
261 #define HW_SET_CP15_INVALIDATE_DATA_CACHE_MVA(v)        HW_INST_MCR(p15,0,c7,c6,1,v)
262 #define HW_SET_CP15_INVALIDATE_DATA_CACHE_INDEX(v)      HW_INST_MCR(p15,0,c7,c6,2,v)
263 #define HW_SET_CP15_INVALIDATE_BOTH_CACHE(v)            HW_INST_MCR(p15,0,c7,c7,0,v)
264 #define HW_SET_CP15_VA_TO_PA_PRIVILEGED_READ(v)         HW_INST_MCR(p15,0,c7,c8,0,v)
265 #define HW_SET_CP15_VA_TO_PA_PRIVILEGED_WRITE(v)        HW_INST_MCR(p15,0,c7,c8,1,v)
266 #define HW_SET_CP15_VA_TO_PA_USER_READ(v)               HW_INST_MCR(p15,0,c7,c8,2,v)
267 #define HW_SET_CP15_VA_TO_PA_USER_WRITE(v)              HW_INST_MCR(p15,0,c7,c8,3,v)
268 #define HW_SET_CP15_CLEAN_ENTIRE_DATA_CACHE(v)          HW_INST_MCR(p15,0,c7,c10,0,v)
269 #define HW_SET_CP15_CLEAN_DATA_CACHE_MVA(v)             HW_INST_MCR(p15,0,c7,c10,1,v)
270 #define HW_SET_CP15_CLEAN_DATA_CACHE_INDEX(v)           HW_INST_MCR(p15,0,c7,c10,2,v)
271 #define HW_SET_CP15_DATA_SYNC_BARRIER(v)                HW_INST_MCR(p15,0,c7,c10,4,v)
272 #define HW_SET_CP15_DATA_MEMORY_BARRIER(v)              HW_INST_MCR(p15,0,c7,c10,5,v)
273 #define HW_SET_CP15_CLEAN_INVALIDATE_ENTIRE_DATA_CACHE(v)       HW_INST_MCR(p15,0,c7,c14,0,v)
274 #define HW_SET_CP15_CLEAN_INVALIDATE_DATA_CACHE_MVA(v)          HW_INST_MCR(p15,0,c7,c14,1,v)
275 #define HW_SET_CP15_CLEAN_INVALIDATE_DATA_CACHE_INDEX(v)        HW_INST_MCR(p15,0,c7,c14,2,v)
276 #define HW_SET_CP15_INVALIDATE_INSTRUCTION_TLB(v)               HW_INST_MCR(p15,0,c8,c5,0,v)
277 #define HW_SET_CP15_INVALIDATE_INSTRUCTION_TLB_SINGLE(v)        HW_INST_MCR(p15,0,c8,c5,1,v)
278 #define HW_SET_CP15_INVALIDATE_INSTRUCTION_TLB_ASID(v)          HW_INST_MCR(p15,0,c8,c5,2,v)
279 #define HW_SET_CP15_INVALIDATE_INSTRUCTION_TLB_MVA(v)           HW_INST_MCR(p15,0,c8,c5,3,v)
280 #define HW_SET_CP15_INVALIDATE_DATA_TLB(v)              HW_INST_MCR(p15,0,c8,c6,0,v)
281 #define HW_SET_CP15_INVALIDATE_DATA_TLB_SINGLE(v)       HW_INST_MCR(p15,0,c8,c6,1,v)
282 #define HW_SET_CP15_INVALIDATE_DATA_TLB_ASID(v)         HW_INST_MCR(p15,0,c8,c6,2,v)
283 #define HW_SET_CP15_INVALIDATE_DATA_TLB_MVA(v)          HW_INST_MCR(p15,0,c8,c6,3,v)
284 #define HW_SET_CP15_INVALIDATE_UNIFIED_TLB(v)           HW_INST_MCR(p15,0,c8,c7,0,v)
285 #define HW_SET_CP15_INVALIDATE_UNIFIED_TLB_SINGLE(v)    HW_INST_MCR(p15,0,c8,c7,1,v)
286 #define HW_SET_CP15_INVALIDATE_UNIFIED_TLB_ASID(v)      HW_INST_MCR(p15,0,c8,c7,2,v)
287 #define HW_SET_CP15_INVALIDATE_UNIFIED_TLB_MVA(v)       HW_INST_MCR(p15,0,c8,c7,3,v)
288 #define HW_SET_CP15_DATA_CACHE_LOCKDOWN(v)              HW_INST_MCR(p15,0,c9,c0,0,v)
289 
290 #if ! (defined(SDK_ARM11) || defined(NN_PROCESSOR_ARM_V6))
291     #define HW_SET_CP15_INSTRUCTION_CACHE_LOCKDOWN(v)       HW_INST_MCR(p15,0,c9,c0,1,v)
292     #define HW_SET_CP15_DTCM(v)                             HW_INST_MCR(p15,0,c9,c1,0,v)
293     #define HW_SET_CP15_ITCM(v)                             HW_INST_MCR(p15,0,c9,c1,1,v)
294 #endif
295 
296 #define HW_SET_CP15_TLB_LOCKDOWN(v)                     HW_INST_MCR(p15,0,c10,c0,0,v)
297 #define HW_SET_CP15_PRIMARY_REGION_REMAP(v)             HW_INST_MCR(p15,0,c10,c2,0,v)
298 #define HW_SET_CP15_NORMAL_REGION_REMAP(v)              HW_INST_MCR(p15,0,c10,c2,1,v)
299 #define HW_SET_CP15_FSCSE_PID(v)                        HW_INST_MCR(p15,0,c13,c0,0,v)
300 #define HW_SET_CP15_CONTEXT_ID(v)                       HW_INST_MCR(p15,0,c13,c0,1,v)
301 #define HW_SET_CP15_THREAD_ID(v)                        HW_INST_MCR(p15,0,c13,c0,2,v)
302 #define HW_SET_CP15_THREAD_ID_USER_READ_ONLY(v)         HW_INST_MCR(p15,0,c13,c0,3,v)
303 #define HW_SET_CP15_THREAD_ID_PRIVILEGED_ONLY(v)        HW_INST_MCR(p15,0,c13,c0,4,v)
304 
305 #if ! (defined(SDK_ARM11) || defined(NN_PROCESSOR_ARM_V6))
306     #define HW_SET_CP15_TEST_STATE(v)                       HW_INST_MCR(p15,0,c15,c0,0,v)
307     #define HW_SET_CP15_INSTRUCTIN_TAG_BIST_ADDRESS(v)      HW_INST_MCR(p15,0,c15,c0,2,v)
308     #define HW_SET_CP15_INSTRUCTIN_TAG_BIST_GENERAL(v)      HW_INST_MCR(p15,0,c15,c0,3,v)
309     #define HW_SET_CP15_DATA_TAG_BIST_ADDRESS(v)            HW_INST_MCR(p15,0,c15,c0,6,v)
310     #define HW_SET_CP15_DATA_TAG_BIST_GENERAL(v)            HW_INST_MCR(p15,0,c15,c0,7,v)
311     #define HW_SET_CP15_ITCM_BIST_ADDRESS(v)                HW_INST_MCR(p15,1,c15,c0,2,v)
312     #define HW_SET_CP15_ITCM_BIST_GENERAL(v)                HW_INST_MCR(p15,1,c15,c0,3,v)
313     #define HW_SET_CP15_DTCM_BIST_ADDRESS(v)                HW_INST_MCR(p15,1,c15,c0,6,v)
314     #define HW_SET_CP15_DTCM_BIST_GENERAL(v)                HW_INST_MCR(p15,1,c15,c0,7,v)
315     #define HW_SET_CP15_TRACE_STATE_CONTROL(v)              HW_INST_MCR(p15,1,c15,c1,0,v)
316     #define HW_SET_CP15_INSTRUCTIN_CACHE_RAM_BIST_ADDRESS(v)        HW_INST_MCR(p15,2,c15,c0,2,v)
317     #define HW_SET_CP15_INSTRUCTIN_CACHE_RAM_BIST_GENERAL(v)        HW_INST_MCR(p15,2,c15,c0,3,v)
318     #define HW_SET_CP15_DATA_CACHE_RAM_BIST_ADDRESS(v)      HW_INST_MCR(p15,2,c15,c0,6,v)
319     #define HW_SET_CP15_DATA_CACHE_RAM_BIST_GENERAL(v)      HW_INST_MCR(p15,2,c15,c0,7,v)
320 #endif
321 
322 #define HW_SET_CP15_PERFORMANCE_MONITOR_CONTROL(v)      HW_INST_MCR(p15,0,c15,c12,0,v)
323 #define HW_SET_CP15_CCNT(v)                             HW_INST_MCR(p15,0,c15,c12,1,v)
324 #define HW_SET_CP15_PMN0(v)                             HW_INST_MCR(p15,0,c15,c12,2,v)
325 #define HW_SET_CP15_PMN1(v)                             HW_INST_MCR(p15,0,c15,c12,3,v)
326 #define HW_SET_CP15_READ_MAIN_TLB_LOCKDOWN_ENTRY(v)     HW_INST_MCR(p15,5,c15,c4,2,v)
327 #define HW_SET_CP15_WRITE_MAIN_TLB_LOCKDOWN_ENTRY(v)    HW_INST_MCR(p15,5,c15,c4,4,v)
328 
329 #if ! (defined(SDK_ARM11) || defined(NN_PROCESSOR_ARM_V6))
330     #define HW_SET_CP15_CACHE_DEBUG_INDEX(v)                HW_INST_MCR(p15,3,c15,c0,0,v)
331     #define HW_SET_CP15_INSTRUCTION_TAG(v)                  HW_INST_MCR(p15,3,c15,c1,0,v)
332     #define HW_SET_CP15_DATA_TAG(v)                         HW_INST_MCR(p15,3,c15,c2,0,v)
333     #define HW_SET_CP15_INSTRUCTION_CACHE(v)                HW_INST_MCR(p15,3,c15,c3,0,v)
334     #define HW_SET_CP15_DATA_CACHE(v)                       HW_INST_MCR(p15,3,c15,c4,0,v)
335 #endif
336 
337 #define HW_SET_CP15_MAIN_TLB_LOCKDOWN_VA(v)             HW_INST_MCR(p15,5,c15,c5,2,v)
338 #define HW_SET_CP15_MAIN_TLB_LOCKDOWN_PA(v)             HW_INST_MCR(p15,5,c15,c6,2,v)
339 #define HW_SET_CP15_MAIN_TLB_LOCKDOWN_ATTRIBUTE(v)      HW_INST_MCR(p15,5,c15,c7,2,v)
340 #define HW_SET_CP15_TLB_DEBUG_CONTROL(v)                HW_INST_MCR(p15,7,c15,c1,0,v)
341 
342 //
343 // static input value
344 //
345 #define HW_CP15_WFI()                                   HW_INST_MCR(p15,0,c7,c0,4,0)
346 #define HW_CP15_INVALIDATE_ENTIRE_INSTRUCTION_CACHE()   HW_INST_MCR(p15,0,c7,c5,0,0)
347 #define HW_CP15_FLUSH_PREFETCH_BUFFER()                 HW_INST_MCR(p15,0,c7,c5,4,0)
348 #define HW_CP15_FLUSH_ENTIRE_BRANCH_TARGET_CACHE()      HW_INST_MCR(p15,0,c7,c5,6,0)
349 #define HW_CP15_INVALIDATE_ENTIRE_DATA_CACHE()          HW_INST_MCR(p15,0,c7,c6,0,0)
350 #define HW_CP15_INVALIDATE_BOTH_CACHE()                 HW_INST_MCR(p15,0,c7,c7,0,0)
351 #define HW_CP15_CLEAN_ENTIRE_DATA_CACHE()               HW_INST_MCR(p15,0,c7,c10,0,0)
352 #define HW_CP15_DATA_SYNC_BARRIER()                     HW_INST_MCR(p15,0,c7,c10,4,0)
353 #define HW_CP15_DATA_MEMORY_BARRIER()                   HW_INST_MCR(p15,0,c7,c10,5,0)
354 #define HW_CP15_CLEAN_INVALIDATE_ENTIRE_DATA_CACHE()    HW_INST_MCR(p15,0,c7,c14,0,0)
355 #define HW_CP15_INVALIDATE_INSTRUCTION_TLB()            HW_INST_MCR(p15,0,c8,c5,0,0)
356 #define HW_CP15_INVALIDATE_DATA_TLB()                   HW_INST_MCR(p15,0,c8,c6,0,0)
357 #define HW_CP15_INVALIDATE_UNIFIED_TLB()                HW_INST_MCR(p15,0,c8,c7,0,0)
358 
359 
360 #ifdef __cplusplus
361 } // extern "C"
362 #endif
363 
364 // NN_HW_ARM_REG_ACCESS_H_
365 #endif
366