Hi Zhao, kernel test robot noticed the following build errors: [auto build test ERROR on ras/edac-for-next] [also build test ERROR on robh/for-next linus/master v6.11-rc4 next-20240821] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Zhao-Qunqin/Loongarch-EDAC-driver-for-loongson-memory-controller/20240821-145127 base: https://git.kernel.org/pub/scm/linux/kernel/git/ras/ras.git edac-for-next patch link: https://lore.kernel.org/r/20240821064728.8642-2-zhaoqunqin%40loongson.cn patch subject: [PATCH v1 1/2] Loongarch: EDAC driver for loongson memory controller config: loongarch-allmodconfig (https://download.01.org/0day-ci/archive/20240822/202408220634.Irq2TUcL-lkp@xxxxxxxxx/config) compiler: loongarch64-linux-gcc (GCC) 14.1.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240822/202408220634.Irq2TUcL-lkp@xxxxxxxxx/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@xxxxxxxxx> | Closes: https://lore.kernel.org/oe-kbuild-all/202408220634.Irq2TUcL-lkp@xxxxxxxxx/ All errors (new ones prefixed by >>): drivers/edac/loongson_edac.c: In function 'get_dimm_config': >> drivers/edac/loongson_edac.c:90:16: error: implicit declaration of function 'EDAC_DIMM_PTR' [-Wimplicit-function-declaration] 90 | dimm = EDAC_DIMM_PTR(mci->layers, mci->dimms, mci->n_layers, | ^~~~~~~~~~~~~ >> drivers/edac/loongson_edac.c:90:14: error: assignment to 'struct dimm_info *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 90 | dimm = EDAC_DIMM_PTR(mci->layers, mci->dimms, mci->n_layers, | ^ drivers/edac/loongson_edac.c: At top level: >> drivers/edac/loongson_edac.c:181:27: error: initialization of 'void (*)(struct platform_device *)' from incompatible pointer type 'int (*)(struct platform_device *)' [-Wincompatible-pointer-types] 181 | .remove = loongson_edac_remove, | ^~~~~~~~~~~~~~~~~~~~ drivers/edac/loongson_edac.c:181:27: note: (near initialization for 'loongson_edac_driver.<anonymous>.remove') vim +/EDAC_DIMM_PTR +90 drivers/edac/loongson_edac.c 80 81 static int get_dimm_config(struct mem_ctl_info *mci) 82 { 83 u32 size, npages; 84 struct dimm_info *dimm; 85 86 /* size not used */ 87 size = -1; 88 npages = MiB_TO_PAGES(size); 89 > 90 dimm = EDAC_DIMM_PTR(mci->layers, mci->dimms, mci->n_layers, 91 0, 0, 0); 92 dimm->nr_pages = npages; 93 snprintf(dimm->label, sizeof(dimm->label), 94 "MC#%uChannel#%u_DIMM#%u", 95 mci->mc_idx, 0, 0); 96 dimm->grain = 8; 97 98 return 0; 99 } 100 101 static void loongson_pvt_init(struct mem_ctl_info *mci, u64 *vbase) 102 { 103 struct loongson_edac_pvt *pvt = mci->pvt_info; 104 105 pvt->ecc_base = vbase; 106 pvt->last_ce_count = loongson_read_ecc(mci); 107 } 108 109 static int loongson_edac_probe(struct platform_device *pdev) 110 { 111 struct resource *rs; 112 struct mem_ctl_info *mci; 113 struct edac_mc_layer layers[2]; 114 struct loongson_edac_pvt *pvt; 115 u64 *vbase = NULL; 116 117 rs = platform_get_resource(pdev, IORESOURCE_MEM, 0); 118 if (!rs) 119 return -EINVAL; 120 if (rs->start) { 121 vbase = devm_ioremap(&pdev->dev, rs->start, resource_size(rs)); 122 if (!vbase) 123 return -ENOMEM; 124 } 125 126 /* allocate a new MC control structure */ 127 layers[0].type = EDAC_MC_LAYER_CHANNEL; 128 layers[0].size = 1; 129 layers[0].is_virt_csrow = false; 130 layers[1].type = EDAC_MC_LAYER_SLOT; 131 layers[1].size = 1; 132 layers[1].is_virt_csrow = true; 133 mci = edac_mc_alloc(0, ARRAY_SIZE(layers), layers, sizeof(*pvt)); 134 if (mci == NULL) 135 return -ENOMEM; 136 137 edac_dbg(0, "MC: mci = %p\n", mci); 138 139 mci->mc_idx = idx++; 140 mci->mtype_cap = MEM_FLAG_RDDR4; 141 mci->edac_ctl_cap = EDAC_FLAG_NONE; 142 mci->edac_cap = EDAC_FLAG_NONE; 143 mci->mod_name = "loongson_edac.c"; 144 mci->ctl_name = "loongson_edac_ctl"; 145 mci->dev_name = "loongson_edac_dev"; 146 mci->ctl_page_to_phys = NULL; 147 mci->pdev = &pdev->dev; 148 mci->error_desc.grain = 8; 149 /* Set the function pointer to an actual operation function */ 150 mci->edac_check = loongson_edac_check; 151 152 loongson_pvt_init(mci, vbase); 153 get_dimm_config(mci); 154 155 if (edac_mc_add_mc(mci)) { 156 edac_dbg(0, "MC: failed edac_mc_add_mc()\n"); 157 edac_mc_free(mci); 158 } 159 return 0; 160 } 161 162 static int loongson_edac_remove(struct platform_device *pdev) 163 { 164 struct mem_ctl_info *mci = edac_mc_del_mc(&pdev->dev); 165 166 if (mci) { 167 edac_mc_free(mci); 168 return 0; 169 } 170 return -ENODEV; 171 } 172 173 static const struct of_device_id loongson_edac_of_match[] = { 174 { .compatible = "loongson,ls-mc-edac", }, 175 {} 176 }; 177 MODULE_DEVICE_TABLE(of, loongson_edac_of_match); 178 179 static struct platform_driver loongson_edac_driver = { 180 .probe = loongson_edac_probe, > 181 .remove = loongson_edac_remove, 182 .driver = { 183 .name = "ls-mc-edac", 184 .owner = THIS_MODULE, 185 .of_match_table = loongson_edac_of_match, 186 }, 187 }; 188 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki