Hi Joao, [auto build test ERROR on: v4.3-rc7] [cannot apply to: pci/next next-20151113] url: https://github.com/0day-ci/linux/commits/Joao-Pinto/add-new-platform-driver-for-PCI-RC/20151113-190212 config: i386-allmodconfig (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): drivers/pci/host/pcie-designware.c:76:52: warning: 'struct pci_sys_data' declared inside parameter list static inline struct pcie_port *sys_to_pcie(struct pci_sys_data *sys) ^ drivers/pci/host/pcie-designware.c:76:52: warning: its scope is only this definition or declaration, which is probably not what you want In file included from include/uapi/linux/stddef.h:1:0, from include/linux/stddef.h:4, from include/uapi/linux/posix_types.h:4, from include/uapi/linux/types.h:13, from include/linux/types.h:5, from include/linux/smp.h:10, from include/linux/irq.h:12, from drivers/pci/host/pcie-designware.c:14: drivers/pci/host/pcie-designware.c: In function 'sys_to_pcie': >> drivers/pci/host/pcie-designware.c:78:13: error: dereferencing pointer to incomplete type 'struct pci_sys_data' BUG_ON(!sys->private_data); ^ include/linux/compiler.h:166:42: note: in definition of macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ drivers/pci/host/pcie-designware.c:78:2: note: in expansion of macro 'BUG_ON' BUG_ON(!sys->private_data); ^ drivers/pci/host/pcie-designware.c: In function 'dw_pcie_host_init': drivers/pci/host/pcie-designware.c:530:2: error: invalid use of undefined type 'struct hw_pci' dw_pci.nr_controllers = 1; ^ drivers/pci/host/pcie-designware.c:531:2: error: invalid use of undefined type 'struct hw_pci' dw_pci.private_data = (void **)&pp; ^ drivers/pci/host/pcie-designware.c:533:2: error: implicit declaration of function 'pci_common_init_dev' [-Werror=implicit-function-declaration] pci_common_init_dev(pp->dev, &dw_pci); ^ drivers/pci/host/pcie-designware.c: At top level: drivers/pci/host/pcie-designware.c:682:41: warning: 'struct pci_sys_data' declared inside parameter list static int dw_pcie_setup(int nr, struct pci_sys_data *sys) ^ drivers/pci/host/pcie-designware.c: In function 'dw_pcie_setup': drivers/pci/host/pcie-designware.c:686:19: warning: passing argument 1 of 'sys_to_pcie' from incompatible pointer type [-Wincompatible-pointer-types] pp = sys_to_pcie(sys); ^ drivers/pci/host/pcie-designware.c:76:33: note: expected 'struct pci_sys_data *' but argument is of type 'struct pci_sys_data *' static inline struct pcie_port *sys_to_pcie(struct pci_sys_data *sys) ^ >> drivers/pci/host/pcie-designware.c:688:25: error: 'SZ_1M' undeclared (first use in this function) if (global_io_offset < SZ_1M && pp->io_size > 0) { ^ drivers/pci/host/pcie-designware.c:688:25: note: each undeclared identifier is reported only once for each function it appears in drivers/pci/host/pcie-designware.c:689:6: error: dereferencing pointer to incomplete type 'struct pci_sys_data' sys->io_offset = global_io_offset - pp->io_bus_addr; ^ drivers/pci/host/pcie-designware.c:690:3: error: implicit declaration of function 'pci_ioremap_io' [-Werror=implicit-function-declaration] pci_ioremap_io(global_io_offset, pp->io_base); ^ >> drivers/pci/host/pcie-designware.c:691:23: error: 'SZ_64K' undeclared (first use in this function) global_io_offset += SZ_64K; ^ drivers/pci/host/pcie-designware.c: At top level: drivers/pci/host/pcie-designware.c:703:56: warning: 'struct pci_sys_data' declared inside parameter list static struct pci_bus *dw_pcie_scan_bus(int nr, struct pci_sys_data *sys) ^ drivers/pci/host/pcie-designware.c: In function 'dw_pcie_scan_bus': drivers/pci/host/pcie-designware.c:706:37: warning: passing argument 1 of 'sys_to_pcie' from incompatible pointer type [-Wincompatible-pointer-types] struct pcie_port *pp = sys_to_pcie(sys); ^ drivers/pci/host/pcie-designware.c:76:33: note: expected 'struct pci_sys_data *' but argument is of type 'struct pci_sys_data *' static inline struct pcie_port *sys_to_pcie(struct pci_sys_data *sys) ^ drivers/pci/host/pcie-designware.c:708:23: error: dereferencing pointer to incomplete type 'struct pci_sys_data' pp->root_bus_nr = sys->busnr; ^ drivers/pci/host/pcie-designware.c: At top level: drivers/pci/host/pcie-designware.c:739:15: error: variable 'dw_pci' has initializer but incomplete type static struct hw_pci dw_pci = { ^ drivers/pci/host/pcie-designware.c:740:2: error: unknown field 'setup' specified in initializer .setup = dw_pcie_setup, ^ drivers/pci/host/pcie-designware.c:740:12: warning: excess elements in struct initializer .setup = dw_pcie_setup, ^ drivers/pci/host/pcie-designware.c:740:12: note: (near initialization for 'dw_pci') drivers/pci/host/pcie-designware.c:741:2: error: unknown field 'scan' specified in initializer .scan = dw_pcie_scan_bus, ^ drivers/pci/host/pcie-designware.c:741:11: warning: excess elements in struct initializer .scan = dw_pcie_scan_bus, ^ drivers/pci/host/pcie-designware.c:741:11: note: (near initialization for 'dw_pci') drivers/pci/host/pcie-designware.c:742:2: error: unknown field 'map_irq' specified in initializer .map_irq = dw_pcie_map_irq, ^ drivers/pci/host/pcie-designware.c:742:13: warning: excess elements in struct initializer .map_irq = dw_pcie_map_irq, ^ drivers/pci/host/pcie-designware.c:742:13: note: (near initialization for 'dw_pci') drivers/pci/host/pcie-designware.c: In function 'sys_to_pcie': drivers/pci/host/pcie-designware.c:81:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ cc1: some warnings being treated as errors -- drivers/pci/host/pcie-snpsdev.c: In function 'snpsdev_pcie_host_init': >> drivers/pci/host/pcie-snpsdev.c:139:2: error: implicit declaration of function 'dw_pcie_link_retrain' [-Werror=implicit-function-declaration] dw_pcie_link_retrain(pp); ^ cc1: some warnings being treated as errors coccinelle warnings: (new ones prefixed by >>) >> drivers/pci/host/pcie-designware.c:158:23-47: Move constant to right. -- >> drivers/pci/host/pcie-snpsdev.c:323:3-8: No need to set .owner here. The core will do it. Please review and possibly fold the followup patch. vim +/dw_pcie_link_retrain +139 drivers/pci/host/pcie-snpsdev.c 133 snpsdev_pcie_deassert_core_reset(pp); 134 135 /*We expect the PCIE Link to be up by this time*/ 136 dw_pcie_setup_rc(pp); 137 138 /*Start LTSSM here*/ > 139 dw_pcie_link_retrain(pp); 140 141 /* Check for Link up indication */ 142 while (!dw_pcie_link_up(pp)) { 143 usleep_range(1000,1100); 144 count++; 145 if (count == 20) { 146 dev_err(pp->dev, "phy link never came up\n"); 147 dev_dbg(pp->dev, 148 "PL_DEBUG0: 0x%08x, DEBUG_R1: 0x%08x\n", 149 readl(pp->dbi_base + PCIE_PHY_DEBUG_R0), 150 readl(pp->dbi_base + PCIE_PHY_DEBUG_R1)); 151 break; 152 } 153 } 154 155 if (IS_ENABLED(CONFIG_PCI_MSI)) 156 dw_pcie_msi_init(pp); 157 158 return; 159 } 160 /** 161 * 162 * Let all outof band signalling be handled by cfg_phy_control[31:0] 163 * which is selected through optional config attribute PHY_CONTROL_REG 164 * 165 * Monitor cxpl_debug_info as required to take necessary action 166 * This is available in the register PCIE_PHY_DEBUG_R0 & PCIE_PHY_DEBUG_R1 167 * 168 */ 169 static int snpsdev_pcie_link_up(struct pcie_port *pp) 170 { 171 u32 status; 172 173 /* Bit number 36: reports LTSSM PHY Link UP; Available in bit 3 of 174 * PCIE_PHY_DEBUG_R1 */ 175 status = readl(pp->dbi_base + PCIE_PHY_DEBUG_R1) & (0x1 << 4); 176 if(status != 0) 177 return 1; 178 179 /* TODO: Now Link is in L0; Initiate GEN2/GEN3 migration if RC Supports */ 180 return 0; 181 } 182 183 184 /** 185 * This is RC operation structure 186 * snpsdev_pcie_link_up: the function which initiates the phy link up procedure 187 * snpsdev_pcie_host_init: the function whihc does the host/RC Root port initialization 188 */ 189 static struct pcie_host_ops snpsdev_pcie_host_ops = { 190 .link_up = snpsdev_pcie_link_up, 191 .host_init = snpsdev_pcie_host_init, 192 }; 193 194 /** 195 * snpsdev_add_pcie_port 196 * This function 197 * a. installs the interrupt handler 198 * b. registers host operations int he pcie_port structure 199 */ 200 static int snpsdev_add_pcie_port(struct pcie_port *pp, struct platform_device *pdev) 201 { 202 int ret; 203 204 pp->irq = platform_get_irq(pdev, 1); 205 206 if (pp->irq < 0) { 207 if (pp->irq != -EPROBE_DEFER) 208 dev_err(&pdev->dev, "cannot get irq\n"); 209 return pp->irq; 210 } 211 212 ret = devm_request_irq(&pdev->dev, pp->irq, snpsdev_pcie_irq_handler, 213 IRQF_SHARED, "snpsdev-pcie", pp); 214 215 if (ret) { 216 dev_err(&pdev->dev, "failed to request irq\n"); 217 return ret; 218 } 219 220 if (IS_ENABLED(CONFIG_PCI_MSI)) { 221 pp->msi_irq = platform_get_irq(pdev, 0); 222 223 if (pp->msi_irq < 0) { 224 if (pp->msi_irq != -EPROBE_DEFER) 225 dev_err(&pdev->dev, "cannot get msi irq\n"); 226 return pp->msi_irq; 227 } 228 229 ret = devm_request_irq(&pdev->dev, pp->msi_irq, 230 snpsdev_pcie_msi_irq_handler, 231 IRQF_SHARED, "snpsdev-pcie-msi", pp); 232 if (ret) { 233 dev_err(&pdev->dev, "failed to request msi irq\n"); 234 return ret; 235 } 236 } 237 238 pp->root_bus_nr = -1; 239 pp->ops = &snpsdev_pcie_host_ops; 240 241 /* Below function: 242 * Checks for range property from DT 243 * Gets the IO and MEMORY and CONFIG-Space ranges from DT 244 * Does IOREMAPS on the physical addresses 245 * Gets the num-lanes from DT 246 * Gets MSI capability from DT 247 * Calls the platform specific host initialization 248 * Program the correct class, BAR0, Link width, in Config space 249 * Then it calls pci common init routine 250 * Then it calls funtion to assign "unassigend reources" 251 */ 252 ret = dw_pcie_host_init(pp); 253 if (ret) { 254 dev_err(&pdev->dev, "failed to initialize host\n"); 255 return ret; 256 } 257 258 return 0; 259 } 260 261 /** 262 * snpsdev_pcie_rc_probe() 263 * This function gets called as part of pcie registration. if the id matches 264 * the platform driver framework will call this function. 265 * 266 * @pdev: Pointer to the platform_device structure 267 * 268 * Returns zero on success; Negative errorno on failure 269 */ 270 static int __init snpsdev_pcie_rc_probe(struct platform_device *pdev) 271 { 272 struct snpsdev_pcie *snpsdev_pcie; 273 struct pcie_port *pp; 274 struct resource *dwc_pcie_rc_res; /* Resource from DT */ 275 int ret; 276 277 snpsdev_pcie = devm_kzalloc(&pdev->dev, sizeof(*snpsdev_pcie), GFP_KERNEL); 278 if (!snpsdev_pcie) { 279 dev_err(&pdev->dev, "no memory for snpsdev pcie\n"); 280 return -ENOMEM; 281 } 282 283 pp = &snpsdev_pcie->pp; 284 pp->dev = &pdev->dev; 285 286 dwc_pcie_rc_res= platform_get_resource(pdev, IORESOURCE_MEM, 0); 287 if (!dwc_pcie_rc_res) { 288 dev_err(&pdev->dev, "dwc_pcie_rc_res resource not found\n"); 289 return -ENODEV; 290 } 291 292 snpsdev_pcie->mem_base = devm_ioremap_resource(&pdev->dev, dwc_pcie_rc_res); 293 if (IS_ERR(snpsdev_pcie->mem_base)) { 294 ret = PTR_ERR(snpsdev_pcie->mem_base); 295 return ret; 296 } 297 pp->dbi_base = snpsdev_pcie->mem_base; 298 299 ret = snpsdev_add_pcie_port(pp, pdev); 300 if (ret < 0) 301 return ret; 302 303 platform_set_drvdata(pdev, snpsdev_pcie); 304 305 return 0; 306 } 307 308 static int __exit snpsdev_pcie_rc_remove(struct platform_device *pdev) 309 { 310 return 0; 311 } 312 313 static const struct of_device_id snpsdev_pcie_rc_of_match[] = { 314 { .compatible = "snps,pcie-snpsdev", }, 315 {}, 316 }; 317 MODULE_DEVICE_TABLE(of, snpsdev_pcie_rc_of_match); 318 319 static struct platform_driver snpsdev_pcie_rc_driver = { 320 .remove = __exit_p(snpsdev_pcie_rc_remove), 321 .driver = { 322 .name = "pcie-snpsdev", > 323 .owner = THIS_MODULE, 324 .of_match_table = snpsdev_pcie_rc_of_match, 325 }, 326 }; --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: Binary data