summaryrefslogtreecommitdiff
path: root/drivers/edac
diff options
context:
space:
mode:
authorTushar Tibude <tushar.tibude1000@gmail.com>2026-04-30 14:12:22 +0530
committerTony Luck <tony.luck@intel.com>2026-05-29 08:34:11 -0700
commit2951f7bc4e8a6514112f365a971b8606824361b6 (patch)
tree5cdd218477c96407252a875f1e0b9c248f1ff50b /drivers/edac
parentdfe7d89d200b08f8387ca224039495b210272e28 (diff)
downloadlinux-next-2951f7bc4e8a6514112f365a971b8606824361b6.tar.gz
linux-next-2951f7bc4e8a6514112f365a971b8606824361b6.zip
EDAC/i5100: disable error reporting at teardown and create helper
Error reporting is enabled during init but not reverted when init fails. It is also not disabled at normal driver teardown. Create i5100_set_error_reporting() to enable/disable reporting. Move enable reporting write to after initialization success. Disable reporting at driver teardown. Signed-off-by: Tushar Tibude <tushar.tibude1000@gmail.com> Signed-off-by: Tony Luck <tony.luck@intel.com> Reviewed-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com> Link: https://patch.msgid.link/20260430084223.9298-3-tushar.tibude1000@gmail.com
Diffstat (limited to 'drivers/edac')
-rw-r--r--drivers/edac/i5100_edac.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/drivers/edac/i5100_edac.c b/drivers/edac/i5100_edac.c
index d470afe65001..d30919ceb22b 100644
--- a/drivers/edac/i5100_edac.c
+++ b/drivers/edac/i5100_edac.c
@@ -859,6 +859,21 @@ static void i5100_init_csrows(struct mem_ctl_info *mci)
}
}
+static void i5100_set_error_reporting(struct pci_dev *pdev, bool enable)
+{
+ u32 dw;
+
+ pci_read_config_dword(pdev, I5100_EMASK_MEM, &dw);
+
+ /* Enable with 0, disable with 1 */
+ if (enable)
+ dw &= ~I5100_FERR_NF_MEM_ANY_MASK;
+ else
+ dw |= I5100_FERR_NF_MEM_ANY_MASK;
+
+ pci_write_config_dword(pdev, I5100_EMASK_MEM, dw);
+}
+
/****************************************************************************
* Error injection routines
****************************************************************************/
@@ -1004,11 +1019,6 @@ static int i5100_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
pci_read_config_dword(pdev, I5100_MS, &dw);
ranksperch = !!(dw & (1 << 8)) * 2 + 4;
- /* enable error reporting... */
- pci_read_config_dword(pdev, I5100_EMASK_MEM, &dw);
- dw &= ~I5100_FERR_NF_MEM_ANY_MASK;
- pci_write_config_dword(pdev, I5100_EMASK_MEM, dw);
-
/* device 21, func 0, Channel 0 Memory Map, Error Flag/Mask, etc... */
ch0mm = pci_get_device_func(PCI_VENDOR_ID_INTEL,
PCI_DEVICE_ID_INTEL_5100_21, 0);
@@ -1125,6 +1135,9 @@ static int i5100_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
i5100_setup_debugfs(mci);
+ /* Enable error reporting on success */
+ i5100_set_error_reporting(pdev, true);
+
return ret;
bail_scrub:
@@ -1169,6 +1182,9 @@ static void i5100_remove_one(struct pci_dev *pdev)
priv = mci->pvt_info;
+ /* Disable error reporting at teardown */
+ i5100_set_error_reporting(pdev, false);
+
edac_debugfs_remove_recursive(priv->debugfs);
priv->scrub_enable = 0;