[PATCH 2/3] EDAC: i5100: disable error reporting at teardown and create helper

From: Tushar Tibude

Date: Thu Apr 30 2026 - 04:46:25 EST


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@xxxxxxxxx>
---
drivers/edac/i5100_edac.c | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/drivers/edac/i5100_edac.c b/drivers/edac/i5100_edac.c
index d470afe65..d30919ceb 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;
--
2.43.0