changeset 3164:475efbf127ed

6474853 Solaris should be cognizant of the platform while attempting to turn off smi mc polling 6489753 mc_amd.h not quite ready for revision G 6491720 DC/IC/BU system infill only capture physical <39:6> 6495485 i86pc/cpu/scripts do not get clobbered
author gavinm
date Fri, 24 Nov 2006 01:54:59 -0800
parents 163b8acfdadd
children 63d5bf0b6167
files usr/src/cmd/fm/eversholt/files/i386/i86pc/amd64.esc usr/src/common/mc/mc-amd/mcamd_api.h usr/src/common/mc/mc-amd/mcamd_err.c usr/src/common/mc/mc-amd/mcamd_err.h usr/src/common/mc/mc-amd/mcamd_patounum.c usr/src/uts/i86pc/Makefile usr/src/uts/i86pc/cpu/amd_opteron/ao.h usr/src/uts/i86pc/cpu/amd_opteron/ao_mc.c usr/src/uts/i86pc/cpu/amd_opteron/ao_mca.c usr/src/uts/i86pc/cpu/amd_opteron/ao_mca_disp.in usr/src/uts/i86pc/cpu/scripts/Makefile usr/src/uts/i86pc/cpu/scripts/ao_gendisp.pl usr/src/uts/i86pc/io/mc/mcamd_subr.c usr/src/uts/i86pc/os/cmi.c usr/src/uts/i86pc/sys/cpu_module.h usr/src/uts/i86pc/sys/cpu_module_impl.h usr/src/uts/intel/sys/mc_amd.h
diffstat 17 files changed, 448 insertions(+), 302 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/fm/eversholt/files/i386/i86pc/amd64.esc	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/cmd/fm/eversholt/files/i386/i86pc/amd64.esc	Fri Nov 24 01:54:59 2006 -0800
@@ -321,10 +321,11 @@
     ereport.cpu.amd.nb.mem_ce@chip/cpu
 	{ CONTAINS_RANK && GET_ADDR && GET_OFFSET };
 
+/*
+ * Discard memory ereports that do not indicate a resource.
+ */
 prop upset.memory.discard1@chip/cpu (1)->
-    ereport.cpu.amd.ic.inf_sys_ecc1@chip/cpu; /* always discard - no resource */
-
-prop upset.memory.discard1@chip/cpu (1)->
+    ereport.cpu.amd.ic.inf_sys_ecc1@chip/cpu { !RESOURCE_EXISTS },
     ereport.cpu.amd.dc.inf_sys_ecc1@chip/cpu { !RESOURCE_EXISTS },
     ereport.cpu.amd.bu.s_ecc1@chip/cpu { !RESOURCE_EXISTS },
     ereport.cpu.amd.nb.mem_ce@chip/cpu { !RESOURCE_EXISTS };
--- a/usr/src/common/mc/mc-amd/mcamd_api.h	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/common/mc/mc-amd/mcamd_api.h	Fri Nov 24 01:54:59 2006 -0800
@@ -197,7 +197,7 @@
 extern const char *mcamd_get_propname(mcamd_propcode_t);
 
 extern int mcamd_patounum(struct mcamd_hdl *, mcamd_node_t *, uint64_t,
-    uint32_t, int, mc_unum_t *);
+    uint8_t, uint8_t, uint32_t, int, mc_unum_t *);
 extern int mcamd_unumtopa(struct mcamd_hdl *, mcamd_node_t *, mc_unum_t *,
     uint64_t *);
 extern int mc_pa_to_offset(struct mcamd_hdl *, mcamd_node_t *, mcamd_node_t *,
--- a/usr/src/common/mc/mc-amd/mcamd_err.c	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/common/mc/mc-amd/mcamd_err.c	Fri Nov 24 01:54:59 2006 -0800
@@ -2,9 +2,8 @@
  * CDDL HEADER START
  *
  * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
  *
  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  * or http://www.opensolaris.org/os/licensing.
@@ -31,8 +30,9 @@
 static const char *const _mcamd_errlist[] = {
 	"Invalid syndrome",			/* EMCAMD_SYNDINVALID */
 	"Invalid configuration tree",		/* EMCAMD_TREEINVALID */
-	"Address not found"			/* EMCAMD_NOADDR */
-	"Operation not supported"		/* EMCAMD_NOTSUP */
+	"Address not found",			/* EMCAMD_NOADDR */
+	"Operation not supported",		/* EMCAMD_NOTSUP */
+	"Too few valid address bits",		/* EMCAMD_INSUFF_RES */
 };
 
 static const int _mcamd_nerr = sizeof (_mcamd_errlist) /
--- a/usr/src/common/mc/mc-amd/mcamd_err.h	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/common/mc/mc-amd/mcamd_err.h	Fri Nov 24 01:54:59 2006 -0800
@@ -2,9 +2,8 @@
  * CDDL HEADER START
  *
  * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
  *
  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  * or http://www.opensolaris.org/os/licensing.
@@ -38,7 +37,8 @@
 	EMCAMD_SYNDINVALID = EMCAMD_BASE,	/* invalid syndrome */
 	EMCAMD_TREEINVALID,			/* invalid configuration tree */
 	EMCAMD_NOADDR,				/* address not found */
-	EMCAMD_NOTSUP				/* operation not supported */
+	EMCAMD_NOTSUP,				/* operation not supported */
+	EMCAMD_INSUFF_RES			/* insufficient resolution */
 };
 
 extern const char *mcamd_errmsg(struct mcamd_hdl *);
--- a/usr/src/common/mc/mc-amd/mcamd_patounum.c	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/common/mc/mc-amd/mcamd_patounum.c	Fri Nov 24 01:54:59 2006 -0800
@@ -36,6 +36,8 @@
 #include <mcamd_api.h>
 #include <mcamd_err.h>
 
+#define	MC_SYSADDR_MSB	39
+#define	MC_SYSADDR_LSB	3
 
 #define	CSDIMM1	0x1
 #define	CSDIMM2	0x2
