Hi David,

[auto build test ERROR on tip/irq/core]
[also build test ERROR on v4.10-rc8 next-20170215]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/David-Daney/genirq-gpio-Add-driver-for-ThunderX-and-OCTEON-TX-SoCs/20170215-023004
config: sparc64-allmodconfig (attached as .config)
compiler: sparc64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
        wget 
https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross
 -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=sparc64 

All error/warnings (new ones prefixed by >>):

   drivers/gpio/gpio-thunderx.c: In function 'thunderx_gpio_irq_set_type':
>> drivers/gpio/gpio-thunderx.c:243:32: error: 'handle_fasteoi_edge_irq' 
>> undeclared (first use in this function)
      irq_set_handler_locked(data, handle_fasteoi_edge_irq);
                                   ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-thunderx.c:243:32: note: each undeclared identifier is 
reported only once for each function it appears in
>> drivers/gpio/gpio-thunderx.c:246:32: error: 'handle_fasteoi_level_irq' 
>> undeclared (first use in this function)
      irq_set_handler_locked(data, handle_fasteoi_level_irq);
                                   ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-thunderx.c: In function 'thunderx_gpio_irq_enable':
>> drivers/gpio/gpio-thunderx.c:265:2: error: implicit declaration of function 
>> 'irq_chip_enable_parent' [-Werror=implicit-function-declaration]
     irq_chip_enable_parent(data);
     ^~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-thunderx.c: In function 'thunderx_gpio_irq_disable':
>> drivers/gpio/gpio-thunderx.c:272:2: error: implicit declaration of function 
>> 'irq_chip_disable_parent' [-Werror=implicit-function-declaration]
     irq_chip_disable_parent(data);
     ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-thunderx.c: At top level:
>> drivers/gpio/gpio-thunderx.c:289:14: error: 'irq_chip_eoi_parent' undeclared 
>> here (not in a function)
     .irq_eoi  = irq_chip_eoi_parent,
                 ^~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-thunderx.c:290:22: error: 'irq_chip_set_affinity_parent' 
>> undeclared here (not in a function)
     .irq_set_affinity = irq_chip_set_affinity_parent,
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-thunderx.c: In function 'thunderx_gpio_irq_alloc':
>> drivers/gpio/gpio-thunderx.c:320:9: error: implicit declaration of function 
>> 'irq_domain_set_hwirq_and_chip' [-Werror=implicit-function-declaration]
     return irq_domain_set_hwirq_and_chip(d, virq, txline->line,
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-thunderx.c: At top level:
>> drivers/gpio/gpio-thunderx.c:326:2: error: unknown field 'alloc' specified 
>> in initializer
     .alloc  = thunderx_gpio_irq_alloc,
     ^
>> drivers/gpio/gpio-thunderx.c:326:12: error: initialization from incompatible 
>> pointer type [-Werror=incompatible-pointer-types]
     .alloc  = thunderx_gpio_irq_alloc,
               ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-thunderx.c:326:12: note: (near initialization for 
'thunderx_gpio_irqd_ops.unmap')
>> drivers/gpio/gpio-thunderx.c:327:2: error: unknown field 'translate' 
>> specified in initializer
     .translate = thunderx_gpio_irq_translate
     ^
   drivers/gpio/gpio-thunderx.c:327:15: error: initialization from incompatible 
pointer type [-Werror=incompatible-pointer-types]
     .translate = thunderx_gpio_irq_translate
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-thunderx.c:327:15: note: (near initialization for 
'thunderx_gpio_irqd_ops.xlate')
   drivers/gpio/gpio-thunderx.c: In function 'thunderx_gpio_probe':
>> drivers/gpio/gpio-thunderx.c:419:17: error: implicit declaration of function 
>> 'irq_domain_create_hierarchy' [-Werror=implicit-function-declaration]
     txgpio->irqd = 
irq_domain_create_hierarchy(irq_get_irq_data(txgpio->msix_entries[0].vector)->domain,
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpio/gpio-thunderx.c:419:15: warning: assignment makes pointer from 
>> integer without a cast [-Wint-conversion]
     txgpio->irqd = 
irq_domain_create_hierarchy(irq_get_irq_data(txgpio->msix_entries[0].vector)->domain,
                  ^
>> drivers/gpio/gpio-thunderx.c:427:9: error: implicit declaration of function 
>> 'irq_domain_push_irq' [-Werror=implicit-function-declaration]
      err = irq_domain_push_irq(txgpio->irqd,
            ^~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-thunderx.c: In function 'thunderx_gpio_remove':
>> drivers/gpio/gpio-thunderx.c:465:3: error: implicit declaration of function 
>> 'irq_domain_pop_irq' [-Werror=implicit-function-declaration]
      irq_domain_pop_irq(txgpio->irqd,
      ^~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/handle_fasteoi_edge_irq +243 drivers/gpio/gpio-thunderx.c

   237  
   238          irqd_set_trigger_type(data, flow_type);
   239  
   240          bit_cfg = GLITCH_FILTER_400NS | GPIO_BIT_CFG_INT_EN;
   241  
   242          if (flow_type & IRQ_TYPE_EDGE_BOTH) {
 > 243                  irq_set_handler_locked(data, handle_fasteoi_edge_irq);
   244                  bit_cfg |= GPIO_BIT_CFG_INT_TYPE;
   245          } else {
 > 246                  irq_set_handler_locked(data, handle_fasteoi_level_irq);
   247          }
   248  
   249          raw_spin_lock(&txgpio->lock);
   250          if (flow_type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_LEVEL_LOW)) {
   251                  bit_cfg |= GPIO_BIT_CFG_PIN_XOR;
   252                  set_bit(txline->line, txgpio->invert_mask);
   253          } else {
   254                  clear_bit(txline->line, txgpio->invert_mask);
   255          }
   256          clear_bit(txline->line, txgpio->od_mask);
   257          writeq(bit_cfg, txgpio->register_base + 
bit_cfg_reg(txline->line));
   258          raw_spin_unlock(&txgpio->lock);
   259  
   260          return IRQ_SET_MASK_OK;
   261  }
   262  
   263  static void thunderx_gpio_irq_enable(struct irq_data *data)
   264  {
 > 265          irq_chip_enable_parent(data);
   266          thunderx_gpio_irq_unmask(data);
   267  }
   268  
   269  static void thunderx_gpio_irq_disable(struct irq_data *data)
   270  {
   271          thunderx_gpio_irq_mask(data);
 > 272          irq_chip_disable_parent(data);
   273  }
   274  
   275  /*
   276   * Interrupts are chained from underlying MSI-X vectors.  We have
   277   * these irq_chip functions to be able to handle level triggering
   278   * semantics and other acknowledgment tasks associated with the GPIO
   279   * mechanism.
   280   */
   281  static struct irq_chip thunderx_gpio_irq_chip = {
   282          .name                   = "GPIO",
   283          .irq_enable             = thunderx_gpio_irq_enable,
   284          .irq_disable            = thunderx_gpio_irq_disable,
   285          .irq_ack                = thunderx_gpio_irq_ack,
   286          .irq_mask               = thunderx_gpio_irq_mask,
   287          .irq_mask_ack           = thunderx_gpio_irq_mask_ack,
   288          .irq_unmask             = thunderx_gpio_irq_unmask,
 > 289          .irq_eoi                = irq_chip_eoi_parent,
 > 290          .irq_set_affinity       = irq_chip_set_affinity_parent,
   291          .irq_set_type           = thunderx_gpio_irq_set_type,
   292  
   293          .flags                  = IRQCHIP_SET_TYPE_MASKED
   294  };
   295  
   296  static int thunderx_gpio_irq_map(struct irq_domain *d, unsigned int irq,
   297                                   irq_hw_number_t hwirq)
   298  {
   299          irq_set_irq_type(irq, IRQ_TYPE_LEVEL_LOW);
   300          return 0;
   301  }
   302  
   303  static int thunderx_gpio_irq_translate(struct irq_domain *d,
   304                                         struct irq_fwspec *fwspec,
   305                                         irq_hw_number_t *hwirq,
   306                                         unsigned int *type)
   307  {
   308          if (WARN_ON(fwspec->param_count < 2))
   309                  return -EINVAL;
   310          *hwirq = fwspec->param[0];
   311          *type = fwspec->param[1] & IRQ_TYPE_SENSE_MASK;
   312          return 0;
   313  }
   314  
   315  static int thunderx_gpio_irq_alloc(struct irq_domain *d, unsigned int 
virq,
   316                                     unsigned int nr_irqs, void *arg)
   317  {
   318          struct thunderx_line *txline = arg;
   319  
 > 320          return irq_domain_set_hwirq_and_chip(d, virq, txline->line,
   321                                               &thunderx_gpio_irq_chip, 
txline);
   322  }
   323  
   324  static const struct irq_domain_ops thunderx_gpio_irqd_ops = {
   325          .map            = thunderx_gpio_irq_map,
 > 326          .alloc          = thunderx_gpio_irq_alloc,
 > 327          .translate      = thunderx_gpio_irq_translate
   328  };
   329  
   330  static int thunderx_gpio_to_irq(struct gpio_chip *chip, unsigned int 
offset)
   331  {
   332          struct thunderx_gpio *txgpio = gpiochip_get_data(chip);
   333  
   334          return irq_find_mapping(txgpio->irqd, offset);
   335  }
   336  
   337  static int thunderx_gpio_probe(struct pci_dev *pdev,
   338                                 const struct pci_device_id *id)
   339  {
   340          void __iomem * const *tbl;
   341          struct device *dev = &pdev->dev;
   342          struct thunderx_gpio *txgpio;
   343          struct gpio_chip *chip;
   344          int ngpio, i;
   345          int err = 0;
   346  
   347          txgpio = devm_kzalloc(dev, sizeof(*txgpio), GFP_KERNEL);
   348          if (!txgpio)
   349                  return -ENOMEM;
   350  
   351          raw_spin_lock_init(&txgpio->lock);
   352          chip = &txgpio->chip;
   353  
   354          pci_set_drvdata(pdev, txgpio);
   355  
   356          err = pcim_enable_device(pdev);
   357          if (err) {
   358                  dev_err(dev, "Failed to enable PCI device: err %d\n", 
err);
   359                  goto out;
   360          }
   361  
   362          err = pcim_iomap_regions(pdev, 1 << 0, KBUILD_MODNAME);
   363          if (err) {
   364                  dev_err(dev, "Failed to iomap PCI device: err %d\n", 
err);
   365                  goto out;
   366          }
   367  
   368          tbl = pcim_iomap_table(pdev);
   369          txgpio->register_base = tbl[0];
   370          if (!txgpio->register_base) {
   371                  dev_err(dev, "Cannot map PCI resource\n");
   372                  err = -ENOMEM;
   373                  goto out;
   374          }
   375  
   376          if (pdev->subsystem_device == 0xa10a) {
   377                  /* CN88XX has no GPIO_CONST register*/
   378                  ngpio = 50;
   379                  txgpio->base_msi = 48;
   380          } else {
   381                  u64 c = readq(txgpio->register_base + GPIO_CONST);
   382  
   383                  ngpio = c & GPIO_CONST_GPIOS_MASK;
   384                  txgpio->base_msi = (c >> 8) & 0xff;
   385          }
   386  
   387          txgpio->msix_entries = devm_kzalloc(dev,
   388                                            sizeof(struct msix_entry) * 
ngpio,
   389                                            GFP_KERNEL);
   390          if (!txgpio->msix_entries) {
   391                  err = -ENOMEM;
   392                  goto out;
   393          }
   394  
   395          txgpio->line_entries = devm_kzalloc(dev,
   396                                              sizeof(struct 
thunderx_line) * ngpio,
   397                                              GFP_KERNEL);
   398          if (!txgpio->line_entries) {
   399                  err = -ENOMEM;
   400                  goto out;
   401          }
   402  
   403          for (i = 0; i < ngpio; i++) {
   404                  txgpio->msix_entries[i].entry = txgpio->base_msi + (2 * 
i);
   405                  txgpio->line_entries[i].line = i;
   406                  txgpio->line_entries[i].txgpio = txgpio;
   407          }
   408  
   409  
   410          /* Enable all MSI-X for interrupts on all possible lines. */
   411          err = pci_enable_msix(pdev, txgpio->msix_entries, ngpio);
   412          if (err < 0)
   413                  goto out;
   414  
   415          /*
   416           * Push GPIO specific irqdomain on hierarchy created as a side
   417           * effect of the pci_enable_msix()
   418           */
 > 419          txgpio->irqd = 
 > irq_domain_create_hierarchy(irq_get_irq_data(txgpio->msix_entries[0].vector)->domain,
   420                                                     0, 0, 
of_node_to_fwnode(dev->of_node),
   421                                                     
&thunderx_gpio_irqd_ops, txgpio);
   422          if (!txgpio->irqd)
   423                  goto out;
   424  
   425          /* Push on irq_data and the domain for each line. */
   426          for (i = 0; i < ngpio; i++) {
 > 427                  err = irq_domain_push_irq(txgpio->irqd,
   428                                            
txgpio->msix_entries[i].vector,
   429                                            &txgpio->line_entries[i]);
   430                  if (err < 0)

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to