From: kernel test robot <lkp@intel.com>
To: Linus Walleij <linus.walleij@linaro.org>,
Bjorn Helgaas <helgaas@kernel.org>
Cc: kbuild-all@lists.01.org, linux-pci@vger.kernel.org,
Arnd Bergmann <arnd@arndb.de>, Imre Kaloz <kaloz@openwrt.org>,
Krzysztof Halasa <khalasa@piap.pl>,
Zoltan HERPAI <wigyori@uid0.hu>,
Raylynn Knight <rayknight@me.com>,
Linus Walleij <linus.walleij@linaro.org>
Subject: Re: [PATCH 4/4] PCI: ixp4xx: Add a new driver for IXP4xx
Date: Tue, 4 May 2021 08:40:09 +0800 [thread overview]
Message-ID: <202105040826.wt7TL4cM-lkp@intel.com> (raw)
In-Reply-To: <20210503211649.4109334-5-linus.walleij@linaro.org>
[-- Attachment #1: Type: text/plain, Size: 8774 bytes --]
Hi Linus,
I love your patch! Yet something to improve:
[auto build test ERROR on soc/for-next]
[also build test ERROR on pci/next block/for-next linus/master v5.12 next-20210503]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Linus-Walleij/IXP4xx-PCI-rework/20210504-051847
base: https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git for-next
config: ia64-allmodconfig (attached as .config)
compiler: ia64-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://github.com/0day-ci/linux/commit/f3c7dd73e6c1b358e1f61a4b3a186ce5b336deaf
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Linus-Walleij/IXP4xx-PCI-rework/20210504-051847
git checkout f3c7dd73e6c1b358e1f61a4b3a186ce5b336deaf
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=ia64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/pci/controller/pci-ixp4xx.c: In function 'ixp4xx_pci_abort_handler':
>> drivers/pci/controller/pci-ixp4xx.c:513:7: error: 'struct pt_regs' has no member named 'ARM_pc'
513 | regs->ARM_pc += 4;
| ^~
drivers/pci/controller/pci-ixp4xx.c: In function 'ixp4xx_pci_probe':
>> drivers/pci/controller/pci-ixp4xx.c:566:2: error: implicit declaration of function 'hook_fault_code' [-Werror=implicit-function-declaration]
566 | hook_fault_code(16+6, ixp4xx_pci_abort_handler, SIGBUS, 0,
| ^~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for FRAME_POINTER
Depends on DEBUG_KERNEL && (M68K || UML || SUPERH) || ARCH_WANT_FRAME_POINTERS
Selected by
- FAULT_INJECTION_STACKTRACE_FILTER && FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT && !X86_64 && !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM && !ARC && !X86
vim +513 drivers/pci/controller/pci-ixp4xx.c
481
482 static int ixp4xx_pci_abort_handler(unsigned long addr, unsigned int fsr,
483 struct pt_regs *regs)
484 {
485 struct ixp4xx_pci *p = ixp4xx_pci_abort_singleton;
486 u32 isr, status;
487 int ret;
488
489 isr = __raw_readl(p->base + IXP4XX_PCI_ISR);
490 ret = ixp4xx_crp_read_config(p, PCI_STATUS, 2, &status);
491 if (ret) {
492 dev_err(p->dev, "unable to read abort status\n");
493 return -EINVAL;
494 }
495
496 dev_err(p->dev,
497 "PCI: abort_handler addr = %#lx, isr = %#x, status = %#x\n",
498 addr, isr, status);
499
500 /* Make sure the Master Abort bit is reset */
501 __raw_writel(IXP4XX_PCI_ISR_PFE, p->base + IXP4XX_PCI_ISR);
502 status |= PCI_STATUS_REC_MASTER_ABORT;
503 ret = ixp4xx_crp_write_config(p, PCI_STATUS, 2, status);
504 if (ret)
505 dev_err(p->dev, "unable to clear abort status bit\n");
506
507 /*
508 * If it was an imprecise abort, then we need to correct the
509 * return address to be _after_ the instruction.
510 */
511 if (fsr & (1 << 10)) {
512 dev_err(p->dev, "imprecise abort\n");
> 513 regs->ARM_pc += 4;
514 }
515
516 return 0;
517 }
518
519 static int ixp4xx_pci_probe(struct platform_device *pdev)
520 {
521 struct device *dev = &pdev->dev;
522 struct device_node *np = dev->of_node;
523 struct ixp4xx_pci *p;
524 struct pci_host_bridge *host;
525 int ret;
526 u32 val;
527 phys_addr_t addr;
528 u32 basereg[4] = {
529 PCI_BASE_ADDRESS_0,
530 PCI_BASE_ADDRESS_1,
531 PCI_BASE_ADDRESS_2,
532 PCI_BASE_ADDRESS_3,
533 };
534 int i;
535
536 host = devm_pci_alloc_host_bridge(dev, sizeof(*p));
537 if (!host)
538 return -ENOMEM;
539
540 host->ops = &ixp4xx_pci_ops;
541 p = pci_host_bridge_priv(host);
542 host->sysdata = p;
543 p->dev = dev;
544 raw_spin_lock_init(&p->lock);
545
546 /*
547 * Set up quirk for erratic behaviour in the 42x variant
548 * when accessing config space.
549 */
550 if (of_device_is_compatible(np, "intel,ixp42x-pci")) {
551 p->errata_hammer = true;
552 dev_info(dev, "activate hammering errata\n");
553 }
554
555 p->base = devm_platform_ioremap_resource(pdev, 0);
556 if (IS_ERR(p->base))
557 return PTR_ERR(p->base);
558
559 val = __raw_readl(p->base + IXP4XX_PCI_CSR);
560 p->host_mode = !!(val & IXP4XX_PCI_CSR_HOST);
561 dev_info(dev, "controller is in %s mode\n",
562 p->host_mode ? "host" : "option");
563
564 /* Hook in our fault handler for PCI errors */
565 ixp4xx_pci_abort_singleton = p;
> 566 hook_fault_code(16+6, ixp4xx_pci_abort_handler, SIGBUS, 0,
567 "imprecise external abort");
568
569 ret = ixp4xx_pci_parse_map_ranges(p);
570 if (ret)
571 return ret;
572
573 ret = ixp4xx_pci_parse_map_dma_ranges(p);
574 if (ret)
575 return ret;
576
577 /* This is only configured in host mode */
578 if (p->host_mode) {
579 addr = __pa(PAGE_OFFSET);
580 /* This is a noop (0x00) but explains what is going on */
581 addr |= PCI_BASE_ADDRESS_SPACE_MEMORY;
582
583 for (i = 0; i < 4; i++) {
584 /* Write this directly into the config space */
585 ret = ixp4xx_crp_write_config(p, basereg[i], 4, addr);
586 if (ret)
587 dev_err(dev, "failed to set up PCI_BASE_ADDRESS_%d\n", i);
588 else
589 dev_info(dev, "set PCI_BASE_ADDR_%d to %pa\n", i, &addr);
590 addr += SZ_16M;
591 }
592
593 /*
594 * Enable CSR window at 64 MiB to allow PCI masters to continue
595 * prefetching past the 64 MiB boundary, if all AHB to PCI windows
596 * are consecutive.
597 */
598 ret = ixp4xx_crp_write_config(p, PCI_BASE_ADDRESS_4, 4, addr);
599 if (ret)
600 dev_err(dev, "failed to set up PCI_BASE_ADDRESS_4\n");
601 else
602 dev_info(dev, "set PCI_BASE_ADDR_4 to %pa\n", &addr);
603
604 /*
605 * Put the IO memory at the very end of physical memory at
606 * 0xfffffc00. This is when the PCI is trying to access IO
607 * memory over AHB.
608 */
609 addr = 0xfffffc00;
610 addr |= PCI_BASE_ADDRESS_SPACE_IO;
611 ret = ixp4xx_crp_write_config(p, PCI_BASE_ADDRESS_5, 4, addr);
612 if (ret)
613 dev_err(dev, "failed to set up PCI_BASE_ADDRESS_5\n");
614 else
615 dev_info(dev, "set PCI_BASE_ADDR_5 to %pa\n", &addr);
616
617 /*
618 * Retry timeout to 0x80
619 * Transfer ready timeout to 0xff
620 */
621 ret = ixp4xx_crp_write_config(p, IXP4XX_PCI_RTOTTO, 4,
622 0x000080ff);
623 if (ret)
624 dev_err(dev, "failed to set up TRDY limit\n");
625 else
626 dev_info(dev, "set TRDY limit to 0x80ff\n");
627 }
628
629 /* Clear interrupts */
630 val = IXP4XX_PCI_ISR_PSE | IXP4XX_PCI_ISR_PFE | IXP4XX_PCI_ISR_PPE | IXP4XX_PCI_ISR_AHBE;
631 __raw_writel(val, p->base + IXP4XX_PCI_ISR);
632
633 /*
634 * Set Initialize Complete in PCI Control Register: allow IXP4XX to
635 * respond to PCI configuration cycles. Specify that the AHB bus is
636 * operating in big endian mode. Set up byte lane swapping between
637 * little-endian PCI and the big-endian AHB bus.
638 */
639 val = IXP4XX_PCI_CSR_IC | IXP4XX_PCI_CSR_ABE;
640 #ifdef __ARMEB__
641 val |= (IXP4XX_PCI_CSR_PDS | IXP4XX_PCI_CSR_ADS);
642 #endif
643 __raw_writel(val, p->base + IXP4XX_PCI_CSR);
644
645
646 ret = ixp4xx_crp_write_config(p, PCI_COMMAND, 2, PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY);
647 if (ret)
648 dev_err(dev, "unable to initialize master and command memory\n");
649 else
650 dev_info(dev, "initialized as master\n");
651
652 ret = pci_scan_root_bus_bridge(host);
653 if (ret) {
654 dev_err(dev, "failed to scan host: %d\n", ret);
655 return ret;
656 }
657
658 p->bus = host->bus;
659
660 pci_bus_assign_resources(p->bus);
661 pci_bus_add_devices(p->bus);
662
663 return 0;
664 }
665
---
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: 63879 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH 4/4] PCI: ixp4xx: Add a new driver for IXP4xx
Date: Tue, 04 May 2021 08:40:09 +0800 [thread overview]
Message-ID: <202105040826.wt7TL4cM-lkp@intel.com> (raw)
In-Reply-To: <20210503211649.4109334-5-linus.walleij@linaro.org>
[-- Attachment #1: Type: text/plain, Size: 9010 bytes --]
Hi Linus,
I love your patch! Yet something to improve:
[auto build test ERROR on soc/for-next]
[also build test ERROR on pci/next block/for-next linus/master v5.12 next-20210503]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Linus-Walleij/IXP4xx-PCI-rework/20210504-051847
base: https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git for-next
config: ia64-allmodconfig (attached as .config)
compiler: ia64-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://github.com/0day-ci/linux/commit/f3c7dd73e6c1b358e1f61a4b3a186ce5b336deaf
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Linus-Walleij/IXP4xx-PCI-rework/20210504-051847
git checkout f3c7dd73e6c1b358e1f61a4b3a186ce5b336deaf
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=ia64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/pci/controller/pci-ixp4xx.c: In function 'ixp4xx_pci_abort_handler':
>> drivers/pci/controller/pci-ixp4xx.c:513:7: error: 'struct pt_regs' has no member named 'ARM_pc'
513 | regs->ARM_pc += 4;
| ^~
drivers/pci/controller/pci-ixp4xx.c: In function 'ixp4xx_pci_probe':
>> drivers/pci/controller/pci-ixp4xx.c:566:2: error: implicit declaration of function 'hook_fault_code' [-Werror=implicit-function-declaration]
566 | hook_fault_code(16+6, ixp4xx_pci_abort_handler, SIGBUS, 0,
| ^~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for FRAME_POINTER
Depends on DEBUG_KERNEL && (M68K || UML || SUPERH) || ARCH_WANT_FRAME_POINTERS
Selected by
- FAULT_INJECTION_STACKTRACE_FILTER && FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT && !X86_64 && !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM && !ARC && !X86
vim +513 drivers/pci/controller/pci-ixp4xx.c
481
482 static int ixp4xx_pci_abort_handler(unsigned long addr, unsigned int fsr,
483 struct pt_regs *regs)
484 {
485 struct ixp4xx_pci *p = ixp4xx_pci_abort_singleton;
486 u32 isr, status;
487 int ret;
488
489 isr = __raw_readl(p->base + IXP4XX_PCI_ISR);
490 ret = ixp4xx_crp_read_config(p, PCI_STATUS, 2, &status);
491 if (ret) {
492 dev_err(p->dev, "unable to read abort status\n");
493 return -EINVAL;
494 }
495
496 dev_err(p->dev,
497 "PCI: abort_handler addr = %#lx, isr = %#x, status = %#x\n",
498 addr, isr, status);
499
500 /* Make sure the Master Abort bit is reset */
501 __raw_writel(IXP4XX_PCI_ISR_PFE, p->base + IXP4XX_PCI_ISR);
502 status |= PCI_STATUS_REC_MASTER_ABORT;
503 ret = ixp4xx_crp_write_config(p, PCI_STATUS, 2, status);
504 if (ret)
505 dev_err(p->dev, "unable to clear abort status bit\n");
506
507 /*
508 * If it was an imprecise abort, then we need to correct the
509 * return address to be _after_ the instruction.
510 */
511 if (fsr & (1 << 10)) {
512 dev_err(p->dev, "imprecise abort\n");
> 513 regs->ARM_pc += 4;
514 }
515
516 return 0;
517 }
518
519 static int ixp4xx_pci_probe(struct platform_device *pdev)
520 {
521 struct device *dev = &pdev->dev;
522 struct device_node *np = dev->of_node;
523 struct ixp4xx_pci *p;
524 struct pci_host_bridge *host;
525 int ret;
526 u32 val;
527 phys_addr_t addr;
528 u32 basereg[4] = {
529 PCI_BASE_ADDRESS_0,
530 PCI_BASE_ADDRESS_1,
531 PCI_BASE_ADDRESS_2,
532 PCI_BASE_ADDRESS_3,
533 };
534 int i;
535
536 host = devm_pci_alloc_host_bridge(dev, sizeof(*p));
537 if (!host)
538 return -ENOMEM;
539
540 host->ops = &ixp4xx_pci_ops;
541 p = pci_host_bridge_priv(host);
542 host->sysdata = p;
543 p->dev = dev;
544 raw_spin_lock_init(&p->lock);
545
546 /*
547 * Set up quirk for erratic behaviour in the 42x variant
548 * when accessing config space.
549 */
550 if (of_device_is_compatible(np, "intel,ixp42x-pci")) {
551 p->errata_hammer = true;
552 dev_info(dev, "activate hammering errata\n");
553 }
554
555 p->base = devm_platform_ioremap_resource(pdev, 0);
556 if (IS_ERR(p->base))
557 return PTR_ERR(p->base);
558
559 val = __raw_readl(p->base + IXP4XX_PCI_CSR);
560 p->host_mode = !!(val & IXP4XX_PCI_CSR_HOST);
561 dev_info(dev, "controller is in %s mode\n",
562 p->host_mode ? "host" : "option");
563
564 /* Hook in our fault handler for PCI errors */
565 ixp4xx_pci_abort_singleton = p;
> 566 hook_fault_code(16+6, ixp4xx_pci_abort_handler, SIGBUS, 0,
567 "imprecise external abort");
568
569 ret = ixp4xx_pci_parse_map_ranges(p);
570 if (ret)
571 return ret;
572
573 ret = ixp4xx_pci_parse_map_dma_ranges(p);
574 if (ret)
575 return ret;
576
577 /* This is only configured in host mode */
578 if (p->host_mode) {
579 addr = __pa(PAGE_OFFSET);
580 /* This is a noop (0x00) but explains what is going on */
581 addr |= PCI_BASE_ADDRESS_SPACE_MEMORY;
582
583 for (i = 0; i < 4; i++) {
584 /* Write this directly into the config space */
585 ret = ixp4xx_crp_write_config(p, basereg[i], 4, addr);
586 if (ret)
587 dev_err(dev, "failed to set up PCI_BASE_ADDRESS_%d\n", i);
588 else
589 dev_info(dev, "set PCI_BASE_ADDR_%d to %pa\n", i, &addr);
590 addr += SZ_16M;
591 }
592
593 /*
594 * Enable CSR window at 64 MiB to allow PCI masters to continue
595 * prefetching past the 64 MiB boundary, if all AHB to PCI windows
596 * are consecutive.
597 */
598 ret = ixp4xx_crp_write_config(p, PCI_BASE_ADDRESS_4, 4, addr);
599 if (ret)
600 dev_err(dev, "failed to set up PCI_BASE_ADDRESS_4\n");
601 else
602 dev_info(dev, "set PCI_BASE_ADDR_4 to %pa\n", &addr);
603
604 /*
605 * Put the IO memory@the very end of physical memory at
606 * 0xfffffc00. This is when the PCI is trying to access IO
607 * memory over AHB.
608 */
609 addr = 0xfffffc00;
610 addr |= PCI_BASE_ADDRESS_SPACE_IO;
611 ret = ixp4xx_crp_write_config(p, PCI_BASE_ADDRESS_5, 4, addr);
612 if (ret)
613 dev_err(dev, "failed to set up PCI_BASE_ADDRESS_5\n");
614 else
615 dev_info(dev, "set PCI_BASE_ADDR_5 to %pa\n", &addr);
616
617 /*
618 * Retry timeout to 0x80
619 * Transfer ready timeout to 0xff
620 */
621 ret = ixp4xx_crp_write_config(p, IXP4XX_PCI_RTOTTO, 4,
622 0x000080ff);
623 if (ret)
624 dev_err(dev, "failed to set up TRDY limit\n");
625 else
626 dev_info(dev, "set TRDY limit to 0x80ff\n");
627 }
628
629 /* Clear interrupts */
630 val = IXP4XX_PCI_ISR_PSE | IXP4XX_PCI_ISR_PFE | IXP4XX_PCI_ISR_PPE | IXP4XX_PCI_ISR_AHBE;
631 __raw_writel(val, p->base + IXP4XX_PCI_ISR);
632
633 /*
634 * Set Initialize Complete in PCI Control Register: allow IXP4XX to
635 * respond to PCI configuration cycles. Specify that the AHB bus is
636 * operating in big endian mode. Set up byte lane swapping between
637 * little-endian PCI and the big-endian AHB bus.
638 */
639 val = IXP4XX_PCI_CSR_IC | IXP4XX_PCI_CSR_ABE;
640 #ifdef __ARMEB__
641 val |= (IXP4XX_PCI_CSR_PDS | IXP4XX_PCI_CSR_ADS);
642 #endif
643 __raw_writel(val, p->base + IXP4XX_PCI_CSR);
644
645
646 ret = ixp4xx_crp_write_config(p, PCI_COMMAND, 2, PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY);
647 if (ret)
648 dev_err(dev, "unable to initialize master and command memory\n");
649 else
650 dev_info(dev, "initialized as master\n");
651
652 ret = pci_scan_root_bus_bridge(host);
653 if (ret) {
654 dev_err(dev, "failed to scan host: %d\n", ret);
655 return ret;
656 }
657
658 p->bus = host->bus;
659
660 pci_bus_assign_resources(p->bus);
661 pci_bus_add_devices(p->bus);
662
663 return 0;
664 }
665
---
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: 63879 bytes --]
next prev parent reply other threads:[~2021-05-04 0:40 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-03 21:16 [PATCH 0/4] IXP4xx PCI rework Linus Walleij
2021-05-03 21:16 ` [PATCH 1/4] ARM/ixp4xx: Move the UART and exp bus virtbases Linus Walleij
2021-05-04 7:38 ` Arnd Bergmann
2021-05-03 21:16 ` [PATCH 2/4] ARM/ixp4xx: Make NEED_MACH_IO_H optional Linus Walleij
2021-05-03 21:16 ` [PATCH 3/4] PCI: ixp4xx: Add device tree bindings for IXP4xx Linus Walleij
2021-05-04 12:54 ` Arnd Bergmann
2021-05-09 21:31 ` Linus Walleij
2021-05-06 20:24 ` Rob Herring
2021-05-03 21:16 ` [PATCH 4/4] PCI: ixp4xx: Add a new driver " Linus Walleij
2021-05-04 0:40 ` kernel test robot [this message]
2021-05-04 0:40 ` kernel test robot
2021-05-04 4:59 ` kernel test robot
2021-05-04 7:12 ` Arnd Bergmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202105040826.wt7TL4cM-lkp@intel.com \
--to=lkp@intel.com \
--cc=arnd@arndb.de \
--cc=helgaas@kernel.org \
--cc=kaloz@openwrt.org \
--cc=kbuild-all@lists.01.org \
--cc=khalasa@piap.pl \
--cc=linus.walleij@linaro.org \
--cc=linux-pci@vger.kernel.org \
--cc=rayknight@me.com \
--cc=wigyori@uid0.hu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.