All of lore.kernel.org
 help / color / mirror / Atom feed
* [arm-platforms:irq/domain_cleanup 7/39] arch/mips/sgi-ip30/ip30-irq.c:222:2: error: implicit declaration of function 'irq_domain_set_info'
@ 2021-05-18 23:47 ` kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2021-05-18 23:47 UTC (permalink / raw)
  To: Marc Zyngier; +Cc: kbuild-all, linux-arm-kernel

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git irq/domain_cleanup
head:   5019b17f095613b0b187d1cdcaa798347de62033
commit: e02a045e1bf414960f6b563a638c88ac6c96e490 [7/39] MIPS: Do not include linux/irqdomain.h from asm/irq.h
config: mips-randconfig-r003-20210519 (attached as .config)
compiler: mips64-linux-gcc (GCC) 9.3.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
        # https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git/commit/?id=e02a045e1bf414960f6b563a638c88ac6c96e490
        git remote add arm-platforms https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git
        git fetch --no-tags arm-platforms irq/domain_cleanup
        git checkout e02a045e1bf414960f6b563a638c88ac6c96e490
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=mips 

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 >>):

   arch/mips/sgi-ip30/ip30-irq.c: In function 'ip30_normal_irq':
   arch/mips/sgi-ip30/ip30-irq.c:132:9: error: implicit declaration of function 'irq_linear_revmap' [-Werror=implicit-function-declaration]
     132 |   irq = irq_linear_revmap(domain, __ffs(pend));
         |         ^~~~~~~~~~~~~~~~~
   arch/mips/sgi-ip30/ip30-irq.c: In function 'heart_domain_alloc':
>> arch/mips/sgi-ip30/ip30-irq.c:222:2: error: implicit declaration of function 'irq_domain_set_info' [-Werror=implicit-function-declaration]
     222 |  irq_domain_set_info(domain, virq, hwirq, &heart_irq_chip, hd,
         |  ^~~~~~~~~~~~~~~~~~~
   arch/mips/sgi-ip30/ip30-irq.c: In function 'heart_domain_free':
>> arch/mips/sgi-ip30/ip30-irq.c:236:9: error: implicit declaration of function 'irq_domain_get_irq_data'; did you mean 'irq_desc_get_irq_data'? [-Werror=implicit-function-declaration]
     236 |  irqd = irq_domain_get_irq_data(domain, virq);
         |         ^~~~~~~~~~~~~~~~~~~~~~~
         |         irq_desc_get_irq_data
>> arch/mips/sgi-ip30/ip30-irq.c:236:7: warning: assignment to 'struct irq_data *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     236 |  irqd = irq_domain_get_irq_data(domain, virq);
         |       ^
   arch/mips/sgi-ip30/ip30-irq.c: At top level:
>> arch/mips/sgi-ip30/ip30-irq.c:243:21: error: variable 'heart_domain_ops' has initializer but incomplete type
     243 | static const struct irq_domain_ops heart_domain_ops = {
         |                     ^~~~~~~~~~~~~~
>> arch/mips/sgi-ip30/ip30-irq.c:244:3: error: 'const struct irq_domain_ops' has no member named 'alloc'
     244 |  .alloc = heart_domain_alloc,
         |   ^~~~~
>> arch/mips/sgi-ip30/ip30-irq.c:244:11: warning: excess elements in struct initializer
     244 |  .alloc = heart_domain_alloc,
         |           ^~~~~~~~~~~~~~~~~~
   arch/mips/sgi-ip30/ip30-irq.c:244:11: note: (near initialization for 'heart_domain_ops')
>> arch/mips/sgi-ip30/ip30-irq.c:245:3: error: 'const struct irq_domain_ops' has no member named 'free'
     245 |  .free  = heart_domain_free,
         |   ^~~~
   arch/mips/sgi-ip30/ip30-irq.c:245:11: warning: excess elements in struct initializer
     245 |  .free  = heart_domain_free,
         |           ^~~~~~~~~~~~~~~~~
   arch/mips/sgi-ip30/ip30-irq.c:245:11: note: (near initialization for 'heart_domain_ops')
   arch/mips/sgi-ip30/ip30-irq.c: In function 'arch_init_irq':
>> arch/mips/sgi-ip30/ip30-irq.c:307:7: error: implicit declaration of function 'irq_domain_alloc_named_fwnode' [-Werror=implicit-function-declaration]
     307 |  fn = irq_domain_alloc_named_fwnode("HEART");
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> arch/mips/sgi-ip30/ip30-irq.c:307:5: warning: assignment to 'struct fwnode_handle *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     307 |  fn = irq_domain_alloc_named_fwnode("HEART");
         |     ^
>> arch/mips/sgi-ip30/ip30-irq.c:311:11: error: implicit declaration of function 'irq_domain_create_linear' [-Werror=implicit-function-declaration]
     311 |  domain = irq_domain_create_linear(fn, HEART_NUM_IRQS,
         |           ^~~~~~~~~~~~~~~~~~~~~~~~
>> arch/mips/sgi-ip30/ip30-irq.c:311:9: warning: assignment to 'struct irq_domain *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     311 |  domain = irq_domain_create_linear(fn, HEART_NUM_IRQS,
         |         ^
>> arch/mips/sgi-ip30/ip30-irq.c:317:2: error: implicit declaration of function 'irq_set_default_host' [-Werror=implicit-function-declaration]
     317 |  irq_set_default_host(domain);
         |  ^~~~~~~~~~~~~~~~~~~~
   arch/mips/sgi-ip30/ip30-irq.c: At top level:
>> arch/mips/sgi-ip30/ip30-irq.c:243:36: error: storage size of 'heart_domain_ops' isn't known
     243 | static const struct irq_domain_ops heart_domain_ops = {
         |                                    ^~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors
--
   arch/mips/pci/pci-xtalk-bridge.c: In function 'bridge_domain_alloc':
>> arch/mips/pci/pci-xtalk-bridge.c:347:8: error: implicit declaration of function 'irq_domain_alloc_irqs_parent' [-Werror=implicit-function-declaration]
     347 |  ret = irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, arg);
         |        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> arch/mips/pci/pci-xtalk-bridge.c:351:3: error: implicit declaration of function 'irq_domain_set_info' [-Werror=implicit-function-declaration]
     351 |   irq_domain_set_info(domain, virq, info->pin, &bridge_irq_chip,
         |   ^~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c: In function 'bridge_domain_free':
>> arch/mips/pci/pci-xtalk-bridge.c:363:26: error: implicit declaration of function 'irq_domain_get_irq_data'; did you mean 'irq_desc_get_irq_data'? [-Werror=implicit-function-declaration]
     363 |  struct irq_data *irqd = irq_domain_get_irq_data(domain, virq);
         |                          ^~~~~~~~~~~~~~~~~~~~~~~
         |                          irq_desc_get_irq_data
>> arch/mips/pci/pci-xtalk-bridge.c:363:26: warning: initialization of 'struct irq_data *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
>> arch/mips/pci/pci-xtalk-bridge.c:369:2: error: implicit declaration of function 'irq_domain_free_irqs_top' [-Werror=implicit-function-declaration]
     369 |  irq_domain_free_irqs_top(domain, virq, nr_irqs);
         |  ^~~~~~~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c: At top level:
>> arch/mips/pci/pci-xtalk-bridge.c:418:21: error: variable 'bridge_domain_ops' has initializer but incomplete type
     418 | static const struct irq_domain_ops bridge_domain_ops = {
         |                     ^~~~~~~~~~~~~~
>> arch/mips/pci/pci-xtalk-bridge.c:419:3: error: 'const struct irq_domain_ops' has no member named 'alloc'
     419 |  .alloc      = bridge_domain_alloc,
         |   ^~~~~
>> arch/mips/pci/pci-xtalk-bridge.c:419:16: warning: excess elements in struct initializer
     419 |  .alloc      = bridge_domain_alloc,
         |                ^~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:419:16: note: (near initialization for 'bridge_domain_ops')
>> arch/mips/pci/pci-xtalk-bridge.c:420:3: error: 'const struct irq_domain_ops' has no member named 'free'
     420 |  .free       = bridge_domain_free,
         |   ^~~~
   arch/mips/pci/pci-xtalk-bridge.c:420:16: warning: excess elements in struct initializer
     420 |  .free       = bridge_domain_free,
         |                ^~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:420:16: note: (near initialization for 'bridge_domain_ops')
>> arch/mips/pci/pci-xtalk-bridge.c:421:3: error: 'const struct irq_domain_ops' has no member named 'activate'
     421 |  .activate   = bridge_domain_activate,
         |   ^~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:421:16: warning: excess elements in struct initializer
     421 |  .activate   = bridge_domain_activate,
         |                ^~~~~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:421:16: note: (near initialization for 'bridge_domain_ops')
>> arch/mips/pci/pci-xtalk-bridge.c:422:3: error: 'const struct irq_domain_ops' has no member named 'deactivate'
     422 |  .deactivate = bridge_domain_deactivate
         |   ^~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:422:16: warning: excess elements in struct initializer
     422 |  .deactivate = bridge_domain_deactivate
         |                ^~~~~~~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:422:16: note: (near initialization for 'bridge_domain_ops')
   arch/mips/pci/pci-xtalk-bridge.c: In function 'bridge_map_irq':
>> arch/mips/pci/pci-xtalk-bridge.c:457:9: error: implicit declaration of function 'irq_domain_alloc_irqs' [-Werror=implicit-function-declaration]
     457 |   irq = irq_domain_alloc_irqs(bc->domain, 1, bc->nasid, &info);
         |         ^~~~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c: In function 'bridge_probe':
>> arch/mips/pci/pci-xtalk-bridge.c:622:11: error: implicit declaration of function 'irq_get_default_host' [-Werror=implicit-function-declaration]
     622 |  parent = irq_get_default_host();
         |           ^~~~~~~~~~~~~~~~~~~~
>> arch/mips/pci/pci-xtalk-bridge.c:622:9: warning: assignment to 'struct irq_domain *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     622 |  parent = irq_get_default_host();
         |         ^
>> arch/mips/pci/pci-xtalk-bridge.c:625:7: error: implicit declaration of function 'irq_domain_alloc_named_fwnode' [-Werror=implicit-function-declaration]
     625 |  fn = irq_domain_alloc_named_fwnode("BRIDGE");
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> arch/mips/pci/pci-xtalk-bridge.c:625:5: warning: assignment to 'struct fwnode_handle *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     625 |  fn = irq_domain_alloc_named_fwnode("BRIDGE");
         |     ^
>> arch/mips/pci/pci-xtalk-bridge.c:628:11: error: implicit declaration of function 'irq_domain_create_hierarchy' [-Werror=implicit-function-declaration]
     628 |  domain = irq_domain_create_hierarchy(parent, 0, 8, fn,
         |           ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:628:9: warning: assignment to 'struct irq_domain *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     628 |  domain = irq_domain_create_hierarchy(parent, 0, 8, fn,
         |         ^
>> arch/mips/pci/pci-xtalk-bridge.c:631:3: error: implicit declaration of function 'irq_domain_free_fwnode' [-Werror=implicit-function-declaration]
     631 |   irq_domain_free_fwnode(fn);
         |   ^~~~~~~~~~~~~~~~~~~~~~
>> arch/mips/pci/pci-xtalk-bridge.c:730:2: error: implicit declaration of function 'irq_domain_remove' [-Werror=implicit-function-declaration]
     730 |  irq_domain_remove(domain);
         |  ^~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c: In function 'bridge_remove':
>> arch/mips/pci/pci-xtalk-bridge.c:739:39: error: dereferencing pointer to incomplete type 'struct irq_domain'
     739 |  struct fwnode_handle *fn = bc->domain->fwnode;
         |                                       ^~
   arch/mips/pci/pci-xtalk-bridge.c: At top level:
   arch/mips/pci/pci-xtalk-bridge.c:418:36: error: storage size of 'bridge_domain_ops' isn't known
     418 | static const struct irq_domain_ops bridge_domain_ops = {
         |                                    ^~~~~~~~~~~~~~~~~
   In file included from arch/mips/include/asm/pci/bridge.h:17,
                    from arch/mips/pci/pci-xtalk-bridge.c:17:
   arch/mips/include/asm/xtalk/xwidget.h:124:46: warning: 'widget_idents' defined but not used [-Wunused-const-variable=]
     124 | static const struct widget_ident __initconst widget_idents[] = {
         |                                              ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors


vim +/irq_domain_set_info +222 arch/mips/sgi-ip30/ip30-irq.c

7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24   95  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24   96  static void ip30_normal_irq(struct irq_desc *desc)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24   97  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24   98  	int cpu = smp_processor_id();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24   99  	struct irq_domain *domain;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  100  	u64 pend, mask;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  101  	int irq;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  102  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  103  	pend = heart_read(&heart_regs->isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  104  	mask = (heart_read(&heart_regs->imr[cpu]) &
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  105  		(HEART_L0_INT_MASK | HEART_L1_INT_MASK | HEART_L2_INT_MASK));
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  106  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  107  	pend &= mask;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  108  	if (unlikely(!pend))
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  109  		return;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  110  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  111  #ifdef CONFIG_SMP
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  112  	if (pend & BIT_ULL(HEART_L2_INT_RESCHED_CPU_0)) {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  113  		heart_write(BIT_ULL(HEART_L2_INT_RESCHED_CPU_0),
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  114  			    &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  115  		scheduler_ipi();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  116  	} else if (pend & BIT_ULL(HEART_L2_INT_RESCHED_CPU_1)) {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  117  		heart_write(BIT_ULL(HEART_L2_INT_RESCHED_CPU_1),
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  118  			    &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  119  		scheduler_ipi();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  120  	} else if (pend & BIT_ULL(HEART_L2_INT_CALL_CPU_0)) {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  121  		heart_write(BIT_ULL(HEART_L2_INT_CALL_CPU_0),
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  122  			    &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  123  		generic_smp_call_function_interrupt();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  124  	} else if (pend & BIT_ULL(HEART_L2_INT_CALL_CPU_1)) {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  125  		heart_write(BIT_ULL(HEART_L2_INT_CALL_CPU_1),
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  126  			    &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  127  		generic_smp_call_function_interrupt();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  128  	} else
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  129  #endif
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  130  	{
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  131  		domain = irq_desc_get_handler_data(desc);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @132  		irq = irq_linear_revmap(domain, __ffs(pend));
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  133  		if (irq)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  134  			generic_handle_irq(irq);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  135  		else
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  136  			spurious_interrupt();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  137  	}
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  138  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  139  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  140  static void ip30_ack_heart_irq(struct irq_data *d)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  141  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  142  	heart_write(BIT_ULL(d->hwirq), &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  143  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  144  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  145  static void ip30_mask_heart_irq(struct irq_data *d)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  146  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  147  	struct heart_irq_data *hd = irq_data_get_irq_chip_data(d);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  148  	unsigned long *mask = &per_cpu(irq_enable_mask, hd->cpu);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  149  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  150  	clear_bit(d->hwirq, mask);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  151  	heart_write(*mask, &heart_regs->imr[hd->cpu]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  152  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  153  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  154  static void ip30_mask_and_ack_heart_irq(struct irq_data *d)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  155  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  156  	struct heart_irq_data *hd = irq_data_get_irq_chip_data(d);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  157  	unsigned long *mask = &per_cpu(irq_enable_mask, hd->cpu);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  158  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  159  	clear_bit(d->hwirq, mask);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  160  	heart_write(*mask, &heart_regs->imr[hd->cpu]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  161  	heart_write(BIT_ULL(d->hwirq), &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  162  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  163  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  164  static void ip30_unmask_heart_irq(struct irq_data *d)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  165  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  166  	struct heart_irq_data *hd = irq_data_get_irq_chip_data(d);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  167  	unsigned long *mask = &per_cpu(irq_enable_mask, hd->cpu);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  168  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  169  	set_bit(d->hwirq, mask);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  170  	heart_write(*mask, &heart_regs->imr[hd->cpu]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  171  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  172  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  173  static int ip30_set_heart_irq_affinity(struct irq_data *d,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  174  				       const struct cpumask *mask, bool force)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  175  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  176  	struct heart_irq_data *hd = irq_data_get_irq_chip_data(d);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  177  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  178  	if (!hd)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  179  		return -EINVAL;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  180  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  181  	if (irqd_is_started(d))
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  182  		ip30_mask_and_ack_heart_irq(d);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  183  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  184  	hd->cpu = cpumask_first_and(mask, cpu_online_mask);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  185  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  186  	if (irqd_is_started(d))
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  187  		ip30_unmask_heart_irq(d);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  188  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  189  	irq_data_update_effective_affinity(d, cpumask_of(hd->cpu));
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  190  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  191  	return 0;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  192  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  193  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  194  static struct irq_chip heart_irq_chip = {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  195  	.name			= "HEART",
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  196  	.irq_ack		= ip30_ack_heart_irq,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  197  	.irq_mask		= ip30_mask_heart_irq,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  198  	.irq_mask_ack		= ip30_mask_and_ack_heart_irq,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  199  	.irq_unmask		= ip30_unmask_heart_irq,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  200  	.irq_set_affinity	= ip30_set_heart_irq_affinity,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  201  };
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  202  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  203  static int heart_domain_alloc(struct irq_domain *domain, unsigned int virq,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  204  			      unsigned int nr_irqs, void *arg)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  205  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  206  	struct irq_alloc_info *info = arg;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  207  	struct heart_irq_data *hd;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  208  	int hwirq;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  209  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  210  	if (nr_irqs > 1 || !info)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  211  		return -EINVAL;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  212  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  213  	hd = kzalloc(sizeof(*hd), GFP_KERNEL);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  214  	if (!hd)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  215  		return -ENOMEM;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  216  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  217  	hwirq = heart_alloc_int();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  218  	if (hwirq < 0) {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  219  		kfree(hd);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  220  		return -EAGAIN;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  221  	}
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @222  	irq_domain_set_info(domain, virq, hwirq, &heart_irq_chip, hd,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  223  			    handle_level_irq, NULL, NULL);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  224  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  225  	return 0;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  226  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  227  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  228  static void heart_domain_free(struct irq_domain *domain,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  229  			      unsigned int virq, unsigned int nr_irqs)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  230  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  231  	struct irq_data *irqd;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  232  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  233  	if (nr_irqs > 1)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  234  		return;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  235  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @236  	irqd = irq_domain_get_irq_data(domain, virq);
c0e79fd89749b0 Thomas Bogendoerfer 2020-01-22  237  	if (irqd) {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  238  		clear_bit(irqd->hwirq, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  239  		kfree(irqd->chip_data);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  240  	}
c0e79fd89749b0 Thomas Bogendoerfer 2020-01-22  241  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  242  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @243  static const struct irq_domain_ops heart_domain_ops = {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @244  	.alloc = heart_domain_alloc,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @245  	.free  = heart_domain_free,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  246  };
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  247  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  248  void __init ip30_install_ipi(void)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  249  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  250  	int cpu = smp_processor_id();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  251  	unsigned long *mask = &per_cpu(irq_enable_mask, cpu);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  252  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  253  	set_bit(HEART_L2_INT_RESCHED_CPU_0 + cpu, mask);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  254  	heart_write(BIT_ULL(HEART_L2_INT_RESCHED_CPU_0 + cpu),
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  255  		    &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  256  	set_bit(HEART_L2_INT_CALL_CPU_0 + cpu, mask);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  257  	heart_write(BIT_ULL(HEART_L2_INT_CALL_CPU_0 + cpu),
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  258  		    &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  259  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  260  	heart_write(*mask, &heart_regs->imr[cpu]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  261  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  262  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  263  void __init arch_init_irq(void)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  264  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  265  	struct irq_domain *domain;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  266  	struct fwnode_handle *fn;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  267  	unsigned long *mask;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  268  	int i;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  269  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  270  	mips_cpu_irq_init();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  271  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  272  	/* Mask all IRQs. */
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  273  	heart_write(HEART_CLR_ALL_MASK, &heart_regs->imr[0]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  274  	heart_write(HEART_CLR_ALL_MASK, &heart_regs->imr[1]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  275  	heart_write(HEART_CLR_ALL_MASK, &heart_regs->imr[2]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  276  	heart_write(HEART_CLR_ALL_MASK, &heart_regs->imr[3]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  277  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  278  	/* Ack everything. */
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  279  	heart_write(HEART_ACK_ALL_MASK, &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  280  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  281  	/* Enable specific HEART error IRQs for each CPU. */
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  282  	mask = &per_cpu(irq_enable_mask, 0);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  283  	*mask |= HEART_CPU0_ERR_MASK;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  284  	heart_write(*mask, &heart_regs->imr[0]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  285  	mask = &per_cpu(irq_enable_mask, 1);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  286  	*mask |= HEART_CPU1_ERR_MASK;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  287  	heart_write(*mask, &heart_regs->imr[1]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  288  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  289  	/*
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  290  	 * Some HEART bits are reserved by hardware or by software convention.
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  291  	 * Mark these as reserved right away so they won't be accidentally
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  292  	 * used later.
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  293  	 */
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  294  	set_bit(HEART_L0_INT_GENERIC, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  295  	set_bit(HEART_L0_INT_FLOW_CTRL_HWTR_0, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  296  	set_bit(HEART_L0_INT_FLOW_CTRL_HWTR_1, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  297  	set_bit(HEART_L2_INT_RESCHED_CPU_0, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  298  	set_bit(HEART_L2_INT_RESCHED_CPU_1, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  299  	set_bit(HEART_L2_INT_CALL_CPU_0, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  300  	set_bit(HEART_L2_INT_CALL_CPU_1, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  301  	set_bit(HEART_L3_INT_TIMER, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  302  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  303  	/* Reserve the error interrupts (#51 to #63). */
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  304  	for (i = HEART_L4_INT_XWID_ERR_9; i <= HEART_L4_INT_HEART_EXCP; i++)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  305  		set_bit(i, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  306  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @307  	fn = irq_domain_alloc_named_fwnode("HEART");
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  308  	WARN_ON(fn == NULL);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  309  	if (!fn)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  310  		return;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @311  	domain = irq_domain_create_linear(fn, HEART_NUM_IRQS,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  312  					  &heart_domain_ops, NULL);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  313  	WARN_ON(domain == NULL);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  314  	if (!domain)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  315  		return;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  316  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @317  	irq_set_default_host(domain);

:::::: The code at line 222 was first introduced by commit
:::::: 7505576d1c1ac0cfe85fdf90999433dd8b673012 MIPS: add support for SGI Octane (IP30)

:::::: TO: Thomas Bogendoerfer <tbogendoerfer@suse.de>
:::::: CC: Paul Burton <paulburton@kernel.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

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

[-- Attachment #3: Type: text/plain, Size: 176 bytes --]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [arm-platforms:irq/domain_cleanup 7/39] arch/mips/sgi-ip30/ip30-irq.c:222:2: error: implicit declaration of function 'irq_domain_set_info'
@ 2021-05-18 23:47 ` kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2021-05-18 23:47 UTC (permalink / raw)
  To: kbuild-all

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git irq/domain_cleanup
head:   5019b17f095613b0b187d1cdcaa798347de62033
commit: e02a045e1bf414960f6b563a638c88ac6c96e490 [7/39] MIPS: Do not include linux/irqdomain.h from asm/irq.h
config: mips-randconfig-r003-20210519 (attached as .config)
compiler: mips64-linux-gcc (GCC) 9.3.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
        # https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git/commit/?id=e02a045e1bf414960f6b563a638c88ac6c96e490
        git remote add arm-platforms https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git
        git fetch --no-tags arm-platforms irq/domain_cleanup
        git checkout e02a045e1bf414960f6b563a638c88ac6c96e490
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=mips 

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 >>):

   arch/mips/sgi-ip30/ip30-irq.c: In function 'ip30_normal_irq':
   arch/mips/sgi-ip30/ip30-irq.c:132:9: error: implicit declaration of function 'irq_linear_revmap' [-Werror=implicit-function-declaration]
     132 |   irq = irq_linear_revmap(domain, __ffs(pend));
         |         ^~~~~~~~~~~~~~~~~
   arch/mips/sgi-ip30/ip30-irq.c: In function 'heart_domain_alloc':
