Re: [PATCH] firewire: ohci: suppress unexpected system reboot in AMD Ryzen machines and ASM108x/VT630x PCIe cards

From: kernel test robot
Date: Fri Dec 29 2023 - 17:57:03 EST


Hi Takashi,

kernel test robot noticed the following build errors:

[auto build test ERROR on ieee1394-linux1394/for-next]
[also build test ERROR on ieee1394-linux1394/for-linus linus/master v6.7-rc7 next-20231222]
[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#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Takashi-Sakamoto/firewire-ohci-suppress-unexpected-system-reboot-in-AMD-Ryzen-machines-and-ASM108x-VT630x-PCIe-cards/20231229-120311
base: https://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394.git for-next
patch link: https://lore.kernel.org/r/20231229035735.11127-1-o-takashi%40sakamocchi.jp
patch subject: [PATCH] firewire: ohci: suppress unexpected system reboot in AMD Ryzen machines and ASM108x/VT630x PCIe cards
config: loongarch-randconfig-r081-20231229 (https://download.01.org/0day-ci/archive/20231230/202312300612.hrtBWbnp-lkp@xxxxxxxxx/config)
compiler: loongarch64-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231230/202312300612.hrtBWbnp-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202312300612.hrtBWbnp-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

drivers/firewire/ohci.c: In function 'pci_probe':
>> drivers/firewire/ohci.c:3679:70: error: macro "detect_vt630x_with_asm1083_on_amd_ryzen_machine" passed 2 arguments, but takes just 1
3679 | if (detect_vt630x_with_asm1083_on_amd_ryzen_machine(dev, ohci))
| ^
drivers/firewire/ohci.c:3573: note: macro "detect_vt630x_with_asm1083_on_amd_ryzen_machine" defined here
3573 | #define detect_vt630x_with_asm1083_on_amd_ryzen_machine(pdev) false
|
>> drivers/firewire/ohci.c:3679:13: error: 'detect_vt630x_with_asm1083_on_amd_ryzen_machine' undeclared (first use in this function)
3679 | if (detect_vt630x_with_asm1083_on_amd_ryzen_machine(dev, ohci))
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/firewire/ohci.c:3679:13: note: each undeclared identifier is reported only once for each function it appears in


vim +/detect_vt630x_with_asm1083_on_amd_ryzen_machine +3679 drivers/firewire/ohci.c

3617
3618 static int pci_probe(struct pci_dev *dev,
3619 const struct pci_device_id *ent)
3620 {
3621 struct fw_ohci *ohci;
3622 u32 bus_options, max_receive, link_speed, version;
3623 u64 guid;
3624 int i, err;
3625 size_t size;
3626
3627 if (dev->vendor == PCI_VENDOR_ID_PINNACLE_SYSTEMS) {
3628 dev_err(&dev->dev, "Pinnacle MovieBoard is not yet supported\n");
3629 return -ENOSYS;
3630 }
3631
3632 ohci = devres_alloc(release_ohci, sizeof(*ohci), GFP_KERNEL);
3633 if (ohci == NULL)
3634 return -ENOMEM;
3635 fw_card_initialize(&ohci->card, &ohci_driver, &dev->dev);
3636 pci_set_drvdata(dev, ohci);
3637 pmac_ohci_on(dev);
3638 devres_add(&dev->dev, ohci);
3639
3640 err = pcim_enable_device(dev);
3641 if (err) {
3642 dev_err(&dev->dev, "failed to enable OHCI hardware\n");
3643 return err;
3644 }
3645
3646 pci_set_master(dev);
3647 pci_write_config_dword(dev, OHCI1394_PCI_HCI_Control, 0);
3648
3649 spin_lock_init(&ohci->lock);
3650 mutex_init(&ohci->phy_reg_mutex);
3651
3652 INIT_WORK(&ohci->bus_reset_work, bus_reset_work);
3653
3654 if (!(pci_resource_flags(dev, 0) & IORESOURCE_MEM) ||
3655 pci_resource_len(dev, 0) < OHCI1394_REGISTER_SIZE) {
3656 ohci_err(ohci, "invalid MMIO resource\n");
3657 return -ENXIO;
3658 }
3659
3660 err = pcim_iomap_regions(dev, 1 << 0, ohci_driver_name);
3661 if (err) {
3662 ohci_err(ohci, "request and map MMIO resource unavailable\n");
3663 return -ENXIO;
3664 }
3665 ohci->registers = pcim_iomap_table(dev)[0];
3666
3667 for (i = 0; i < ARRAY_SIZE(ohci_quirks); i++)
3668 if ((ohci_quirks[i].vendor == dev->vendor) &&
3669 (ohci_quirks[i].device == (unsigned short)PCI_ANY_ID ||
3670 ohci_quirks[i].device == dev->device) &&
3671 (ohci_quirks[i].revision == (unsigned short)PCI_ANY_ID ||
3672 ohci_quirks[i].revision >= dev->revision)) {
3673 ohci->quirks = ohci_quirks[i].flags;
3674 break;
3675 }
3676 if (param_quirks)
3677 ohci->quirks = param_quirks;
3678
> 3679 if (detect_vt630x_with_asm1083_on_amd_ryzen_machine(dev, ohci))
3680 ohci->quirks |= QUIRK_REBOOT_BY_CYCLE_TIMER_READ;
3681
3682 /*
3683 * Because dma_alloc_coherent() allocates at least one page,
3684 * we save space by using a common buffer for the AR request/
3685 * response descriptors and the self IDs buffer.
3686 */
3687 BUILD_BUG_ON(AR_BUFFERS * sizeof(struct descriptor) > PAGE_SIZE/4);
3688 BUILD_BUG_ON(SELF_ID_BUF_SIZE > PAGE_SIZE/2);
3689 ohci->misc_buffer = dmam_alloc_coherent(&dev->dev, PAGE_SIZE, &ohci->misc_buffer_bus,
3690 GFP_KERNEL);
3691 if (!ohci->misc_buffer)
3692 return -ENOMEM;
3693
3694 err = ar_context_init(&ohci->ar_request_ctx, ohci, 0,
3695 OHCI1394_AsReqRcvContextControlSet);
3696 if (err < 0)
3697 return err;
3698
3699 err = ar_context_init(&ohci->ar_response_ctx, ohci, PAGE_SIZE/4,
3700 OHCI1394_AsRspRcvContextControlSet);
3701 if (err < 0)
3702 return err;
3703
3704 err = context_init(&ohci->at_request_ctx, ohci,
3705 OHCI1394_AsReqTrContextControlSet, handle_at_packet);
3706 if (err < 0)
3707 return err;
3708
3709 err = context_init(&ohci->at_response_ctx, ohci,
3710 OHCI1394_AsRspTrContextControlSet, handle_at_packet);
3711 if (err < 0)
3712 return err;
3713
3714 reg_write(ohci, OHCI1394_IsoRecvIntMaskSet, ~0);
3715 ohci->ir_context_channels = ~0ULL;
3716 ohci->ir_context_support = reg_read(ohci, OHCI1394_IsoRecvIntMaskSet);
3717 reg_write(ohci, OHCI1394_IsoRecvIntMaskClear, ~0);
3718 ohci->ir_context_mask = ohci->ir_context_support;
3719 ohci->n_ir = hweight32(ohci->ir_context_mask);
3720 size = sizeof(struct iso_context) * ohci->n_ir;
3721 ohci->ir_context_list = devm_kzalloc(&dev->dev, size, GFP_KERNEL);
3722 if (!ohci->ir_context_list)
3723 return -ENOMEM;
3724
3725 reg_write(ohci, OHCI1394_IsoXmitIntMaskSet, ~0);
3726 ohci->it_context_support = reg_read(ohci, OHCI1394_IsoXmitIntMaskSet);
3727 /* JMicron JMB38x often shows 0 at first read, just ignore it */
3728 if (!ohci->it_context_support) {
3729 ohci_notice(ohci, "overriding IsoXmitIntMask\n");
3730 ohci->it_context_support = 0xf;
3731 }
3732 reg_write(ohci, OHCI1394_IsoXmitIntMaskClear, ~0);
3733 ohci->it_context_mask = ohci->it_context_support;
3734 ohci->n_it = hweight32(ohci->it_context_mask);
3735 size = sizeof(struct iso_context) * ohci->n_it;
3736 ohci->it_context_list = devm_kzalloc(&dev->dev, size, GFP_KERNEL);
3737 if (!ohci->it_context_list)
3738 return -ENOMEM;
3739
3740 ohci->self_id = ohci->misc_buffer + PAGE_SIZE/2;
3741 ohci->self_id_bus = ohci->misc_buffer_bus + PAGE_SIZE/2;
3742
3743 bus_options = reg_read(ohci, OHCI1394_BusOptions);
3744 max_receive = (bus_options >> 12) & 0xf;
3745 link_speed = bus_options & 0x7;
3746 guid = ((u64) reg_read(ohci, OHCI1394_GUIDHi) << 32) |
3747 reg_read(ohci, OHCI1394_GUIDLo);
3748
3749 if (!(ohci->quirks & QUIRK_NO_MSI))
3750 pci_enable_msi(dev);
3751 err = devm_request_irq(&dev->dev, dev->irq, irq_handler,
3752 pci_dev_msi_enabled(dev) ? 0 : IRQF_SHARED, ohci_driver_name, ohci);
3753 if (err < 0) {
3754 ohci_err(ohci, "failed to allocate interrupt %d\n", dev->irq);
3755 goto fail_msi;
3756 }
3757
3758 err = fw_card_add(&ohci->card, max_receive, link_speed, guid);
3759 if (err)
3760 goto fail_msi;
3761
3762 version = reg_read(ohci, OHCI1394_Version) & 0x00ff00ff;
3763 ohci_notice(ohci,
3764 "added OHCI v%x.%x device as card %d, "
3765 "%d IR + %d IT contexts, quirks 0x%x%s\n",
3766 version >> 16, version & 0xff, ohci->card.index,
3767 ohci->n_ir, ohci->n_it, ohci->quirks,
3768 reg_read(ohci, OHCI1394_PhyUpperBound) ?
3769 ", physUB" : "");
3770
3771 return 0;
3772
3773 fail_msi:
3774 pci_disable_msi(dev);
3775
3776 return err;
3777 }
3778

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki