Hi Joao,

[auto build test ERROR on pci/next]
[also build test ERROR on v4.8-rc2 next-20160817]
[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/Bjorn-Helgaas/PCI-designware-Return-data-directly-from-dw_pcie_readl_rc/20160818-040531
base:   https://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git next
config: x86_64-randconfig-x015-201633 (attached as .config)
compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

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

   drivers/pci/host/pcie-designware.c: In function 'dw_pcie_readl_unroll':
>> drivers/pci/host/pcie-designware.c:161:54: error: expected ')' before ';' 
>> token
     u32 offset = PCIE_GET_ATU_OUTB_UNR_REG_OFFSET(index);
                                                         ^
>> drivers/pci/host/pcie-designware.c:167:1: error: expected ',' or ';' before 
>> '}' token
    }
    ^
>> drivers/pci/host/pcie-designware.c:169:20: error: invalid storage class for 
>> function 'dw_pcie_writel_unroll'
    static inline void dw_pcie_writel_unroll(struct pcie_port *pp, u32 index,
                       ^~~~~~~~~~~~~~~~~~~~~
   drivers/pci/host/pcie-designware.c: In function 'dw_pcie_writel_unroll':
   drivers/pci/host/pcie-designware.c:172:54: error: expected ')' before ';' 
token
     u32 offset = PCIE_GET_ATU_OUTB_UNR_REG_OFFSET(index);
                                                         ^
   drivers/pci/host/pcie-designware.c:178:1: error: expected ',' or ';' before 
'}' token
    }
    ^