@@ -342,7 +344,7 @@
  */
 static int
 mc_whichdimm(struct mcamd_hdl *hdl, mcamd_node_t *cs, uint64_t pa,
-    uint32_t synd, int syndtype)
+    uint8_t valid_lo, uint32_t synd, int syndtype)
 {
 	int lobit, hibit, data, check;
 	uint64_t dimm1, dimm2;
@@ -379,14 +381,22 @@
 	/*
 	 * 64/8 ECC is checked separately for the upper and lower
 	 * halves, so even an uncorrectable error is contained within
-	 * one of the two halves.  The error address is accurate to
-	 * 8 bytes, so bit 4 distinguises upper from lower.
+	 * one of the two halves.  If we have sufficient address resolution
+	 * then we can determine which DIMM.
 	 */
 	if (syndtype == AMD_SYNDTYPE_ECC) {
-		mcamd_dprintf(hdl, MCAMD_DBG_FLOW, "mc_whichdimm: 64/8 ECC "
-		    "and PA 0x%llx is in %s half\n", pa,
-		    pa & 8 ? "lower" : "upper");
-		return (pa & 8 ? CSDIMM2 : CSDIMM1);
+		if (valid_lo <= MC_SYSADDR_LSB) {
+			mcamd_dprintf(hdl, MCAMD_DBG_FLOW, "mc_whichdimm: 64/8 "
+			    "ECC in 128-bit mode, PA 0x%llx is in %s half\n",
+			    pa, pa & 0x8 ? "upper" : "lower");
+			return (pa & 0x8 ? CSDIMM2 : CSDIMM1);
+		} else {
+			mcamd_dprintf(hdl, MCAMD_DBG_FLOW, "mc_whichdimm: "
+			    "64/8 ECC in 128-bit mode, PA 0x%llx with least "
+			    "significant valid bit %d cannot be resolved to "
+			    "a single DIMM\n", pa, valid_lo);
+			return (mcamd_set_errno(hdl, EMCAMD_INSUFF_RES));
+		}
 	}
 
 	/*
@@ -430,7 +440,8 @@
  */
 static int
 mc_bkdg_patounum(struct mcamd_hdl *hdl, mcamd_node_t *mc, uint64_t pa,
-    uint32_t synd, int syndtype, mc_unum_t *unump)
+    uint8_t valid_lo, uint32_t synd, int syndtype,
+    mc_unum_t *unump)
 {
 	int which;
 	uint64_t mcnum, rev;
@@ -565,8 +576,8 @@
 			if ((sparecs = cs_sparedto(hdl, cs, mc)) != NULL)
 				cs = sparecs;
 
-			if ((which = mc_whichdimm(hdl, cs, pa, synd,
-			    syndtype)) < 0)
+			if ((which = mc_whichdimm(hdl, cs, pa, valid_lo,
+			    synd, syndtype)) < 0)
 				return (-1); /* errno is set for us */
 
 			/*
@@ -597,7 +608,7 @@
 /*ARGSUSED*/
 static int
 mc_patounum(struct mcamd_hdl *hdl, mcamd_node_t *mc, uint64_t pa,
-    uint32_t synd, int syndtype, mc_unum_t *unump)
+    uint8_t valid_lo, uint32_t synd, int syndtype, mc_unum_t *unump)
 {
 	uint64_t iaddr;
 	mcamd_node_t *cs, *sparecs;
@@ -612,7 +623,8 @@
 	 * difficult to review against the BKDG approach.
 	 */
 	mcamd_dprintf(hdl, MCAMD_DBG_FLOW, "BKDG brute-force method begins\n");
-	bkdgres = mc_bkdg_patounum(hdl, mc, pa, synd, syndtype, &bkdg_unum);
+	bkdgres = mc_bkdg_patounum(hdl, mc, pa, valid_lo, synd,
+	    syndtype, &bkdg_unum);
 	mcamd_dprintf(hdl, MCAMD_DBG_FLOW, "BKDG brute-force method ends\n");
 #endif
 
@@ -639,7 +651,8 @@
 		cs = sparecs;
 	}
 
-	if ((which = mc_whichdimm(hdl, cs, pa, synd, syndtype)) < 0)
+	if ((which = mc_whichdimm(hdl, cs, pa, valid_lo, synd,
+	    syndtype)) < 0)
 		return (-1); /* errno is set for us */
 
 	if (unum_fill(hdl, cs, which, iaddr, unump, 1) < 0)
@@ -676,24 +689,27 @@
 
 int
 mcamd_patounum(struct mcamd_hdl *hdl, mcamd_node_t *root, uint64_t pa,
-    uint32_t synd, int syndtype, mc_unum_t *unump)
+    uint8_t valid_hi, uint8_t valid_lo, uint32_t synd, int syndtype,
+    mc_unum_t *unump)
 {
 	mcamd_node_t *mc;
 
 	mcamd_dprintf(hdl, MCAMD_DBG_FLOW, "mcamd_patounum: pa=0x%llx, "
 	    "synd=0x%x, syndtype=%d\n", pa, synd, syndtype);
 
-	/*
-	 * Consider allowing syndrome 0 to act as a generic multibit
-	 * syndrome.  For example icache inf_sys_ecc1 captures an address
-	 * but no syndrome - we can still resolve this to a dimm or dimms.
-	 */
+	if (valid_hi < MC_SYSADDR_MSB) {
+		mcamd_dprintf(hdl, MCAMD_DBG_FLOW, "mcamd_patounum: require "
+		    "pa<%d> to be valid\n", MC_SYSADDR_MSB);
+		return (mcamd_set_errno(hdl, EMCAMD_INSUFF_RES));
+	}
+
 	if (!mcamd_synd_validate(hdl, synd, syndtype))
 		return (mcamd_set_errno(hdl, EMCAMD_SYNDINVALID));
 
 	for (mc = mcamd_mc_next(hdl, root, NULL); mc != NULL;
 	    mc = mcamd_mc_next(hdl, root, mc)) {
-		if (mc_patounum(hdl, mc, pa, synd, syndtype, unump) == 0)
+		if (mc_patounum(hdl, mc, pa, valid_lo, synd,
+		    syndtype, unump) == 0)
 			return (0);
 
 		if (mcamd_errno(hdl) != EMCAMD_NOADDR)
--- a/usr/src/uts/i86pc/Makefile	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/uts/i86pc/Makefile	Fri Nov 24 01:54:59 2006 -0800
@@ -96,7 +96,7 @@
 	@cd $@; pwd; $(MAKE) $(NO_STATE) $(TARGET)
 
 setup: FRC
-	@cd cpu/scripts; pwd; $(MAKE) setup
+	@cd cpu/scripts; pwd; $(MAKE) $(TARGET)
 
 $(XMODS):	FRC
 	@if [ -f $@/Makefile  ]; then \
--- a/usr/src/uts/i86pc/cpu/amd_opteron/ao.h	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/uts/i86pc/cpu/amd_opteron/ao.h	Fri Nov 24 01:54:59 2006 -0800
@@ -32,6 +32,7 @@
 #include <sys/types.h>
 #include <sys/mc.h>
 #include <sys/mca_amd.h>
+#include <sys/mc_amd.h>
 #include <sys/cpu_module_impl.h>
 #include <sys/nvpair.h>
 #include <sys/cyclic.h>
@@ -77,6 +78,13 @@
 
 #define	AO_AED_F_CORRECTABLE	0x01
 #define	AO_AED_F_LOFAULT_OK	0x02
+#define	AO_AED_F_LINEAR		0x04	/* MCi_ADDR is a linear address */
+#define	AO_AED_F_PHYSICAL	0x08	/* MCi_ADDR is a physical address */
+#define	AO_AED_F_PAGEALIGNED	0x10	/* MCi_ADDR aligns to page size */
+#define	AO_AED_F_L2SETWAY	0x20	/* 3:0 = way, 15/14/13/12:6 = set */
+
+#define	AO_AED_FLAGS_ADDRTYPE	(AO_AED_F_LINEAR | AO_AED_F_PHYSICAL | \
+    AO_AED_F_PAGEALIGNED | AO_AED_F_L2SETWAY)
 
 typedef struct ao_error_disp {
 	const char *aed_class;		/* ereport class for use if match */
@@ -88,6 +96,8 @@
 	uint8_t aed_stat_pp_bits:4;	/* AO_MCA_PP_BIT_* for pp matching */
 	uint8_t aed_stat_ii_bits:4;	/* AO_MCA_II_BIT_* for ii matching */
 	uint16_t aed_stat_r4_bits;	/* AO_MCA_R4_BIT_* for r4 matching */
+	uint8_t aed_addrvalid_hi;	/* most significant valid addr bit */
+	uint8_t aed_addrvalid_lo;	/* least significant valid addr bit */
 	uint8_t aed_panic_when;		/* extra conditions for panic */
 	uint8_t aed_flags;		/* AO_AED_F_* */
 } ao_error_disp_t;
@@ -141,6 +151,9 @@
 	uint64_t abl_status;		/* Saved MCi_STATUS register */
 	uint64_t abl_addr;		/* Saved MCi_ADDR register */
 	uint64_t abl_misc;		/* Saved MCi_MISC register */
+	uint8_t abl_addr_type;		/* flags & AO_AED_FLAGS_ADDRTYPE */
+	uint8_t abl_addr_valid_hi;	/* most significant valid addr bit */
+	uint8_t abl_addr_valid_lo;	/* least significant valid addr bit */
 } ao_bank_logout_t;
 
 #define	AO_ACL_F_PRIV		0x1	/* #mc in kernel mode (else user) */
