summaryrefslogtreecommitdiff
path: root/sys/arch/amd64
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/amd64')
-rw-r--r--sys/arch/amd64/amd64/amd64errata.c21
-rw-r--r--sys/arch/amd64/include/specialreg.h5
2 files changed, 24 insertions, 2 deletions
diff --git a/sys/arch/amd64/amd64/amd64errata.c b/sys/arch/amd64/amd64/amd64errata.c
index be69cf56929..f8463e80b18 100644
--- a/sys/arch/amd64/amd64/amd64errata.c
+++ b/sys/arch/amd64/amd64/amd64errata.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: amd64errata.c,v 1.2 2008/06/26 05:42:09 ray Exp $ */
+/* $OpenBSD: amd64errata.c,v 1.3 2012/03/27 05:59:46 jsg Exp $ */
/* $NetBSD: errata.c,v 1.6 2007/02/05 21:05:45 ad Exp $ */
/*-
@@ -64,6 +64,8 @@ typedef struct errata {
typedef enum cpurev {
BH_E4, CH_CG, CH_D0, DH_CG, DH_D0, DH_E3, DH_E6, JH_E1,
JH_E6, SH_B0, SH_B3, SH_C0, SH_CG, SH_D0, SH_E4, SH_E5,
+ DR_BA, DR_B2, DR_B3, RB_C2, RB_C3, BL_C2, BL_C3, DA_C2,
+ DA_C3, HY_D0, HY_D1, HY_D1_G34R1, PH_E0, LN_B0,
OINK
} cpurev_t;
@@ -78,6 +80,11 @@ static const u_int cpurevs[] = {
SH_CG, 0x0000f4a, SH_CG, 0x0000f5a, SH_CG, 0x0000f7a,
SH_D0, 0x0010f40, SH_D0, 0x0010f50, SH_D0, 0x0010f70,
SH_E4, 0x0020f51, SH_E4, 0x0020f71, SH_E5, 0x0020f42,
+ DR_BA, 0x0100f2a, DR_B2, 0x0100f22, DR_B3, 0x0100f23,
+ RB_C2, 0x0100f42, RB_C3, 0x0100f43, BL_C2, 0x0100f52,
+ BL_C3, 0x0100f53, DA_C2, 0x0100f62, DA_C3, 0x0100f63,
+ HY_D0, 0x0100f80, HY_D1, 0x0100f81, HY_D1_G34R1, 0x0100f91,
+ PH_E0, 0x0100fa0, LN_B0, 0x0300f10,
OINK
};
@@ -117,6 +124,11 @@ static const uint8_t amd64_errata_set8[] = {
SH_D0, SH_D0, SH_D0, SH_E4, SH_E4, SH_E5, OINK
};
+static const uint8_t amd64_errata_set9[] = {
+ DR_BA, DR_B2, DR_B3, RB_C2, RB_C3, BL_C2, BL_C3, DA_C2,
+ DA_C3, HY_D0, HY_D1, HY_D1_G34R1, PH_E0, LN_B0, OINK
+};
+
static int amd64_errata_setmsr(struct cpu_info *, errata_t *);
static int amd64_errata_testmsr(struct cpu_info *, errata_t *);
@@ -222,6 +234,13 @@ static errata_t errata[] = {
},
#endif
#endif /* MULTIPROCESSOR */
+ /*
+ * 721: Processor May Incorrectly Update Stack Pointer
+ */
+ {
+ 721, 0, MSR_DE_CFG, amd64_errata_set9,
+ amd64_errata_setmsr, DE_CFG_721
+ },
};
static int
diff --git a/sys/arch/amd64/include/specialreg.h b/sys/arch/amd64/include/specialreg.h
index 3b5839fae74..cbcc256fe05 100644
--- a/sys/arch/amd64/include/specialreg.h
+++ b/sys/arch/amd64/include/specialreg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: specialreg.h,v 1.20 2011/12/26 23:07:04 haesbaert Exp $ */
+/* $OpenBSD: specialreg.h,v 1.21 2012/03/27 05:59:46 jsg Exp $ */
/* $NetBSD: specialreg.h,v 1.1 2003/04/26 18:39:48 fvdl Exp $ */
/* $NetBSD: x86/specialreg.h,v 1.2 2003/04/25 21:54:30 fvdl Exp $ */
@@ -333,6 +333,9 @@
#define MSR_KERNELGSBASE 0xc0000102 /* storage for swapgs ins */
#define MSR_INT_PEN_MSG 0xc0010055 /* Interrupt pending message */
+#define MSR_DE_CFG 0xc0011029 /* Decode Configuration */
+#define DE_CFG_721 0x00000001 /* errata 721 */
+
#define IPM_C1E_CMP_HLT 0x10000000
#define IPM_SMI_CMP_HLT 0x08000000