1*2b54f0dbSXin Li #pragma once
2*2b54f0dbSXin Li #include <stdint.h>
3*2b54f0dbSXin Li
4*2b54f0dbSXin Li
5*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_IMPLEMENTER_MASK UINT32_C(0xFF000000)
6*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_VARIANT_MASK UINT32_C(0x00F00000)
7*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_ARCHITECTURE_MASK UINT32_C(0x000F0000)
8*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_PART_MASK UINT32_C(0x0000FFF0)
9*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_REVISION_MASK UINT32_C(0x0000000F)
10*2b54f0dbSXin Li
11*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_IMPLEMENTER_OFFSET 24
12*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_VARIANT_OFFSET 20
13*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_ARCHITECTURE_OFFSET 16
14*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_PART_OFFSET 4
15*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_REVISION_OFFSET 0
16*2b54f0dbSXin Li
17*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_ARM1156 UINT32_C(0x410FB560)
18*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_CORTEX_A7 UINT32_C(0x410FC070)
19*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_CORTEX_A9 UINT32_C(0x410FC090)
20*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_CORTEX_A15 UINT32_C(0x410FC0F0)
21*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_CORTEX_A17 UINT32_C(0x410FC0E0)
22*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_CORTEX_A35 UINT32_C(0x410FD040)
23*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_CORTEX_A53 UINT32_C(0x410FD030)
24*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_CORTEX_A55 UINT32_C(0x410FD050)
25*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_CORTEX_A57 UINT32_C(0x410FD070)
26*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_CORTEX_A72 UINT32_C(0x410FD080)
27*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_CORTEX_A73 UINT32_C(0x410FD090)
28*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_CORTEX_A75 UINT32_C(0x410FD0A0)
29*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_KRYO280_GOLD UINT32_C(0x51AF8001)
30*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_KRYO280_SILVER UINT32_C(0x51AF8014)
31*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_KRYO385_GOLD UINT32_C(0x518F802D)
32*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_KRYO385_SILVER UINT32_C(0x518F803C)
33*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_KRYO_SILVER_821 UINT32_C(0x510F2010)
34*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_KRYO_GOLD UINT32_C(0x510F2050)
35*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_KRYO_SILVER_820 UINT32_C(0x510F2110)
36*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_EXYNOS_M1_M2 UINT32_C(0x530F0010)
37*2b54f0dbSXin Li #define CPUINFO_ARM_MIDR_DENVER2 UINT32_C(0x4E0F0030)
38*2b54f0dbSXin Li
midr_set_implementer(uint32_t midr,uint32_t implementer)39*2b54f0dbSXin Li inline static uint32_t midr_set_implementer(uint32_t midr, uint32_t implementer) {
40*2b54f0dbSXin Li return (midr & ~CPUINFO_ARM_MIDR_IMPLEMENTER_MASK) |
41*2b54f0dbSXin Li ((implementer << CPUINFO_ARM_MIDR_IMPLEMENTER_OFFSET) & CPUINFO_ARM_MIDR_IMPLEMENTER_MASK);
42*2b54f0dbSXin Li }
43*2b54f0dbSXin Li
midr_set_variant(uint32_t midr,uint32_t variant)44*2b54f0dbSXin Li inline static uint32_t midr_set_variant(uint32_t midr, uint32_t variant) {
45*2b54f0dbSXin Li return (midr & ~CPUINFO_ARM_MIDR_VARIANT_MASK) |
46*2b54f0dbSXin Li ((variant << CPUINFO_ARM_MIDR_VARIANT_OFFSET) & CPUINFO_ARM_MIDR_VARIANT_MASK);
47*2b54f0dbSXin Li }
48*2b54f0dbSXin Li
midr_set_architecture(uint32_t midr,uint32_t architecture)49*2b54f0dbSXin Li inline static uint32_t midr_set_architecture(uint32_t midr, uint32_t architecture) {
50*2b54f0dbSXin Li return (midr & ~CPUINFO_ARM_MIDR_ARCHITECTURE_MASK) |
51*2b54f0dbSXin Li ((architecture << CPUINFO_ARM_MIDR_ARCHITECTURE_OFFSET) & CPUINFO_ARM_MIDR_ARCHITECTURE_MASK);
52*2b54f0dbSXin Li }
53*2b54f0dbSXin Li
midr_set_part(uint32_t midr,uint32_t part)54*2b54f0dbSXin Li inline static uint32_t midr_set_part(uint32_t midr, uint32_t part) {
55*2b54f0dbSXin Li return (midr & ~CPUINFO_ARM_MIDR_PART_MASK) |
56*2b54f0dbSXin Li ((part << CPUINFO_ARM_MIDR_PART_OFFSET) & CPUINFO_ARM_MIDR_PART_MASK);
57*2b54f0dbSXin Li }
58*2b54f0dbSXin Li
midr_set_revision(uint32_t midr,uint32_t revision)59*2b54f0dbSXin Li inline static uint32_t midr_set_revision(uint32_t midr, uint32_t revision) {
60*2b54f0dbSXin Li return (midr & ~CPUINFO_ARM_MIDR_REVISION_MASK) |
61*2b54f0dbSXin Li ((revision << CPUINFO_ARM_MIDR_REVISION_OFFSET) & CPUINFO_ARM_MIDR_REVISION_MASK);
62*2b54f0dbSXin Li }
63*2b54f0dbSXin Li
midr_get_variant(uint32_t midr)64*2b54f0dbSXin Li inline static uint32_t midr_get_variant(uint32_t midr) {
65*2b54f0dbSXin Li return (midr & CPUINFO_ARM_MIDR_VARIANT_MASK) >> CPUINFO_ARM_MIDR_VARIANT_OFFSET;
66*2b54f0dbSXin Li }
67*2b54f0dbSXin Li
midr_get_implementer(uint32_t midr)68*2b54f0dbSXin Li inline static uint32_t midr_get_implementer(uint32_t midr) {
69*2b54f0dbSXin Li return (midr & CPUINFO_ARM_MIDR_IMPLEMENTER_MASK) >> CPUINFO_ARM_MIDR_IMPLEMENTER_OFFSET;
70*2b54f0dbSXin Li }
71*2b54f0dbSXin Li
midr_get_part(uint32_t midr)72*2b54f0dbSXin Li inline static uint32_t midr_get_part(uint32_t midr) {
73*2b54f0dbSXin Li return (midr & CPUINFO_ARM_MIDR_PART_MASK) >> CPUINFO_ARM_MIDR_PART_OFFSET;
74*2b54f0dbSXin Li }
75*2b54f0dbSXin Li
midr_get_revision(uint32_t midr)76*2b54f0dbSXin Li inline static uint32_t midr_get_revision(uint32_t midr) {
77*2b54f0dbSXin Li return (midr & CPUINFO_ARM_MIDR_REVISION_MASK) >> CPUINFO_ARM_MIDR_REVISION_OFFSET;
78*2b54f0dbSXin Li }
79*2b54f0dbSXin Li
midr_copy_implementer(uint32_t midr,uint32_t other_midr)80*2b54f0dbSXin Li inline static uint32_t midr_copy_implementer(uint32_t midr, uint32_t other_midr) {
81*2b54f0dbSXin Li return (midr & ~CPUINFO_ARM_MIDR_IMPLEMENTER_MASK) | (other_midr & CPUINFO_ARM_MIDR_IMPLEMENTER_MASK);
82*2b54f0dbSXin Li }
83*2b54f0dbSXin Li
midr_copy_variant(uint32_t midr,uint32_t other_midr)84*2b54f0dbSXin Li inline static uint32_t midr_copy_variant(uint32_t midr, uint32_t other_midr) {
85*2b54f0dbSXin Li return (midr & ~CPUINFO_ARM_MIDR_VARIANT_MASK) | (other_midr & CPUINFO_ARM_MIDR_VARIANT_MASK);
86*2b54f0dbSXin Li }
87*2b54f0dbSXin Li
midr_copy_architecture(uint32_t midr,uint32_t other_midr)88*2b54f0dbSXin Li inline static uint32_t midr_copy_architecture(uint32_t midr, uint32_t other_midr) {
89*2b54f0dbSXin Li return (midr & ~CPUINFO_ARM_MIDR_ARCHITECTURE_MASK) | (other_midr & CPUINFO_ARM_MIDR_ARCHITECTURE_MASK);
90*2b54f0dbSXin Li }
91*2b54f0dbSXin Li
midr_copy_part(uint32_t midr,uint32_t other_midr)92*2b54f0dbSXin Li inline static uint32_t midr_copy_part(uint32_t midr, uint32_t other_midr) {
93*2b54f0dbSXin Li return (midr & ~CPUINFO_ARM_MIDR_PART_MASK) | (other_midr & CPUINFO_ARM_MIDR_PART_MASK);
94*2b54f0dbSXin Li }
95*2b54f0dbSXin Li
midr_copy_revision(uint32_t midr,uint32_t other_midr)96*2b54f0dbSXin Li inline static uint32_t midr_copy_revision(uint32_t midr, uint32_t other_midr) {
97*2b54f0dbSXin Li return (midr & ~CPUINFO_ARM_MIDR_REVISION_MASK) | (other_midr & CPUINFO_ARM_MIDR_REVISION_MASK);
98*2b54f0dbSXin Li }
99*2b54f0dbSXin Li
midr_is_arm1156(uint32_t midr)100*2b54f0dbSXin Li inline static bool midr_is_arm1156(uint32_t midr) {
101*2b54f0dbSXin Li const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK;
102*2b54f0dbSXin Li return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_ARM1156 & uarch_mask);
103*2b54f0dbSXin Li }
104*2b54f0dbSXin Li
midr_is_arm11(uint32_t midr)105*2b54f0dbSXin Li inline static bool midr_is_arm11(uint32_t midr) {
106*2b54f0dbSXin Li return (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | 0x0000F000)) == UINT32_C(0x4100B000);
107*2b54f0dbSXin Li }
108*2b54f0dbSXin Li
midr_is_cortex_a9(uint32_t midr)109*2b54f0dbSXin Li inline static bool midr_is_cortex_a9(uint32_t midr) {
110*2b54f0dbSXin Li const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK;
111*2b54f0dbSXin Li return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_CORTEX_A9 & uarch_mask);
112*2b54f0dbSXin Li }
113*2b54f0dbSXin Li
midr_is_scorpion(uint32_t midr)114*2b54f0dbSXin Li inline static bool midr_is_scorpion(uint32_t midr) {
115*2b54f0dbSXin Li switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) {
116*2b54f0dbSXin Li case UINT32_C(0x510000F0):
117*2b54f0dbSXin Li case UINT32_C(0x510002D0):
118*2b54f0dbSXin Li return true;
119*2b54f0dbSXin Li default:
120*2b54f0dbSXin Li return false;
121*2b54f0dbSXin Li }
122*2b54f0dbSXin Li }
123*2b54f0dbSXin Li
midr_is_krait(uint32_t midr)124*2b54f0dbSXin Li inline static bool midr_is_krait(uint32_t midr) {
125*2b54f0dbSXin Li switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) {
126*2b54f0dbSXin Li case UINT32_C(0x510004D0):
127*2b54f0dbSXin Li case UINT32_C(0x510006F0):
128*2b54f0dbSXin Li return true;
129*2b54f0dbSXin Li default:
130*2b54f0dbSXin Li return false;
131*2b54f0dbSXin Li }
132*2b54f0dbSXin Li }
133*2b54f0dbSXin Li
midr_is_cortex_a53(uint32_t midr)134*2b54f0dbSXin Li inline static bool midr_is_cortex_a53(uint32_t midr) {
135*2b54f0dbSXin Li const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK;
136*2b54f0dbSXin Li return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_CORTEX_A53 & uarch_mask);
137*2b54f0dbSXin Li }
138*2b54f0dbSXin Li
midr_is_qualcomm_cortex_a53_silver(uint32_t midr)139*2b54f0dbSXin Li inline static bool midr_is_qualcomm_cortex_a53_silver(uint32_t midr) {
140*2b54f0dbSXin Li const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK;
141*2b54f0dbSXin Li return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_KRYO280_SILVER & uarch_mask);
142*2b54f0dbSXin Li }
143*2b54f0dbSXin Li
midr_is_qualcomm_cortex_a55_silver(uint32_t midr)144*2b54f0dbSXin Li inline static bool midr_is_qualcomm_cortex_a55_silver(uint32_t midr) {
145*2b54f0dbSXin Li const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK;
146*2b54f0dbSXin Li return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_KRYO385_SILVER & uarch_mask);
147*2b54f0dbSXin Li }
148*2b54f0dbSXin Li
midr_is_kryo280_gold(uint32_t midr)149*2b54f0dbSXin Li inline static bool midr_is_kryo280_gold(uint32_t midr) {
150*2b54f0dbSXin Li const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK;
151*2b54f0dbSXin Li return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_KRYO280_GOLD & uarch_mask);
152*2b54f0dbSXin Li }
153*2b54f0dbSXin Li
midr_is_kryo_silver(uint32_t midr)154*2b54f0dbSXin Li inline static bool midr_is_kryo_silver(uint32_t midr) {
155*2b54f0dbSXin Li const uint32_t uarch_mask =
156*2b54f0dbSXin Li CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_ARCHITECTURE_MASK | CPUINFO_ARM_MIDR_PART_MASK;
157*2b54f0dbSXin Li switch (midr & uarch_mask) {
158*2b54f0dbSXin Li case CPUINFO_ARM_MIDR_KRYO_SILVER_820:
159*2b54f0dbSXin Li case CPUINFO_ARM_MIDR_KRYO_SILVER_821:
160*2b54f0dbSXin Li return true;
161*2b54f0dbSXin Li default:
162*2b54f0dbSXin Li return false;
163*2b54f0dbSXin Li }
164*2b54f0dbSXin Li }
165*2b54f0dbSXin Li
midr_is_kryo_gold(uint32_t midr)166*2b54f0dbSXin Li inline static bool midr_is_kryo_gold(uint32_t midr) {
167*2b54f0dbSXin Li const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK;
168*2b54f0dbSXin Li return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_KRYO_GOLD & uarch_mask);
169*2b54f0dbSXin Li }
170*2b54f0dbSXin Li
midr_score_core(uint32_t midr)171*2b54f0dbSXin Li inline static uint32_t midr_score_core(uint32_t midr) {
172*2b54f0dbSXin Li const uint32_t core_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK;
173*2b54f0dbSXin Li switch (midr & core_mask) {
174*2b54f0dbSXin Li case UINT32_C(0x53000030): /* Exynos M4 */
175*2b54f0dbSXin Li case UINT32_C(0x53000040): /* Exynos M5 */
176*2b54f0dbSXin Li case UINT32_C(0x4100D440): /* Cortex-X1 */
177*2b54f0dbSXin Li case UINT32_C(0x4100D480): /* Cortex-X2 */
178*2b54f0dbSXin Li /* These cores are in big role w.r.t Cortex-A75/-A76/-A77/-A78/-A710 */
179*2b54f0dbSXin Li return 6;
180*2b54f0dbSXin Li case UINT32_C(0x4100D080): /* Cortex-A72 */
181*2b54f0dbSXin Li case UINT32_C(0x4100D090): /* Cortex-A73 */
182*2b54f0dbSXin Li case UINT32_C(0x4100D0A0): /* Cortex-A75 */
183*2b54f0dbSXin Li case UINT32_C(0x4100D0B0): /* Cortex-A76 */
184*2b54f0dbSXin Li case UINT32_C(0x4100D0D0): /* Cortex-A77 */
185*2b54f0dbSXin Li case UINT32_C(0x4100D0E0): /* Cortex-A76AE */
186*2b54f0dbSXin Li case UINT32_C(0x4100D410): /* Cortex-A78 */
187*2b54f0dbSXin Li case UINT32_C(0x4100D470): /* Cortex-A710 */
188*2b54f0dbSXin Li case UINT32_C(0x4800D400): /* Cortex-A76 (HiSilicon) */
189*2b54f0dbSXin Li case UINT32_C(0x4E000030): /* Denver 2 */
190*2b54f0dbSXin Li case UINT32_C(0x51002050): /* Kryo Gold */
191*2b54f0dbSXin Li case UINT32_C(0x51008000): /* Kryo 260 / 280 Gold */
192*2b54f0dbSXin Li case UINT32_C(0x51008020): /* Kryo 385 Gold */
193*2b54f0dbSXin Li case UINT32_C(0x51008040): /* Kryo 485 Gold / Gold Prime */
194*2b54f0dbSXin Li case UINT32_C(0x53000010): /* Exynos M1 and Exynos M2 */
195*2b54f0dbSXin Li case UINT32_C(0x53000020): /* Exynos M3 */
196*2b54f0dbSXin Li #if CPUINFO_ARCH_ARM
197*2b54f0dbSXin Li case UINT32_C(0x4100C0F0): /* Cortex-A15 */
198*2b54f0dbSXin Li case UINT32_C(0x4100C0E0): /* Cortex-A17 */
199*2b54f0dbSXin Li case UINT32_C(0x4100C0D0): /* Rockchip RK3288 cores */
200*2b54f0dbSXin Li case UINT32_C(0x4100C0C0): /* Cortex-A12 */
201*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_ARM */
202*2b54f0dbSXin Li /* These cores are always in big role */
203*2b54f0dbSXin Li return 5;
204*2b54f0dbSXin Li case UINT32_C(0x4100D070): /* Cortex-A57 */
205*2b54f0dbSXin Li /* Cortex-A57 can be in LITTLE role w.r.t. Denver 2, or in big role w.r.t. Cortex-A53 */
206*2b54f0dbSXin Li return 4;
207*2b54f0dbSXin Li #if CPUINFO_ARCH_ARM64
208*2b54f0dbSXin Li case UINT32_C(0x4100D060): /* Cortex-A65 */
209*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_ARM64 */
210*2b54f0dbSXin Li case UINT32_C(0x4100D030): /* Cortex-A53 */
211*2b54f0dbSXin Li case UINT32_C(0x4100D050): /* Cortex-A55 */
212*2b54f0dbSXin Li case UINT32_C(0x4100D460): /* Cortex-A510 */
213*2b54f0dbSXin Li /* Cortex-A53 is usually in LITTLE role, but can be in big role w.r.t. Cortex-A35 */
214*2b54f0dbSXin Li return 2;
215*2b54f0dbSXin Li case UINT32_C(0x4100D040): /* Cortex-A35 */
216*2b54f0dbSXin Li #if CPUINFO_ARCH_ARM
217*2b54f0dbSXin Li case UINT32_C(0x4100C070): /* Cortex-A7 */
218*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_ARM */
219*2b54f0dbSXin Li case UINT32_C(0x51008050): /* Kryo 485 Silver */
220*2b54f0dbSXin Li case UINT32_C(0x51008030): /* Kryo 385 Silver */
221*2b54f0dbSXin Li case UINT32_C(0x51008010): /* Kryo 260 / 280 Silver */
222*2b54f0dbSXin Li case UINT32_C(0x51002110): /* Kryo Silver (Snapdragon 820) */
223*2b54f0dbSXin Li case UINT32_C(0x51002010): /* Kryo Silver (Snapdragon 821) */
224*2b54f0dbSXin Li /* These cores are always in LITTLE core */
225*2b54f0dbSXin Li return 1;
226*2b54f0dbSXin Li default:
227*2b54f0dbSXin Li /*
228*2b54f0dbSXin Li * Unknown cores, or cores which do not have big/LITTLE roles.
229*2b54f0dbSXin Li * To be future-proof w.r.t. cores not yet recognized in cpuinfo, assume position between
230*2b54f0dbSXin Li * Cortex-A57/A72/A73/A75 and Cortex-A53/A55. Then at least future cores paired with
231*2b54f0dbSXin Li * one of these known cores will be properly scored.
232*2b54f0dbSXin Li */
233*2b54f0dbSXin Li return 3;
234*2b54f0dbSXin Li }
235*2b54f0dbSXin Li }
236*2b54f0dbSXin Li
midr_little_core_for_big(uint32_t midr)237*2b54f0dbSXin Li inline static uint32_t midr_little_core_for_big(uint32_t midr) {
238*2b54f0dbSXin Li const uint32_t core_mask =
239*2b54f0dbSXin Li CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_ARCHITECTURE_MASK | CPUINFO_ARM_MIDR_PART_MASK;
240*2b54f0dbSXin Li switch (midr & core_mask) {
241*2b54f0dbSXin Li case CPUINFO_ARM_MIDR_CORTEX_A75:
242*2b54f0dbSXin Li return CPUINFO_ARM_MIDR_CORTEX_A55;
243*2b54f0dbSXin Li case CPUINFO_ARM_MIDR_CORTEX_A73:
244*2b54f0dbSXin Li case CPUINFO_ARM_MIDR_CORTEX_A72:
245*2b54f0dbSXin Li case CPUINFO_ARM_MIDR_CORTEX_A57:
246*2b54f0dbSXin Li case CPUINFO_ARM_MIDR_EXYNOS_M1_M2:
247*2b54f0dbSXin Li return CPUINFO_ARM_MIDR_CORTEX_A53;
248*2b54f0dbSXin Li case CPUINFO_ARM_MIDR_CORTEX_A17:
249*2b54f0dbSXin Li case CPUINFO_ARM_MIDR_CORTEX_A15:
250*2b54f0dbSXin Li return CPUINFO_ARM_MIDR_CORTEX_A7;
251*2b54f0dbSXin Li case CPUINFO_ARM_MIDR_KRYO280_GOLD:
252*2b54f0dbSXin Li return CPUINFO_ARM_MIDR_KRYO280_SILVER;
253*2b54f0dbSXin Li case CPUINFO_ARM_MIDR_KRYO_GOLD:
254*2b54f0dbSXin Li return CPUINFO_ARM_MIDR_KRYO_SILVER_820;
255*2b54f0dbSXin Li case CPUINFO_ARM_MIDR_DENVER2:
256*2b54f0dbSXin Li return CPUINFO_ARM_MIDR_CORTEX_A57;
257*2b54f0dbSXin Li default:
258*2b54f0dbSXin Li return midr;
259*2b54f0dbSXin Li }
260*2b54f0dbSXin Li }
261