@@ -245,7 +258,8 @@
 
 extern void ao_mc_register(void *, const cmi_mc_ops_t *, void *);
 extern const struct cmi_mc_ops *ao_mc_getops(void *);
-extern int ao_mc_patounum(ao_data_t *, uint64_t, uint32_t, int, mc_unum_t *);
+extern int ao_mc_patounum(ao_data_t *, uint64_t, uint8_t, uint8_t, uint32_t,
+    int, mc_unum_t *);
 extern int ao_mc_unumtopa(ao_data_t *, mc_unum_t *, nvlist_t *, uint64_t *);
 
 extern void ao_pcicfg_write(uint_t, uint_t, uint_t, uint32_t);
--- a/usr/src/uts/i86pc/cpu/amd_opteron/ao_mc.c	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/uts/i86pc/cpu/amd_opteron/ao_mc.c	Fri Nov 24 01:54:59 2006 -0800
@@ -2,9 +2,8 @@
  * CDDL HEADER START
  *
  * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
  *
  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  * or http://www.opensolaris.org/os/licensing.
@@ -51,14 +50,14 @@
 }
 
 int
-ao_mc_patounum(ao_data_t *ao, uint64_t pa, uint32_t synd, int syndtype,
-    mc_unum_t *unump)
+ao_mc_patounum(ao_data_t *ao, uint64_t pa, uint8_t valid_hi, uint8_t valid_lo,
+    uint32_t synd, int syndtype, mc_unum_t *unump)
 {
 	if (ao->ao_mc_ops == NULL)
 		return (0);	/* mc not registered, or failed to load */
 
-	return (ao->ao_mc_ops->cmi_mc_patounum(ao->ao_mc_data, pa, synd,
-	    syndtype, unump));
+	return (ao->ao_mc_ops->cmi_mc_patounum(ao->ao_mc_data, pa,
+	    valid_hi, valid_lo, synd, syndtype, unump));
 }
 
 int
--- a/usr/src/uts/i86pc/cpu/amd_opteron/ao_mca.c	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/uts/i86pc/cpu/amd_opteron/ao_mca.c	Fri Nov 24 01:54:59 2006 -0800
@@ -130,11 +130,17 @@
  */
 static const struct ao_smi_disable {
 	const char *asd_sys_vendor;	/* SMB_TYPE_SYSTEM vendor prefix */
+	const char *asd_sys_product;	/* SMB_TYPE_SYSTEM product prefix */
 	const char *asd_bios_vendor;	/* SMB_TYPE_BIOS vendor prefix */
 	uint8_t asd_code;		/* output code for SMI disable */
 } ao_smi_disable[] = {
-	{ "Sun Microsystems", "American Megatrends", 0x59 },
-	{ NULL, NULL, 0 }
+	{ "Sun Microsystems", "Galaxy12",
+	    "American Megatrends", 0x59 },
+	{ "Sun Microsystems", "Sun Fire X4100 Server",
+	    "American Megatrends", 0x59 },
+	{ "Sun Microsystems", "Sun Fire X4200 Server",
+	    "American Megatrends", 0x59 },
+	{ NULL, NULL, NULL, 0 }
 };
 
 static int
@@ -603,7 +609,7 @@
 	/*
 	 * Iterate over the banks of machine-check registers, read the address
 	 * and status registers into the logout area, and clear status as we go.
-	 * Also read the MCi_MISC register is MCi_STATUS.MISCV indicates that
+	 * Also read the MCi_MISC register if MCi_STATUS.MISCV indicates that
 	 * there is valid info there (as it will in revisions F and G for
 	 * NorthBridge ECC errors).
 	 */
@@ -716,6 +722,9 @@
 		if (rp != NULL && aed == &ao_disp_unknown)
 			fatal++;
 
+		abl->abl_addr_type = aed->aed_flags & AO_AED_FLAGS_ADDRTYPE;
+		abl->abl_addr_valid_hi = aed->aed_addrvalid_hi;
+		abl->abl_addr_valid_lo = aed->aed_addrvalid_lo;
 		n++;
 	}
 
@@ -855,14 +864,17 @@
 
 	if (members & FM_EREPORT_PAYLOAD_FLAG_RESOURCE) {
 		mc_unum_t unum;
-		int addrvalid;
+		int addrvalid = 0;
 
-		addrvalid = (members & FM_EREPORT_PAYLOAD_FLAG_ADDR) &&
-		    (members & FM_EREPORT_PAYLOAD_FLAG_ADDR_VALID) &&
-		    (abl->abl_status & AMD_BANK_STAT_ADDRV);
+		if (abl->abl_addr_type & AO_AED_F_PHYSICAL) {
+			addrvalid = (members & FM_EREPORT_PAYLOAD_FLAG_ADDR) &&
+			    (members & FM_EREPORT_PAYLOAD_FLAG_ADDR_VALID) &&
+			    (abl->abl_status & AMD_BANK_STAT_ADDRV);
+		}
 
-		if (addrvalid && ao_mc_patounum(ao, abl->abl_addr, synd,
-		    syndtype, &unum))
+		if (addrvalid && ao_mc_patounum(ao, abl->abl_addr,
+		    abl->abl_addr_valid_hi, abl->abl_addr_valid_lo,
+		    synd, syndtype, &unum))
 			ao_ereport_add_resource(payload, nva, &unum);
 	}
 
