Merge remote-tracking branches 'ras/edac-cxl', 'ras/edac-drivers' and 'ras/edac-misc...
authorBorislav Petkov (AMD) <bp@alien8.de>
Tue, 25 Mar 2025 13:53:27 +0000 (14:53 +0100)
committerBorislav Petkov (AMD) <bp@alien8.de>
Tue, 25 Mar 2025 13:53:27 +0000 (14:53 +0100)
* ras/edac-cxl:
  EDAC/device: Fix dev_set_name() format string
  EDAC: Update memory repair control interface for memory sparing feature
  EDAC: Add a memory repair control feature
  EDAC: Add a Error Check Scrub control feature
  EDAC: Add scrub control feature
  EDAC: Add support for EDAC device features control

* ras/edac-drivers:
  EDAC/ie31200: Switch Raptor Lake-S to interrupt mode
  EDAC/ie31200: Add Intel Raptor Lake-S SoCs support
  EDAC/ie31200: Break up ie31200_probe1()
  EDAC/ie31200: Fold the two channel loops into one loop
  EDAC/ie31200: Make struct dimm_data contain decoded information
  EDAC/ie31200: Make the memory controller resources configurable
  EDAC/ie31200: Simplify the pci_device_id table
  EDAC/ie31200: Fix the 3rd parameter name of *populate_dimm_info()
  EDAC/ie31200: Fix the error path order of ie31200_init()
  EDAC/ie31200: Fix the DIMM size mask for several SoCs
  EDAC/ie31200: Fix the size of EDAC_MC_LAYER_CHIP_SELECT layer
  EDAC/{skx_common,i10nm}: Fix some missing error reports on Emerald Rapids
  EDAC/igen6: Fix the flood of invalid error reports
  EDAC/ie31200: work around false positive build warning

* ras/edac-misc:
  MAINTAINERS: Add a secondary maintainer for bluefield_edac
  EDAC/pnd2: Make read-only const array intlv static
  EDAC/igen6: Constify struct res_config
  EDAC/amd64: Simplify return statement in dct_ecc_enabled()
  EDAC: Use string choice helper functions

Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
1  2  3 
drivers/edac/Kconfig
drivers/edac/igen6_edac.c

Simple merge
index fdf3a84fe6988b62ff608fd085241019e08ae992,595908af9e5c93e78480247daaf56dedbc3d9de2,38e624209b0f40a8611759860b464d56ebab0b2a..5807517ee32dec441db1219d1464ca70792c8e51
@@@@ -785,13 -785,22 -785,13 +785,22 @@@@ static u64 ecclog_read_and_clear(struc
   {
        u64 ecclog = readq(imc->window + ECC_ERROR_LOG_OFFSET);
   
- -     if (ecclog & (ECC_ERROR_LOG_CE | ECC_ERROR_LOG_UE)) {
- -             /* Clear CE/UE bits by writing 1s */
- -             writeq(ecclog, imc->window + ECC_ERROR_LOG_OFFSET);
- -             return ecclog;
- -     }
+ +     /*
+ +      * Quirk: The ECC_ERROR_LOG register of certain SoCs may contain
+ +      *        the invalid value ~0. This will result in a flood of invalid
+ +      *        error reports in polling mode. Skip it.
+ +      */
+ +     if (ecclog == ~0)
+ +             return 0;
  +
-       return 0;
+ +     /* Neither a CE nor a UE. Skip it.*/
+ +     if (!(ecclog & (ECC_ERROR_LOG_CE | ECC_ERROR_LOG_UE)))
+ +             return 0;
+  
  -     return 0;
+ +     /* Clear CE/UE bits by writing 1s */
+ +     writeq(ecclog, imc->window + ECC_ERROR_LOG_OFFSET);
+ +
+ +     return ecclog;
   }
   
   static void errsts_clear(struct igen6_imc *imc)