Subject: Re: [RFC PATCH 1/2] irqchip: ti-tsir: Add support for Timesync Interrupt Router

From: Simon Horman <[email-masked]>
Date: Thu, 6 Feb 2025 17:39:30 +0000

On Wed, Feb 05, 2025 at 09:31:18PM +0530, Chintan Vankar wrote:
> Timesync Interrupt Router is an instantiation of generic interrupt router
> module. It provides a mechanism to mux M interrupt inputs to N interrupt
> outputs, where all M inputs are selectable to be driven as per N output.
> Timesync Interrupt Router's inputs are either from peripherals or from
> Device sync Events.
> 
> Add support for Timesync Interrupt Router driver to map input received
> from peripherals with the corresponding output.
> 
> Signed-off-by: Chintan Vankar <[email-masked]>

...

> diff --git a/drivers/irqchip/ti-timesync-intr.c b/drivers/irqchip/ti-timesync-intr.c
> new file mode 100644
> index 000000000000..11f26ca649d2
> --- /dev/null
> +++ b/drivers/irqchip/ti-timesync-intr.c
> @@ -0,0 +1,109 @@
> +// SPDX-License-Identifier: GPL

Hi Chintan,

I think you need to be mores specific here wrt the version of the GPL.

Link: https://www.kernel.org/doc/html/v6.13-rc6/process/license-rules.html

Flagged by ./scripts/spdxcheck.py

Also, compiling this file with GCC 14.2.0 for allmodconfig with W=1
generates a significant number of warnings. You may wish to look into that.

drivers/irqchip/ti-timesync-intr.c: In function ‘ts_intr_irq_domain_alloc’:
drivers/irqchip/ti-timesync-intr.c:38:13: error: unused variable ‘ret’ [-Werror=unused-variable]
   38 |         int ret;
      |             ^~~
drivers/irqchip/ti-timesync-intr.c: In function ‘ts_intr_irq_domain_free’:
drivers/irqchip/ti-timesync-intr.c:82:32: error: conversion from ‘long unsigned int’ to ‘unsigned int’ changes value from ‘18446744073709486079’ to ‘4294901759’ [-Werror=overflow]
   82 |                         writel(~TIMESYNC_INTRTR_INT_ENABLE, tsr_data.tsr_base + output_line_offset);
drivers/irqchip/ti-timesync-intr.c:74:44: error: unused variable ‘n’ [-Werror=unused-variable]
   74 |         struct output_line_to_virq *node, *n;
      |                                            ^
drivers/irqchip/ti-timesync-intr.c:74:37: error: unused variable ‘node’ [-Werror=unused-variable]
   74 |         struct output_line_to_virq *node, *n;
      |                                     ^~~~
In file included from ./include/linux/irqchip.h:16,
                 from drivers/irqchip/ti-timesync-intr.c:9:
drivers/irqchip/ti-timesync-intr.c: At top level:
./include/linux/minmax.h:24:35: error: comparison of distinct pointer types lacks a cast [-Werror=compare-distinct-pointer-types]
   24 |         (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
      |                                   ^~
./include/linux/of.h:1525:31: note: in definition of macro ‘_OF_DECLARE’
 1525 |                      .data = (fn == (fn_type)NULL) ? fn : fn  }
      |                               ^~
./include/linux/irqchip.h:37:9: note: in expansion of macro ‘OF_DECLARE_2’
   37 |         OF_DECLARE_2(irqchip, name, compat, typecheck_irq_init_cb(fn))
      |         ^~~~~~~~~~~~
./include/linux/irqchip.h:24:10: note: in expansion of macro ‘__typecheck’
   24 |         (__typecheck(typecheck_irq_init_cb, &fn) ? fn : fn)
      |          ^~~~~~~~~~~
./include/linux/irqchip.h:37:45: note: in expansion of macro ‘typecheck_irq_init_cb’
   37 |         OF_DECLARE_2(irqchip, name, compat, typecheck_irq_init_cb(fn))
      |                                             ^~~~~~~~~~~~~~~~~~~~~
drivers/irqchip/ti-timesync-intr.c:105:1: note: in expansion of macro ‘IRQCHIP_DECLARE’
  105 | IRQCHIP_DECLARE(ts_intr, "ti,ts-intr", tsr_init);
      | ^~~~~~~~~~~~~~~
./include/linux/of.h:1525:34: error: comparison of distinct pointer types lacks a cast [-Werror=compare-distinct-pointer-types]
 1525 |                      .data = (fn == (fn_type)NULL) ? fn : fn  }
      |                                  ^~