@@ -1183,6 +1195,8 @@
 		for (asd = ao_smi_disable; asd->asd_sys_vendor != NULL; asd++) {
 			if (strncmp(asd->asd_sys_vendor, si.smbi_manufacturer,
 			    strlen(asd->asd_sys_vendor)) != 0 ||
+			    strncmp(asd->asd_sys_product, si.smbi_product,
+			    strlen(asd->asd_sys_product)) != 0 ||
 			    strncmp(asd->asd_bios_vendor, sb.smbb_vendor,
 			    strlen(asd->asd_bios_vendor)) != 0)
 				continue;
--- a/usr/src/uts/i86pc/cpu/amd_opteron/ao_mca_disp.in	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/uts/i86pc/cpu/amd_opteron/ao_mca_disp.in	Fri Nov 24 01:54:59 2006 -0800
@@ -31,12 +31,12 @@
 mask on  = AMD_BANK_STAT_CECC
 mask off = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	bus	src	0	drd		mem/io	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	bus	src	0	drd	<39:6>	mem/io	lg	-
 
 panic = never
-flags = correctable
+flags = correctable,physical
 
 # ---
 
@@ -46,12 +46,12 @@
 mask on  = AMD_BANK_STAT_CECC
 mask off = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	drd		-	l2	data
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	drd	<39:6>	-	l2	data
 
 panic = never
-flags = correctable
+flags = correctable,physical
 
 # ---
 
@@ -61,12 +61,12 @@
 mask on  = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 mask off = AMD_BANK_STAT_CECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	bus	src	0	drd		mem/io	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	bus	src	0	drd	<39:6>	mem/io	lg	-
 
 panic = always
-flags =
+flags = physical
 
 # ---
 
@@ -76,12 +76,12 @@
 mask on  = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 mask off = AMD_BANK_STAT_CECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	drd		-	l2	data
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	drd	<39:6>	-	l2	data
 
 panic = always
-flags = correctable
+flags = physical
 
 # ---
 
@@ -91,12 +91,12 @@
 mask on  = AMD_BANK_STAT_CECC, AMD_BANK_STAT_SCRUB
 mask off = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	gen		-	l1	data
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	gen	<11:3>	-	l1	data
 
 panic = never
-flags = correctable
+flags = correctable,physical
 
 # ---
 
@@ -106,12 +106,13 @@
 mask on  = AMD_BANK_STAT_UC, AMD_BANK_STAT_CECC
 mask off = AMD_BANK_STAT_SCRUB
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	drd/dwr/ev/snp	-	l1	data
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	drd/dwr	<39:3>	-	l1	data
+code =	0000	mem	-	-	ev/snp	<11:6>	-	l1	data
 
 panic = always
-flags =
+flags = physical
 
 # ---
 
@@ -121,12 +122,13 @@
 mask on  = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_SCRUB
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	drd/dwr/ev/snp	-	l1	data
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	drd/dwr	<39:3>	-	l1	data
+code =	0000	mem	-	-	ev/snp	<11:6>	-	l1	data
 
 panic = always
-flags =
+flags = physical
 
 # ---
 
@@ -136,12 +138,12 @@
 mask on  = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC, AMD_BANK_STAT_SCRUB
 mask off = AMD_BANK_STAT_CECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	gen		-	l1	data
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	gen	<11:3>	-	l1	data
 
 panic = always
-flags =
+flags = physical
 
 # ---
 
@@ -151,12 +153,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	drd/dwr		-	l1	data
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	drd/dwr	<39:3>	-	l1	data
 
 panic = always
-flags =
+flags = physical
 
 # ---
 
@@ -166,12 +168,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	snp/ev		-	l1	data
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	snp/ev	<11:6>	-	l1	data
 
 panic = always
-flags =
+flags = physical
 
 # ---
 
@@ -181,12 +183,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	tlb	-	-	-		-	l1	data
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	tlb	-	-	-	<47:12>	-	l1	data
 
 panic = always
-flags =
+flags = linear
 
 # ---
 
@@ -196,12 +198,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0001	tlb	-	-	-		-	l1	data
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0001	tlb	-	-	-	<47:12>	-	l1	data
 
 panic = always
-flags = 
+flags =  linear
 
 # ---
 
@@ -211,12 +213,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	tlb	-	-	-		-	l2	data
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	tlb	-	-	-	<47:12>	-	l2	data
 
 panic = always
-flags = 
+flags = linear
 
 # ---
 
@@ -226,12 +228,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0001	tlb	-	-	-		-	l2	data
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0001	tlb	-	-	-	<47:12>	-	l2	data
 
 panic = always
-flags = 
+flags = linear
 
 #
 # Instruction Cache Functional Unit
@@ -245,12 +247,12 @@
 mask on  = AMD_BANK_STAT_CECC
 mask off = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	bus	src	0	ird		mem	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	bus	src	0	ird	<39:6>	mem	lg	-
 
 panic = never
-flags = correctable
+flags = correctable,physical
 
 # ----
 
@@ -260,12 +262,12 @@
 mask on  = AMD_BANK_STAT_CECC
 mask off = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	ird		-	l2	instr
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	ird	<39:6>	-	l2	instr
 
 panic = never
-flags = correctable
+flags = correctable,physical
 
 # ----
 
@@ -275,12 +277,12 @@
 mask on  = AMD_BANK_STAT_UECC, AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	bus	src	0	ird		mem	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	bus	src	0	ird	<39:6>	mem	lg	-
 
 panic = always
-flags =
+flags = physical
 
 # ---
 
@@ -290,12 +292,12 @@
 mask on  = AMD_BANK_STAT_UECC, AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	ird		-	l2	instr
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	ird	<39:6>	-	l2	instr
 
 panic = always
-flags =
+flags = physical
 
 # ---
 
@@ -305,12 +307,12 @@
 mask on  = 
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC, AMD_BANK_STAT_UC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	ird		-	l1	instr
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	ird	<47:4>	-	l1	instr
 
 panic = never
-flags = correctable
+flags = correctable,linear
 
 # ---
 
@@ -320,12 +322,13 @@
 mask on  = 
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC, AMD_BANK_STAT_UC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	ird/ev		-	l1	instr
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	ird	<47:6>	-	l1	instr
+code =	0000	mem	-	-	ev	none	-	l1	instr
 
 panic = never
-flags = correctable
+flags = correctable,linear
 
 # ---
 
@@ -335,12 +338,13 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	snp/ev		-	l1	instr
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	snp	<39:6>	-	l1	instr
+code =	0000	mem	-	-	ev	none	-	l1	instr
 
 panic = always
-flags =
+flags = physical
 
 # ---
 
@@ -350,12 +354,12 @@
 mask on  =
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC, AMD_BANK_STAT_UC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	tlb	-	-	-		-	l1	instr
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	tlb	-	-	-	<47:12>	-	l1	instr
 
 panic = never
-flags = correctable
+flags = correctable,linear,pagealigned
 
 # ---
 
@@ -365,12 +369,12 @@
 mask on  =
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC, AMD_BANK_STAT_UC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0001	tlb	-	-	-		-	l1	instr
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0001	tlb	-	-	-	<47:12>	-	l1	instr
 
 panic = never
-flags = correctable
+flags = correctable,linear,pagealigned
 
 # ---
 
@@ -380,12 +384,12 @@
 mask on  =
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC, AMD_BANK_STAT_UC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	tlb	-	-	-		-	l2	instr
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	tlb	-	-	-	<47:12>	-	l2	instr
 
 panic = never
-flags = correctable
+flags = correctable,linear
 
 # ---
 
@@ -395,12 +399,12 @@
 mask on  =
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC, AMD_BANK_STAT_UC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0001	tlb	-	-	-		-	l2	instr
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0001	tlb	-	-	-	<47:12>	-	l2	instr
 
 panic = never
-flags = correctable
+flags = correctable,linear
 
 # ---
 
@@ -410,9 +414,9 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	bus	src	0	ird		mem	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	bus	src	0	ird	none	mem	lg	-
 
 panic = ifmce
 flags =
@@ -431,12 +435,12 @@
 mask on  = AMD_BANK_STAT_CECC
 mask off = AMD_BANK_STAT_UECC, AMD_BANK_STAT_UC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	rd/snp/ev	-	l2	gen
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	rd/snp/ev <39:6> -	l2	gen
 
 panic = never
-flags = correctable
+flags = correctable,physical
 
 # ---
 
@@ -446,12 +450,12 @@
 mask on  = AMD_BANK_STAT_UECC, AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	mem	-	-	rd/snp/ev	-	l2	gen
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	mem	-	-	rd/snp/ev <39:6> -	l2	gen
 
 panic = always
-flags =
+flags = physical
 
 # ---
 
@@ -461,12 +465,12 @@
 mask on  = AMD_BANK_STAT_CECC, AMD_BANK_STAT_SCRUB
 mask off = AMD_BANK_STAT_UECC, AMD_BANK_STAT_UC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0010	mem	-	-	gen		-	l2	instr
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0010	mem	-	-	gen	<15:0>	-	l2	instr
 
 panic = never
-flags = correctable
+flags = correctable,physical,l2setway
 
 # ---
 
@@ -476,12 +480,12 @@
 mask on  = AMD_BANK_STAT_UECC, AMD_BANK_STAT_UC, AMD_BANK_STAT_SCRUB
 mask off = AMD_BANK_STAT_CECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0010	mem	-	-	gen		-	l2	instr
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0010	mem	-	-	gen	<15:0>	-	l2	instr
 
 panic = always
-flags =
+flags = physical,l2setway
 
 # ---
 
@@ -491,12 +495,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0010	mem	-	-	ird		-	l2	instr
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0010	mem	-	-	ird	<15:0>	-	l2	instr
 
 panic = always
-flags =
+flags = physical,l2setway
 
 # ---
 
@@ -506,12 +510,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0010	mem	-	-	drd		-	l2	data
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0010	mem	-	-	drd	<15:0>	-	l2	data
 
 panic = always
-flags =
+flags = physical,l2setway
 
 # ---
 
@@ -521,12 +525,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0010	mem	-	-	rd/snp/ev	-	l2	gen
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0010	mem	-	-	rd/snp/ev <15:0> -	l2	gen
 
 panic = always
-flags =
+flags = physical,l2setway
 
 # ---
 
@@ -536,12 +540,12 @@
 mask on  = AMD_BANK_STAT_UC, AMD_BANK_STAT_SCRUB
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0010	mem	-	-	gen		-	l2	instr
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0010	mem	-	-	gen	<15:0>	-	l2	instr
 
 panic = always
-flags =
+flags = physical,l2setway
 
 # ---
 
@@ -551,12 +555,13 @@
 mask on  = AMD_BANK_STAT_CECC
 mask off = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	bus	src	0	rd/pf		mem/io	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	bus	src	0	rd	<39:6>	mem/io	lg	-
+code =	0000	bus	src	0	pf	none	mem/io	lg	-
 
 panic = never
-flags = correctable
+flags = correctable,physical
 
 # ---
 
@@ -566,12 +571,13 @@
 mask on  = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 mask off = AMD_BANK_STAT_CECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	bus	src	0	rd/pf		mem/io	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	bus	src	0	rd	<39:6>	mem/io	lg	-
+code =	0000	bus	src	0	pf	none	mem/io	lg	-
 
 panic = always
-flags =
+flags = physical
 
 # ---
 
@@ -581,12 +587,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	bus	src	0	rd/pf		mem/io	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	bus	src	0	rd/pf	<39:6>	mem/io	lg	-
 
 panic = ifmce
-flags =
+flags = physical
 
 #
 # ---
@@ -600,12 +606,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code =	0000	bus	src	0	rd/wr		mem/io	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code =	0000	bus	src	0	rd/wr	<39:6>	mem/io	lg	-
 
 panic = ifmce
-flags =
+flags = physical
 
 #
 # ---
@@ -619,12 +625,12 @@
 mask on  = AMD_BANK_STAT_CECC
 mask off = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code  = 0000	bus	src/rsp	0	rd/wr		mem	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code  = 0000	bus	src/rsp	0	rd/wr	<39:3>	mem	lg	-
 
 panic = never
-flags = correctable
+flags = correctable,physical
 
 # ---
 
@@ -634,12 +640,12 @@
 mask on  = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 mask off = AMD_BANK_STAT_CECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code  = 0000	bus	src/rsp	0	rd/wr		mem	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code  = 0000	bus	src/rsp	0	rd/wr	<39:3>	mem	lg	-
 
 panic = always
-flags = 
+flags = physical
 
 # ---
 
@@ -649,12 +655,12 @@
 mask on  = AMD_BANK_STAT_CECC
 mask off = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code  = 1000	bus	src/rsp	0	rd/wr		mem	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code  = 1000	bus	src/rsp	0	rd/wr	<39:3>	mem	lg	-
 
 panic = never
-flags = correctable
+flags = correctable,physical
 
 # ---
 
@@ -664,12 +670,12 @@
 mask on  = AMD_BANK_STAT_UC, AMD_BANK_STAT_UECC
 mask off = AMD_BANK_STAT_CECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code  = 1000	bus	src/rsp	0	rd/wr		mem	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code  = 1000	bus	src/rsp	0	rd/wr	<39:3>	mem	lg	-
 
 panic = always
-flags = 
+flags = physical
 
 # ---
 
@@ -679,9 +685,9 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code  = 0001	bus	obs	0	gen		gen	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code  = 0001	bus	obs	0	gen	none	gen	lg	-
 
 panic = always
 flags = 
@@ -694,9 +700,9 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code  = 0010	bus	obs	0	gen		gen	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code  = 0010	bus	obs	0	gen	none	gen	lg	-
 
 panic = always
 flags = 
@@ -709,12 +715,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code  = 0011	bus	src/obs	0	rd/wr		mem/io	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code  = 0011	bus	src/obs	0	rd/wr	<39:3>	mem/io	lg	-
 
 panic = never
-flags = 
+flags = physical
 
 # ---
 
@@ -724,12 +730,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code  = 0100	bus	src/obs	0	rd/wr		mem/io	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code  = 0100	bus	src/obs	0	rd/wr	<39:3>	mem/io	lg	-
 
 panic = never
-flags = 
+flags = physical
 
 # ---
 
@@ -739,12 +745,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code  = 0101	tlb	-	-	-		-	lg	gen
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code  = 0101	tlb	-	-	-	<39:3>	-	lg	gen
 
 panic = ifmce
-flags = 
+flags = physical
 
 # ---
 
@@ -754,12 +760,12 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code  = 0110	bus	obs	0	gen		io	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code  = 0110	bus	obs	0	gen	<39:3>	io	lg	-
 
 panic = always
-flags = 
+flags = physical
 
 # ---
 
@@ -769,9 +775,9 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code  = 0111	bus	gen	1	gen		gen	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code  = 0111	bus	gen	1	gen	<39:3>	gen	lg	-
 
 panic = always
 flags = 
@@ -784,9 +790,9 @@
 mask on  = AMD_BANK_STAT_UC
 mask off = AMD_BANK_STAT_CECC, AMD_BANK_STAT_UECC
 
-#	ext	type	pp	t	rrrr		ii	ll	tt
-#       ------- -------	-------	-------	---------------	------- ------- -----
-code  = 1101	bus	obs	0	gen		mem	lg	-
+#	ext	type	pp	t	rrrr	addr	ii	ll	tt
+#       ------- -------	-------	-------	-------	-------	------- ------- -----
+code  = 1101	bus	obs	0	gen	none	mem	lg	-
 
 panic = always
 flags = 
--- a/usr/src/uts/i86pc/cpu/scripts/Makefile	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/uts/i86pc/cpu/scripts/Makefile	Fri Nov 24 01:54:59 2006 -0800
@@ -2,9 +2,8 @@
 # CDDL HEADER START
 #
 # The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License").  You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
 #
 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 # or http://www.opensolaris.org/os/licensing.
@@ -39,7 +38,7 @@
 
 all install setup: $(PERLFILES)
 
-clean:
+clean clobber:
 	$(RM) $(PERLFILES)
 
 include ../../../Makefile.targ
--- a/usr/src/uts/i86pc/cpu/scripts/ao_gendisp.pl	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/uts/i86pc/cpu/scripts/ao_gendisp.pl	Fri Nov 24 01:54:59 2006 -0800
@@ -34,6 +34,10 @@
 
 my ($funcunit, $error);
 my @funcunits = ();
+my @errorrefs = ();
+
+my $codelinesin = 0;	# number of input 'code' lines for an ereport type
+my $codeoutlen = 0;	# number of output lines from sub state_code
 
 my $state = "initial";
 
@@ -52,12 +56,66 @@
 	exit(1);
 }
 
