From: Qiuxu Zhuo Date: Wed, 18 Mar 2026 02:31:18 +0000 (+0800) Subject: EDAC/i10nm: Add driver decoder for Granite Rapids server X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=95ad29eb1baec322f31ddb247e5bf36f156578cf;p=thirdparty%2Flinux.git EDAC/i10nm: Add driver decoder for Granite Rapids server Current i10nm_edac only supports the firmware decoder (ACPI DSM methods) for Granite Rapids servers. Add the driver decoder, which directly extracts topology information from the IMC machine check bank IA32_MCi_MISC MSRs, to improve decoding performance for Granite Rapids. [Tony: Updated commit comment] Signed-off-by: Qiuxu Zhuo Signed-off-by: Tony Luck Tested-by: Shawn Fan Link: https://patch.msgid.link/20260318023118.2704139-1-qiuxu.zhuo@intel.com --- diff --git a/drivers/edac/i10nm_base.c b/drivers/edac/i10nm_base.c index 89b3e8cc38b1a..6f61b76142307 100644 --- a/drivers/edac/i10nm_base.c +++ b/drivers/edac/i10nm_base.c @@ -580,6 +580,10 @@ static bool i10nm_mc_decode_available(struct mce *mce) if (bank < 13 || bank > 20) return false; break; + case GNR: + if (bank < 13 || bank > 24) + return false; + break; default: return false; } @@ -637,6 +641,16 @@ static bool i10nm_mc_decode(struct decoded_addr *res) res->rank = GET_BITFIELD(m->misc, 57, 57); res->dimm = GET_BITFIELD(m->misc, 58, 58); break; + case GNR: + res->imc = m->bank - 13; + res->channel = 0; + res->column = GET_BITFIELD(m->misc, 9, 18) << 2; + res->row = GET_BITFIELD(m->misc, 19, 36); + res->bank_group = GET_BITFIELD(m->misc, 39, 41); + res->bank_address = GET_BITFIELD(m->misc, 37, 38); + res->rank = GET_BITFIELD(m->misc, 55, 56); + res->dimm = GET_BITFIELD(m->misc, 57, 57); + break; default: return false; }