tree:
https://git.kernel.org/pub/scm/linux/kernel/git/sashal/linux-stable.git queue-4.9
head: 44b74c863d8a247e91d821d3383191e022c534f3
commit: cff5a08a72f64cc9fb3191a87903955fa0e2cf7f [52/53] efi/arm: Defer probe of PCIe
backed efifb on DT systems
config: arm-defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 7.5.0
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
git checkout cff5a08a72f64cc9fb3191a87903955fa0e2cf7f
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-7.5.0 make.cross ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All error/warnings (new ones prefixed by >>):
drivers/firmware/efi/arm-init.c: In function 'efifb_add_links':
drivers/firmware/efi/arm-init.c:322:12: error: implicit declaration of function
'get_dev_from_fwnode'; did you mean 'set_primary_fwnode'?
[-Werror=implicit-function-declaration]
sup_dev = get_dev_from_fwnode(&sup_np->fwnode);
^~~~~~~~~~~~~~~~~~~
set_primary_fwnode
drivers/firmware/efi/arm-init.c:322:10: warning: assignment makes pointer from integer
without a cast [-Wint-conversion]
sup_dev = get_dev_from_fwnode(&sup_np->fwnode);
^
> drivers/firmware/efi/arm-init.c:338:7: error: implicit
declaration of function 'device_link_add'; did you mean 'device_add'?
[-Werror=implicit-function-declaration]
if (!device_link_add(dev, sup_dev, 0))
^~~~~~~~~~~~~~~
device_add
drivers/firmware/efi/arm-init.c: At top level:
> drivers/firmware/efi/arm-init.c:346:21: error: variable
'efifb_fwnode_ops' has initializer but incomplete type
static const
struct fwnode_operations efifb_fwnode_ops = {
^~~~~~~~~~~~~~~~~
drivers/firmware/efi/arm-init.c:347:3: error: 'const struct fwnode_operations'
has no member named 'add_links'
.add_links = efifb_add_links,
^~~~~~~~~
> drivers/firmware/efi/arm-init.c:347:15: warning: excess elements
in struct initializer
.add_links = efifb_add_links,
^~~~~~~~~~~~~~~
drivers/firmware/efi/arm-init.c:347:15: note: (near initialization for
'efifb_fwnode_ops')
> drivers/firmware/efi/arm-init.c:351:3: error: 'struct
fwnode_handle' has no member named 'ops'
.ops =
&efifb_fwnode_ops,
^~~
> drivers/firmware/efi/arm-init.c:351:9: error: incompatible types
when initializing type 'enum fwnode_type' using type 'const struct
fwnode_operations *'
.ops = &efifb_fwnode_ops,
^
> drivers/firmware/efi/arm-init.c:346:39: error: storage size of
'efifb_fwnode_ops' isn't known
static const struct fwnode_operations
efifb_fwnode_ops = {
^~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +338 drivers/firmware/efi/arm-init.c
299
300 /*
301 * If the efifb framebuffer is backed by a PCI graphics controller, we have
302 * to ensure that this relation is expressed using a device link when
303 * running in DT mode, or the probe order may be reversed, resulting in a
304 * resource reservation conflict on the memory window that the efifb
305 * framebuffer steals from the PCIe host bridge.
306 */
307 static int efifb_add_links(const struct fwnode_handle *fwnode,
308 struct device *dev)
309 {
310 struct device_node *sup_np;
311 struct device *sup_dev;
312
313 sup_np = find_pci_overlap_node();
314
315 /*
316 * If there's no PCI graphics controller backing the efifb, we are
317 * done here.
318 */
319 if (!sup_np)
320 return 0;
321
322 sup_dev = get_dev_from_fwnode(&sup_np->fwnode);
323 of_node_put(sup_np);
324
325 /*
326 * Return -ENODEV if the PCI graphics controller device hasn't been
327 * registered yet. This ensures that efifb isn't allowed to probe
328 * and this function is retried again when new devices are
329 * registered.
330 */
331 if (!sup_dev)
332 return -ENODEV;
333
334 /*
335 * If this fails, retrying this function at a later point won't
336 * change anything. So, don't return an error after this.
337 */
338 if (!device_link_add(dev, sup_dev, 0))
339 dev_warn(dev, "device_link_add() failed\n");
340
341 put_device(sup_dev);
342
343 return 0;
344 }
345
346 static const struct fwnode_operations efifb_fwnode_ops = {
347 .add_links = efifb_add_links,
348 };
349
350 static struct fwnode_handle efifb_fwnode = {
351 .ops = &efifb_fwnode_ops,
352 };
353
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org