+sub error_alloc() {
+	my @a = ();
+
+	push(@::errorrefs, \@a);
+	return (\@a);
+}
+
+sub error_dup() {
+	my ($drop) = @_;
+	my $newref = &error_alloc();
+
+	my $zeroref = $::errorrefs[0];
+
+	my $n = $#$zeroref - $drop;
+
+	@$newref = @$zeroref[0 .. $n];
+}
+
+sub code_lines() {
+	return ($::codelinesin++);
+}
+
+sub error_init() {
+	&error_alloc();
+	$::codelinesin = 0;
+}
+
+sub error_reset() {
+	@::errorrefs = ();
+	$::codelinesin = 0;
+	$::codeoutlen = 0;
+}
+
+sub errout() {
+	my ($line) = @_;
+
+	foreach my $ref (@::errorrefs) {
+		push(@$ref, $line);
+	}
+}
+
+sub errout_N() {
+	my ($instance, $line) = @_;
+	my $ref = @::errorrefs[$instance];
+	push(@$ref, $line);
+	return 1;
+}
+
+sub print_errout() {
+	foreach my $ref (@::errorrefs) {
+		print @$ref;
+	}
+}
+
 sub print_header() {
 	print "#include \"ao_mca_disp.h\"\n\n";
 }
 
 sub print_footer() {
-	print "const ao_error_disp_t *ao_error_disp[] = {\n";
+	print 'const ao_error_disp_t *ao_error_disp[] = {' . "\n";
 
 	foreach my $name (@funcunits) {
 		print "\t$name,\n";
@@ -74,7 +132,7 @@
 }
 
 sub funcunit_end() {
-	print "\tNULL\n};\n\n";
+	print "\t{ NULL }\n};\n\n";
 }
 
 sub error_begin() {
@@ -84,27 +142,34 @@
 	my $flags_name = $ereport_name;
 	$flags_name =~ s/EREPORT_/EREPORT_PAYLOAD_FLAGS_/;
 
-	print "\tFM_$ereport_name,\n\tFM_$flags_name,\n";
+	&errout("\tFM_$ereport_name,\n\tFM_$flags_name,\n");
 }
 
 sub error_end() {
-	print "\t},\n\n";
+	&errout("\t},\n\n");
+
+	&print_errout();
+
+	&error_reset();
 }
 
 sub print_bits() {
 	my $name = $_[0];
 	my @bits = @_[1..$#_];
+	my $out = "";
 
 	if (@bits == 0) {
-		print "\t0,";
+		$out = "\t0,";
 	} elsif (@bits == 1) {
-		print "\t$bits[0],";
+		$out = "\t$bits[0],";
 	} else {
-		print "\t( ", join(" | ", @bits), " ),";
+		$out = "\t( " . join(" | ", @bits) . " ),";
 	}
 
-	print " /* $name */" if (defined $name);
-	print "\n";
+	$out .= " /* $name */" if (defined $name);
+	$out .= "\n";
+
+	return ($out);
 }
 
 sub field_burst() {
@@ -150,7 +215,9 @@
 sub state_desc() {
 	my $desc = $_[0];
 
-	print "\t/* $desc */\n\t{\n";
+	&error_init();
+
+	&errout("\t/* $desc */\n\t{\n");
 }
 
 sub state_error() {
@@ -165,12 +232,13 @@
 sub state_mask_off() {
 	my @mask_off = map { tr/[a-z]/[A-Z]/; $_; } split(/,\s*/, $_[0]);
 
-	&print_bits("mask", @::mask_on, @mask_off);
-	&print_bits("mask_res", @::mask_on);
+	&errout(&print_bits("mask", @::mask_on, @mask_off));
+	&errout(&print_bits("mask_res", @::mask_on));
 }
 
 sub state_code() {
-	my ($ext, $type, $pp, $t, $r4, $ii, $ll, $tt) = split(/\s+/, $_[0]);
+	my ($ext, $type, $pp, $t, $r4, $addr, $ii, $ll, $tt) =
+	    split(/\s+/, $_[0]);
 
 	my %tt_values = ( instr => 1, data => 1, gen => 1, '-' => 1 );
 	my %ll_values = ( l0 => 1, l1 => 1, l2 => 1, lg => 1 );
@@ -202,6 +270,11 @@
 		gen => 'gen',
 		'-' => '-' );
 
+	my $instance = &code_lines();
+	if ($instance > 0) {
+		&error_dup($::codeoutlen);	# dup info thus far
+	}
+
 	if (!defined $tt_values{$tt}) {
 		&parsebail("unknown tt value `$tt'");
 	}
@@ -233,12 +306,12 @@
 			&parsebail("invalid members for bus code type");
 		}
 
-		print "\tAMD_ERRCODE_MKBUS(" .
+		$::codeoutlen += &errout_N($instance, "\tAMD_ERRCODE_MKBUS(" .
 		    "0, " . # pp
 		    "AMD_ERRCODE_T_" . ($t ? "TIMEOUT" : "NONE") . ", " .
 		    "0, " . # r4
 		    "0, " . # ii
-		    "AMD_ERRCODE_LL_$ll),\n";
+		    "AMD_ERRCODE_LL_$ll),\n");
 
 	} elsif ($type eq "mem") {
 		if ($r4 eq "-" || $tt eq "-" || $ll eq "-" ||
@@ -246,10 +319,10 @@
 			&parsebail("invalid members for mem code type");
 		}
 
-		print "\tAMD_ERRCODE_MKMEM(" .
+		$::codeoutlen += &errout_N($instance, "\tAMD_ERRCODE_MKMEM(" .
 		    "0, " . # r4
 		    "AMD_ERRCODE_TT_$tt, " .
-		    "AMD_ERRCODE_LL_$ll),\n";
+		    "AMD_ERRCODE_LL_$ll),\n");
 
 	} elsif ($type eq "tlb") {
 		if ($tt eq "-" || $ll eq "-" ||
@@ -257,28 +330,45 @@
 			&parsebail("invalid members for tlb code type");
 		}
 
-		print "\tAMD_ERRCODE_MKTLB(" .
+		$::codeoutlen += &errout_N($instance, "\tAMD_ERRCODE_MKTLB(" .
 		    "AMD_ERRCODE_TT_$tt, " .
-		    "AMD_ERRCODE_LL_$ll),\n";
+		    "AMD_ERRCODE_LL_$ll),\n");
 	} else {
 		&parsebail("unknown code type `$type'");
 	}
 
-	print "\t" . &bin2dec($ext) . ", /* ext code $ext */\n";
+	$::codeoutlen += &errout_N($instance, "\t" . &bin2dec($ext) .
+	    ", /* ext code $ext */\n");
+
+	$::codeoutlen += &errout_N($instance, &print_bits("pp_bits", @pp));
+	$::codeoutlen += &errout_N($instance, &print_bits("ii_bits", @ii));
+	$::codeoutlen += &errout_N($instance, &print_bits("r4_bits", @r4));
+
+	my $valid_hi;
+	my $valid_lo;
 
-	&print_bits("pp_bits", @pp);
-	&print_bits("ii_bits", @ii);
-	&print_bits("r4_bits", @r4);
+	if ($addr eq "none") {
+		$valid_hi = $valid_lo = 0;
+	} elsif ($addr =~ /<(\d+):(\d+)>/) {
+		$valid_hi = $1;
+		$valid_lo = $2;
+	} else {
+		&parsebail("invalid addr specification");
+	}
+	$::codeoutlen += &errout_N($instance, "\t" . $valid_hi .
+	    ", /* addr valid hi */\n");
+	$::codeoutlen += &errout_N($instance, "\t" . $valid_lo .
+	    ", /* addr valid lo */\n");
 }
 
 sub state_panic() {
 	my @vals = split(/,\s*/, $_[0]);
 
 	if ($#vals < 0) {
-		print "\t0, /* panic_when */\n";
+		&errout("\t0, /* panic_when */\n");
 	} else {
 		@vals = map { tr/[a-z]/[A-Z]/; "AO_AED_PANIC_" . $_; } @vals;
-		&print_bits("panic_when", @vals);
+		&errout(&print_bits("panic_when", @vals));
 	}
 }
 
@@ -287,18 +377,18 @@
 
 	@flags = map { tr/[a-z]/[A-Z]/; "AO_AED_F_" . $_; } @flags;
 
-	&print_bits("flags", @flags);
+	&errout(&print_bits("flags", @flags));
 }
 
 my %stateparse = (
-	funcunit	=> [ \&state_funcunit, "desc" ],
-	desc		=> [ \&state_desc, "error" ],
-	error		=> [ \&state_error, "mask on" ],
-	'mask on'	=> [ \&state_mask_on, "mask off" ],
-	'mask off'	=> [ \&state_mask_off, "code" ],
-	code		=> [ \&state_code, "panic" ],
-	panic		=> [ \&state_panic, "flags" ],
-	flags		=> [ \&state_flags, "initial" ]
+	funcunit	=> [ \&state_funcunit, 'desc' ],
+	desc		=> [ \&state_desc, 'error' ],
+	error		=> [ \&state_error, 'mask on' ],
+	'mask on'	=> [ \&state_mask_on, 'mask off' ],
+	'mask off'	=> [ \&state_mask_off, 'code' ],
+	code		=> [ \&state_code, 'code|panic' ],
+	panic		=> [ \&state_panic, 'flags' ],
+	flags		=> [ \&state_flags, 'initial' ]
 );
 
 usage unless (@ARGV == 1);
