Module Name:    src
Committed By:   mrg
Date:           Fri Oct 27 03:06:04 UTC 2023

Modified Files:
        src/sys/arch/x86/x86: errata.c

Log Message:
x86: add names for errata that don't have actual numbers

zenbleed is reported as "erratum 65535" currently, this adds a name
for it, and enables the name for any others as well.

pull logging into a function with a tag message.


To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/sys/arch/x86/x86/errata.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/x86/x86/errata.c
diff -u src/sys/arch/x86/x86/errata.c:1.33 src/sys/arch/x86/x86/errata.c:1.34
--- src/sys/arch/x86/x86/errata.c:1.33	Fri Jul 28 05:02:13 2023
+++ src/sys/arch/x86/x86/errata.c	Fri Oct 27 03:06:04 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: errata.c,v 1.33 2023/07/28 05:02:13 mrg Exp $	*/
+/*	$NetBSD: errata.c,v 1.34 2023/10/27 03:06:04 mrg Exp $	*/
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -47,7 +47,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: errata.c,v 1.33 2023/07/28 05:02:13 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: errata.c,v 1.34 2023/10/27 03:06:04 mrg Exp $");
 
 #include <sys/types.h>
 #include <sys/systm.h>
@@ -66,6 +66,7 @@ typedef struct errata {
 	const uint8_t	*e_set;
 	bool		(*e_act)(struct cpu_info *, struct errata *);
 	uint64_t	e_data2;
+	const char	*e_name;	/* use if e_num == 0 */
 } errata_t;
 
 /* These names match names from various AMD Errata/Revision Guides. */
@@ -248,7 +249,7 @@ static const uint8_t x86_errata_set15[] 
 	KB_A1, ML_A1, OINK
 };
 
