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 <qiuxu.zhuo@intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Tested-by: Shawn Fan <shawn.fan@intel.com>
Link: https://patch.msgid.link/20260318023118.2704139-1-qiuxu.zhuo@intel.com
This commit is contained in:
Qiuxu Zhuo 2026-03-18 10:31:18 +08:00 committed by Tony Luck
parent f42f3076dd
commit 95ad29eb1b

View File

@ -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;
}