Skip to content

Commit fa5ce3d

Browse files
Robert Richterwildea01
authored andcommitted
arm64: errata: Provide macro for major and minor cpu revisions
Definition of cpu ranges are hard to read if the cpu variant is not zero. Provide MIDR_CPU_VAR_REV() macro to describe the full hardware revision of a cpu including variant and (minor) revision. Signed-off-by: Robert Richter <rrichter@cavium.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
1 parent eac8017 commit fa5ce3d

File tree

3 files changed

+15
-11
lines changed

3 files changed

+15
-11
lines changed

arch/arm64/include/asm/cputype.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@
5656
(0xf << MIDR_ARCHITECTURE_SHIFT) | \
5757
((partnum) << MIDR_PARTNUM_SHIFT))
5858

59+
#define MIDR_CPU_VAR_REV(var, rev) \
60+
(((var) << MIDR_VARIANT_SHIFT) | (rev))
61+
5962
#define MIDR_CPU_MODEL_MASK (MIDR_IMPLEMENTOR_MASK | MIDR_PARTNUM_MASK | \
6063
MIDR_ARCHITECTURE_MASK)
6164

arch/arm64/kernel/cpu_errata.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,19 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
7979
/* Cortex-A57 r0p0 - r1p2 */
8080
.desc = "ARM erratum 832075",
8181
.capability = ARM64_WORKAROUND_DEVICE_LOAD_ACQUIRE,
82-
MIDR_RANGE(MIDR_CORTEX_A57, 0x00,
83-
(1 << MIDR_VARIANT_SHIFT) | 2),
82+
MIDR_RANGE(MIDR_CORTEX_A57,
83+
MIDR_CPU_VAR_REV(0, 0),
84+
MIDR_CPU_VAR_REV(1, 2)),
8485
},
8586
#endif
8687
#ifdef CONFIG_ARM64_ERRATUM_834220
8788
{
8889
/* Cortex-A57 r0p0 - r1p2 */
8990
.desc = "ARM erratum 834220",
9091
.capability = ARM64_WORKAROUND_834220,
91-
MIDR_RANGE(MIDR_CORTEX_A57, 0x00,
92-
(1 << MIDR_VARIANT_SHIFT) | 2),
92+
MIDR_RANGE(MIDR_CORTEX_A57,
93+
MIDR_CPU_VAR_REV(0, 0),
94+
MIDR_CPU_VAR_REV(1, 2)),
9395
},
9496
#endif
9597
#ifdef CONFIG_ARM64_ERRATUM_845719
@@ -113,8 +115,9 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
113115
/* Cavium ThunderX, T88 pass 1.x - 2.1 */
114116
.desc = "Cavium erratum 27456",
115117
.capability = ARM64_WORKAROUND_CAVIUM_27456,
116-
MIDR_RANGE(MIDR_THUNDERX, 0x00,
117-
(1 << MIDR_VARIANT_SHIFT) | 1),
118+
MIDR_RANGE(MIDR_THUNDERX,
119+
MIDR_CPU_VAR_REV(0, 0),
120+
MIDR_CPU_VAR_REV(1, 1)),
118121
},
119122
{
120123
/* Cavium ThunderX, T81 pass 1.0 */

arch/arm64/kernel/cpufeature.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -730,13 +730,11 @@ static bool has_useable_gicv3_cpuif(const struct arm64_cpu_capabilities *entry,
730730
static bool has_no_hw_prefetch(const struct arm64_cpu_capabilities *entry, int __unused)
731731
{
732732
u32 midr = read_cpuid_id();
733-
u32 rv_min, rv_max;
734733

735734
/* Cavium ThunderX pass 1.x and 2.x */
736-
rv_min = 0;
737-
rv_max = (1 << MIDR_VARIANT_SHIFT) | MIDR_REVISION_MASK;
738-
739-
return MIDR_IS_CPU_MODEL_RANGE(midr, MIDR_THUNDERX, rv_min, rv_max);
735+
return MIDR_IS_CPU_MODEL_RANGE(midr, MIDR_THUNDERX,
736+
MIDR_CPU_VAR_REV(0, 0),
737+
MIDR_CPU_VAR_REV(1, MIDR_REVISION_MASK));
740738
}
741739

742740
static bool runs_at_el2(const struct arm64_cpu_capabilities *entry, int __unused)

0 commit comments

Comments
 (0)