EDAC support for Arrow Lake-HX (8086:7d1c) - working out-of-tree driver, test hardware available

Emba Consulting <[email protected]> Fri, 10 Jul 2026 06:58:17 +0000
Newsgroups org.kernel.vger.linux-edac
Message-ID <SY9PR01MB108527BA385DE411FE1B69FB0A9FD2@SY9PR01MB10852.ausprd01.prod.outlook.com>
Hi,

I have Arrow Lake-HX hardware running sideband (80-bit) DDR5 ECC SODIMMs
and wanted EDAC error reporting for it. As of current mainline no driver
matches this die: igen6_edac covers the in-band-ECC Arrow Lake-U/H compute
dies (0x7d06/0x7d20/0x7d30), and ie31200_edac (which gained Raptor Lake-S,
Raptor Lake-HX and Bartlett Lake-S support recently) has no 7dxx IDs.

I wrote an out-of-tree driver derived from ie31200_edac and it works on my
machine - both IMCs register, DIMM topology decodes exactly, counters are
live, clean load/unload:

  https://github.com/zs311521/edac-arl-hx

Hardware:
- Intel Core Ultra 9 285HX (Arrow Lake-HX), stepping 2, microcode 0x11b,
  host bridge 00:00.0 = 8086:7d1c rev 01 (Minisforum MS-02)
- 2x SK hynix HMCG88AGBAA095N 32GB DDR5-5600 ECC SODIMM (2Rx8, one per IMC)
- BIOS reports Single-bit ECC active; MCHBAR = 0xfedc0000

Findings, in case they are useful:
- The register layout matches rpl_s_cfg for topology and error-log offsets.
  I validated from userspace before loading anything: MAD_DIMM at
  MCHBAR+0xd80c/+0xd810 decodes the physical population exactly (16 GiB,
  2 ranks, x8 per subchannel), ECCERRLOG at +0xe048/+0xe848, two IMC
  windows at BIT(16) stride.
- I deliberately did NOT reuse the MSR 0x791 error-log clear: the public
  EDC documentation for this family (doc 835538) describes clearing via
  PCI ERRSTS instead, and I could not verify the MSR's semantics on this
  die, so my module defaults to a no-write polling mode with
  report-on-change latching.
- Channel count is derived from MAD_DIMM population rather than CAPID0.
- My BIOS exposes no ACPI EINJ table, so I have not been able to exercise
  a real corrected error end to end.

Questions, so this can become a proper mainline patch (which I am happy to
write and submit as a dedicated cfg in ie31200_edac if you can confirm):

1. Is MSR 0x791 valid with the same semantics on ARL-HX, or should the
   error-log clear go through ERRSTS (or something else) on this die?
2. Is corrected-error CMCI delivery confirmed for ARL-HX out-of-band ECC,
   i.e. is .cmci = true correct here?
3. Should ARL-HX reuse rpl_s_cfg or get a dedicated cfg? The rank/width
   field widths in the ARL documentation look narrower than rpl_s_cfg's
   masks.

I can test patches on this machine and provide Tested-by.

Thanks,
Zura