>> drivers/pci/host/pcie-designware.c:180:12: error: invalid storage class for 
>> function 'dw_pcie_rd_own_conf'
    static int dw_pcie_rd_own_conf(struct pcie_port *pp, int where, int size,
               ^~~~~~~~~~~~~~~~~~~
>> drivers/pci/host/pcie-designware.c:189:12: error: invalid storage class for 
>> function 'dw_pcie_wr_own_conf'
    static int dw_pcie_wr_own_conf(struct pcie_port *pp, int where, int size,
               ^~~~~~~~~~~~~~~~~~~
>> drivers/pci/host/pcie-designware.c:198:13: error: invalid storage class for 
>> function 'dw_pcie_prog_outbound_atu'
    static void dw_pcie_prog_outbound_atu(struct pcie_port *pp, int index,
                ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/pci/host/pcie-designware.c:304:13: error: invalid storage class for 
>> function 'dw_pcie_msi_clear_irq'
    static void dw_pcie_msi_clear_irq(struct pcie_port *pp, int irq)
                ^~~~~~~~~~~~~~~~~~~~~
>> drivers/pci/host/pcie-designware.c:315:13: error: invalid storage class for 
>> function 'clear_irq_range'
    static void clear_irq_range(struct pcie_port *pp, unsigned int irq_base,
                ^~~~~~~~~~~~~~~
>> drivers/pci/host/pcie-designware.c:332:13: error: invalid storage class for 
>> function 'dw_pcie_msi_set_irq'
    static void dw_pcie_msi_set_irq(struct pcie_port *pp, int irq)
                ^~~~~~~~~~~~~~~~~~~
>> drivers/pci/host/pcie-designware.c:343:12: error: invalid storage class for 
>> function 'assign_irq'
    static int assign_irq(int no_irqs, struct msi_desc *desc, int *pos)
               ^~~~~~~~~~
>> drivers/pci/host/pcie-designware.c:387:13: error: invalid storage class for 
>> function 'dw_msi_setup_msg'
    static void dw_msi_setup_msg(struct pcie_port *pp, unsigned int irq, u32 
pos)
                ^~~~~~~~~~~~~~~~
>> drivers/pci/host/pcie-designware.c:408:12: error: invalid storage class for 
>> function 'dw_msi_setup_irq'
    static int dw_msi_setup_irq(struct msi_controller *chip, struct pci_dev 
*pdev,
               ^~~~~~~~~~~~~~~~
>> drivers/pci/host/pcie-designware.c:426:12: error: invalid storage class for 
>> function 'dw_msi_setup_irqs'
    static int dw_msi_setup_irqs(struct msi_controller *chip, struct pci_dev 
*pdev,
               ^~~~~~~~~~~~~~~~~
>> drivers/pci/host/pcie-designware.c:453:13: error: invalid storage class for 
>> function 'dw_msi_teardown_irq'
    static void dw_msi_teardown_irq(struct msi_controller *chip, unsigned int 
irq)
                ^~~~~~~~~~~~~~~~~~~
>> drivers/pci/host/pcie-designware.c:463:15: error: initializer element is not 
>> constant
     .setup_irq = dw_msi_setup_irq,
                  ^~~~~~~~~~~~~~~~
   drivers/pci/host/pcie-designware.c:463:15: note: (near initialization for 
'dw_pcie_msi_chip.setup_irq')
   drivers/pci/host/pcie-designware.c:464:16: error: initializer element is not 
constant
     .setup_irqs = dw_msi_setup_irqs,
                   ^~~~~~~~~~~~~~~~~
   drivers/pci/host/pcie-designware.c:464:16: note: (near initialization for 
'dw_pcie_msi_chip.setup_irqs')
   drivers/pci/host/pcie-designware.c:465:18: error: initializer element is not 
constant
     .teardown_irq = dw_msi_teardown_irq,
                     ^~~~~~~~~~~~~~~~~~~
   drivers/pci/host/pcie-designware.c:465:18: note: (near initialization for 
'dw_pcie_msi_chip.teardown_irq')
>> drivers/pci/host/pcie-designware.c:497:12: error: invalid storage class for 
>> function 'dw_pcie_msi_map'
    static int dw_pcie_msi_map(struct irq_domain *domain, unsigned int irq,
               ^~~~~~~~~~~~~~~
   drivers/pci/host/pcie-designware.c:507:9: error: initializer element is not 
constant
     .map = dw_pcie_msi_map,
            ^~~~~~~~~~~~~~~
   drivers/pci/host/pcie-designware.c:507:9: note: (near initialization for 
'msi_domain_ops.map')
>> drivers/pci/host/pcie-designware.c:510:11: error: invalid storage class for 
>> function 'dw_pcie_iatu_unroll_enabled'
    static u8 dw_pcie_iatu_unroll_enabled(struct pcie_port *pp)
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/pci/host/pcie-designware.c: In function 
'dw_pcie_iatu_unroll_enabled':
>> drivers/pci/host/pcie-designware.c:514:2: error: too many arguments to 
>> function 'dw_pcie_readl_rc'
     dw_pcie_readl_rc(pp, PCIE_ATU_VIEWPORT, &val);
     ^~~~~~~~~~~~~~~~
   drivers/pci/host/pcie-designware.c:143:19: note: declared here
    static inline u32 dw_pcie_readl_rc(struct pcie_port *pp, u32 reg)
                      ^~~~~~~~~~~~~~~~
   drivers/pci/host/pcie-designware.c: In function 'dw_pcie_writel_unroll':
>> drivers/pci/host/pcie-designware.c:678:12: error: invalid storage class for 
>> function 'dw_pcie_rd_other_conf'
    static int dw_pcie_rd_other_conf(struct pcie_port *pp, struct pci_bus *bus,
               ^~~~~~~~~~~~~~~~~~~~~
>> drivers/pci/host/pcie-designware.c:715:12: error: invalid storage class for 
>> function 'dw_pcie_wr_other_conf'
    static int dw_pcie_wr_other_conf(struct pcie_port *pp, struct pci_bus *bus,
               ^~~~~~~~~~~~~~~~~~~~~

vim +161 drivers/pci/host/pcie-designware.c

   137          else
   138                  return PCIBIOS_BAD_REGISTER_NUMBER;
   139  
   140          return PCIBIOS_SUCCESSFUL;
   141  }
   142  
 > 143  static inline u32 dw_pcie_readl_rc(struct pcie_port *pp, u32 reg)
   144  {
   145          if (pp->ops->readl_rc)
   146                  return pp->ops->readl_rc(pp, pp->dbi_base + reg);
   147  
   148          return readl(pp->dbi_base + reg);
   149  }
   150  
   151  static inline void dw_pcie_writel_rc(struct pcie_port *pp, u32 val, u32 
reg)
   152  {
   153          if (pp->ops->writel_rc)
   154                  pp->ops->writel_rc(pp, val, pp->dbi_base + reg);
   155          else
   156                  writel(val, pp->dbi_base + reg);
   157  }
   158  
   159  static inline u32 dw_pcie_readl_unroll(struct pcie_port *pp, u32 index, 
u32 reg)
   160  {
 > 161          u32 offset = PCIE_GET_ATU_OUTB_UNR_REG_OFFSET(index);
   162  
   163          if (pp->ops->readl_rc)
   164                  return pp->ops->readl_rc(pp, pp->dbi_base + offset + 
reg);
   165  
   166          return readl(pp->dbi_base + offset + reg);
 > 167  }
   168  
 > 169  static inline void dw_pcie_writel_unroll(struct pcie_port *pp, u32 
 > index,
   170                                           u32 val, u32 reg)
   171  {
 > 172          u32 offset = PCIE_GET_ATU_OUTB_UNR_REG_OFFSET(index);
   173  
   174          if (pp->ops->writel_rc)
   175                  pp->ops->writel_rc(pp, val, pp->dbi_base + offset + 
reg);
   176          else
   177                  writel(val, pp->dbi_base + offset + reg);
 > 178  }
   179  
 > 180  static int dw_pcie_rd_own_conf(struct pcie_port *pp, int where, int 
 > size,
   181                                 u32 *val)
   182  {
   183          if (pp->ops->rd_own_conf)
   184                  return pp->ops->rd_own_conf(pp, where, size, val);
   185  
   186          return dw_pcie_cfg_read(pp->dbi_base + where, size, val);
   187  }
   188  
 > 189  static int dw_pcie_wr_own_conf(struct pcie_port *pp, int where, int 
 > size,
   190                                 u32 val)
   191  {
   192          if (pp->ops->wr_own_conf)
   193                  return pp->ops->wr_own_conf(pp, where, size, val);
   194  
   195          return dw_pcie_cfg_write(pp->dbi_base + where, size, val);
   196  }
   197  
 > 198  static void dw_pcie_prog_outbound_atu(struct pcie_port *pp, int index,
   199                  int type, u64 cpu_addr, u64 pci_addr, u32 size)
   200  {
   201          u32 retries, val;
   202  
   203          if (pp->iatu_unroll_enabled) {
   204                  dw_pcie_writel_unroll(pp, index,
   205                          lower_32_bits(cpu_addr), 
PCIE_ATU_UNR_LOWER_BASE);
   206                  dw_pcie_writel_unroll(pp, index,
   207                          upper_32_bits(cpu_addr), 
PCIE_ATU_UNR_UPPER_BASE);
   208                  dw_pcie_writel_unroll(pp, index,
   209                          lower_32_bits(cpu_addr + size - 1), 
PCIE_ATU_UNR_LIMIT);
   210                  dw_pcie_writel_unroll(pp, index,
   211                          lower_32_bits(pci_addr), 
PCIE_ATU_UNR_LOWER_TARGET);
   212                  dw_pcie_writel_unroll(pp, index,
   213                          upper_32_bits(pci_addr), 
PCIE_ATU_UNR_UPPER_TARGET);
   214                  dw_pcie_writel_unroll(pp, index,
   215                          type, PCIE_ATU_UNR_REGION_CTRL1);
   216                  dw_pcie_writel_unroll(pp, index,
   217                          PCIE_ATU_ENABLE, PCIE_ATU_UNR_REGION_CTRL2);
   218          } else {
   219                  dw_pcie_writel_rc(pp, PCIE_ATU_REGION_OUTBOUND | index,
   220                                                  PCIE_ATU_VIEWPORT);
   221                  dw_pcie_writel_rc(pp, lower_32_bits(cpu_addr),
   222                                                  PCIE_ATU_LOWER_BASE);
   223                  dw_pcie_writel_rc(pp, upper_32_bits(cpu_addr),
   224                                                  PCIE_ATU_UPPER_BASE);
   225                  dw_pcie_writel_rc(pp, lower_32_bits(cpu_addr + size - 
1),
   226                                                  PCIE_ATU_LIMIT);
   227                  dw_pcie_writel_rc(pp, lower_32_bits(pci_addr),
   228                                                  PCIE_ATU_LOWER_TARGET);
   229                  dw_pcie_writel_rc(pp, upper_32_bits(pci_addr),
   230                                                  PCIE_ATU_UPPER_TARGET);
   231                  dw_pcie_writel_rc(pp, type, PCIE_ATU_CR1);
   232                  dw_pcie_writel_rc(pp, PCIE_ATU_ENABLE, PCIE_ATU_CR2);
   233          }
   234  
   235          /*
   236           * Make sure ATU enable takes effect before any subsequent 
config
   237           * and I/O accesses.
   238           */
   239          for (retries = 0; retries < LINK_WAIT_MAX_IATU_RETRIES; 
retries++) {
   240                  if (pp->iatu_unroll_enabled)
   241                          val = dw_pcie_readl_unroll(pp, index,
   242                                                     
PCIE_ATU_UNR_REGION_CTRL2);
   243                  else
   244                          val = dw_pcie_readl_rc(pp, PCIE_ATU_CR2);
   245  
   246                  if (val == PCIE_ATU_ENABLE)
   247                          return;
   248  
   249                  usleep_range(LINK_WAIT_IATU_MIN, LINK_WAIT_IATU_MAX);
   250          }
   251          dev_err(pp->dev, "iATU is not being enabled\n");
   252  }
   253  
   254  static struct irq_chip dw_msi_irq_chip = {
   255          .name = "PCI-MSI",
   256          .irq_enable = pci_msi_unmask_irq,
   257          .irq_disable = pci_msi_mask_irq,
   258          .irq_mask = pci_msi_mask_irq,
   259          .irq_unmask = pci_msi_unmask_irq,
   260  };
   261  
   262  /* MSI int handler */
   263  irqreturn_t dw_handle_msi_irq(struct pcie_port *pp)
   264  {
   265          unsigned long val;
   266          int i, pos, irq;
   267          irqreturn_t ret = IRQ_NONE;
   268  
   269          for (i = 0; i < MAX_MSI_CTRLS; i++) {
   270                  dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_STATUS + i * 12, 
4,
   271                                  (u32 *)&val);
   272                  if (val) {
   273                          ret = IRQ_HANDLED;
   274                          pos = 0;
   275                          while ((pos = find_next_bit(&val, 32, pos)) != 
32) {
   276                                  irq = irq_find_mapping(pp->irq_domain,
   277                                                  i * 32 + pos);
   278                                  dw_pcie_wr_own_conf(pp,
   279                                                  PCIE_MSI_INTR0_STATUS + 
i * 12,
   280                                                  4, 1 << pos);
   281                                  generic_handle_irq(irq);
   282                                  pos++;
   283                          }
   284                  }
   285          }
   286  
   287          return ret;
   288  }
   289  
   290  void dw_pcie_msi_init(struct pcie_port *pp)
   291  {
   292          u64 msi_target;
   293  
   294          pp->msi_data = __get_free_pages(GFP_KERNEL, 0);
   295          msi_target = virt_to_phys((void *)pp->msi_data);
   296  
   297          /* program the msi_data */
   298          dw_pcie_wr_own_conf(pp, PCIE_MSI_ADDR_LO, 4,
   299                              (u32)(msi_target & 0xffffffff));
   300          dw_pcie_wr_own_conf(pp, PCIE_MSI_ADDR_HI, 4,
   301                              (u32)(msi_target >> 32 & 0xffffffff));
   302  }
   303  
 > 304  static void dw_pcie_msi_clear_irq(struct pcie_port *pp, int irq)
   305  {
   306          unsigned int res, bit, val;
   307  
   308          res = (irq / 32) * 12;
   309          bit = irq % 32;
   310          dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res, 4, &val);
   311          val &= ~(1 << bit);
   312          dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res, 4, val);
   313  }
   314  
 > 315  static void clear_irq_range(struct pcie_port *pp, unsigned int irq_base,
   316                              unsigned int nvec, unsigned int pos)
   317  {
   318          unsigned int i;
   319  
   320          for (i = 0; i < nvec; i++) {
   321                  irq_set_msi_desc_off(irq_base, i, NULL);
   322                  /* Disable corresponding interrupt on MSI controller */
   323                  if (pp->ops->msi_clear_irq)
   324                          pp->ops->msi_clear_irq(pp, pos + i);
   325                  else
   326                          dw_pcie_msi_clear_irq(pp, pos + i);
   327          }
   328  
   329          bitmap_release_region(pp->msi_irq_in_use, pos, 
order_base_2(nvec));
   330  }
   331  
 > 332  static void dw_pcie_msi_set_irq(struct pcie_port *pp, int irq)
   333  {
   334          unsigned int res, bit, val;
   335  
   336          res = (irq / 32) * 12;
   337          bit = irq % 32;
   338          dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res, 4, &val);
   339          val |= 1 << bit;
   340          dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res, 4, val);
   341  }
   342  
 > 343  static int assign_irq(int no_irqs, struct msi_desc *desc, int *pos)
   344  {
   345          int irq, pos0, i;
   346          struct pcie_port *pp = (struct pcie_port *) 
msi_desc_to_pci_sysdata(desc);

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

Attachment: .config.gz
Description: Binary data

Reply via email to