tree:
https://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git for-mfd-next
head: 89e2fd3e750d33c697eff97a2c6804b735d1beb7
commit: 765f4122aee73587b62ad1c4e093d6d1d2468d75 [56/66] mfd: core: Make a best effort
attempt to match devices with the correct of_nodes
config: x86_64-randconfig-a011-20200717 (attached as .config)
compiler: clang version 12.0.0 (
https://github.com/llvm/llvm-project
ed6b578040a85977026c93bf4188f996148f3218)
reproduce (this is a W=1 build):
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
git checkout 765f4122aee73587b62ad1c4e093d6d1d2468d75
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
> drivers/mfd/mfd-core.c:216:11: error: implicit declaration of
function 'mfd_match_of_node_to_dev' [-Werror,-Wimplicit-function-declaration]
ret = mfd_match_of_node_to_dev(pdev, np, cell);
^
1 error generated.
vim +/mfd_match_of_node_to_dev +216 drivers/mfd/mfd-core.c
169
170 static int mfd_add_device(struct device *parent, int id,
171 const struct mfd_cell *cell,
172 struct resource *mem_base,
173 int irq_base, struct irq_domain *domain)
174 {
175 struct resource *res;
176 struct platform_device *pdev;
177 struct device_node *np = NULL;
178 struct mfd_of_node_entry *of_entry, *tmp;
179 int ret = -ENOMEM;
180 int platform_id;
181 int r;
182
183 if (id == PLATFORM_DEVID_AUTO)
184 platform_id = id;
185 else
186 platform_id = id + cell->id;
187
188 pdev = platform_device_alloc(cell->name, platform_id);
189 if (!pdev)
190 goto fail_alloc;
191
192 pdev->mfd_cell = kmemdup(cell, sizeof(*cell), GFP_KERNEL);
193 if (!pdev->mfd_cell)
194 goto fail_device;
195
196 res = kcalloc(cell->num_resources, sizeof(*res), GFP_KERNEL);
197 if (!res)
198 goto fail_device;
199
200 pdev->dev.parent = parent;
201 pdev->dev.type = &mfd_dev_type;
202 pdev->dev.dma_mask = parent->dma_mask;
203 pdev->dev.dma_parms = parent->dma_parms;
204 pdev->dev.coherent_dma_mask = parent->coherent_dma_mask;
205
206 ret = regulator_bulk_register_supply_alias(
207 &pdev->dev, cell->parent_supplies,
208 parent, cell->parent_supplies,
209 cell->num_parent_supplies);
210 if (ret < 0)
211 goto fail_res;
212
213 if (IS_ENABLED(CONFIG_OF) && parent->of_node &&
cell->of_compatible) {
214 for_each_child_of_node(parent->of_node, np) {
215 if (of_device_is_compatible(np, cell->of_compatible)) {
216 ret = mfd_match_of_node_to_dev(pdev, np, cell);
217 if (ret == -EAGAIN)
218 continue;
219 if (ret)
220 goto fail_alias;
221
222 break;
223 }
224 }
225
226 if (!pdev->dev.of_node)
227 pr_warn("%s: Failed to locate of_node [id: %d]\n",
228 cell->name, platform_id);
229 }
230
231 mfd_acpi_add_device(cell, pdev);
232
233 if (cell->pdata_size) {
234 ret = platform_device_add_data(pdev,
235 cell->platform_data, cell->pdata_size);
236 if (ret)
237 goto fail_of_entry;
238 }
239
240 if (cell->properties) {
241 ret = platform_device_add_properties(pdev, cell->properties);
242 if (ret)
243 goto fail_of_entry;
244 }
245
246 for (r = 0; r < cell->num_resources; r++) {
247 res[r].name = cell->resources[r].name;
248 res[r].flags = cell->resources[r].flags;
249
250 /* Find out base to use */
251 if ((cell->resources[r].flags & IORESOURCE_MEM) && mem_base) {
252 res[r].parent = mem_base;
253 res[r].start = mem_base->start +
254 cell->resources[r].start;
255 res[r].end = mem_base->start +
256 cell->resources[r].end;
257 } else if (cell->resources[r].flags & IORESOURCE_IRQ) {
258 if (domain) {
259 /* Unable to create mappings for IRQ ranges. */
260 WARN_ON(cell->resources[r].start !=
261 cell->resources[r].end);
262 res[r].start = res[r].end = irq_create_mapping(
263 domain, cell->resources[r].start);
264 } else {
265 res[r].start = irq_base +
266 cell->resources[r].start;
267 res[r].end = irq_base +
268 cell->resources[r].end;
269 }
270 } else {
271 res[r].parent = cell->resources[r].parent;
272 res[r].start = cell->resources[r].start;
273 res[r].end = cell->resources[r].end;
274 }
275
276 if (!cell->ignore_resource_conflicts) {
277 if (has_acpi_companion(&pdev->dev)) {
278 ret = acpi_check_resource_conflict(&res[r]);
279 if (ret)
280 goto fail_of_entry;
281 }
282 }
283 }
284
285 ret = platform_device_add_resources(pdev, res, cell->num_resources);
286 if (ret)
287 goto fail_of_entry;
288
289 ret = platform_device_add(pdev);
290 if (ret)
291 goto fail_of_entry;
292
293 if (cell->pm_runtime_no_callbacks)
294 pm_runtime_no_callbacks(&pdev->dev);
295
296 kfree(res);
297
298 return 0;
299
300 fail_of_entry:
301 list_for_each_entry_safe(of_entry, tmp, &mfd_of_node_list, list)
302 if (of_entry->dev == &pdev->dev) {
303 list_del(&of_entry->list);
304 kfree(of_entry);
305 }
306 fail_alias:
307 regulator_bulk_unregister_supply_alias(&pdev->dev,
308 cell->parent_supplies,
309 cell->num_parent_supplies);
310 fail_res:
311 kfree(res);
312 fail_device:
313 platform_device_put(pdev);
314 fail_alloc:
315 return ret;
316 }
317
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org