.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-only */ |
---|
1 | 2 | /* |
---|
2 | 3 | * Copyright (C) 2012 ARM Ltd. |
---|
3 | | - * |
---|
4 | | - * This program is free software; you can redistribute it and/or modify |
---|
5 | | - * it under the terms of the GNU General Public License version 2 as |
---|
6 | | - * published by the Free Software Foundation. |
---|
7 | | - * |
---|
8 | | - * This program is distributed in the hope that it will be useful, |
---|
9 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
10 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
11 | | - * GNU General Public License for more details. |
---|
12 | | - * |
---|
13 | | - * You should have received a copy of the GNU General Public License |
---|
14 | | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
---|
15 | 4 | */ |
---|
16 | 5 | #ifndef __ASM_CPUTYPE_H |
---|
17 | 6 | #define __ASM_CPUTYPE_H |
---|
.. | .. |
---|
52 | 41 | (((midr) & MIDR_IMPLEMENTOR_MASK) >> MIDR_IMPLEMENTOR_SHIFT) |
---|
53 | 42 | |
---|
54 | 43 | #define MIDR_CPU_MODEL(imp, partnum) \ |
---|
55 | | - (((imp) << MIDR_IMPLEMENTOR_SHIFT) | \ |
---|
| 44 | + ((_AT(u32, imp) << MIDR_IMPLEMENTOR_SHIFT) | \ |
---|
56 | 45 | (0xf << MIDR_ARCHITECTURE_SHIFT) | \ |
---|
57 | 46 | ((partnum) << MIDR_PARTNUM_SHIFT)) |
---|
58 | 47 | |
---|
.. | .. |
---|
68 | 57 | #define ARM_CPU_IMP_BRCM 0x42 |
---|
69 | 58 | #define ARM_CPU_IMP_QCOM 0x51 |
---|
70 | 59 | #define ARM_CPU_IMP_NVIDIA 0x4E |
---|
| 60 | +#define ARM_CPU_IMP_FUJITSU 0x46 |
---|
71 | 61 | #define ARM_CPU_IMP_HISI 0x48 |
---|
| 62 | +#define ARM_CPU_IMP_APPLE 0x61 |
---|
| 63 | +#define ARM_CPU_IMP_AMPERE 0xC0 |
---|
72 | 64 | |
---|
73 | 65 | #define ARM_CPU_PART_AEM_V8 0xD0F |
---|
74 | 66 | #define ARM_CPU_PART_FOUNDATION 0xD00 |
---|
.. | .. |
---|
81 | 73 | #define ARM_CPU_PART_CORTEX_A55 0xD05 |
---|
82 | 74 | #define ARM_CPU_PART_CORTEX_A76 0xD0B |
---|
83 | 75 | #define ARM_CPU_PART_NEOVERSE_N1 0xD0C |
---|
| 76 | +#define ARM_CPU_PART_CORTEX_A77 0xD0D |
---|
| 77 | +#define ARM_CPU_PART_NEOVERSE_V1 0xD40 |
---|
| 78 | +#define ARM_CPU_PART_CORTEX_A78 0xD41 |
---|
| 79 | +#define ARM_CPU_PART_CORTEX_A78AE 0xD42 |
---|
| 80 | +#define ARM_CPU_PART_CORTEX_X1 0xD44 |
---|
| 81 | +#define ARM_CPU_PART_CORTEX_A510 0xD46 |
---|
| 82 | +#define ARM_CPU_PART_CORTEX_A520 0xD80 |
---|
| 83 | +#define ARM_CPU_PART_CORTEX_A710 0xD47 |
---|
| 84 | +#define ARM_CPU_PART_CORTEX_X2 0xD48 |
---|
| 85 | +#define ARM_CPU_PART_NEOVERSE_N2 0xD49 |
---|
| 86 | +#define ARM_CPU_PART_CORTEX_A78C 0xD4B |
---|
84 | 87 | |
---|
85 | 88 | #define APM_CPU_PART_POTENZA 0x000 |
---|
86 | 89 | |
---|
.. | .. |
---|
89 | 92 | #define CAVIUM_CPU_PART_THUNDERX_83XX 0x0A3 |
---|
90 | 93 | #define CAVIUM_CPU_PART_THUNDERX2 0x0AF |
---|
91 | 94 | |
---|
| 95 | +#define BRCM_CPU_PART_BRAHMA_B53 0x100 |
---|
92 | 96 | #define BRCM_CPU_PART_VULCAN 0x516 |
---|
93 | 97 | |
---|
94 | 98 | #define QCOM_CPU_PART_FALKOR_V1 0x800 |
---|
95 | 99 | #define QCOM_CPU_PART_FALKOR 0xC00 |
---|
96 | 100 | #define QCOM_CPU_PART_KRYO 0x200 |
---|
| 101 | +#define QCOM_CPU_PART_KRYO_2XX_GOLD 0x800 |
---|
| 102 | +#define QCOM_CPU_PART_KRYO_2XX_SILVER 0x801 |
---|
| 103 | +#define QCOM_CPU_PART_KRYO_3XX_SILVER 0x803 |
---|
| 104 | +#define QCOM_CPU_PART_KRYO_4XX_GOLD 0x804 |
---|
| 105 | +#define QCOM_CPU_PART_KRYO_4XX_SILVER 0x805 |
---|
97 | 106 | |
---|
98 | 107 | #define NVIDIA_CPU_PART_DENVER 0x003 |
---|
99 | 108 | #define NVIDIA_CPU_PART_CARMEL 0x004 |
---|
100 | 109 | |
---|
| 110 | +#define FUJITSU_CPU_PART_A64FX 0x001 |
---|
| 111 | + |
---|
101 | 112 | #define HISI_CPU_PART_TSV110 0xD01 |
---|
| 113 | + |
---|
| 114 | +#define APPLE_CPU_PART_M1_ICESTORM 0x022 |
---|
| 115 | +#define APPLE_CPU_PART_M1_FIRESTORM 0x023 |
---|
| 116 | + |
---|
| 117 | +#define AMPERE_CPU_PART_AMPERE1 0xAC3 |
---|
102 | 118 | |
---|
103 | 119 | #define MIDR_CORTEX_A53 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A53) |
---|
104 | 120 | #define MIDR_CORTEX_A57 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A57) |
---|
.. | .. |
---|
107 | 123 | #define MIDR_CORTEX_A75 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A75) |
---|
108 | 124 | #define MIDR_CORTEX_A35 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A35) |
---|
109 | 125 | #define MIDR_CORTEX_A55 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A55) |
---|
110 | | -#define MIDR_CORTEX_A76 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A76) |
---|
| 126 | +#define MIDR_CORTEX_A76 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A76) |
---|
111 | 127 | #define MIDR_NEOVERSE_N1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_N1) |
---|
| 128 | +#define MIDR_CORTEX_A77 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A77) |
---|
| 129 | +#define MIDR_NEOVERSE_V1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V1) |
---|
| 130 | +#define MIDR_CORTEX_A78 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78) |
---|
| 131 | +#define MIDR_CORTEX_A78AE MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78AE) |
---|
| 132 | +#define MIDR_CORTEX_X1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X1) |
---|
| 133 | +#define MIDR_CORTEX_A510 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A510) |
---|
| 134 | +#define MIDR_CORTEX_A520 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A520) |
---|
| 135 | +#define MIDR_CORTEX_A710 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A710) |
---|
| 136 | +#define MIDR_CORTEX_X2 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X2) |
---|
| 137 | +#define MIDR_NEOVERSE_N2 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_N2) |
---|
| 138 | +#define MIDR_CORTEX_A78C MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78C) |
---|
112 | 139 | #define MIDR_THUNDERX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX) |
---|
113 | 140 | #define MIDR_THUNDERX_81XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_81XX) |
---|
114 | 141 | #define MIDR_THUNDERX_83XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_83XX) |
---|
115 | 142 | #define MIDR_CAVIUM_THUNDERX2 MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX2) |
---|
| 143 | +#define MIDR_BRAHMA_B53 MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_BRAHMA_B53) |
---|
116 | 144 | #define MIDR_BRCM_VULCAN MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_VULCAN) |
---|
117 | 145 | #define MIDR_QCOM_FALKOR_V1 MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_FALKOR_V1) |
---|
118 | 146 | #define MIDR_QCOM_FALKOR MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_FALKOR) |
---|
119 | 147 | #define MIDR_QCOM_KRYO MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO) |
---|
| 148 | +#define MIDR_QCOM_KRYO_2XX_GOLD MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_2XX_GOLD) |
---|
| 149 | +#define MIDR_QCOM_KRYO_2XX_SILVER MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_2XX_SILVER) |
---|
| 150 | +#define MIDR_QCOM_KRYO_3XX_SILVER MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_3XX_SILVER) |
---|
| 151 | +#define MIDR_QCOM_KRYO_4XX_GOLD MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_4XX_GOLD) |
---|
| 152 | +#define MIDR_QCOM_KRYO_4XX_SILVER MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_KRYO_4XX_SILVER) |
---|
120 | 153 | #define MIDR_NVIDIA_DENVER MIDR_CPU_MODEL(ARM_CPU_IMP_NVIDIA, NVIDIA_CPU_PART_DENVER) |
---|
121 | 154 | #define MIDR_NVIDIA_CARMEL MIDR_CPU_MODEL(ARM_CPU_IMP_NVIDIA, NVIDIA_CPU_PART_CARMEL) |
---|
| 155 | +#define MIDR_FUJITSU_A64FX MIDR_CPU_MODEL(ARM_CPU_IMP_FUJITSU, FUJITSU_CPU_PART_A64FX) |
---|
122 | 156 | #define MIDR_HISI_TSV110 MIDR_CPU_MODEL(ARM_CPU_IMP_HISI, HISI_CPU_PART_TSV110) |
---|
| 157 | +#define MIDR_APPLE_M1_ICESTORM MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_ICESTORM) |
---|
| 158 | +#define MIDR_APPLE_M1_FIRESTORM MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_FIRESTORM) |
---|
| 159 | +#define MIDR_AMPERE1 MIDR_CPU_MODEL(ARM_CPU_IMP_AMPERE, AMPERE_CPU_PART_AMPERE1) |
---|
| 160 | + |
---|
| 161 | +/* Fujitsu Erratum 010001 affects A64FX 1.0 and 1.1, (v0r0 and v1r0) */ |
---|
| 162 | +#define MIDR_FUJITSU_ERRATUM_010001 MIDR_FUJITSU_A64FX |
---|
| 163 | +#define MIDR_FUJITSU_ERRATUM_010001_MASK (~MIDR_CPU_VAR_REV(1, 0)) |
---|
| 164 | +#define TCR_CLEAR_FUJITSU_ERRATUM_010001 (TCR_NFD1 | TCR_NFD0) |
---|
123 | 165 | |
---|
124 | 166 | #ifndef __ASSEMBLY__ |
---|
125 | 167 | |
---|
.. | .. |
---|
149 | 191 | .rv_max = MIDR_CPU_VAR_REV(v_max, r_max), \ |
---|
150 | 192 | } |
---|
151 | 193 | |
---|
| 194 | +#define MIDR_REV_RANGE(m, v, r_min, r_max) MIDR_RANGE(m, v, r_min, v, r_max) |
---|
| 195 | +#define MIDR_REV(m, v, r) MIDR_RANGE(m, v, r, v, r) |
---|
152 | 196 | #define MIDR_ALL_VERSIONS(m) MIDR_RANGE(m, 0, 0, 0xf, 0xf) |
---|
153 | 197 | |
---|
154 | 198 | static inline bool midr_is_cpu_model_range(u32 midr, u32 model, u32 rv_min, |
---|