Want modern Intel IMC driver
With subsequent generations of hardware, Intel has new PCI IDs and different aspects to the memory controller. It'd be good if we could support those for the following hardware generations that are in the fleet:
- Sandy Bridge
Note that Ivy Bridge / Broadwell have minor changes from their main processors and should be rather small changes to support.
We should probably have a generic Intel IMC driver that can change based on the generation rather than having to write one from scratch per generation. But whether or not that will make sense will ultimately depend on the details of each generation and how much duplication there is.
To test this, I've booted this on a variety of platforms, making sure to cover one of each of the different generations of hardware. Specifically this means:
- Sandy Bridge EP
- Ivy Bridge EP
- Haswell EP
- Broadwell EP
- Skylake Gold
- Cascade Lake Gold/Platinum
For each of the above platforms, I made sure of the following:
- That we successfully attached the imc driver and found all of the stubs
- That we successfully had DIMM topology information in fmtopo that mirrored what physically existed
- That we could manually use the mcdecode utility on supported configurations
- That we could dump the memory controller information to a file and then use mcdecode to decode it on another platform
Unfortunately, it is very hard to exercise the MCE path for these changes so the decoding ioctl is the best that I could do.
I further tested this by the full suite of decoding unit tests. These were ran as part of both the os_tests test suite which all passed and on their own. These provide pretty good coverage of the actual decoding parts (assuming one is reading the data correctly from hardware).
Finally, I also tested these changes on a few platforms where these wouldn't come up at all. This includes the following:
- Haswell 1s
- AMD EPYC 2s
- Intel Kaby Lake NUC
- Intel Coffee Lake platform
On all of them, the older SMBIOS based method for DIMMs still came through and everything else seemed to boot and at least pass a sanity check. The imcstub driver was not attached anywhere.