Commit b3d70059 authored by Qiuxu Zhuo's avatar Qiuxu Zhuo Committed by Tony Luck
Browse files

EDAC/{skx_common,skx,i10nm}: Make skx_register_mci() independent of pci_dev



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: default avatarYi Lai <yi1.lai@intel.com>
Signed-off-by: default avatarQiuxu Zhuo <qiuxu.zhuo@intel.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
Link: https://patch.msgid.link/20251119134132.2389472-2-qiuxu.zhuo@intel.com
parent cdf5ecc3
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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)
+2 −2
Original line number Diff line number Diff line
@@ -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)
+5 −5
Original line number Diff line number Diff line
@@ -545,9 +545,9 @@ int skx_get_nvdimm_info(struct dimm_info *dimm, struct skx_imc *imc,
}
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))) {
+1 −1
Original line number Diff line number Diff line
@@ -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);