@@ -336,9 +426,11 @@
 		}
 	}
 
-	if ($keyword ne $state) {
-		&parsebail("keyword `$keyword' invalid here; expected `$state'");
+	if (!($keyword =~ /$state/)) {
+		&parsebail("keyword `$keyword' invalid here; expected " .
+		    "`$state'");
 	}
+	$state = $keyword;	# disambiguate between multiple legal states
 
 	if (!defined $stateparse{$state}) {
 		&parsebail("attempt to transition to invalid state `$state'");
--- a/usr/src/uts/i86pc/io/mc/mcamd_subr.c	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/uts/i86pc/io/mc/mcamd_subr.c	Fri Nov 24 01:54:59 2006 -0800
@@ -427,8 +427,8 @@
 
 /*ARGSUSED*/
 static int
-mcamd_patounum_wrap(void *arg, uint64_t pa, uint32_t synd, int syndtype,
-    mc_unum_t *unump)
+mcamd_patounum_wrap(void *arg, uint64_t pa, uint8_t valid_hi, uint8_t valid_lo,
+    uint32_t synd, int syndtype, mc_unum_t *unump)
 {
 	mcamd_hdl_t mcamd;
 	int rc;
@@ -437,8 +437,8 @@
 
 	rw_enter(&mc_lock, RW_READER);
 
-	rc = mcamd_patounum(&mcamd,
-	    (mcamd_node_t *)mc_list, pa, synd, syndtype, unump);
+	rc = mcamd_patounum(&mcamd, (mcamd_node_t *)mc_list, pa,
+	    valid_hi, valid_lo, synd, syndtype, unump);
 
 #ifdef DEBUG
 	/*
--- a/usr/src/uts/i86pc/os/cmi.c	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/uts/i86pc/os/cmi.c	Fri Nov 24 01:54:59 2006 -0800
@@ -312,7 +312,8 @@
 }
 
 int
-cmi_mc_patounum(uint64_t pa, uint32_t synd, int syndtype, mc_unum_t *up)
+cmi_mc_patounum(uint64_t pa, uint8_t valid_hi, uint8_t valid_lo, uint32_t synd,
+    int syndtype, mc_unum_t *up)
 {
 	const struct cmi_mc_ops *mcops;
 	cpu_t *cp = CPU;
@@ -321,7 +322,8 @@
 	    (mcops = CMI_OPS(cp)->cmi_mc_getops(CMI_DATA(cp))) == NULL)
 		return (-1);	/* not registered yet */
 
-	return (mcops->cmi_mc_patounum(CMI_DATA(cp), pa, synd, syndtype, up));
+	return (mcops->cmi_mc_patounum(CMI_DATA(cp), pa, valid_hi, valid_lo,
+	    synd, syndtype, up));
 }
 
 int
--- a/usr/src/uts/i86pc/sys/cpu_module.h	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/uts/i86pc/sys/cpu_module.h	Fri Nov 24 01:54:59 2006 -0800
@@ -59,7 +59,8 @@
 extern void cmi_mca_poke(void);
 
 extern void cmi_mc_register(struct cpu *, const struct cmi_mc_ops *, void *);
-extern int cmi_mc_patounum(uint64_t, uint32_t, int, mc_unum_t *);
+extern int cmi_mc_patounum(uint64_t, uint8_t, uint8_t, uint32_t, int,
+    mc_unum_t *);
 extern int cmi_mc_unumtopa(mc_unum_t *, nvlist_t *, uint64_t *);
 
 #ifdef __cplusplus
--- a/usr/src/uts/i86pc/sys/cpu_module_impl.h	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/uts/i86pc/sys/cpu_module_impl.h	Fri Nov 24 01:54:59 2006 -0800
@@ -38,7 +38,8 @@
 #endif
 
 typedef struct cmi_mc_ops {
-	int (*cmi_mc_patounum)(void *, uint64_t, uint32_t, int, mc_unum_t *);
+	int (*cmi_mc_patounum)(void *, uint64_t, uint8_t, uint8_t, uint32_t,
+	    int, mc_unum_t *);
 	int (*cmi_mc_unumtopa)(void *, mc_unum_t *, nvlist_t *, uint64_t *);
 } cmi_mc_ops_t;
 
--- a/usr/src/uts/intel/sys/mc_amd.h	Fri Nov 24 01:29:43 2006 -0800
+++ b/usr/src/uts/intel/sys/mc_amd.h	Fri Nov 24 01:54:59 2006 -0800
@@ -34,7 +34,8 @@
  * The mc-amd driver exports an nvlist to userland, where the primary
  * consumer is the "chip" topology enumerator for this platform type which
  * builds a full topology subtree from this information.  Others can use
- * it, too, but don't depend on it not changing without an ARC contract.
+ * it, too, but don't depend on it not changing without an ARC contract
+ * (and the contract should probably concern the topology, not this nvlist).
  *
  * In the initial mc-amd implementation this nvlist was not versioned;
  * we'll think of that as version 0 and it may be recognised by the absence
@@ -313,7 +314,7 @@
 	} _fmt_revFG;
 };
 
