linux/drivers/edac
Qiuxu Zhuo 29ce9e71e9 EDAC/{skx_common,i10nm}: Fix the loss of saved RRL for HBM pseudo channel 0
[ Upstream commit eeed3e03f4 ]

When enabling the retry_rd_err_log (RRL) feature during the loading of the
i10nm_edac driver with the module parameter retry_rd_err_log=2 (Linux RRL
control mode), the default values of the control bits of RRL are saved so
that they can be restored during the unloading of the driver.

In the current code, the RRL of pseudo channel 1 of HBM overwrites pseudo
channel 0 during the loading of the driver, resulting in the loss of saved
RRL for pseudo channel 0. This causes the RRL of pseudo channel 0 of HBM to
be wrongly restored with the values from pseudo channel 1 when unloading
the driver.

Fix this issue by creating two separate groups of RRL control registers
per channel to save default RRL settings of two {sub-,pseudo-}channels.

Fixes: acd4cf68fe ("EDAC/i10nm: Retrieve and print retry_rd_err_log registers for HBM")
Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Tested-by: Feng Xu <feng.f.xu@intel.com>
Link: https://lore.kernel.org/r/20250417150724.1170168-3-qiuxu.zhuo@intel.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2025-06-19 15:31:31 +02:00
..
al_mc_edac.c EDAC/al_mc: Make use of the helper function devm_add_action_or_reset() 2021-09-28 18:35:11 +02:00
altera_edac.c EDAC/altera: Set DDR and SDMMC interrupt mask before registration 2025-05-09 09:50:30 +02:00
altera_edac.h EDAC/altera: Set DDR and SDMMC interrupt mask before registration 2025-05-09 09:50:30 +02:00
amd64_edac.c EDAC/amd64: Simplify ECC check on unified memory controllers 2024-12-27 14:02:06 +01:00
amd64_edac.h EDAC/amd64: Remove unused register accesses 2024-06-12 11:33:45 +02:00
amd76x_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
amd8111_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
amd8111_edac.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333 2019-06-05 17:37:06 +02:00
amd8131_edac.c EDAC/amd81[13]1: Remove trailing newline from MODULE_AUTHOR 2023-03-28 15:26:52 +02:00
amd8131_edac.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333 2019-06-05 17:37:06 +02:00
armada_xp_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
aspeed_edac.c EDAC/aspeed: Convert to platform remove callback returning void 2023-11-20 21:26:01 +01:00
bluefield_edac.c EDAC/bluefield: Fix potential integer overflow 2024-12-05 14:01:16 +01:00
cell_edac.c EDAC/cell: Convert to platform remove callback returning void 2023-11-20 21:39:13 +01:00
cpc925_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
debugfs.c ARM: 8892/1: EDAC: Add missing debugfs_create_x32 wrapper 2019-08-29 07:58:01 +01:00
dmc520_edac.c EDAC/dmc520: Use devm_platform_ioremap_resource() 2024-06-23 10:48:55 +02:00
e7xxx_edac.c EDAC: Sanitize MODULE_AUTHOR strings 2023-03-28 15:43:30 +02:00
e752x_edac.c EDAC: Sanitize MODULE_AUTHOR strings 2023-03-28 15:43:30 +02:00
edac_device.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
edac_device.h EDAC: Remove unused struct members 2024-03-27 18:26:58 +01:00
edac_device_sysfs.c EDAC/device: Remove edac_dev_sysfs_block_attribute::store() 2024-03-27 18:26:57 +01:00
edac_mc.c EDAC/mc: Add support for HBM3 memory type 2023-11-28 16:39:12 +01:00
edac_mc.h EDAC/mc: Determine mci pointer from the error descriptor 2020-02-17 13:05:10 +01:00
edac_mc_sysfs.c EDAC/mc_sysfs: Convert sprintf()/snprintf() to sysfs_emit() 2024-04-04 18:23:57 +02:00
edac_module.c EDAC: constantify the struct bus_type usage 2024-01-04 14:34:27 +01:00
edac_module.h EDAC/device: Fix period calculation in edac_device_reset_delay_period() 2022-12-30 15:51:41 +01:00
edac_pci.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_56.RULE (part 2) 2022-06-10 14:51:35 +02:00
edac_pci.h EDAC: Remove unused struct members 2024-03-27 18:26:58 +01:00
edac_pci_sysfs.c Driver core changes for 6.8-rc1 2024-01-18 09:48:40 -08:00
fsl_ddr_edac.c EDAC/fsl_ddr: Fix bad bit shift operations 2024-12-05 14:01:17 +01:00
fsl_ddr_edac.h EDAC/fsl_ddr: Convert to platform remove callback returning void 2023-11-20 23:34:04 +01:00
ghes_edac.c EDAC/ghes: Add missing newline to pr_info() statement 2024-05-28 16:13:09 +02:00
highbank_l2_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
highbank_mc_edac.c EDAC/highbank_mc: Convert to platform remove callback returning void 2023-11-20 22:33:52 +01:00
i7core_edac.c EDAC/{sb,i7core}_edac: Do not use a plain integer for a NULL pointer 2023-11-28 15:43:43 +01:00
i10nm_base.c EDAC/{skx_common,i10nm}: Fix the loss of saved RRL for HBM pseudo channel 0 2025-06-19 15:31:31 +02:00
i3000_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
i3200_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
i5000_edac.c EDAC: Sanitize MODULE_AUTHOR strings 2023-03-28 15:43:30 +02:00
i5100_edac.c EDAC: Sanitize MODULE_AUTHOR strings 2023-03-28 15:43:30 +02:00
i5400_edac.c EDAC/i5400: Fix typo in comment: vaious -> various 2022-11-25 19:29:02 +01:00
i7300_edac.c EDAC/i7300: Correct the i7300_exit() function name in comment 2022-09-23 23:07:17 +02:00
i82443bxgx_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
i82860_edac.c EDAC: Sanitize MODULE_AUTHOR strings 2023-03-28 15:43:30 +02:00
i82875p_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
i82975x_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
ie31200_edac.c EDAC/ie31200: work around false positive build warning 2025-05-29 11:02:43 +02:00
igen6_edac.c EDAC/igen6: Avoid segmentation fault on module unload 2024-12-05 14:01:18 +01:00
Kconfig EDAC: Drop obsolete PPC4xx driver 2024-09-05 16:56:38 +02:00
layerscape_edac.c EDAC: Add missing MODULE_DESCRIPTION() macros 2024-06-29 16:21:01 +02:00
Makefile EDAC: Drop obsolete PPC4xx driver 2024-09-05 16:56:38 +02:00
mce_amd.c x86/cpu/amd: Provide a separate accessor for Node ID 2024-02-15 22:07:37 +01:00
mce_amd.h x86/mce/amd, edac: Remove report_gart_errors 2020-04-14 15:53:46 +02:00
mpc85xx_edac.c EDAC: Add missing MODULE_DESCRIPTION() macros 2024-06-29 16:21:01 +02:00
mpc85xx_edac.h treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_56.RULE (part 2) 2022-06-10 14:51:35 +02:00
npcm_edac.c EDAC/npcm: Convert to platform remove callback returning void 2023-11-20 22:52:14 +01:00
octeon_edac-l2c.c EDAC: Add missing MODULE_DESCRIPTION() macros 2024-06-29 16:21:01 +02:00
octeon_edac-lmc.c EDAC: Add missing MODULE_DESCRIPTION() macros 2024-06-29 16:21:01 +02:00
octeon_edac-pc.c EDAC: Add missing MODULE_DESCRIPTION() macros 2024-06-29 16:21:01 +02:00
octeon_edac-pci.c EDAC: Add missing MODULE_DESCRIPTION() macros 2024-06-29 16:21:01 +02:00
pasemi_edac.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333 2019-06-05 17:37:06 +02:00
pnd2_edac.c EDAC, pnd2: Switch to new Intel CPU model defines 2024-05-28 16:03:43 -07:00
pnd2_edac.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288 2019-06-05 17:36:37 +02:00
qcom_edac.c EDAC/qcom: Correct interrupt enable register configuration 2025-02-27 04:30:23 -08:00
r82600_edac.c EDAC: Sanitize MODULE_AUTHOR strings 2023-03-28 15:43:30 +02:00
sb_edac.c EDAC/sb_edac: Fix the compile warning of large frame size 2024-09-03 15:09:22 -07:00
sifive_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
skx_base.c EDAC/{skx_common,skx,i10nm}: Move the common debug code to skx_common 2024-09-03 12:35:06 -07:00
skx_common.c EDAC/skx_common: Fix general protection fault 2025-06-19 15:31:31 +02:00
skx_common.h EDAC/{skx_common,i10nm}: Fix the loss of saved RRL for HBM pseudo channel 0 2025-06-19 15:31:31 +02:00
synopsys_edac.c EDAC/synopsys: Fix error injection on Zynq UltraScale+ 2024-08-01 16:27:46 +02:00
thunderx_edac.c EDAC/thunderx: Remove unused struct error_syndrome 2024-05-27 14:42:04 +02:00
ti_edac.c EDAC/ti: Convert to platform remove callback returning void 2023-11-20 23:30:09 +01:00
versal_edac.c EDAC/versal: Do not log total error counts 2024-04-25 18:08:05 +02:00
wq.c EDAC/wq: Remove unneeded flush_workqueue() 2022-08-25 10:50:35 +02:00
x38_edac.c EDAC: Do not issue useless debug statements in the polling routine 2020-10-26 12:59:56 +01:00
xgene_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00
zynqmp_edac.c EDAC: Remove dynamic attributes from edac_device_alloc_ctl_info() 2024-03-27 18:26:58 +01:00