]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
EDAC/{skx_common,skx,i10nm}: Make skx_register_mci() independent of pci_dev
authorQiuxu Zhuo <qiuxu.zhuo@intel.com>
Wed, 19 Nov 2025 20:11:40 +0000 (12:11 -0800)
committerTony Luck <tony.luck@intel.com>
Wed, 19 Nov 2025 20:11:40 +0000 (12:11 -0800)
Memory controllers in the new Intel server CPUs, such as Diamond Rapids,
are presented as MMIO-based devices rather than PCI devices.
Modify skx_register_mci() to be independent of 'pci_dev' and use a generic
'dev' of 'struct device' to prepare for support of such MMIO-based memory
controllers.

Tested-by: Yi Lai <yi1.lai@intel.com>
Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Link: https://patch.msgid.link/20251119134132.2389472-2-qiuxu.zhuo@intel.com
drivers/edac/i10nm_base.c
drivers/edac/skx_base.c
drivers/edac/skx_common.c
drivers/edac/skx_common.h

index 2010a47149f4489909e656d5a3f3493643559b5d..89b3e8cc38b1a14e013ef902a4384d82b17270a6 100644 (file)
@@ -1198,7 +1198,8 @@ static int __init i10nm_init(void)
                                d->imc[i].num_dimms    = cfg->ddr_dimm_num;
                        }
 
-                       rc = skx_register_mci(&d->imc[i], d->imc[i].mdev,
+                       rc = skx_register_mci(&d->imc[i], &d->imc[i].mdev->dev,
+                                             pci_name(d->imc[i].mdev),
                                              "Intel_10nm Socket", EDAC_MOD_STR,
                                              i10nm_get_dimm_config, cfg);
                        if (rc < 0)
index 078ddf95cc6e608a1bbd527cbb2b1518e6963c90..aa6593ccda2d86cc07e235bf29e5e01af5e2b469 100644 (file)
@@ -662,8 +662,8 @@ static int __init skx_init(void)
                        d->imc[i].src_id = src_id;
                        d->imc[i].num_channels = cfg->ddr_chan_num;
                        d->imc[i].num_dimms    = cfg->ddr_dimm_num;
-
-                       rc = skx_register_mci(&d->imc[i], d->imc[i].chan[0].cdev,
+                       rc = skx_register_mci(&d->imc[i], &d->imc[i].chan[0].cdev->dev,
+                                             pci_name(d->imc[i].chan[0].cdev),
                                              "Skylake Socket", EDAC_MOD_STR,
                                              skx_get_dimm_config, cfg);
                        if (rc < 0)
index 724842f512acacfba16ce7b1bbf620e020046c1f..cf58cb5951abf411560073fceb50f1aa99f51b0b 100644 (file)
@@ -545,9 +545,9 @@ unknown_size:
 }
 EXPORT_SYMBOL_GPL(skx_get_nvdimm_info);
 
-int skx_register_mci(struct skx_imc *imc, struct pci_dev *pdev,
-                    const char *ctl_name, const char *mod_str,
-                    get_dimm_config_f get_dimm_config,
+int skx_register_mci(struct skx_imc *imc, struct device *dev,
+                    const char *dev_name, const char *ctl_name,
+                    const char *mod_str, get_dimm_config_f get_dimm_config,
                     struct res_config *cfg)
 {
        struct mem_ctl_info *mci;
@@ -588,7 +588,7 @@ int skx_register_mci(struct skx_imc *imc, struct pci_dev *pdev,
        mci->edac_ctl_cap = EDAC_FLAG_NONE;
        mci->edac_cap = EDAC_FLAG_NONE;
        mci->mod_name = mod_str;
-       mci->dev_name = pci_name(pdev);
+       mci->dev_name = dev_name;
        mci->ctl_page_to_phys = NULL;
 
        rc = get_dimm_config(mci, cfg);
@@ -596,7 +596,7 @@ int skx_register_mci(struct skx_imc *imc, struct pci_dev *pdev,
                goto fail;
 
        /* Record ptr to the generic device */
-       mci->pdev = &pdev->dev;
+       mci->pdev = dev;
 
        /* Add this new MC control structure to EDAC's list of MCs */
        if (unlikely(edac_mc_add_mc(mci))) {
index 73ba89786cdfd5a5c240dad0cd0f16bda1060ac9..0be088f475878a014de1a285fce9b8837ce5982d 100644 (file)
@@ -302,7 +302,7 @@ int skx_get_dimm_info(u32 mtr, u32 mcmtr, u32 amap, struct dimm_info *dimm,
 int skx_get_nvdimm_info(struct dimm_info *dimm, struct skx_imc *imc,
                        int chan, int dimmno, const char *mod_str);
 
-int skx_register_mci(struct skx_imc *imc, struct pci_dev *pdev,
+int skx_register_mci(struct skx_imc *imc, struct device *dev, const char *dev_name,
                     const char *ctl_name, const char *mod_str,
                     get_dimm_config_f get_dimm_config,
                     struct res_config *cfg);