-#define	MC_CSBASE(up, rev) (MC_REV_MATCH(rev, MC_REV_F) ?	\
+#define	MC_CSBASE(up, rev) (MC_REV_MATCH(rev, MC_REVS_FG) ?	\
 	(uint64_t)MCREG_FIELD_revFG(up, BaseAddrHi) << 27 |		\
 	(uint64_t)MCREG_FIELD_revFG(up, BaseAddrLo) << 13 :		\
 	(uint64_t)MCREG_FIELD_preF(up, BaseAddrHi) << 25 |		\
@@ -347,15 +348,15 @@
 	} _fmt_revFG;
 };
 
-#define	MC_CSMASKLO_LOBIT(rev) (MC_REV_MATCH(rev, MC_REV_F) ? 13 : 13)
-#define	MC_CSMASKLO_HIBIT(rev) (MC_REV_MATCH(rev, MC_REV_F) ? 21 : 19)
+#define	MC_CSMASKLO_LOBIT(rev) (MC_REV_MATCH(rev, MC_REVS_FG) ? 13 : 13)
+#define	MC_CSMASKLO_HIBIT(rev) (MC_REV_MATCH(rev, MC_REVS_FG) ? 21 : 19)
 
-#define	MC_CSMASKHI_LOBIT(rev) (MC_REV_MATCH(rev, MC_REV_F) ? 27 : 25)
-#define	MC_CSMASKHI_HIBIT(rev) (MC_REV_MATCH(rev, MC_REV_F) ? 36 : 33)
+#define	MC_CSMASKHI_LOBIT(rev) (MC_REV_MATCH(rev, MC_REVS_FG) ? 27 : 25)
+#define	MC_CSMASKHI_HIBIT(rev) (MC_REV_MATCH(rev, MC_REVS_FG) ? 36 : 33)
 
-#define	MC_CSMASK_UNMASKABLE(rev) (MC_REV_MATCH(rev, MC_REV_F) ? 0 : 2)
+#define	MC_CSMASK_UNMASKABLE(rev) (MC_REV_MATCH(rev, MC_REVS_FG) ? 0 : 2)
 
-#define	MC_CSMASK(up, rev) (MC_REV_MATCH(rev, MC_REV_F) ?		\
+#define	MC_CSMASK(up, rev) (MC_REV_MATCH(rev, MC_REVS_FG) ?		\
 	(uint64_t)MCREG_FIELD_revFG(up, AddrMaskHi) << 27 |		\
 	(uint64_t)MCREG_FIELD_revFG(up, AddrMaskLo) << 13 | 0x7c01fff :	\
 	(uint64_t)MCREG_FIELD_preF(up, AddrMaskHi) << 25 |		\