summaryrefslogtreecommitdiff
path: root/src/core/arm/skyeye_common
diff options
context:
space:
mode:
authorGravatar Lioncash2015-03-26 12:54:16 -0400
committerGravatar Lioncash2015-04-02 00:19:11 -0400
commit5e5954c63b1a22ba2d333d23ae4c194798fe5412 (patch)
treeb002936fff0450760eff4469a06e48e745200a36 /src/core/arm/skyeye_common
parentdyncom: Migrate InAPrivilegedMode to armsupp (diff)
downloadyuzu-5e5954c63b1a22ba2d333d23ae4c194798fe5412.tar.gz
yuzu-5e5954c63b1a22ba2d333d23ae4c194798fe5412.tar.xz
yuzu-5e5954c63b1a22ba2d333d23ae4c194798fe5412.zip
dyncom: Move CP15 register reading into its own function.
Keeps everything contained. Added all supported readable registers in an ARM11 MPCore.
Diffstat (limited to 'src/core/arm/skyeye_common')
-rw-r--r--src/core/arm/skyeye_common/arm_regformat.h57
-rw-r--r--src/core/arm/skyeye_common/armdefs.h2
2 files changed, 54 insertions, 5 deletions
diff --git a/src/core/arm/skyeye_common/arm_regformat.h b/src/core/arm/skyeye_common/arm_regformat.h
index 5be3a561f..fb5b70f1e 100644
--- a/src/core/arm/skyeye_common/arm_regformat.h
+++ b/src/core/arm/skyeye_common/arm_regformat.h
@@ -50,6 +50,8 @@ enum {
50 EXCLUSIVE_TAG, 50 EXCLUSIVE_TAG,
51 EXCLUSIVE_STATE, 51 EXCLUSIVE_STATE,
52 EXCLUSIVE_RESULT, 52 EXCLUSIVE_RESULT,
53
54 // c0 - Information registers
53 CP15_BASE, 55 CP15_BASE,
54 CP15_C0 = CP15_BASE, 56 CP15_C0 = CP15_BASE,
55 CP15_C0_C0 = CP15_C0, 57 CP15_C0_C0 = CP15_C0,
@@ -57,15 +59,30 @@ enum {
57 CP15_CACHE_TYPE, 59 CP15_CACHE_TYPE,
58 CP15_TCM_STATUS, 60 CP15_TCM_STATUS,
59 CP15_TLB_TYPE, 61 CP15_TLB_TYPE,
62 CP15_CPU_ID,
60 CP15_C0_C1, 63 CP15_C0_C1,
61 CP15_PROCESSOR_FEATURE_0 = CP15_C0_C1, 64 CP15_PROCESSOR_FEATURE_0 = CP15_C0_C1,
62 CP15_PROCESSOR_FEATURE_1, 65 CP15_PROCESSOR_FEATURE_1,
63 CP15_DEBUG_FEATURE_0, 66 CP15_DEBUG_FEATURE_0,
64 CP15_AUXILIARY_FEATURE_0, 67 CP15_AUXILIARY_FEATURE_0,
68 CP15_MEMORY_MODEL_FEATURE_0,
69 CP15_MEMORY_MODEL_FEATURE_1,
70 CP15_MEMORY_MODEL_FEATURE_2,
71 CP15_MEMORY_MODEL_FEATURE_3,
72 CP15_C0_C2,
73 CP15_ISA_FEATURE_0 = CP15_C0_C2,
74 CP15_ISA_FEATURE_1,
75 CP15_ISA_FEATURE_2,
76 CP15_ISA_FEATURE_3,
77 CP15_ISA_FEATURE_4,
78
79 // c1 - Control registers
65 CP15_C1_C0, 80 CP15_C1_C0,
66 CP15_CONTROL = CP15_C1_C0, 81 CP15_CONTROL = CP15_C1_C0,
67 CP15_AUXILIARY_CONTROL, 82 CP15_AUXILIARY_CONTROL,
68 CP15_COPROCESSOR_ACCESS_CONTROL, 83 CP15_COPROCESSOR_ACCESS_CONTROL,
84
85 // c2 - Translation table registers
69 CP15_C2, 86 CP15_C2,
70 CP15_C2_C0 = CP15_C2, 87 CP15_C2_C0 = CP15_C2,
71 CP15_TRANSLATION_BASE = CP15_C2_C0, 88 CP15_TRANSLATION_BASE = CP15_C2_C0,
@@ -74,24 +91,54 @@ enum {
74 CP15_TRANSLATION_BASE_CONTROL, 91 CP15_TRANSLATION_BASE_CONTROL,
75 CP15_DOMAIN_ACCESS_CONTROL, 92 CP15_DOMAIN_ACCESS_CONTROL,
76 CP15_RESERVED, 93 CP15_RESERVED,
77 /* Fault status */ 94
95 // c5 - Fault status registers
78 CP15_FAULT_STATUS, 96 CP15_FAULT_STATUS,
79 CP15_INSTR_FAULT_STATUS, 97 CP15_INSTR_FAULT_STATUS,
80 CP15_COMBINED_DATA_FSR = CP15_FAULT_STATUS, 98 CP15_COMBINED_DATA_FSR = CP15_FAULT_STATUS,
81 CP15_INST_FSR, 99 CP15_INST_FSR,
82 /* Fault Address register */ 100
101 // c6 - Fault Address registers
83 CP15_FAULT_ADDRESS, 102 CP15_FAULT_ADDRESS,
84 CP15_COMBINED_DATA_FAR = CP15_FAULT_ADDRESS, 103 CP15_COMBINED_DATA_FAR = CP15_FAULT_ADDRESS,
85 CP15_WFAR, 104 CP15_WFAR,
86 CP15_IFAR, 105 CP15_IFAR,
106
107 // c7 - Cache operation registers
108 CP15_PHYS_ADDRESS,
109
110 // c9 - Data cache lockdown register
111 CP15_DATA_CACHE_LOCKDOWN,
112
113 // c10 - TLB/Memory map registers
114 CP15_TLB_LOCKDOWN,
115 CP15_PRIMARY_REGION_REMAP,
116 CP15_NORMAL_REGION_REMAP,
117
118 // c13 - Thread related registers
87 CP15_PID, 119 CP15_PID,
88 CP15_CONTEXT_ID, 120 CP15_CONTEXT_ID,
89 CP15_THREAD_UPRW, // Thread ID register - User/Privileged Read/Write 121 CP15_THREAD_UPRW, // Thread ID register - User/Privileged Read/Write
90 CP15_THREAD_URO, // Thread ID register - User Read Only (Privileged R/W) 122 CP15_THREAD_URO, // Thread ID register - User Read Only (Privileged R/W)
91 CP15_THREAD_PRW, // Thread ID register - Privileged R/W only. 123 CP15_THREAD_PRW, // Thread ID register - Privileged R/W only.
92 CP15_TLB_FAULT_ADDR, /* defined by SkyEye */ 124
93 CP15_TLB_FAULT_STATUS, /* defined by SkyEye */ 125 // c15 - Performance and TLB lockdown registers
94 /* VFP registers */ 126 CP15_PERFORMANCE_MONITOR_CONTROL,
127 CP15_CYCLE_COUNTER,
128 CP15_COUNT_0,
129 CP15_COUNT_1,
130 CP15_READ_MAIN_TLB_LOCKDOWN_ENTRY,
131 CP15_WRITE_MAIN_TLB_LOCKDOWN_ENTRY,
132 CP15_MAIN_TLB_LOCKDOWN_VIRT_ADDRESS,
133 CP15_MAIN_TLB_LOCKDOWN_PHYS_ADDRESS,
134 CP15_MAIN_TLB_LOCKDOWN_ATTRIBUTE,
135 CP15_TLB_DEBUG_CONTROL,
136
137 // Skyeye defined
138 CP15_TLB_FAULT_ADDR,
139 CP15_TLB_FAULT_STATUS,
140
141 // VFP registers
95 VFP_BASE, 142 VFP_BASE,
96 VFP_FPSID = VFP_BASE, 143 VFP_FPSID = VFP_BASE,
97 VFP_FPSCR, 144 VFP_FPSCR,
diff --git a/src/core/arm/skyeye_common/armdefs.h b/src/core/arm/skyeye_common/armdefs.h
index 633649d3e..14f2a39d1 100644
--- a/src/core/arm/skyeye_common/armdefs.h
+++ b/src/core/arm/skyeye_common/armdefs.h
@@ -358,3 +358,5 @@ extern u32 ARMul_UnsignedSatQ(s32, u8, bool*);
358 358
359extern bool InBigEndianMode(ARMul_State*); 359extern bool InBigEndianMode(ARMul_State*);
360extern bool InAPrivilegedMode(ARMul_State*); 360extern bool InAPrivilegedMode(ARMul_State*);
361
362extern u32 ReadCP15Register(ARMul_State* cpu, u32 crn, u32 opcode_1, u32 crm, u32 opcode_2);