diff options
author | Jonathan Austin <jonathan.austin@arm.com> | 2016-08-30 12:32:42 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@armlinux.org.uk> | 2016-09-06 10:51:08 -0400 |
commit | c3a6bcbe6a9e7e0d66c279e4a47aa07327040b38 (patch) | |
tree | d2e6072ebbd02042ae29eeefe7f4e263698d3add | |
parent | bc0ee9d24ad21a5c2b5944f66623a02e9c8831aa (diff) |
ARM: 8608/1: V7M: Indirect proc_info construction for V7M CPUs
This patch copies the method used for V7A/R CPUs to specify differing
processor info for different cores.
This patch differentiates Cortex-M3 and Cortex-M4 and leaves a fallback case
for any other V7M processors.
Signed-off-by: Jonathan Austin <jonathan.austin@arm.com>
Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
Tested-by: Andras Szemzo <sza@esh.hu>
Tested-by: Joachim Eastwood <manabian@gmail.com>
Tested-by: Alexandre TORGUE <alexandre.torgue@st.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | arch/arm/mm/proc-v7m.S | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S index 11f5816e2680..796a9836cfdb 100644 --- a/arch/arm/mm/proc-v7m.S +++ b/arch/arm/mm/proc-v7m.S | |||
@@ -132,6 +132,40 @@ ENDPROC(__v7m_setup) | |||
132 | 132 | ||
133 | .section ".proc.info.init", #alloc | 133 | .section ".proc.info.init", #alloc |
134 | 134 | ||
135 | .macro __v7m_proc name, initfunc, cache_fns = nop_cache_fns, hwcaps = 0, proc_fns = v7m_processor_functions | ||
136 | .long 0 /* proc_info_list.__cpu_mm_mmu_flags */ | ||
137 | .long 0 /* proc_info_list.__cpu_io_mmu_flags */ | ||
138 | initfn \initfunc, \name | ||
139 | .long cpu_arch_name | ||
140 | .long cpu_elf_name | ||
141 | .long HWCAP_HALF | HWCAP_THUMB | HWCAP_FAST_MULT | \hwcaps | ||
142 | .long cpu_v7m_name | ||
143 | .long \proc_fns | ||
144 | .long 0 /* proc_info_list.tlb */ | ||
145 | .long 0 /* proc_info_list.user */ | ||
146 | .long \cache_fns | ||
147 | .endm | ||
148 | |||
149 | /* | ||
150 | * Match ARM Cortex-M4 processor. | ||
151 | */ | ||
152 | .type __v7m_cm4_proc_info, #object | ||
153 | __v7m_cm4_proc_info: | ||
154 | .long 0x410fc240 /* ARM Cortex-M4 0xC24 */ | ||
155 | .long 0xff0ffff0 /* Mask off revision, patch release */ | ||
156 | __v7m_proc __v7m_cm4_proc_info, __v7m_setup, hwcaps = HWCAP_EDSP | ||
157 | .size __v7m_cm4_proc_info, . - __v7m_cm4_proc_info | ||
158 | |||
159 | /* | ||
160 | * Match ARM Cortex-M3 processor. | ||
161 | */ | ||
162 | .type __v7m_cm3_proc_info, #object | ||
163 | __v7m_cm3_proc_info: | ||
164 | .long 0x410fc230 /* ARM Cortex-M3 0xC23 */ | ||
165 | .long 0xff0ffff0 /* Mask off revision, patch release */ | ||
166 | __v7m_proc __v7m_cm3_proc_info, __v7m_setup | ||
167 | .size __v7m_cm3_proc_info, . - __v7m_cm3_proc_info | ||
168 | |||
135 | /* | 169 | /* |
136 | * Match any ARMv7-M processor core. | 170 | * Match any ARMv7-M processor core. |
137 | */ | 171 | */ |
@@ -139,16 +173,6 @@ ENDPROC(__v7m_setup) | |||
139 | __v7m_proc_info: | 173 | __v7m_proc_info: |
140 | .long 0x000f0000 @ Required ID value | 174 | .long 0x000f0000 @ Required ID value |
141 | .long 0x000f0000 @ Mask for ID | 175 | .long 0x000f0000 @ Mask for ID |
142 | .long 0 @ proc_info_list.__cpu_mm_mmu_flags | 176 | __v7m_proc __v7m_proc_info, __v7m_setup |
143 | .long 0 @ proc_info_list.__cpu_io_mmu_flags | ||
144 | initfn __v7m_setup, __v7m_proc_info @ proc_info_list.__cpu_flush | ||
145 | .long cpu_arch_name | ||
146 | .long cpu_elf_name | ||
147 | .long HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT | ||
148 | .long cpu_v7m_name | ||
149 | .long v7m_processor_functions @ proc_info_list.proc | ||
150 | .long 0 @ proc_info_list.tlb | ||
151 | .long 0 @ proc_info_list.user | ||
152 | .long nop_cache_fns @ proc_info_list.cache | ||
153 | .size __v7m_proc_info, . - __v7m_proc_info | 177 | .size __v7m_proc_info, . - __v7m_proc_info |
154 | 178 | ||