Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: 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

authored by

Qiuxu Zhuo and committed by
Tony Luck
b3d70059 cdf5ecc3

+10 -9
+2 -1
drivers/edac/i10nm_base.c
··· 1198 1198 d->imc[i].num_dimms = cfg->ddr_dimm_num; 1199 1199 } 1200 1200 1201 - rc = skx_register_mci(&d->imc[i], d->imc[i].mdev, 1201 + rc = skx_register_mci(&d->imc[i], &d->imc[i].mdev->dev, 1202 + pci_name(d->imc[i].mdev), 1202 1203 "Intel_10nm Socket", EDAC_MOD_STR, 1203 1204 i10nm_get_dimm_config, cfg); 1204 1205 if (rc < 0)
+2 -2
drivers/edac/skx_base.c
··· 662 662 d->imc[i].src_id = src_id; 663 663 d->imc[i].num_channels = cfg->ddr_chan_num; 664 664 d->imc[i].num_dimms = cfg->ddr_dimm_num; 665 - 666 - rc = skx_register_mci(&d->imc[i], d->imc[i].chan[0].cdev, 665 + rc = skx_register_mci(&d->imc[i], &d->imc[i].chan[0].cdev->dev, 666 + pci_name(d->imc[i].chan[0].cdev), 667 667 "Skylake Socket", EDAC_MOD_STR, 668 668 skx_get_dimm_config, cfg); 669 669 if (rc < 0)
+5 -5
drivers/edac/skx_common.c
··· 545 545 } 546 546 EXPORT_SYMBOL_GPL(skx_get_nvdimm_info); 547 547 548 - int skx_register_mci(struct skx_imc *imc, struct pci_dev *pdev, 549 - const char *ctl_name, const char *mod_str, 550 - get_dimm_config_f get_dimm_config, 548 + int skx_register_mci(struct skx_imc *imc, struct device *dev, 549 + const char *dev_name, const char *ctl_name, 550 + const char *mod_str, get_dimm_config_f get_dimm_config, 551 551 struct res_config *cfg) 552 552 { 553 553 struct mem_ctl_info *mci; ··· 588 588 mci->edac_ctl_cap = EDAC_FLAG_NONE; 589 589 mci->edac_cap = EDAC_FLAG_NONE; 590 590 mci->mod_name = mod_str; 591 - mci->dev_name = pci_name(pdev); 591 + mci->dev_name = dev_name; 592 592 mci->ctl_page_to_phys = NULL; 593 593 594 594 rc = get_dimm_config(mci, cfg); ··· 596 596 goto fail; 597 597 598 598 /* Record ptr to the generic device */ 599 - mci->pdev = &pdev->dev; 599 + mci->pdev = dev; 600 600 601 601 /* Add this new MC control structure to EDAC's list of MCs */ 602 602 if (unlikely(edac_mc_add_mc(mci))) {
+1 -1
drivers/edac/skx_common.h
··· 302 302 int skx_get_nvdimm_info(struct dimm_info *dimm, struct skx_imc *imc, 303 303 int chan, int dimmno, const char *mod_str); 304 304 305 - int skx_register_mci(struct skx_imc *imc, struct pci_dev *pdev, 305 + int skx_register_mci(struct skx_imc *imc, struct device *dev, const char *dev_name, 306 306 const char *ctl_name, const char *mod_str, 307 307 get_dimm_config_f get_dimm_config, 308 308 struct res_config *cfg);