Page MenuHomeFreeBSD

D60624.diff
No OneTemporary

D60624.diff

Index: sys/arm64/arm64/identcpu.c
===================================================================
--- sys/arm64/arm64/identcpu.c
+++ sys/arm64/arm64/identcpu.c
@@ -2287,7 +2287,7 @@
* Present in r3p0 - r4p0
* Fixed in r4p1
*/
- return (midr_check_var_part_range(midr, CPU_IMPL_ARM,
+ return (midr_check_var_rev_range(midr, CPU_IMPL_ARM,
CPU_PART_NEOVERSE_N1, 3, 0, 4, 0) && CTR_DIC_VAL(ctr) != 0);
}
Index: sys/arm64/arm64/pmap.c
===================================================================
--- sys/arm64/arm64/pmap.c
+++ sys/arm64/arm64/pmap.c
@@ -1798,7 +1798,7 @@
}
/* Disable on Cortex-A510 for erratum 2051678 - r0p0 to r0p2 */
- if (midr_check_var_part_range(midr, CPU_IMPL_ARM, CPU_PART_CORTEX_A510,
+ if (midr_check_var_rev_range(midr, CPU_IMPL_ARM, CPU_PART_CORTEX_A510,
0, 0, 0, 2)) {
static u_int errata_id = 2051678;
@@ -1904,7 +1904,7 @@
* Present in r0p0 - r1p1
* Fixed in r1p2
*/
- if (midr_check_var_part_range(midr, CPU_IMPL_ARM, CPU_PART_CORTEX_A510,
+ if (midr_check_var_rev_range(midr, CPU_IMPL_ARM, CPU_PART_CORTEX_A510,
0, 0, 1, 1))
return (FEAT_DEFAULT_DISABLE);
Index: sys/arm64/include/cpu.h
===================================================================
--- sys/arm64/include/cpu.h
+++ sys/arm64/include/cpu.h
@@ -198,9 +198,14 @@
((mask) & CPU_ID_RAW((impl), (part), (var), (rev))))
#if !defined(__ASSEMBLER__)
+/*
+ * Check whether midr identifies the given implementer and part at a product
+ * revision rXpY from r(var_low)p(rev_low) to r(var_high)p(rev_high)
+ * inclusive. X is MIDR_EL1.Variant, and Y is MIDR_EL1.Revision.
+ */
static inline bool
-midr_check_var_part_range(u_int midr, u_int impl, u_int part, u_int var_low,
- u_int part_low, u_int var_high, u_int part_high)
+midr_check_var_rev_range(u_int midr, u_int impl, u_int part, u_int var_low,
+ u_int rev_low, u_int var_high, u_int rev_high)
{
/* Check for the correct part */
if (CPU_IMPL(midr) != impl || CPU_PART(midr) != part)
@@ -210,12 +215,12 @@
if (CPU_VAR(midr) < var_low || CPU_VAR(midr) > var_high)
return (false);
- /* If the variant is the low value, check if the part is high enough */
- if (CPU_VAR(midr) == var_low && CPU_PART(midr) < part_low)
+ /* If the variant is var_low, check if the revision is high enough */
+ if (CPU_VAR(midr) == var_low && CPU_REV(midr) < rev_low)
return (false);
- /* If the variant is the high value, check if the part is low enough */
- if (CPU_VAR(midr) == var_high && CPU_PART(midr) > part_high)
+ /* If the variant is var_high, check if the revision is low enough */
+ if (CPU_VAR(midr) == var_high && CPU_REV(midr) > rev_high)
return (false);
return (true);

File Metadata

Mime Type
text/plain
Expires
Tue, Oct 13, 2:58 PM (15 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40729547
Default Alt Text
D60624.diff (2 KB)

Event Timeline