>> arch/mips/sgi-ip30/ip30-irq.c:222:2: error: implicit declaration of function 'irq_domain_set_info' [-Werror=implicit-function-declaration]
     222 |  irq_domain_set_info(domain, virq, hwirq, &heart_irq_chip, hd,
         |  ^~~~~~~~~~~~~~~~~~~
   arch/mips/sgi-ip30/ip30-irq.c: In function 'heart_domain_free':
>> arch/mips/sgi-ip30/ip30-irq.c:236:9: error: implicit declaration of function 'irq_domain_get_irq_data'; did you mean 'irq_desc_get_irq_data'? [-Werror=implicit-function-declaration]
     236 |  irqd = irq_domain_get_irq_data(domain, virq);
         |         ^~~~~~~~~~~~~~~~~~~~~~~
         |         irq_desc_get_irq_data
>> arch/mips/sgi-ip30/ip30-irq.c:236:7: warning: assignment to 'struct irq_data *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     236 |  irqd = irq_domain_get_irq_data(domain, virq);
         |       ^
   arch/mips/sgi-ip30/ip30-irq.c: At top level:
>> arch/mips/sgi-ip30/ip30-irq.c:243:21: error: variable 'heart_domain_ops' has initializer but incomplete type
     243 | static const struct irq_domain_ops heart_domain_ops = {
         |                     ^~~~~~~~~~~~~~
>> arch/mips/sgi-ip30/ip30-irq.c:244:3: error: 'const struct irq_domain_ops' has no member named 'alloc'
     244 |  .alloc = heart_domain_alloc,
         |   ^~~~~
>> arch/mips/sgi-ip30/ip30-irq.c:244:11: warning: excess elements in struct initializer
     244 |  .alloc = heart_domain_alloc,
         |           ^~~~~~~~~~~~~~~~~~
   arch/mips/sgi-ip30/ip30-irq.c:244:11: note: (near initialization for 'heart_domain_ops')
>> arch/mips/sgi-ip30/ip30-irq.c:245:3: error: 'const struct irq_domain_ops' has no member named 'free'
     245 |  .free  = heart_domain_free,
         |   ^~~~
   arch/mips/sgi-ip30/ip30-irq.c:245:11: warning: excess elements in struct initializer
     245 |  .free  = heart_domain_free,
         |           ^~~~~~~~~~~~~~~~~
   arch/mips/sgi-ip30/ip30-irq.c:245:11: note: (near initialization for 'heart_domain_ops')
   arch/mips/sgi-ip30/ip30-irq.c: In function 'arch_init_irq':
>> arch/mips/sgi-ip30/ip30-irq.c:307:7: error: implicit declaration of function 'irq_domain_alloc_named_fwnode' [-Werror=implicit-function-declaration]
     307 |  fn = irq_domain_alloc_named_fwnode("HEART");
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> arch/mips/sgi-ip30/ip30-irq.c:307:5: warning: assignment to 'struct fwnode_handle *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     307 |  fn = irq_domain_alloc_named_fwnode("HEART");
         |     ^
>> arch/mips/sgi-ip30/ip30-irq.c:311:11: error: implicit declaration of function 'irq_domain_create_linear' [-Werror=implicit-function-declaration]
     311 |  domain = irq_domain_create_linear(fn, HEART_NUM_IRQS,
         |           ^~~~~~~~~~~~~~~~~~~~~~~~
>> arch/mips/sgi-ip30/ip30-irq.c:311:9: warning: assignment to 'struct irq_domain *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     311 |  domain = irq_domain_create_linear(fn, HEART_NUM_IRQS,
         |         ^
>> arch/mips/sgi-ip30/ip30-irq.c:317:2: error: implicit declaration of function 'irq_set_default_host' [-Werror=implicit-function-declaration]
     317 |  irq_set_default_host(domain);
         |  ^~~~~~~~~~~~~~~~~~~~
   arch/mips/sgi-ip30/ip30-irq.c: At top level:
>> arch/mips/sgi-ip30/ip30-irq.c:243:36: error: storage size of 'heart_domain_ops' isn't known
     243 | static const struct irq_domain_ops heart_domain_ops = {
         |                                    ^~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors
--
   arch/mips/pci/pci-xtalk-bridge.c: In function 'bridge_domain_alloc':
>> arch/mips/pci/pci-xtalk-bridge.c:347:8: error: implicit declaration of function 'irq_domain_alloc_irqs_parent' [-Werror=implicit-function-declaration]
     347 |  ret = irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, arg);
         |        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> arch/mips/pci/pci-xtalk-bridge.c:351:3: error: implicit declaration of function 'irq_domain_set_info' [-Werror=implicit-function-declaration]
     351 |   irq_domain_set_info(domain, virq, info->pin, &bridge_irq_chip,
         |   ^~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c: In function 'bridge_domain_free':
>> arch/mips/pci/pci-xtalk-bridge.c:363:26: error: implicit declaration of function 'irq_domain_get_irq_data'; did you mean 'irq_desc_get_irq_data'? [-Werror=implicit-function-declaration]
     363 |  struct irq_data *irqd = irq_domain_get_irq_data(domain, virq);
         |                          ^~~~~~~~~~~~~~~~~~~~~~~
         |                          irq_desc_get_irq_data
>> arch/mips/pci/pci-xtalk-bridge.c:363:26: warning: initialization of 'struct irq_data *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
>> arch/mips/pci/pci-xtalk-bridge.c:369:2: error: implicit declaration of function 'irq_domain_free_irqs_top' [-Werror=implicit-function-declaration]
     369 |  irq_domain_free_irqs_top(domain, virq, nr_irqs);
         |  ^~~~~~~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c: At top level:
>> arch/mips/pci/pci-xtalk-bridge.c:418:21: error: variable 'bridge_domain_ops' has initializer but incomplete type
     418 | static const struct irq_domain_ops bridge_domain_ops = {
         |                     ^~~~~~~~~~~~~~
>> arch/mips/pci/pci-xtalk-bridge.c:419:3: error: 'const struct irq_domain_ops' has no member named 'alloc'
     419 |  .alloc      = bridge_domain_alloc,
         |   ^~~~~
>> arch/mips/pci/pci-xtalk-bridge.c:419:16: warning: excess elements in struct initializer
     419 |  .alloc      = bridge_domain_alloc,
         |                ^~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:419:16: note: (near initialization for 'bridge_domain_ops')
>> arch/mips/pci/pci-xtalk-bridge.c:420:3: error: 'const struct irq_domain_ops' has no member named 'free'
     420 |  .free       = bridge_domain_free,
         |   ^~~~
   arch/mips/pci/pci-xtalk-bridge.c:420:16: warning: excess elements in struct initializer
     420 |  .free       = bridge_domain_free,
         |                ^~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:420:16: note: (near initialization for 'bridge_domain_ops')
>> arch/mips/pci/pci-xtalk-bridge.c:421:3: error: 'const struct irq_domain_ops' has no member named 'activate'
     421 |  .activate   = bridge_domain_activate,
         |   ^~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:421:16: warning: excess elements in struct initializer
     421 |  .activate   = bridge_domain_activate,
         |                ^~~~~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:421:16: note: (near initialization for 'bridge_domain_ops')
>> arch/mips/pci/pci-xtalk-bridge.c:422:3: error: 'const struct irq_domain_ops' has no member named 'deactivate'
     422 |  .deactivate = bridge_domain_deactivate
         |   ^~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:422:16: warning: excess elements in struct initializer
     422 |  .deactivate = bridge_domain_deactivate
         |                ^~~~~~~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:422:16: note: (near initialization for 'bridge_domain_ops')
   arch/mips/pci/pci-xtalk-bridge.c: In function 'bridge_map_irq':
>> arch/mips/pci/pci-xtalk-bridge.c:457:9: error: implicit declaration of function 'irq_domain_alloc_irqs' [-Werror=implicit-function-declaration]
     457 |   irq = irq_domain_alloc_irqs(bc->domain, 1, bc->nasid, &info);
         |         ^~~~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c: In function 'bridge_probe':
>> arch/mips/pci/pci-xtalk-bridge.c:622:11: error: implicit declaration of function 'irq_get_default_host' [-Werror=implicit-function-declaration]
     622 |  parent = irq_get_default_host();
         |           ^~~~~~~~~~~~~~~~~~~~
>> arch/mips/pci/pci-xtalk-bridge.c:622:9: warning: assignment to 'struct irq_domain *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     622 |  parent = irq_get_default_host();
         |         ^
>> arch/mips/pci/pci-xtalk-bridge.c:625:7: error: implicit declaration of function 'irq_domain_alloc_named_fwnode' [-Werror=implicit-function-declaration]
     625 |  fn = irq_domain_alloc_named_fwnode("BRIDGE");
         |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> arch/mips/pci/pci-xtalk-bridge.c:625:5: warning: assignment to 'struct fwnode_handle *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     625 |  fn = irq_domain_alloc_named_fwnode("BRIDGE");
         |     ^
>> arch/mips/pci/pci-xtalk-bridge.c:628:11: error: implicit declaration of function 'irq_domain_create_hierarchy' [-Werror=implicit-function-declaration]
     628 |  domain = irq_domain_create_hierarchy(parent, 0, 8, fn,
         |           ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c:628:9: warning: assignment to 'struct irq_domain *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     628 |  domain = irq_domain_create_hierarchy(parent, 0, 8, fn,
         |         ^
>> arch/mips/pci/pci-xtalk-bridge.c:631:3: error: implicit declaration of function 'irq_domain_free_fwnode' [-Werror=implicit-function-declaration]
     631 |   irq_domain_free_fwnode(fn);
         |   ^~~~~~~~~~~~~~~~~~~~~~
>> arch/mips/pci/pci-xtalk-bridge.c:730:2: error: implicit declaration of function 'irq_domain_remove' [-Werror=implicit-function-declaration]
     730 |  irq_domain_remove(domain);
         |  ^~~~~~~~~~~~~~~~~
   arch/mips/pci/pci-xtalk-bridge.c: In function 'bridge_remove':
>> arch/mips/pci/pci-xtalk-bridge.c:739:39: error: dereferencing pointer to incomplete type 'struct irq_domain'
     739 |  struct fwnode_handle *fn = bc->domain->fwnode;
         |                                       ^~
   arch/mips/pci/pci-xtalk-bridge.c: At top level:
   arch/mips/pci/pci-xtalk-bridge.c:418:36: error: storage size of 'bridge_domain_ops' isn't known
     418 | static const struct irq_domain_ops bridge_domain_ops = {
         |                                    ^~~~~~~~~~~~~~~~~
   In file included from arch/mips/include/asm/pci/bridge.h:17,
                    from arch/mips/pci/pci-xtalk-bridge.c:17:
   arch/mips/include/asm/xtalk/xwidget.h:124:46: warning: 'widget_idents' defined but not used [-Wunused-const-variable=]
     124 | static const struct widget_ident __initconst widget_idents[] = {
         |                                              ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors


vim +/irq_domain_set_info +222 arch/mips/sgi-ip30/ip30-irq.c

7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24   95  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24   96  static void ip30_normal_irq(struct irq_desc *desc)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24   97  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24   98  	int cpu = smp_processor_id();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24   99  	struct irq_domain *domain;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  100  	u64 pend, mask;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  101  	int irq;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  102  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  103  	pend = heart_read(&heart_regs->isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  104  	mask = (heart_read(&heart_regs->imr[cpu]) &
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  105  		(HEART_L0_INT_MASK | HEART_L1_INT_MASK | HEART_L2_INT_MASK));
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  106  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  107  	pend &= mask;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  108  	if (unlikely(!pend))
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  109  		return;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  110  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  111  #ifdef CONFIG_SMP
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  112  	if (pend & BIT_ULL(HEART_L2_INT_RESCHED_CPU_0)) {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  113  		heart_write(BIT_ULL(HEART_L2_INT_RESCHED_CPU_0),
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  114  			    &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  115  		scheduler_ipi();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  116  	} else if (pend & BIT_ULL(HEART_L2_INT_RESCHED_CPU_1)) {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  117  		heart_write(BIT_ULL(HEART_L2_INT_RESCHED_CPU_1),
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  118  			    &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  119  		scheduler_ipi();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  120  	} else if (pend & BIT_ULL(HEART_L2_INT_CALL_CPU_0)) {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  121  		heart_write(BIT_ULL(HEART_L2_INT_CALL_CPU_0),
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  122  			    &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  123  		generic_smp_call_function_interrupt();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  124  	} else if (pend & BIT_ULL(HEART_L2_INT_CALL_CPU_1)) {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  125  		heart_write(BIT_ULL(HEART_L2_INT_CALL_CPU_1),
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  126  			    &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  127  		generic_smp_call_function_interrupt();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  128  	} else
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  129  #endif
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  130  	{
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  131  		domain = irq_desc_get_handler_data(desc);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @132  		irq = irq_linear_revmap(domain, __ffs(pend));
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  133  		if (irq)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  134  			generic_handle_irq(irq);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  135  		else
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  136  			spurious_interrupt();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  137  	}
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  138  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  139  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  140  static void ip30_ack_heart_irq(struct irq_data *d)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  141  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  142  	heart_write(BIT_ULL(d->hwirq), &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  143  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  144  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  145  static void ip30_mask_heart_irq(struct irq_data *d)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  146  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  147  	struct heart_irq_data *hd = irq_data_get_irq_chip_data(d);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  148  	unsigned long *mask = &per_cpu(irq_enable_mask, hd->cpu);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  149  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  150  	clear_bit(d->hwirq, mask);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  151  	heart_write(*mask, &heart_regs->imr[hd->cpu]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  152  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  153  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  154  static void ip30_mask_and_ack_heart_irq(struct irq_data *d)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  155  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  156  	struct heart_irq_data *hd = irq_data_get_irq_chip_data(d);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  157  	unsigned long *mask = &per_cpu(irq_enable_mask, hd->cpu);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  158  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  159  	clear_bit(d->hwirq, mask);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  160  	heart_write(*mask, &heart_regs->imr[hd->cpu]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  161  	heart_write(BIT_ULL(d->hwirq), &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  162  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  163  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  164  static void ip30_unmask_heart_irq(struct irq_data *d)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  165  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  166  	struct heart_irq_data *hd = irq_data_get_irq_chip_data(d);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  167  	unsigned long *mask = &per_cpu(irq_enable_mask, hd->cpu);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  168  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  169  	set_bit(d->hwirq, mask);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  170  	heart_write(*mask, &heart_regs->imr[hd->cpu]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  171  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  172  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  173  static int ip30_set_heart_irq_affinity(struct irq_data *d,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  174  				       const struct cpumask *mask, bool force)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  175  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  176  	struct heart_irq_data *hd = irq_data_get_irq_chip_data(d);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  177  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  178  	if (!hd)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  179  		return -EINVAL;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  180  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  181  	if (irqd_is_started(d))
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  182  		ip30_mask_and_ack_heart_irq(d);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  183  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  184  	hd->cpu = cpumask_first_and(mask, cpu_online_mask);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  185  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  186  	if (irqd_is_started(d))
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  187  		ip30_unmask_heart_irq(d);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  188  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  189  	irq_data_update_effective_affinity(d, cpumask_of(hd->cpu));
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  190  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  191  	return 0;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  192  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  193  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  194  static struct irq_chip heart_irq_chip = {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  195  	.name			= "HEART",
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  196  	.irq_ack		= ip30_ack_heart_irq,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  197  	.irq_mask		= ip30_mask_heart_irq,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  198  	.irq_mask_ack		= ip30_mask_and_ack_heart_irq,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  199  	.irq_unmask		= ip30_unmask_heart_irq,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  200  	.irq_set_affinity	= ip30_set_heart_irq_affinity,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  201  };
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  202  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  203  static int heart_domain_alloc(struct irq_domain *domain, unsigned int virq,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  204  			      unsigned int nr_irqs, void *arg)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  205  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  206  	struct irq_alloc_info *info = arg;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  207  	struct heart_irq_data *hd;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  208  	int hwirq;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  209  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  210  	if (nr_irqs > 1 || !info)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  211  		return -EINVAL;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  212  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  213  	hd = kzalloc(sizeof(*hd), GFP_KERNEL);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  214  	if (!hd)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  215  		return -ENOMEM;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  216  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  217  	hwirq = heart_alloc_int();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  218  	if (hwirq < 0) {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  219  		kfree(hd);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  220  		return -EAGAIN;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  221  	}
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @222  	irq_domain_set_info(domain, virq, hwirq, &heart_irq_chip, hd,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  223  			    handle_level_irq, NULL, NULL);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  224  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  225  	return 0;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  226  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  227  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  228  static void heart_domain_free(struct irq_domain *domain,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  229  			      unsigned int virq, unsigned int nr_irqs)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  230  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  231  	struct irq_data *irqd;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  232  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  233  	if (nr_irqs > 1)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  234  		return;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  235  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @236  	irqd = irq_domain_get_irq_data(domain, virq);
c0e79fd89749b0 Thomas Bogendoerfer 2020-01-22  237  	if (irqd) {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  238  		clear_bit(irqd->hwirq, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  239  		kfree(irqd->chip_data);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  240  	}
c0e79fd89749b0 Thomas Bogendoerfer 2020-01-22  241  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  242  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @243  static const struct irq_domain_ops heart_domain_ops = {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @244  	.alloc = heart_domain_alloc,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @245  	.free  = heart_domain_free,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  246  };
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  247  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  248  void __init ip30_install_ipi(void)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  249  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  250  	int cpu = smp_processor_id();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  251  	unsigned long *mask = &per_cpu(irq_enable_mask, cpu);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  252  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  253  	set_bit(HEART_L2_INT_RESCHED_CPU_0 + cpu, mask);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  254  	heart_write(BIT_ULL(HEART_L2_INT_RESCHED_CPU_0 + cpu),
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  255  		    &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  256  	set_bit(HEART_L2_INT_CALL_CPU_0 + cpu, mask);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  257  	heart_write(BIT_ULL(HEART_L2_INT_CALL_CPU_0 + cpu),
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  258  		    &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  259  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  260  	heart_write(*mask, &heart_regs->imr[cpu]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  261  }
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  262  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  263  void __init arch_init_irq(void)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  264  {
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  265  	struct irq_domain *domain;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  266  	struct fwnode_handle *fn;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  267  	unsigned long *mask;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  268  	int i;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  269  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  270  	mips_cpu_irq_init();
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  271  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  272  	/* Mask all IRQs. */
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  273  	heart_write(HEART_CLR_ALL_MASK, &heart_regs->imr[0]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  274  	heart_write(HEART_CLR_ALL_MASK, &heart_regs->imr[1]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  275  	heart_write(HEART_CLR_ALL_MASK, &heart_regs->imr[2]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  276  	heart_write(HEART_CLR_ALL_MASK, &heart_regs->imr[3]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  277  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  278  	/* Ack everything. */
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  279  	heart_write(HEART_ACK_ALL_MASK, &heart_regs->clear_isr);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  280  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  281  	/* Enable specific HEART error IRQs for each CPU. */
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  282  	mask = &per_cpu(irq_enable_mask, 0);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  283  	*mask |= HEART_CPU0_ERR_MASK;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  284  	heart_write(*mask, &heart_regs->imr[0]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  285  	mask = &per_cpu(irq_enable_mask, 1);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  286  	*mask |= HEART_CPU1_ERR_MASK;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  287  	heart_write(*mask, &heart_regs->imr[1]);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  288  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  289  	/*
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  290  	 * Some HEART bits are reserved by hardware or by software convention.
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  291  	 * Mark these as reserved right away so they won't be accidentally
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  292  	 * used later.
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  293  	 */
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  294  	set_bit(HEART_L0_INT_GENERIC, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  295  	set_bit(HEART_L0_INT_FLOW_CTRL_HWTR_0, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  296  	set_bit(HEART_L0_INT_FLOW_CTRL_HWTR_1, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  297  	set_bit(HEART_L2_INT_RESCHED_CPU_0, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  298  	set_bit(HEART_L2_INT_RESCHED_CPU_1, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  299  	set_bit(HEART_L2_INT_CALL_CPU_0, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  300  	set_bit(HEART_L2_INT_CALL_CPU_1, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  301  	set_bit(HEART_L3_INT_TIMER, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  302  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  303  	/* Reserve the error interrupts (#51 to #63). */
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  304  	for (i = HEART_L4_INT_XWID_ERR_9; i <= HEART_L4_INT_HEART_EXCP; i++)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  305  		set_bit(i, heart_irq_map);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  306  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @307  	fn = irq_domain_alloc_named_fwnode("HEART");
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  308  	WARN_ON(fn == NULL);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  309  	if (!fn)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  310  		return;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @311  	domain = irq_domain_create_linear(fn, HEART_NUM_IRQS,
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  312  					  &heart_domain_ops, NULL);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  313  	WARN_ON(domain == NULL);
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  314  	if (!domain)
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  315  		return;
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24  316  
7505576d1c1ac0 Thomas Bogendoerfer 2019-10-24 @317  	irq_set_default_host(domain);

:::::: The code@line 222 was first introduced by commit
:::::: 7505576d1c1ac0cfe85fdf90999433dd8b673012 MIPS: add support for SGI Octane (IP30)

:::::: TO: Thomas Bogendoerfer <tbogendoerfer@suse.de>
:::::: CC: Paul Burton <paulburton@kernel.org>

---
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: 30206 bytes --]

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

end of thread, other threads:[~2021-05-18 23:50 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-18 23:47 [arm-platforms:irq/domain_cleanup 7/39] arch/mips/sgi-ip30/ip30-irq.c:222:2: error: implicit declaration of function 'irq_domain_set_info' kernel test robot
2021-05-18 23:47 ` 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.