-static const uint8_t x86_errata_set16[] = {
+static const uint8_t x86_errata_zen2[] = {
 	Rome_B0, Z2_XB, Z2_Ren, Z2_Luc, Z2_Mat, Z2_VG, Z2_Men, OINK
 };
 
@@ -262,21 +263,21 @@ static errata_t errata[] = {
 	 */
 	{
 		81, FALSE, MSR_DC_CFG, x86_errata_set5,
-		x86_errata_testmsr, DC_CFG_DIS_SMC_CHK_BUF
+		x86_errata_testmsr, DC_CFG_DIS_SMC_CHK_BUF, NULL
 	},
 	/*
 	 * 86: DRAM Data Masking Feature Can Cause ECC Failures
 	 */
 	{
 		86, FALSE, MSR_NB_CFG, x86_errata_set1,
-		x86_errata_testmsr, NB_CFG_DISDATMSK
+		x86_errata_testmsr, NB_CFG_DISDATMSK, NULL
 	},
 	/*
 	 * 89: Potential Deadlock With Locked Transactions
 	 */
 	{
 		89, FALSE, MSR_NB_CFG, x86_errata_set8,
-		x86_errata_testmsr, NB_CFG_DISIOREQLOCK
+		x86_errata_testmsr, NB_CFG_DISIOREQLOCK, NULL
 	},
 	/*
 	 * 94: Sequential Prefetch Feature May Cause Incorrect
@@ -284,7 +285,7 @@ static errata_t errata[] = {
 	 */
 	{
 		94, FALSE, MSR_IC_CFG, x86_errata_set1,
-		x86_errata_testmsr, IC_CFG_DIS_SEQ_PREFETCH
+		x86_errata_testmsr, IC_CFG_DIS_SEQ_PREFETCH, NULL
 	},
 	/*
 	 * 97: 128-Bit Streaming Stores May Cause Coherency
@@ -296,7 +297,7 @@ static errata_t errata[] = {
 	 */
 	{
 		97, FALSE, MSR_DC_CFG, x86_errata_set6,
-		x86_errata_testmsr, DC_CFG_DIS_CNV_WC_SSO
+		x86_errata_testmsr, DC_CFG_DIS_CNV_WC_SSO, NULL
 	},
 	/*
 	 * 104: DRAM Data Masking Feature Causes ChipKill ECC
@@ -304,14 +305,14 @@ static errata_t errata[] = {
 	 */
 	{
 		104, FALSE, MSR_NB_CFG, x86_errata_set7,
-		x86_errata_testmsr, NB_CFG_DISDATMSK
+		x86_errata_testmsr, NB_CFG_DISDATMSK, NULL
 	},
 	/*
 	 * 113: Enhanced Write-Combining Feature Causes System Hang
 	 */
 	{
 		113, FALSE, MSR_BU_CFG, x86_errata_set3,
-		x86_errata_setmsr, BU_CFG_WBENHWSBDIS
+		x86_errata_setmsr, BU_CFG_WBENHWSBDIS, NULL
 	},
 	/*
 	 * 69: Multiprocessor Coherency Problem with Hardware
@@ -319,7 +320,7 @@ static errata_t errata[] = {
 	 */
 	{
 		69, FALSE, MSR_BU_CFG, x86_errata_set5,
-		x86_errata_setmsr, BU_CFG_WBPFSMCCHKDIS
+		x86_errata_setmsr, BU_CFG_WBPFSMCCHKDIS, NULL
 	},
 	/*
 	 * 101: DRAM Scrubber May Cause Data Corruption When Using
@@ -327,7 +328,7 @@ static errata_t errata[] = {
 	 */
 	{
 		101, FALSE, 0, x86_errata_set2,
-		NULL, 0
+		NULL, 0, NULL
 	},
 	/*
 	 * 106: Potential Deadlock with Tightly Coupled Semaphores
@@ -335,7 +336,7 @@ static errata_t errata[] = {
 	 */
 	{
 		106, FALSE, MSR_LS_CFG, x86_errata_set2,
-		x86_errata_testmsr, LS_CFG_DIS_LS2_SQUISH
+		x86_errata_testmsr, LS_CFG_DIS_LS2_SQUISH, NULL
 	},
 	/*
 	 * 107: Possible Multiprocessor Coherency Problem with
@@ -343,7 +344,7 @@ static errata_t errata[] = {
 	 */
 	{
 		107, FALSE, MSR_BU_CFG, x86_errata_set2,
-		x86_errata_testmsr, BU_CFG_THRL2IDXCMPDIS
+		x86_errata_testmsr, BU_CFG_THRL2IDXCMPDIS, NULL
 	},
 	/*
 	 * 122: TLB Flush Filter May Cause Coherency Problem in
@@ -351,14 +352,14 @@ static errata_t errata[] = {
 	 */
 	{
 		122, FALSE, MSR_HWCR, x86_errata_set4,
-		x86_errata_setmsr, HWCR_FFDIS
+		x86_errata_setmsr, HWCR_FFDIS, NULL
 	},
 	/*
 	 * 254: Internal Resource Livelock Involving Cached TLB Reload
 	 */
 	{
 		254, FALSE, MSR_BU_CFG, x86_errata_set9,
-		x86_errata_testmsr, BU_CFG_ERRATA_254
+		x86_errata_testmsr, BU_CFG_ERRATA_254, NULL
 	},
 	/*
 	 * 261: Processor May Stall Entering Stop-Grant Due to Pending Data
@@ -366,7 +367,7 @@ static errata_t errata[] = {
 	 */
 	{
 		261, FALSE, MSR_DC_CFG, x86_errata_set10,
-		x86_errata_testmsr, DC_CFG_ERRATA_261
+		x86_errata_testmsr, DC_CFG_ERRATA_261, NULL
 	},
 	/*
 	 * 298: L2 Eviction May Occur During Processor Operation To Set
@@ -374,11 +375,11 @@ static errata_t errata[] = {
 	 */
 	{
 		298, FALSE, MSR_HWCR, x86_errata_set9,
-		x86_errata_testmsr, HWCR_TLBCACHEDIS
+		x86_errata_testmsr, HWCR_TLBCACHEDIS, NULL
 	},
 	{
 		298, FALSE, MSR_BU_CFG, x86_errata_set9,
-		x86_errata_testmsr, BU_CFG_ERRATA_298
+		x86_errata_testmsr, BU_CFG_ERRATA_298, NULL
 	},
 	/*
 	 * 309: Processor Core May Execute Incorrect Instructions on
@@ -386,14 +387,14 @@ static errata_t errata[] = {
 	 */
 	{
 		309, FALSE, MSR_BU_CFG, x86_errata_set9,
-		x86_errata_testmsr, BU_CFG_ERRATA_309
+		x86_errata_testmsr, BU_CFG_ERRATA_309, NULL
 	},
 	/*
 	 * 721: Processor May Incorrectly Update Stack Pointer
 	 */
 	{
 		721, FALSE, MSR_DE_CFG, x86_errata_set11,
-		x86_errata_setmsr, DE_CFG_ERRATA_721
+		x86_errata_setmsr, DE_CFG_ERRATA_721, NULL
 	},
 	/*
 	 * 776: Incorrect Processor Branch Prediction for Two Consecutive
@@ -401,7 +402,7 @@ static errata_t errata[] = {
 	 */
 	{
 		776, FALSE, MSR_IC_CFG, x86_errata_set12,
-		x86_errata_setmsr, IC_CFG_ERRATA_776
+		x86_errata_setmsr, IC_CFG_ERRATA_776, NULL
 	},
 	/*
 	 * 793: Specific Combination of Writes to Write Combined Memory
@@ -409,7 +410,7 @@ static errata_t errata[] = {
 	 */
 	{
 		793, FALSE, MSR_LS_CFG, x86_errata_set15,
-		x86_errata_setmsr, LS_CFG_ERRATA_793
+		x86_errata_setmsr, LS_CFG_ERRATA_793, NULL
 	},
 	/*
 	 * 1021: Load Operation May Receive Stale Data From Older Store
@@ -417,21 +418,21 @@ static errata_t errata[] = {
 	 */
 	{
 		1021, FALSE, MSR_DE_CFG, x86_errata_set13,
-		x86_errata_setmsr, DE_CFG_ERRATA_1021
+		x86_errata_setmsr, DE_CFG_ERRATA_1021, NULL
 	},
 	/*
 	 * 1033: A Lock Operation May Cause the System to Hang
 	 */
 	{
 		1033, FALSE, MSR_LS_CFG, x86_errata_set14,
-		x86_errata_setmsr, LS_CFG_ERRATA_1033
+		x86_errata_setmsr, LS_CFG_ERRATA_1033, NULL
 	},
 	/*
 	 * 1049: FCMOV Instruction May Not Execute Correctly
 	 */
 	{
 		1049, FALSE, MSR_FP_CFG, x86_errata_set13,
-		x86_errata_setmsr, FP_CFG_ERRATA_1049
+		x86_errata_setmsr, FP_CFG_ERRATA_1049, NULL
 	},
 #if 0	/* Should we apply this errata? The other OSes don't. */
 	/*
@@ -440,7 +441,7 @@ static errata_t errata[] = {
 	 */
 	{
 		1091, FALSE, MSR_LS_CFG2, x86_errata_set13,
-		x86_errata_setmsr, LS_CFG2_ERRATA_1091
+		x86_errata_setmsr, LS_CFG2_ERRATA_1091, NULL
 	},
 #endif
 	/*
@@ -449,7 +450,7 @@ static errata_t errata[] = {
 	 */
 	{
 		1095, FALSE, MSR_LS_CFG, x86_errata_set13,
-		x86_errata_setmsr, LS_CFG_ERRATA_1095
+		x86_errata_setmsr, LS_CFG_ERRATA_1095, NULL
 	},
 	/*
 	 * Zenbleed:
@@ -458,11 +459,22 @@ static errata_t errata[] = {
 	 * https://lock.cmpxchg8b.com/zenbleed.html
 	 */
 	{
-		-1, FALSE, MSR_DE_CFG, x86_errata_set16,
+		0, FALSE, MSR_DE_CFG, x86_errata_zen2,
 		x86_errata_setmsr, DE_CFG_ERRATA_ZENBLEED,
+		"ZenBleed"
 	},
 };
 
+static void
+x86_errata_log(device_t dev, errata_t *e, const char *msg)
+{
+
+	if (e->e_num == 0)
+		aprint_debug_dev(dev, "erratum '%s' %s\n", e->e_name, msg);
+	else
+		aprint_debug_dev(dev, "erratum %u %s\n", e->e_num, msg);
+}
+
 static bool
 x86_errata_testmsr(struct cpu_info *ci, errata_t *e)
 {
@@ -489,8 +501,7 @@ x86_errata_setmsr(struct cpu_info *ci, e
 	if ((val & e->e_data2) != 0)
 		return FALSE;
 	wrmsr_locked(e->e_data1, val | e->e_data2);
-	aprint_debug_dev(ci->ci_dev, "erratum %d patched\n",
-	    e->e_num);
+	x86_errata_log(ci->ci_dev, e, "patched");
 
 	return FALSE;
 }
@@ -541,16 +552,14 @@ x86_errata(void)
 				continue;
 		}
 
-		aprint_debug_dev(ci->ci_dev, "testing for erratum %d\n",
-		    e->e_num);
+		x86_errata_log(ci->ci_dev, e, "testing");
 
 		if (e->e_act == NULL)
 			e->e_reported = TRUE;
 		else if ((*e->e_act)(ci, e) == FALSE)
 			continue;
 
-		aprint_verbose_dev(ci->ci_dev, "erratum %d present\n",
-		    e->e_num);
+		x86_errata_log(ci->ci_dev, e, "present");
 		upgrade = 1;
 	}
 

Reply via email to