Hi Andy,
I love your patch! Yet something to improve:
[auto build test ERROR on linux/master]
[also build test ERROR on linus/master v5.12-rc2 next-20210305]
[cannot apply to gpio/for-next]
[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]
url:
https://github.com/0day-ci/linux/commits/Andy-Shevchenko/gpiolib-Reuse-de...
base:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
2ab38c17aac10bf55ab3efde4c4db3893d8691d2
config: s390-randconfig-s031-20210309 (attached as .config)
compiler: s390-linux-gcc (GCC) 9.3.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.3-262-g5e674421-dirty
#
https://github.com/0day-ci/linux/commit/cfe5ca8e3b629a621c75b8e64aa49f8ee...
git remote add linux-review
https://github.com/0day-ci/linux
git fetch --no-tags linux-review
Andy-Shevchenko/gpiolib-Reuse-device-s-fwnode-to-create-IRQ-domain/20210309-033330
git checkout cfe5ca8e3b629a621c75b8e64aa49f8ee81f1e0d
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1
CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=s390
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/gpio/gpiolib.c: In function 'gpiochip_add_irqchip':
> drivers/gpio/gpiolib.c:1505:20: error: implicit declaration of
function 'irq_domain_create_simple'; did you mean
'irq_domain_create_tree'? [-Werror=implicit-function-declaration]
1505 |
gc->irq.domain = irq_domain_create_simple(fwnode,
| ^~~~~~~~~~~~~~~~~~~~~~~~
| irq_domain_create_tree
> drivers/gpio/gpiolib.c:1505:18: warning: assignment to
'struct irq_domain *' from 'int' makes pointer from integer without a cast
[-Wint-conversion]
1505 | gc->irq.domain =
irq_domain_create_simple(fwnode,
| ^
cc1: some warnings being treated as errors
vim +1505 drivers/gpio/gpiolib.c
1449
1450 /**
1451 * gpiochip_add_irqchip() - adds an IRQ chip to a GPIO chip
1452 * @gc: the GPIO chip to add the IRQ chip to
1453 * @lock_key: lockdep class for IRQ lock
1454 * @request_key: lockdep class for IRQ request
1455 */
1456 static int gpiochip_add_irqchip(struct gpio_chip *gc,
1457 struct lock_class_key *lock_key,
1458 struct lock_class_key *request_key)
1459 {
1460 struct fwnode_handle *fwnode = dev_fwnode(&gc->gpiodev->dev);
1461 struct irq_chip *irqchip = gc->irq.chip;
1462 const struct irq_domain_ops *ops = NULL;
1463 unsigned int type;
1464 unsigned int i;
1465
1466 if (!irqchip)
1467 return 0;
1468
1469 if (gc->irq.parent_handler && gc->can_sleep) {
1470 chip_err(gc, "you cannot have chained interrupts on a chip that may
sleep\n");
1471 return -EINVAL;
1472 }
1473
1474 type = gc->irq.default_type;
1475
1476 /*
1477 * Specifying a default trigger is a terrible idea if DT or ACPI is
1478 * used to configure the interrupts, as you may end up with
1479 * conflicting triggers. Tell the user, and reset to NONE.
1480 */
1481 if (WARN(fwnode && type != IRQ_TYPE_NONE,
1482 "%pfw: Ignoring %u default trigger\n", fwnode, type))
1483 type = IRQ_TYPE_NONE;
1484
1485 if (gc->to_irq)
1486 chip_warn(gc, "to_irq is redefined in %s and you shouldn't rely on
it\n", __func__);
1487
1488 gc->to_irq = gpiochip_to_irq;
1489 gc->irq.default_type = type;
1490 gc->irq.lock_key = lock_key;
1491 gc->irq.request_key = request_key;
1492
1493 /* If a parent irqdomain is provided, let's build a hierarchy */
1494 if (gpiochip_hierarchy_is_hierarchical(gc)) {
1495 int ret = gpiochip_hierarchy_add_domain(gc);
1496 if (ret)
1497 return ret;
1498 } else {
1499 /* Some drivers provide custom irqdomain ops */
1500 if (gc->irq.domain_ops)
1501 ops = gc->irq.domain_ops;
1502
1503 if (!ops)
1504 ops = &gpiochip_domain_ops;
1505 gc->irq.domain = irq_domain_create_simple(fwnode,
1506 gc->ngpio,
1507 gc->irq.first,
1508 ops, gc);
1509 if (!gc->irq.domain)
1510 return -EINVAL;
1511 }
1512
1513 if (gc->irq.parent_handler) {
1514 void *data = gc->irq.parent_handler_data ?: gc;
1515
1516 for (i = 0; i < gc->irq.num_parents; i++) {
1517 /*
1518 * The parent IRQ chip is already using the chip_data
1519 * for this IRQ chip, so our callbacks simply use the
1520 * handler_data.
1521 */
1522 irq_set_chained_handler_and_data(gc->irq.parents[i],
1523 gc->irq.parent_handler,
1524 data);
1525 }
1526 }
1527
1528 gpiochip_set_irq_hooks(gc);
1529
1530 acpi_gpiochip_request_interrupts(gc);
1531
1532 return 0;
1533 }
1534
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org