./include/linux/of.h:1540:17: note: in expansion of macro ‘_OF_DECLARE’
 1540 |                 _OF_DECLARE(table, name, compat, fn, of_init_fn_2)
      |                 ^~~~~~~~~~~
./include/linux/irqchip.h:37:9: note: in expansion of macro ‘OF_DECLARE_2’
   37 |         OF_DECLARE_2(irqchip, name, compat, typecheck_irq_init_cb(fn))
      |         ^~~~~~~~~~~~
drivers/irqchip/ti-timesync-intr.c:105:1: note: in expansion of macro ‘IRQCHIP_DECLARE’
  105 | IRQCHIP_DECLARE(ts_intr, "ti,ts-intr", tsr_init);
      | ^~~~~~~~~~~~~~~
./include/linux/minmax.h:24:35: error: comparison of distinct pointer types lacks a cast [-Werror=compare-distinct-pointer-types]
   24 |         (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
      |                                   ^~
./include/linux/of.h:1525:54: note: in definition of macro ‘_OF_DECLARE’
 1525 |                      .data = (fn == (fn_type)NULL) ? fn : fn  }
      |                                                      ^~
./include/linux/irqchip.h:37:9: note: in expansion of macro ‘OF_DECLARE_2’
   37 |         OF_DECLARE_2(irqchip, name, compat, typecheck_irq_init_cb(fn))
      |         ^~~~~~~~~~~~
./include/linux/irqchip.h:24:10: note: in expansion of macro ‘__typecheck’
   24 |         (__typecheck(typecheck_irq_init_cb, &fn) ? fn : fn)
      |          ^~~~~~~~~~~
./include/linux/irqchip.h:37:45: note: in expansion of macro ‘typecheck_irq_init_cb’
   37 |         OF_DECLARE_2(irqchip, name, compat, typecheck_irq_init_cb(fn))
      |                                             ^~~~~~~~~~~~~~~~~~~~~
drivers/irqchip/ti-timesync-intr.c:105:1: note: in expansion of macro ‘IRQCHIP_DECLARE’
  105 | IRQCHIP_DECLARE(ts_intr, "ti,ts-intr", tsr_init);
      | ^~~~~~~~~~~~~~~
./include/linux/minmax.h:24:35: error: comparison of distinct pointer types lacks a cast [-Werror=compare-distinct-pointer-types]
   24 |         (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
      |                                   ^~
./include/linux/of.h:1525:59: note: in definition of macro ‘_OF_DECLARE’
 1525 |                      .data = (fn == (fn_type)NULL) ? fn : fn  }
      |                                                           ^~
./include/linux/irqchip.h:37:9: note: in expansion of macro ‘OF_DECLARE_2’
   37 |         OF_DECLARE_2(irqchip, name, compat, typecheck_irq_init_cb(fn))
      |         ^~~~~~~~~~~~
./include/linux/irqchip.h:24:10: note: in expansion of macro ‘__typecheck’
   24 |         (__typecheck(typecheck_irq_init_cb, &fn) ? fn : fn)
      |          ^~~~~~~~~~~
./include/linux/irqchip.h:37:45: note: in expansion of macro ‘typecheck_irq_init_cb’
   37 |         OF_DECLARE_2(irqchip, name, compat, typecheck_irq_init_cb(fn))
      |                                             ^~~~~~~~~~~~~~~~~~~~~
drivers/irqchip/ti-timesync-intr.c:105:1: note: in expansion of macro ‘IRQCHIP_DECLARE’
  105 | IRQCHIP_DECLARE(ts_intr, "ti,ts-intr", tsr_init);
      | ^~~~~~~~~~~~~~~
drivers/irqchip/ti-timesync-intr.c: In function ‘ts_intr_irq_domain_alloc’:
drivers/irqchip/ti-timesync-intr.c:40:9: error: ‘output_line’ is used uninitialized [-Werror=uninitialized]
   40 |         irq_domain_set_hwirq_and_chip(domain, virq, output_line,
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   41 |                                       &ts_intr_irq_chip,
      |                                       ~~~~~~~~~~~~~~~~~~
   42 |                                       NULL);
      |                                       ~~~~~
drivers/irqchip/ti-timesync-intr.c:36:22: note: ‘output_line’ was declared here
   36 |         unsigned int output_line, input_line, output_line_offset;
      |                      ^~~~~~~~~~~