summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr/src/cmd/fm/eversholt/files/i386/i86pc/amd64.esc7
-rw-r--r--usr/src/common/mc/mc-amd/mcamd_api.h2
-rw-r--r--usr/src/common/mc/mc-amd/mcamd_err.c10
-rw-r--r--usr/src/common/mc/mc-amd/mcamd_err.h8
-rw-r--r--usr/src/common/mc/mc-amd/mcamd_patounum.c56
-rw-r--r--usr/src/uts/i86pc/Makefile2
-rw-r--r--usr/src/uts/i86pc/cpu/amd_opteron/ao.h16
-rw-r--r--usr/src/uts/i86pc/cpu/amd_opteron/ao_mc.c13
-rw-r--r--usr/src/uts/i86pc/cpu/amd_opteron/ao_mca.c32
-rw-r--r--usr/src/uts/i86pc/cpu/amd_opteron/ao_mca_disp.in396
-rw-r--r--usr/src/uts/i86pc/cpu/scripts/Makefile7
-rw-r--r--usr/src/uts/i86pc/cpu/scripts/ao_gendisp.pl164
-rw-r--r--usr/src/uts/i86pc/io/mc/mcamd_subr.c8
-rw-r--r--usr/src/uts/i86pc/os/cmi.c6
-rw-r--r--usr/src/uts/i86pc/sys/cpu_module.h3
-rw-r--r--usr/src/uts/i86pc/sys/cpu_module_impl.h3
-rw-r--r--usr/src/uts/intel/sys/mc_amd.h17
17 files changed, 448 insertions, 302 deletions
diff --git a/usr/src/cmd/fm/eversholt/files/i386/i86pc/amd64.esc b/usr/src/cmd/fm/eversholt/files/i386/i86pc/amd64.esc
index 0bf5f5d600..b52ff16986 100644
--- a/usr/src/cmd/fm/eversholt/files/i386/i86pc/amd64.esc
+++ b/usr/src/cmd/fm/eversholt/files/i386/i86pc/amd64.esc
@@ -321,10 +321,11 @@ prop fault.memory.page_ck@chip/memory-controller/dimm/rank
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 };
diff --git a/usr/src/common/mc/mc-amd/mcamd_api.h b/usr/src/common/mc/mc-amd/mcamd_api.h
index 977b9dfe94..4053199ebd 100644
--- a/usr/src/common/mc/mc-amd/mcamd_api.h
+++ b/usr/src/common/mc/mc-amd/mcamd_api.h
@@ -197,7 +197,7 @@ union mcamd_dimm_offset_un {
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 *,
diff --git a/usr/src/common/mc/mc-amd/mcamd_err.c b/usr/src/common/mc/mc-amd/mcamd_err.c
index d0e1666423..689e556cd4 100644
--- a/usr/src/common/mc/mc-amd/mcamd_err.c
+++ b/usr/src/common/mc/mc-amd/mcamd_err.c
@@ -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) /
diff --git a/usr/src/common/mc/mc-amd/mcamd_err.h b/usr/src/common/mc/mc-amd/mcamd_err.h
index f9a762e211..f9dc53f32d 100644
--- a/usr/src/common/mc/mc-amd/mcamd_err.h
+++ b/usr/src/common/mc/mc-amd/mcamd_err.h
@@ -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 @@ enum {
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 *);
diff --git a/usr/src/common/mc/mc-amd/mcamd_patounum.c b/usr/src/common/mc/mc-amd/mcamd_patounum.c
index b58a751d60..594af7e7cc 100644
--- a/usr/src/common/mc/mc-amd/mcamd_patounum.c
+++ b/usr/src/common/mc/mc-amd/mcamd_patounum.c
@@ -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 @@ unum_fill(struct mcamd_hdl *hdl, mcamd_node_t *cs, int which,
*/
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 @@ mc_whichdimm(struct mcamd_hdl *hdl, mcamd_node_t *cs, uint64_t pa,
/*
* 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 @@ mc_whichdimm(struct mcamd_hdl *hdl, mcamd_node_t *cs, uint64_t pa,
*/
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 @@ mc_bkdg_patounum(struct mcamd_hdl *hdl, mcamd_node_t *mc, uint64_t pa,
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 @@ mc_bkdg_patounum(struct mcamd_hdl *hdl, mcamd_node_t *mc, uint64_t pa,
/*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 @@ mc_patounum(struct mcamd_hdl *hdl, mcamd_node_t *mc, uint64_t pa,
* 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 @@ mc_patounum(struct mcamd_hdl *hdl, mcamd_node_t *mc, uint64_t pa,
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 @@ mc_patounum(struct mcamd_hdl *hdl, mcamd_node_t *mc, uint64_t pa,
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)
diff --git a/usr/src/uts/i86pc/Makefile b/usr/src/uts/i86pc/Makefile
index 2ae5ed9c24..cfd649a46b 100644
--- a/usr/src/uts/i86pc/Makefile
+++ b/usr/src/uts/i86pc/Makefile
@@ -96,7 +96,7 @@ genassym unix $(KMODS): FRC
@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 \
diff --git a/usr/src/uts/i86pc/cpu/amd_opteron/ao.h b/usr/src/uts/i86pc/cpu/amd_opteron/ao.h
index 82e58bb638..89cc07ab1d 100644
--- a/usr/src/uts/i86pc/cpu/amd_opteron/ao.h
+++ b/usr/src/uts/i86pc/cpu/amd_opteron/ao.h
@@ -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 @@ extern ao_bank_regs_t ao_bank_regs[AMD_MCA_BANK_COUNT];
#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 @@ typedef struct ao_error_disp {
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 @@ typedef struct ao_bank_logout {
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 nvlist_t *ao_fmri_create(ao_data_t *, nv_alloc_t *);
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);
diff --git a/usr/src/uts/i86pc/cpu/amd_opteron/ao_mc.c b/usr/src/uts/i86pc/cpu/amd_opteron/ao_mc.c
index b2fd0ca82f..b958cfc31e 100644
--- a/usr/src/uts/i86pc/cpu/amd_opteron/ao_mc.c
+++ b/usr/src/uts/i86pc/cpu/amd_opteron/ao_mc.c
@@ -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 @@ ao_mc_getops(void *data)
}
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
diff --git a/usr/src/uts/i86pc/cpu/amd_opteron/ao_mca.c b/usr/src/uts/i86pc/cpu/amd_opteron/ao_mca.c
index 5b36685e9f..a4dc3e7660 100644
--- a/usr/src/uts/i86pc/cpu/amd_opteron/ao_mca.c
+++ b/usr/src/uts/i86pc/cpu/amd_opteron/ao_mca.c
@@ -130,11 +130,17 @@ static const ao_error_disp_t ao_disp_unknown = {
*/
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 @@ ao_mca_logout(ao_cpu_logout_t *acl, struct regs *rp, int *np, int skipnb,
/*
* 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 @@ ao_mca_logout(ao_cpu_logout_t *acl, struct regs *rp, int *np, int skipnb,
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 @@ ao_ereport_add_logout(ao_data_t *ao, nvlist_t *payload, nv_alloc_t *nva,
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 @@ ao_mca_post_init(void *data)
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;
diff --git a/usr/src/uts/i86pc/cpu/amd_opteron/ao_mca_disp.in b/usr/src/uts/i86pc/cpu/amd_opteron/ao_mca_disp.in
index 281f14301e..2a97a900e5 100644
--- a/usr/src/uts/i86pc/cpu/amd_opteron/ao_mca_disp.in
+++ b/usr/src/uts/i86pc/cpu/amd_opteron/ao_mca_disp.in
@@ -31,12 +31,12 @@ error = ereport.cpu.amd.dc.inf_sys_ecc1
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 @@ error = ereport.cpu.amd.dc.inf_l2_ecc1
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 @@ error = ereport.cpu.amd.dc.inf_sys_eccm
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 @@ error = ereport.cpu.amd.dc.inf_l2_eccm
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 @@ error = ereport.cpu.amd.dc.data_ecc1
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 @@ error = ereport.cpu.amd.dc.data_ecc1_uc
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 @@ error = ereport.cpu.amd.dc.data_eccm
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 @@ error = ereport.cpu.amd.dc.data_eccm
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 @@ error = ereport.cpu.amd.dc.tag_par
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 @@ error = ereport.cpu.amd.dc.stag_par
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 @@ error = ereport.cpu.amd.dc.l1tlb_par
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 @@ error = ereport.cpu.amd.dc.l1tlb_par
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 @@ error = ereport.cpu.amd.dc.l2tlb_par
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 @@ error = ereport.cpu.amd.dc.l2tlb_par
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 @@ error = ereport.cpu.amd.ic.inf_sys_ecc1
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 @@ error = ereport.cpu.amd.ic.inf_l2_ecc1
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 @@ error = ereport.cpu.amd.ic.inf_sys_eccm
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 @@ error = ereport.cpu.amd.ic.inf_l2_eccm
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 @@ error = ereport.cpu.amd.ic.data_par
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 @@ error = ereport.cpu.amd.ic.tag_par
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 @@ error = ereport.cpu.amd.ic.stag_par
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 @@ error = ereport.cpu.amd.ic.l1tlb_par
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 @@ error = ereport.cpu.amd.ic.l1tlb_par
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 @@ error = ereport.cpu.amd.ic.l2tlb_par
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 @@ error = ereport.cpu.amd.ic.l2tlb_par
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 @@ error = ereport.cpu.amd.ic.rdde
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 @@ error = ereport.cpu.amd.bu.l2d_ecc1
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 @@ error = ereport.cpu.amd.bu.l2d_eccm
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 @@ error = ereport.cpu.amd.bu.l2t_ecc1
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 @@ error = ereport.cpu.amd.bu.l2t_eccm
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 @@ error = ereport.cpu.amd.bu.l2t_par
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 @@ error = ereport.cpu.amd.bu.l2t_par
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 @@ error = ereport.cpu.amd.bu.l2t_par
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 @@ error = ereport.cpu.amd.bu.l2t_par
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 @@ error = ereport.cpu.amd.bu.s_ecc1
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 @@ error = ereport.cpu.amd.bu.s_eccm
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 @@ error = ereport.cpu.amd.bu.s_rde
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 @@ error = ereport.cpu.amd.ls.s_rde
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 @@ error = ereport.cpu.amd.nb.mem_ce
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 @@ error = ereport.cpu.amd.nb.mem_ue
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 @@ error = ereport.cpu.amd.nb.mem_ce
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 @@ error = ereport.cpu.amd.nb.mem_ue
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 @@ error = ereport.cpu.amd.nb.ht_crc
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 @@ error = ereport.cpu.amd.nb.ht_sync
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 @@ error = ereport.cpu.amd.nb.ma
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 @@ error = ereport.cpu.amd.nb.ta
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 @@ error = ereport.cpu.amd.nb.gart_walk
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 @@ error = ereport.cpu.amd.nb.rmw
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 @@ error = ereport.cpu.amd.nb.wdog
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 @@ error = ereport.cpu.amd.nb.dramaddr_par
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 =
diff --git a/usr/src/uts/i86pc/cpu/scripts/Makefile b/usr/src/uts/i86pc/cpu/scripts/Makefile
index f3509aa90e..4d40d76a64 100644
--- a/usr/src/uts/i86pc/cpu/scripts/Makefile
+++ b/usr/src/uts/i86pc/cpu/scripts/Makefile
@@ -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 @@ GROUP= bin
all install setup: $(PERLFILES)
-clean:
+clean clobber:
$(RM) $(PERLFILES)
include ../../../Makefile.targ
diff --git a/usr/src/uts/i86pc/cpu/scripts/ao_gendisp.pl b/usr/src/uts/i86pc/cpu/scripts/ao_gendisp.pl
index 268631f9dd..fa73ce0fa4 100644
--- a/usr/src/uts/i86pc/cpu/scripts/ao_gendisp.pl
+++ b/usr/src/uts/i86pc/cpu/scripts/ao_gendisp.pl
@@ -34,6 +34,10 @@ my $PROGNAME = basename($0);
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 @@ sub parsebail() {
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_begin() {
}
sub funcunit_end() {
- print "\tNULL\n};\n\n";
+ print "\t{ NULL }\n};\n\n";
}
sub error_begin() {
@@ -84,27 +142,34 @@ sub error_begin() {
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_funcunit() {
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_on() {
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 @@ sub state_code() {
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 @@ sub state_code() {
&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 @@ sub state_code() {
&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 @@ sub state_code() {
&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");
- &print_bits("pp_bits", @pp);
- &print_bits("ii_bits", @ii);
- &print_bits("r4_bits", @r4);
+ $::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;
+
+ 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 @@ sub state_flags() {
@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 @@ while (<INFILE>) {
}
}
- 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'");
diff --git a/usr/src/uts/i86pc/io/mc/mcamd_subr.c b/usr/src/uts/i86pc/io/mc/mcamd_subr.c
index 4b4fccf4ec..7ce0633a56 100644
--- a/usr/src/uts/i86pc/io/mc/mcamd_subr.c
+++ b/usr/src/uts/i86pc/io/mc/mcamd_subr.c
@@ -427,8 +427,8 @@ mcamd_mkhdl(mcamd_hdl_t *hdl)
/*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 @@ mcamd_patounum_wrap(void *arg, uint64_t pa, uint32_t synd, int syndtype,
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
/*
diff --git a/usr/src/uts/i86pc/os/cmi.c b/usr/src/uts/i86pc/os/cmi.c
index 1b788a4e99..fb1c494565 100644
--- a/usr/src/uts/i86pc/os/cmi.c
+++ b/usr/src/uts/i86pc/os/cmi.c
@@ -312,7 +312,8 @@ cmi_mc_register(cpu_t *cp, const cmi_mc_ops_t *mcops, void *mcdata)
}
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 @@ cmi_mc_patounum(uint64_t pa, uint32_t synd, int syndtype, mc_unum_t *up)
(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
diff --git a/usr/src/uts/i86pc/sys/cpu_module.h b/usr/src/uts/i86pc/sys/cpu_module.h
index 65f21a4565..1ae4e149cc 100644
--- a/usr/src/uts/i86pc/sys/cpu_module.h
+++ b/usr/src/uts/i86pc/sys/cpu_module.h
@@ -59,7 +59,8 @@ extern int cmi_mca_inject(cmi_mca_regs_t *, uint_t);
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
diff --git a/usr/src/uts/i86pc/sys/cpu_module_impl.h b/usr/src/uts/i86pc/sys/cpu_module_impl.h
index c68f537d64..5cec3131db 100644
--- a/usr/src/uts/i86pc/sys/cpu_module_impl.h
+++ b/usr/src/uts/i86pc/sys/cpu_module_impl.h
@@ -38,7 +38,8 @@ extern "C" {
#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;
diff --git a/usr/src/uts/intel/sys/mc_amd.h b/usr/src/uts/intel/sys/mc_amd.h
index c1fc1f2513..764c7a43d6 100644
--- a/usr/src/uts/intel/sys/mc_amd.h
+++ b/usr/src/uts/intel/sys/mc_amd.h
@@ -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 @@ union mcreg_csbase {
} _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 @@ union mcreg_csmask {
} _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 | \