All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain
@ 2021-03-08 19:31 Andy Shevchenko
  2021-03-08 19:31 ` [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator Andy Shevchenko
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Andy Shevchenko @ 2021-03-08 19:31 UTC (permalink / raw)
  To: linux-gpio, linux-kernel
  Cc: Linus Walleij, Bartosz Golaszewski, linux-acpi,
	Rafael J. Wysocki, Andy Shevchenko

When IRQ domain is created for an ACPI case, the name of it becomes unknown-%d
since for now it utilizes of_node member only and doesn't consider fwnode case.
Convert IRQ domain creation code to utilize fwnode instead.

Before/After the change on Intel Galileo Gen 2 with two GPIO (IRQ) controllers:

  unknown-1	==>	\_SB.PCI0.GIP0.GPO
  unknown-2	==>	\_SB.NIO3

Due to the nature of this change we may also deduplicate the WARN():s
because in either case (DT or ACPI) the fwnode will be set correctly
and %pfw is an equivalent to what the current code prints as a prefix.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v4: added a paragraph about WARN changes, split out ops optimizations (Rafael)
 drivers/gpio/gpiolib.c | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 1853075df741..afee48e7dd41 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -1456,9 +1456,9 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
 				struct lock_class_key *lock_key,
 				struct lock_class_key *request_key)
 {
+	struct fwnode_handle *fwnode = dev_fwnode(&gc->gpiodev->dev);
 	struct irq_chip *irqchip = gc->irq.chip;
 	const struct irq_domain_ops *ops = NULL;
-	struct device_node *np;
 	unsigned int type;
 	unsigned int i;
 
@@ -1470,7 +1470,6 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
 		return -EINVAL;
 	}
 
-	np = gc->gpiodev->dev.of_node;
 	type = gc->irq.default_type;
 
 	/*
@@ -1478,16 +1477,10 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
 	 * used to configure the interrupts, as you may end up with
 	 * conflicting triggers. Tell the user, and reset to NONE.
 	 */
-	if (WARN(np && type != IRQ_TYPE_NONE,
-		 "%s: Ignoring %u default trigger\n", np->full_name, type))
+	if (WARN(fwnode && type != IRQ_TYPE_NONE,
+		 "%pfw: Ignoring %u default trigger\n", fwnode, type))
 		type = IRQ_TYPE_NONE;
 
-	if (has_acpi_companion(gc->parent) && type != IRQ_TYPE_NONE) {
-		acpi_handle_warn(ACPI_HANDLE(gc->parent),
-				 "Ignoring %u default trigger\n", type);
-		type = IRQ_TYPE_NONE;
-	}
-
 	if (gc->to_irq)
 		chip_warn(gc, "to_irq is redefined in %s and you shouldn't rely on it\n", __func__);
 
@@ -1508,7 +1501,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
 
 		if (!ops)
 			ops = &gpiochip_domain_ops;
-		gc->irq.domain = irq_domain_add_simple(np,
+		gc->irq.domain = irq_domain_create_simple(fwnode,
 			gc->ngpio,
 			gc->irq.first,
 			ops, gc);
-- 
2.30.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator
  2021-03-08 19:31 [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Andy Shevchenko
@ 2021-03-08 19:31 ` Andy Shevchenko
  2021-03-08 19:43   ` Rafael J. Wysocki
  2021-03-08 19:36 ` [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Rafael J. Wysocki
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: Andy Shevchenko @ 2021-03-08 19:31 UTC (permalink / raw)
  To: linux-gpio, linux-kernel
  Cc: Linus Walleij, Bartosz Golaszewski, linux-acpi,
	Rafael J. Wysocki, Andy Shevchenko

It's quite spread code to initialize IRQ domain options.
Let's fold it into a simple oneliner.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v4: new patch (see changelog of previous one)
 drivers/gpio/gpiolib.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index afee48e7dd41..8c5ce377accc 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -1458,7 +1458,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
 {
 	struct fwnode_handle *fwnode = dev_fwnode(&gc->gpiodev->dev);
 	struct irq_chip *irqchip = gc->irq.chip;
-	const struct irq_domain_ops *ops = NULL;
+	const struct irq_domain_ops *ops;
 	unsigned int type;
 	unsigned int i;
 
@@ -1496,11 +1496,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
 			return ret;
 	} else {
 		/* Some drivers provide custom irqdomain ops */
-		if (gc->irq.domain_ops)
-			ops = gc->irq.domain_ops;
-
-		if (!ops)
-			ops = &gpiochip_domain_ops;
+		ops = gc->irq.domain_ops ?: &gpiochip_domain_ops;
 		gc->irq.domain = irq_domain_create_simple(fwnode,
 			gc->ngpio,
 			gc->irq.first,
-- 
2.30.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain
  2021-03-08 19:31 [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Andy Shevchenko
  2021-03-08 19:31 ` [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator Andy Shevchenko
@ 2021-03-08 19:36 ` Rafael J. Wysocki
  2021-03-08 21:12 ` kernel test robot
  2021-03-09  0:06 ` kernel test robot
  3 siblings, 0 replies; 10+ messages in thread
From: Rafael J. Wysocki @ 2021-03-08 19:36 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
	Linus Walleij, Bartosz Golaszewski, ACPI Devel Maling List,
	Rafael J. Wysocki

On Mon, Mar 8, 2021 at 8:33 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> When IRQ domain is created for an ACPI case, the name of it becomes unknown-%d
> since for now it utilizes of_node member only and doesn't consider fwnode case.
> Convert IRQ domain creation code to utilize fwnode instead.
>
> Before/After the change on Intel Galileo Gen 2 with two GPIO (IRQ) controllers:
>
>   unknown-1     ==>     \_SB.PCI0.GIP0.GPO
>   unknown-2     ==>     \_SB.NIO3
>
> Due to the nature of this change we may also deduplicate the WARN():s
> because in either case (DT or ACPI) the fwnode will be set correctly
> and %pfw is an equivalent to what the current code prints as a prefix.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
> v4: added a paragraph about WARN changes, split out ops optimizations (Rafael)

Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

>  drivers/gpio/gpiolib.c | 15 ++++-----------
>  1 file changed, 4 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> index 1853075df741..afee48e7dd41 100644
> --- a/drivers/gpio/gpiolib.c
> +++ b/drivers/gpio/gpiolib.c
> @@ -1456,9 +1456,9 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
>                                 struct lock_class_key *lock_key,
>                                 struct lock_class_key *request_key)
>  {
> +       struct fwnode_handle *fwnode = dev_fwnode(&gc->gpiodev->dev);
>         struct irq_chip *irqchip = gc->irq.chip;
>         const struct irq_domain_ops *ops = NULL;
> -       struct device_node *np;
>         unsigned int type;
>         unsigned int i;
>
> @@ -1470,7 +1470,6 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
>                 return -EINVAL;
>         }
>
> -       np = gc->gpiodev->dev.of_node;
>         type = gc->irq.default_type;
>
>         /*
> @@ -1478,16 +1477,10 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
>          * used to configure the interrupts, as you may end up with
>          * conflicting triggers. Tell the user, and reset to NONE.
>          */
> -       if (WARN(np && type != IRQ_TYPE_NONE,
> -                "%s: Ignoring %u default trigger\n", np->full_name, type))
> +       if (WARN(fwnode && type != IRQ_TYPE_NONE,
> +                "%pfw: Ignoring %u default trigger\n", fwnode, type))
>                 type = IRQ_TYPE_NONE;
>
> -       if (has_acpi_companion(gc->parent) && type != IRQ_TYPE_NONE) {
> -               acpi_handle_warn(ACPI_HANDLE(gc->parent),
> -                                "Ignoring %u default trigger\n", type);
> -               type = IRQ_TYPE_NONE;
> -       }
> -
>         if (gc->to_irq)
>                 chip_warn(gc, "to_irq is redefined in %s and you shouldn't rely on it\n", __func__);
>
> @@ -1508,7 +1501,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
>
>                 if (!ops)
>                         ops = &gpiochip_domain_ops;
> -               gc->irq.domain = irq_domain_add_simple(np,
> +               gc->irq.domain = irq_domain_create_simple(fwnode,
>                         gc->ngpio,
>                         gc->irq.first,
>                         ops, gc);
> --
> 2.30.1
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator
  2021-03-08 19:31 ` [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator Andy Shevchenko
@ 2021-03-08 19:43   ` Rafael J. Wysocki
  2021-03-08 19:46     ` Andy Shevchenko
  0 siblings, 1 reply; 10+ messages in thread
From: Rafael J. Wysocki @ 2021-03-08 19:43 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
	Linus Walleij, Bartosz Golaszewski, ACPI Devel Maling List,
	Rafael J. Wysocki

On Mon, Mar 8, 2021 at 8:33 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> It's quite spread code to initialize IRQ domain options.
> Let's fold it into a simple oneliner.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
> v4: new patch (see changelog of previous one)
>  drivers/gpio/gpiolib.c | 8 ++------
>  1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> index afee48e7dd41..8c5ce377accc 100644
> --- a/drivers/gpio/gpiolib.c
> +++ b/drivers/gpio/gpiolib.c
> @@ -1458,7 +1458,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
>  {
>         struct fwnode_handle *fwnode = dev_fwnode(&gc->gpiodev->dev);
>         struct irq_chip *irqchip = gc->irq.chip;
> -       const struct irq_domain_ops *ops = NULL;
> +       const struct irq_domain_ops *ops;

It looks like the ops local var is redundant.

>         unsigned int type;
>         unsigned int i;
>
> @@ -1496,11 +1496,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
>                         return ret;
>         } else {
>                 /* Some drivers provide custom irqdomain ops */
> -               if (gc->irq.domain_ops)
> -                       ops = gc->irq.domain_ops;
> -
> -               if (!ops)
> -                       ops = &gpiochip_domain_ops;
> +               ops = gc->irq.domain_ops ?: &gpiochip_domain_ops;
>                 gc->irq.domain = irq_domain_create_simple(fwnode,
>                         gc->ngpio,
>                         gc->irq.first,

Because this can be

gc->irq.domain = irq_domain_add_simple(np,
                        gc->ngpio,
                        gc->irq.first,
                        gc->irq.domain_ops ?: &gpiochip_domain_ops,
                        gc);

(modulo white space / formatting) and this is the only place where ops
is used in this function.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator
  2021-03-08 19:43   ` Rafael J. Wysocki
@ 2021-03-08 19:46     ` Andy Shevchenko
  2021-03-08 19:52       ` Andy Shevchenko
  0 siblings, 1 reply; 10+ messages in thread
From: Andy Shevchenko @ 2021-03-08 19:46 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
	Linus Walleij, Bartosz Golaszewski, ACPI Devel Maling List,
	Rafael J. Wysocki

On Mon, Mar 08, 2021 at 08:43:19PM +0100, Rafael J. Wysocki wrote:
> On Mon, Mar 8, 2021 at 8:33 PM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:

...

> It looks like the ops local var is redundant.
> 
> >         unsigned int type;
> >         unsigned int i;
> >
> > @@ -1496,11 +1496,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
> >                         return ret;
> >         } else {
> >                 /* Some drivers provide custom irqdomain ops */
> > -               if (gc->irq.domain_ops)
> > -                       ops = gc->irq.domain_ops;
> > -
> > -               if (!ops)
> > -                       ops = &gpiochip_domain_ops;
> > +               ops = gc->irq.domain_ops ?: &gpiochip_domain_ops;
> >                 gc->irq.domain = irq_domain_create_simple(fwnode,
> >                         gc->ngpio,
> >                         gc->irq.first,
> 
> Because this can be
> 
> gc->irq.domain = irq_domain_add_simple(np,
>                         gc->ngpio,
>                         gc->irq.first,
>                         gc->irq.domain_ops ?: &gpiochip_domain_ops,
>                         gc);
> 
> (modulo white space / formatting) and this is the only place where ops
> is used in this function.

I just sent v5 without this, sorry :-)

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator
  2021-03-08 19:46     ` Andy Shevchenko
@ 2021-03-08 19:52       ` Andy Shevchenko
  0 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2021-03-08 19:52 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
	Linus Walleij, Bartosz Golaszewski, ACPI Devel Maling List,
	Rafael J. Wysocki

On Mon, Mar 08, 2021 at 09:46:52PM +0200, Andy Shevchenko wrote:
> On Mon, Mar 08, 2021 at 08:43:19PM +0100, Rafael J. Wysocki wrote:

> I just sent v5 without this, sorry :-)

I will do it in v6.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain
  2021-03-08 19:31 [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Andy Shevchenko
  2021-03-08 19:31 ` [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator Andy Shevchenko
  2021-03-08 19:36 ` [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Rafael J. Wysocki
@ 2021-03-08 21:12 ` kernel test robot
  2021-03-09 10:25   ` Andy Shevchenko
  2021-03-09  0:06 ` kernel test robot
  3 siblings, 1 reply; 10+ messages in thread
From: kernel test robot @ 2021-03-08 21:12 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 5492 bytes --]

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-device-s-fwnode-to-create-IRQ-domain/20210309-033330
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/cfe5ca8e3b629a621c75b8e64aa49f8ee81f1e0d
        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@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(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 14837 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain
  2021-03-08 19:31 [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Andy Shevchenko
                   ` (2 preceding siblings ...)
  2021-03-08 21:12 ` kernel test robot
@ 2021-03-09  0:06 ` kernel test robot
  3 siblings, 0 replies; 10+ messages in thread
From: kernel test robot @ 2021-03-09  0:06 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 5438 bytes --]

Hi Andy,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linux/master]
[also build test WARNING 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-device-s-fwnode-to-create-IRQ-domain/20210309-033330
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 2ab38c17aac10bf55ab3efde4c4db3893d8691d2
config: x86_64-randconfig-r001-20210309 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 3a11a41795bec548e91621caaa4cc00fc31b2212)
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
        # https://github.com/0day-ci/linux/commit/cfe5ca8e3b629a621c75b8e64aa49f8ee81f1e0d
        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=clang make.cross ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   drivers/gpio/gpiolib.c:1505:20: error: implicit declaration of function 'irq_domain_create_simple' [-Werror,-Wimplicit-function-declaration]
                   gc->irq.domain = irq_domain_create_simple(fwnode,
                                    ^
>> drivers/gpio/gpiolib.c:1505:18: warning: incompatible integer to pointer conversion assigning to 'struct irq_domain *' from 'int' [-Wint-conversion]
                   gc->irq.domain = irq_domain_create_simple(fwnode,
                                  ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   1 warning and 1 error generated.


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(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 36667 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain
  2021-03-08 21:12 ` kernel test robot
@ 2021-03-09 10:25   ` Andy Shevchenko
  2021-03-10  9:35     ` Rong Chen
  0 siblings, 1 reply; 10+ messages in thread
From: Andy Shevchenko @ 2021-03-09 10:25 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 1939 bytes --]

On Tue, Mar 09, 2021 at 05:12:21AM +0800, kernel test robot wrote:
> 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-device-s-fwnode-to-create-IRQ-domain/20210309-033330
> 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/cfe5ca8e3b629a621c75b8e64aa49f8ee81f1e0d
>         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@intel.com>
> 
> All error/warnings (new ones prefixed by >>):

It was based on Rafael's bleeding-edge, in any case it's not actual anymore.


-- 
With Best Regards,
Andy Shevchenko


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain
  2021-03-09 10:25   ` Andy Shevchenko
@ 2021-03-10  9:35     ` Rong Chen
  0 siblings, 0 replies; 10+ messages in thread
From: Rong Chen @ 2021-03-10  9:35 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 2068 bytes --]



On 3/9/21 6:25 PM, Andy Shevchenko wrote:
> On Tue, Mar 09, 2021 at 05:12:21AM +0800, kernel test robot wrote:
>> 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-device-s-fwnode-to-create-IRQ-domain/20210309-033330
>> 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/cfe5ca8e3b629a621c75b8e64aa49f8ee81f1e0d
>>          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@intel.com>
>>
>> All error/warnings (new ones prefixed by >>):
> It was based on Rafael's bleeding-edge, in any case it's not actual anymore.
>
>

Hi Andy,

Thanks for the feedback, we'll take a look.

Best Regards,
Rong Chen

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2021-03-10  9:35 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-08 19:31 [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Andy Shevchenko
2021-03-08 19:31 ` [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator Andy Shevchenko
2021-03-08 19:43   ` Rafael J. Wysocki
2021-03-08 19:46     ` Andy Shevchenko
2021-03-08 19:52       ` Andy Shevchenko
2021-03-08 19:36 ` [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Rafael J. Wysocki
2021-03-08 21:12 ` kernel test robot
2021-03-09 10:25   ` Andy Shevchenko
2021-03-10  9:35     ` Rong Chen
2021-03-09  0:06 ` kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.