From: Borislav Petkov (AMD) Date: Tue, 25 Mar 2025 13:53:27 +0000 (+0100) Subject: Merge remote-tracking branches 'ras/edac-cxl', 'ras/edac-drivers' and 'ras/edac-misc... X-Git-Tag: v6.15-rc1~198^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=298ffd537585ceb45034749d51d8a82c8f3f3c0c;p=thirdparty%2Fkernel%2Flinux.git Merge remote-tracking branches 'ras/edac-cxl', 'ras/edac-drivers' and 'ras/edac-misc' into edac-updates * 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) --- 298ffd537585ceb45034749d51d8a82c8f3f3c0c diff --cc drivers/edac/igen6_edac.c index fdf3a84fe6988,595908af9e5c9,38e624209b0f4..5807517ee32de --- a/drivers/edac/igen6_edac.c +++ b/drivers/edac/igen6_edac.c @@@@ -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)