Lines Matching +full:pci +full:- +full:host +full:- +full:cam +full:- +full:generic
1 // SPDX-License-Identifier: GPL-2.0
3 * This file contains work-arounds for many known PCI hardware bugs.
4 * Devices present only on certain architectures (host bridges et cetera)
5 * should be handled in arch-specific code.
11 * Init/reset quirks for USB host controllers should be in the USB quirks
19 #include <linux/pci.h>
20 #include <linux/isa-dma.h> /* isa_dma_bridge_buggy */
34 #include "pci.h"
41 * Gen 2 switch, and observed with the Delock Riser Card PCI Express x1 >
88 !pcie_cap_has_lnkctl2(dev) || !dev->link_active_reporting) in pcie_failed_link_retrain()
95 pci_info(dev, "broken device, retraining non-functional downstream link at 2.5GT/s\n"); in pcie_failed_link_retrain()
157 if ((f->class == (u32) (dev->class >> f->class_shift) || in pci_do_fixups()
158 f->class == (u32) PCI_ANY_ID) && in pci_do_fixups()
159 (f->vendor == dev->vendor || in pci_do_fixups()
160 f->vendor == (u16) PCI_ANY_ID) && in pci_do_fixups()
161 (f->device == dev->device || in pci_do_fixups()
162 f->device == (u16) PCI_ANY_ID)) { in pci_do_fixups()
165 hook = offset_to_ptr(&f->hook_offset); in pci_do_fixups()
167 hook = f->hook; in pci_do_fixups()
256 pr_info("PCI: CLS %u bytes\n", pci_cache_line_size << 2); in pci_apply_final_quirks()
263 * value shared by all PCI devices. If there's a in pci_apply_final_quirks()
281 pr_info("PCI: CLS %u bytes, default %u\n", cls << 2, in pci_apply_final_quirks()
291 * Decoding should be disabled for a PCI device during BAR sizing to avoid
292 * conflict. But doing so may cause problems on host bridge and perhaps other
293 * key system devices. For devices that need to have mmio decoding always-on,
294 * we need to set the dev->mmio_always_on bit.
298 dev->mmio_always_on = 1; in quirk_mmio_always_on()
339 * contacts at VIA ask them for me please -- Alan
386 /* Chipsets where PCI->PCI transfers vanish or hang */
390 pci_info(dev, "Disabling direct PCI/PCI transfers\n"); in quirk_nopcipci()
403 pci_info(dev, "Chipset erratum: Disabling direct PCI/AGP transfers\n"); in quirk_nopciamd()
413 pci_info(dev, "Limiting direct PCI/PCI transfers\n"); in quirk_triton()
423 * VIA Apollo KT133 needs PCI latency patch
424 * Made according to a Windows driver-based patch by George E. Breese;
425 * see PCI Latency Adjust on http://www.viahardware.com/download/viatweak.shtm
426 * Also see http://www.au-ja.org/review-kt133a-1-en.phtml for the info on
445 * 0x40 - 0x4f == 686B, 0x10 - 0x2f == 686A; in quirk_vialatency()
449 if (p->revision < 0x40 || p->revision > 0x42) in quirk_vialatency()
457 if (p->revision < 0x10 || p->revision > 0x12) in quirk_vialatency()
462 * Ok we have the problem. Now set the PCI master grant to occur in quirk_vialatency()
463 * every master grant. The apparent bug is that under high PCI load in quirk_vialatency()
477 * "Master priority rotation on every PCI master grant" in quirk_vialatency()
498 pci_info(dev, "Limiting direct PCI/PCI transfers\n"); in quirk_viaetbf()
507 pci_info(dev, "Limiting direct PCI/PCI transfers\n"); in quirk_vsfx()
521 pci_info(dev, "Limiting direct PCI/PCI transfers\n"); in quirk_alimagik()
532 pci_info(dev, "Limiting direct PCI/PCI transfers\n"); in quirk_natoma()
544 * This chip can cause PCI parity errors if config register 0xA0 is read
549 dev->cfg_size = 0xA0; in quirk_citrine()
559 dev->cfg_size = 0x600; in quirk_nfp6000()
572 struct resource *r = &dev->resource[i]; in quirk_extend_bar_to_page()
575 if (r->flags & IORESOURCE_MEM && resource_size(r) < PAGE_SIZE) { in quirk_extend_bar_to_page()
576 r->end = PAGE_SIZE - 1; in quirk_extend_bar_to_page()
577 r->start = 0; in quirk_extend_bar_to_page()
578 r->flags |= IORESOURCE_UNSET; in quirk_extend_bar_to_page()
588 * If it's needed, re-allocate the region.
592 struct resource *r = &dev->resource[0]; in quirk_s3_64M()
594 if ((r->start & 0x3ffffff) || r->end != r->start + 0x3ffffff) { in quirk_s3_64M()
595 r->flags |= IORESOURCE_UNSET; in quirk_s3_64M()
596 r->start = 0; in quirk_s3_64M()
597 r->end = 0x3ffffff; in quirk_s3_64M()
608 struct resource *res = dev->resource + pos; in quirk_io()
616 res->name = pci_name(dev); in quirk_io()
617 res->flags = region & ~PCI_BASE_ADDRESS_IO_MASK; in quirk_io()
618 res->flags |= in quirk_io()
620 region &= ~(size - 1); in quirk_io()
622 /* Convert from PCI bus to resource space */ in quirk_io()
624 bus_region.end = region + size - 1; in quirk_io()
625 pcibios_bus_to_resource(dev->bus, res, &bus_region); in quirk_io()
632 * ver. 1.33 20070103) don't set the correct ISA PCI region header info.
636 * CS553x's ISA PCI BARs may also be read-only (ref:
637 * https://bugzilla.kernel.org/show_bug.cgi?id=85991 - Comment #4 forward).
658 struct resource *res = dev->resource + nr; in quirk_io_region()
661 region &= ~(size - 1); in quirk_io_region()
666 res->name = pci_name(dev); in quirk_io_region()
667 res->flags = IORESOURCE_IO; in quirk_io_region()
669 /* Convert from PCI bus to resource space */ in quirk_io_region()
671 bus_region.end = region + size - 1; in quirk_io_region()
672 pcibios_bus_to_resource(dev->bus, res, &bus_region); in quirk_io_region()
677 * non-standard resource. Printing "nr" or pci_resource_name() of in quirk_io_region()
686 * between 0x3b0->0x3bb or read 0x3d3
704 * device, change the class code to 0x0c03fe, which the PCI r3.0 spec
705 * defines as "USB device (not host controller)". The dwc3 driver can then
710 u32 class = pdev->class; in quirk_amd_dwc_class()
713 /* Use "USB Device (not host controller)" class */ in quirk_amd_dwc_class()
714 pdev->class = PCI_CLASS_SERIAL_USB_DEVICE; in quirk_amd_dwc_class()
716 "PCI class overridden (%#08x -> %#08x) so dwc3 driver can claim this instead of xhci\n", in quirk_amd_dwc_class()
717 class, pdev->class); in quirk_amd_dwc_class()
726 * Synopsys USB 3.x host HAPS platform has a class code of
728 * devices should use dwc3-haps driver. Change these devices' class code to
729 * PCI_CLASS_SERIAL_USB_DEVICE to prevent the xhci-pci driver from claiming
734 u32 class = pdev->class; in quirk_synopsys_haps()
736 switch (pdev->device) { in quirk_synopsys_haps()
740 pdev->class = PCI_CLASS_SERIAL_USB_DEVICE; in quirk_synopsys_haps()
741 …pci_info(pdev, "PCI class overridden (%#08x -> %#08x) so dwc3 driver can claim this instead of xhc… in quirk_synopsys_haps()
742 class, pdev->class); in quirk_synopsys_haps()
789 base &= -size; in piix4_io_quirk()
790 pci_info(dev, "%s PIO at %04x-%04x\n", name, base, base + size - 1); in piix4_io_quirk()
815 base &= -size; in piix4_mem_quirk()
816 pci_info(dev, "%s MMIO at %04x-%04x\n", name, base, base + size - 1); in piix4_mem_quirk()
868 * ICH4, ICH4-M, ICH5, ICH5-M ACPI: Three IO regions pointed to by longwords at
942 base &= ~(size-1); in ich6_lpc_generic_decode()
948 pci_info(dev, "%s PIO at %04x-%04x\n", name, base, base+size-1); in ich6_lpc_generic_decode()
956 /* ICH6-specific generic IO decode */ in quirk_ich6_lpc()
957 ich6_lpc_generic_decode(dev, 0x84, "LPC Generic IO decode 1", 0); in quirk_ich6_lpc()
958 ich6_lpc_generic_decode(dev, 0x88, "LPC Generic IO decode 2", 1); in quirk_ich6_lpc()
975 /* IO base in bits 15:2, mask in bits 23:18, both are dword-based */ in ich7_lpc_generic_decode()
987 /* ICH7-10 has the same common LPC generic IO decode registers */
993 /* And have 4 ICH7+ generic decodes */ in quirk_ich7_lpc()
994 ich7_lpc_generic_decode(dev, 0x84, "ICH7 LPC Generic IO decode 1"); in quirk_ich7_lpc()
995 ich7_lpc_generic_decode(dev, 0x88, "ICH7 LPC Generic IO decode 2"); in quirk_ich7_lpc()
996 ich7_lpc_generic_decode(dev, 0x8c, "ICH7 LPC Generic IO decode 3"); in quirk_ich7_lpc()
997 ich7_lpc_generic_decode(dev, 0x90, "ICH7 LPC Generic IO decode 4"); in quirk_ich7_lpc()
1019 if (dev->revision & 0x10) in quirk_vt82c586_acpi()
1036 "vt82c686 HW-mon"); in quirk_vt82c686_acpi()
1055 * TI XIO2000a PCIe-PCI Bridge erroneously reports it supports fast
1056 * back-to-back: Disable fast back-to-back on the secondary bus segment
1063 pci_warn(dev, "TI XIO2000a quirk detected; secondary bus fast back-to-back transfers disabled\n"); in quirk_xio2000a()
1064 list_for_each_entry(pdev, &dev->subordinate->devices, bus_list) { in quirk_xio2000a()
1078 * VIA 686A/B: If an IO-APIC is active, we need to route all on-chip
1081 * TODO: When we have device-specific interrupt routers, this code will go
1091 tmp = 0x1f; /* all known bits (4-0) routed to external APIC */ in quirk_via_ioapic()
1103 * VIA 8237: Some BIOSes don't set the 'Bypass APIC De-Assert Message' Bit.
1115 pci_info(dev, "Bypassing VIA 8237 APIC De-Assert Message\n"); in quirk_via_vt8237_bypass_apic_deassert()
1123 * The AMD IO-APIC can hang the box when an APIC IRQ is masked.
1133 if (dev->revision >= 0x02) { in quirk_amd_ioapic()
1145 /* Fix for improper SR-IOV configuration on Cavium cn88xx RNM device */ in quirk_cavium_sriov_rnm_link()
1146 if (dev->subsystem_device == 0xa118) in quirk_cavium_sriov_rnm_link()
1147 dev->sriov->link = dev->devfn; in quirk_cavium_sriov_rnm_link()
1154 * See AMD 8131 HyperTransport PCI-X Tunnel Revision Guide
1158 if (dev->subordinate && dev->revision <= 0x12) { in quirk_amd_8131_mmrbc()
1159 pci_info(dev, "AMD8131 rev %x detected; disabling PCI-X MMRBC\n", in quirk_amd_8131_mmrbc()
1160 dev->revision); in quirk_amd_8131_mmrbc()
1161 dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MMRBC; in quirk_amd_8131_mmrbc()
1171 * -jgarzik
1177 /* VIA ACPI device: SCI IRQ line in PCI config byte 0x42 */ in quirk_via_acpi()
1181 d->irq = irq; in quirk_via_acpi()
1187 static int via_vlink_dev_lo = -1, via_vlink_dev_hi = 18;
1192 switch (dev->device) { in quirk_via_bridge()
1195 * The VT82C686 is special; it attaches to PCI and can have in quirk_via_bridge()
1199 via_vlink_dev_lo = PCI_SLOT(dev->devfn); in quirk_via_bridge()
1200 via_vlink_dev_hi = PCI_SLOT(dev->devfn); in quirk_via_bridge()
1227 * quirk_via_vlink - VIA VLink IRQ number update
1228 * @dev: PCI device
1231 * the IRQ line register which usually is not relevant for PCI cards, is
1242 if (via_vlink_dev_lo == -1) in quirk_via_vlink()
1245 new_irq = dev->irq; in quirk_via_vlink()
1252 if (dev->bus->number != 0 || PCI_SLOT(dev->devfn) > via_vlink_dev_hi || in quirk_via_vlink()
1253 PCI_SLOT(dev->devfn) < via_vlink_dev_lo) in quirk_via_vlink()
1278 pci_read_config_word(dev, PCI_DEVICE_ID, &dev->device); in quirk_vt82c598_id()
1298 * Following the PCI ordering rules is optional on the AMD762. I'm not sure
1310 pci_warn(dev, "BIOS failed to enable PCI standards compliance; fixing this error\n"); in quirk_amd_ordering()
1321 * DreamWorks-provided workaround for Dunord I-3000 problem
1329 struct resource *r = &dev->resource[1]; in quirk_dunord()
1331 r->flags |= IORESOURCE_UNSET; in quirk_dunord()
1332 r->start = 0; in quirk_dunord()
1333 r->end = 0xffffff; in quirk_dunord()
1338 * i82380FB mobile docking controller: its PCI-to-PCI bridge is subtractive
1340 * Unfortunately, the ProgIf value is wrong - 0x80 instead of 0x01.
1344 dev->transparent = 1; in quirk_transparent_bridge()
1350 * Common misconfiguration of the MediaGX/Geode PCI master that will reduce
1351 * PCI bandwidth from 70MB/s to 25MB/s. See the GXM/GXLV/GX1 datasheets
1379 if (pdev->revision != 0x04) /* Only C0 requires this */ in quirk_disable_pxb()
1385 pci_info(pdev, "C0 revision 450NX. Disabling PCI restreaming\n"); in quirk_disable_pxb()
1393 /* set SBX00/Hudson-2 SATA in IDE mode to AHCI mode */ in quirk_amd_ide_mode()
1404 pdev->class = PCI_CLASS_STORAGE_SATA_AHCI; in quirk_amd_ide_mode()
1424 pdev->class &= ~5; in quirk_svwks_csb5ide()
1426 /* PCI layer will sort out resources */ in quirk_svwks_csb5ide()
1431 /* Intel 82801CAM ICH3-M datasheet says IDE modes must be the same */
1441 pdev->class &= ~5; in quirk_ide_samemode()
1450 pdev->dev_flags |= PCI_DEV_FLAGS_NO_D3; in quirk_no_ata_d3()
1466 * This was originally an Alpha-specific thing, but it really fits here.
1467 * The i82375 PCI/EISA bridge appears as non-classified. Fix that.
1471 dev->class = PCI_CLASS_BRIDGE_EISA << 8; in quirk_eisa_bridge()
1476 * On ASUS P4B boards, the SMBus PCI Device within the ICH2/4 southbridge
1478 * users to be irritated by just another PCI Device in the Win98 device
1482 * The SMBus PCI Device can be activated by setting a bit in the ICH LPC
1484 * becomes necessary to do this tweak in two steps -- the chosen trigger
1485 * is either the Host bridge (preferred) or on-board VGA controller.
1498 * the DSDT and double-check that there is no code accessing the SMBus.
1504 if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_ASUSTEK)) { in asus_hides_smbus_hostbridge()
1505 if (dev->device == PCI_DEVICE_ID_INTEL_82845_HB) in asus_hides_smbus_hostbridge()
1506 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1507 case 0x8025: /* P4B-LX */ in asus_hides_smbus_hostbridge()
1513 else if (dev->device == PCI_DEVICE_ID_INTEL_82845G_HB) in asus_hides_smbus_hostbridge()
1514 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1515 case 0x80b1: /* P4GE-V */ in asus_hides_smbus_hostbridge()
1517 case 0x8093: /* P4B533-V */ in asus_hides_smbus_hostbridge()
1520 else if (dev->device == PCI_DEVICE_ID_INTEL_82850_HB) in asus_hides_smbus_hostbridge()
1521 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1525 else if (dev->device == PCI_DEVICE_ID_INTEL_7205_0) in asus_hides_smbus_hostbridge()
1526 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1530 else if (dev->device == PCI_DEVICE_ID_INTEL_E7501_MCH) in asus_hides_smbus_hostbridge()
1531 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1532 case 0x80c9: /* PU-DLS */ in asus_hides_smbus_hostbridge()
1535 else if (dev->device == PCI_DEVICE_ID_INTEL_82855GM_HB) in asus_hides_smbus_hostbridge()
1536 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1542 else if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB) in asus_hides_smbus_hostbridge()
1543 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1548 else if (dev->device == PCI_DEVICE_ID_INTEL_82865_HB) in asus_hides_smbus_hostbridge()
1549 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1550 case 0x80f2: /* P4P800-X */ in asus_hides_smbus_hostbridge()
1553 else if (dev->device == PCI_DEVICE_ID_INTEL_82915GM_HB) in asus_hides_smbus_hostbridge()
1554 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1559 } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_HP)) { in asus_hides_smbus_hostbridge()
1560 if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB) in asus_hides_smbus_hostbridge()
1561 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1566 else if (dev->device == PCI_DEVICE_ID_INTEL_82865_HB) in asus_hides_smbus_hostbridge()
1567 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1573 else if (dev->device == PCI_DEVICE_ID_INTEL_82875_HB) in asus_hides_smbus_hostbridge()
1574 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1578 } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_SAMSUNG)) { in asus_hides_smbus_hostbridge()
1579 if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB) in asus_hides_smbus_hostbridge()
1580 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1584 } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_COMPAQ)) { in asus_hides_smbus_hostbridge()
1585 if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB) in asus_hides_smbus_hostbridge()
1586 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1590 else if (dev->device == PCI_DEVICE_ID_INTEL_82810_IG3) in asus_hides_smbus_hostbridge()
1591 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1592 case 0xB16C: /* Compaq Deskpro EP 401963-001 (PCA# 010174) */ in asus_hides_smbus_hostbridge()
1593 /* Motherboard doesn't have Host bridge in asus_hides_smbus_hostbridge()
1595 * its on-board VGA controller */ in asus_hides_smbus_hostbridge()
1598 else if (dev->device == PCI_DEVICE_ID_INTEL_82801DB_2) in asus_hides_smbus_hostbridge()
1599 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1603 /* Motherboard doesn't have Host bridge in asus_hides_smbus_hostbridge()
1604 * subvendor/subdevice IDs and on-board VGA in asus_hides_smbus_hostbridge()
1610 else if (dev->device == PCI_DEVICE_ID_INTEL_82815_CGC) in asus_hides_smbus_hostbridge()
1611 switch (dev->subsystem_device) { in asus_hides_smbus_hostbridge()
1613 /* Motherboard doesn't have host bridge in asus_hides_smbus_hostbridge()
1615 * its on-board VGA controller */ in asus_hides_smbus_hostbridge()
1767 dev->device = devid; in quirk_sis_503()
1775 * and MC97 modem controller are disabled when a second PCI soundcard is
1777 * -- bjd
1784 if (likely(dev->subsystem_vendor == PCI_VENDOR_ID_ASUSTEK)) { in asus_hides_ac97_lpc()
1785 if (dev->device == PCI_DEVICE_ID_VIA_8237) in asus_hides_ac97_lpc()
1810 * early on to make the additional device appear during the PCI scanning.
1818 if (PCI_FUNC(pdev->devfn)) in quirk_jmicron_ata()
1824 conf1 &= ~0x00CFF302; /* Clear bit 1, 8, 9, 12-19, 22, 23 */ in quirk_jmicron_ata()
1827 switch (pdev->device) { in quirk_jmicron_ata()
1859 pdev->hdr_type = hdr & PCI_HEADER_TYPE_MASK; in quirk_jmicron_ata()
1860 pdev->multifunction = FIELD_GET(PCI_HEADER_TYPE_MFD, hdr); in quirk_jmicron_ata()
1863 pdev->class = class >> 8; in quirk_jmicron_ata()
1888 if (dev->multifunction) { in quirk_jmicron_async_suspend()
1889 device_disable_async_suspend(&dev->dev); in quirk_jmicron_async_suspend()
1890 pci_info(dev, "async suspend disabled to avoid multi-function power-on ordering issue\n"); in quirk_jmicron_async_suspend()
1903 if ((pdev->class >> 8) != 0xff00) in quirk_alder_ioapic()
1907 * The first BAR is the location of the IO-APIC... we must in quirk_alder_ioapic()
1912 insert_resource(&iomem_resource, &pdev->resource[0]); in quirk_alder_ioapic()
1919 memset(&pdev->resource[i], 0, sizeof(pdev->resource[i])); in quirk_alder_ioapic()
1927 dev->no_msi = 1; in quirk_no_msi()
1938 pdev->no_msi = 1; in quirk_pcie_mch()
1947 * HiSilicon KunPeng920 and KunPeng930 have devices appear as PCI but are
1948 * actually on the AMBA bus. These fake PCI devices can support SVA via
1949 * SMMU stall feature, by setting dma-can-stall for ACPI platforms.
1951 * Normally stalling must not be enabled for PCI devices, since it would
1952 * break the PCI requirement for free-flowing writes and may lead to
1953 * deadlock. We expect PCI devices to support ATS and PRI if they want to
1954 * be fault-tolerant, so there's no ACPI binding to describe anything else,
1955 * even when a "PCI" device turns out to be a regular old SoC device
1961 PROPERTY_ENTRY_BOOL("dma-can-stall"), in quirk_huawei_pcie_sva()
1965 if (pdev->revision != 0x21 && pdev->revision != 0x30) in quirk_huawei_pcie_sva()
1968 pdev->pasid_no_tlp = 1; in quirk_huawei_pcie_sva()
1971 * Set the dma-can-stall property on ACPI platforms. Device tree in quirk_huawei_pcie_sva()
1974 if (!pdev->dev.of_node && in quirk_huawei_pcie_sva()
1975 device_create_managed_software_node(&pdev->dev, properties, NULL)) in quirk_huawei_pcie_sva()
1987 * together on certain PXH-based systems.
1991 dev->no_msi = 1; in quirk_pcie_pxh()
2001 * Some Intel PCI Express chipsets have trouble with downstream device
2007 dev->no_d1d2 = 1; in quirk_intel_pcie_pm()
2033 if (dev->d3hot_delay >= delay) in quirk_d3hot_delay()
2036 dev->d3hot_delay = delay; in quirk_d3hot_delay()
2037 pci_info(dev, "extending delay after power-on from D3hot to %d msec\n", in quirk_d3hot_delay()
2038 dev->d3hot_delay); in quirk_d3hot_delay()
2043 if (dev->subsystem_vendor == PCI_VENDOR_ID_APPLE && in quirk_radeon_pm()
2044 dev->subsystem_device == 0x00e2) in quirk_radeon_pm()
2050 * NVIDIA Ampere-based HDA controllers can wedge the whole device if a bus
2067 * to be ineffective on the platforms in question; the PCI device appears to
2068 * remain on in D3hot state. The D3hot-to-D0 transition then requires an
2083 pr_info("%s detected: disable boot interrupt reroute\n", d->ident); in dmi_disable_ioapicreroute()
2094 .ident = "ASUSTek Computer INC. M2N-LR",
2097 DMI_MATCH(DMI_PRODUCT_NAME, "M2N-LR"),
2106 * that a PCI device's interrupt handler is installed on the boot interrupt
2115 dev->irq_reroute_variant = INTEL_IRQ_REROUTE_VARIANT; in quirk_reroute_to_boot_interrupts_intel()
2117 dev->vendor, dev->device); in quirk_reroute_to_boot_interrupts_intel()
2142 * IO-APIC1 on 6300ESB generates boot interrupts, see Intel order no
2143 * 300641-004US, section 5.7.3.
2145 * Core IO on Xeon E5 1600/2600/4600, see Intel order no 326509-003.
2146 * Core IO on Xeon E5 v2, see Intel order no 329188-003.
2147 * Core IO on Xeon E7 v2, see Intel order no 329595-002.
2148 * Core IO on Xeon E5 v3, see Intel order no 330784-003.
2149 * Core IO on Xeon E7 v3, see Intel order no 332315-001US.
2150 * Core IO on Xeon E5 v4, see Intel order no 333810-002US.
2151 * Core IO on Xeon E7 v4, see Intel order no 332315-001US.
2152 * Core IO on Xeon D-1500, see Intel order no 332051-001.
2169 switch (dev->device) { in quirk_disable_intel_boot_interrupt()
2180 case 0x6f28: /* Xeon D-1500 */ in quirk_disable_intel_boot_interrupt()
2192 dev->vendor, dev->device); in quirk_disable_intel_boot_interrupt()
2195 * Device 29 Func 5 Device IDs of IO-APIC
2231 /* Disable boot interrupts on HT-1000 */
2257 dev->vendor, dev->device); in quirk_disable_broadcom_boot_interrupt()
2266 * rev. A0 and B0, NOIOAMODE needs to be disabled anyway to fix IO-APIC mode
2280 if ((dev->revision == AMD_813X_REV_B1) || in quirk_disable_amd_813x_boot_interrupt()
2281 (dev->revision == AMD_813X_REV_B2)) in quirk_disable_amd_813x_boot_interrupt()
2289 dev->vendor, dev->device); in quirk_disable_amd_813x_boot_interrupt()
2308 dev->vendor, dev->device); in quirk_disable_amd_8111_boot_interrupt()
2313 dev->vendor, dev->device); in quirk_disable_amd_8111_boot_interrupt()
2320 * Toshiba TC86C001 IDE controller reports the standard 8-byte BAR0 size
2322 * Re-allocate the region if needed...
2326 struct resource *r = &dev->resource[0]; in quirk_tc86c001_ide()
2328 if (r->start & 0x8) { in quirk_tc86c001_ide()
2329 r->flags |= IORESOURCE_UNSET; in quirk_tc86c001_ide()
2330 r->start = 0; in quirk_tc86c001_ide()
2331 r->end = 0xf; in quirk_tc86c001_ide()
2339 * PLX PCI 9050 PCI Target bridge controller has an erratum that prevents the
2343 * Re-allocate the regions to a 256-byte boundary if necessary.
2349 /* Fixed in revision 2 (PCI 9052). */ in quirk_plx_pci9050()
2350 if (dev->revision >= 2) in quirk_plx_pci9050()
2355 struct resource *r = &dev->resource[bar]; in quirk_plx_pci9050()
2356 pci_info(dev, "Re-allocating PLX PCI 9050 BAR %u to length 256 to avoid bit 7 bug\n", in quirk_plx_pci9050()
2358 r->flags |= IORESOURCE_UNSET; in quirk_plx_pci9050()
2359 r->start = 0; in quirk_plx_pci9050()
2360 r->end = 0xff; in quirk_plx_pci9050()
2367 * may be using the PLX PCI 9050: 0x0630, 0x0940, 0x0950, 0x0960, 0x100b,
2379 unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4; in quirk_netmos()
2380 unsigned int num_serial = dev->subsystem_device & 0xf; in quirk_netmos()
2392 switch (dev->device) { in quirk_netmos()
2395 if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM && in quirk_netmos()
2396 dev->subsystem_device == 0x0299) in quirk_netmos()
2405 dev->device, num_parallel, num_serial); in quirk_netmos()
2406 dev->class = (PCI_CLASS_COMMUNICATION_OTHER << 8) | in quirk_netmos()
2407 (dev->class & 0xff); in quirk_netmos()
2420 switch (dev->device) { in quirk_e100_interrupt()
2421 /* PCI IDs taken from drivers/net/e100.c */ in quirk_e100_interrupt()
2445 * re-enable them when it's ready. in quirk_e100_interrupt()
2456 if (dev->pm_cap) { in quirk_e100_interrupt()
2457 pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr); in quirk_e100_interrupt()
2462 /* Convert from PCI bus to resource space. */ in quirk_e100_interrupt()
2511 * ASM1083/1085 PCIe-PCI bridge devices cause AER timeout errors on the
2518 * Some Pericom PCIe-to-PCI bridges in reverse mode need the PCIe Retrain
2527 dev->clear_retrain_link = 1; in quirk_enable_clear_retrain_link()
2536 u32 class = dev->class; in fixup_rev1_53c810()
2545 dev->class = PCI_CLASS_STORAGE_SCSI << 8; in fixup_rev1_53c810()
2546 pci_info(dev, "NCR 53c810 rev 1 PCI class overridden (%#08x -> %#08x)\n", in fixup_rev1_53c810()
2547 class, dev->class); in fixup_rev1_53c810()
2560 dev->io_window_1k = 1; in quirk_p64h2_1k_io()
2589 * Disable PCI Bus Parking and PCI Master read caching on CX700 in quirk_via_cx700_pci_parking_caching()
2590 * which causes unspecified timing errors with a VT6212L on the PCI in quirk_via_cx700_pci_parking_caching()
2593 * This quirk is only enabled if a second (on the external PCI bus) in quirk_via_cx700_pci_parking_caching()
2594 * VT6212L is found -- the CX700 core itself also contains a USB in quirk_via_cx700_pci_parking_caching()
2595 * host controller with the same PCI ID as the VT6212L. in quirk_via_cx700_pci_parking_caching()
2604 * p should contain the first (internal) VT6212L -- see if we have in quirk_via_cx700_pci_parking_caching()
2614 /* Turn off PCI Bus Parking */ in quirk_via_cx700_pci_parking_caching()
2617 pci_info(dev, "Disabling VIA CX700 PCI parking\n"); in quirk_via_cx700_pci_parking_caching()
2623 /* Turn off PCI Master read caching */ in quirk_via_cx700_pci_parking_caching()
2626 /* Set PCI Master Bus time-out to "1x16 PCLK" */ in quirk_via_cx700_pci_parking_caching()
2632 pci_info(dev, "Disabling VIA CX700 PCI caching\n"); in quirk_via_cx700_pci_parking_caching()
2658 * DRBs - this is where we expose device 6.
2659 * http://www.x86-secret.com/articles/tweak/pat/patsecrets-2.htm
2701 if (dev->subordinate) { in quirk_disable_msi()
2703 dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MSI; in quirk_disable_msi()
2713 * we use the possible vendor/device IDs of the host bridge for the
2720 apc_bridge = pci_get_slot(host_bridge->bus, PCI_DEVFN(1, 0)); in quirk_amd_780_apc_msi()
2722 if (apc_bridge->device == 0x9602) in quirk_amd_780_apc_msi()
2739 while (pos && ttl--) { in msi_ht_cap_enabled()
2777 pdev = pci_get_slot(dev->bus, 0); in quirk_nvidia_ck804_msi_ht_cap()
2793 while (pos && ttl--) { in ht_enable_msi_mapping()
2814 * The P5N32-SLI motherboards from Asus have a problem with MSI
2823 (strstr(board_name, "P5N32-SLI PREMIUM") || in nvenet_msi_disable()
2824 strstr(board_name, "P5N32-E SLI"))) { in nvenet_msi_disable()
2825 pci_info(dev, "Disabling MSI for MCP55 NIC on P5N32-SLI\n"); in nvenet_msi_disable()
2826 dev->no_msi = 1; in nvenet_msi_disable()
2834 * PCIe spec r6.0 sec 6.1.4.3 says that if MSI/MSI-X is enabled, the device
2839 * INTx and MSI/MSI-X, it is required to disable MSI interrupts to avoid port
2844 dev->no_msi = 1; in pci_quirk_nvidia_tegra_disable_rp_msi()
2934 while (pos && ttl--) { in ht_check_msi_mapping()
2962 dev_no = host_bridge->devfn >> 3; in host_bridge_with_leaf()
2964 dev = pci_get_slot(host_bridge->bus, PCI_DEVFN(i, 0)); in host_bridge_with_leaf()
2968 /* found next host bridge? */ in host_bridge_with_leaf()
3020 dev_no = dev->devfn >> 3; in nv_ht_enable_msi_mapping()
3021 for (i = dev_no; i >= 0; i--) { in nv_ht_enable_msi_mapping()
3022 host_bridge = pci_get_slot(dev->bus, PCI_DEVFN(i, 0)); in nv_ht_enable_msi_mapping()
3057 while (pos && ttl--) { in ht_disable_msi_mapping()
3090 * a non-HyperTransport host bridge. Locate the host bridge. in __nv_msi_ht_cap_quirk()
3092 host_bridge = pci_get_domain_bus_and_slot(pci_domain_nr(dev->bus), 0, in __nv_msi_ht_cap_quirk()
3095 pci_warn(dev, "nv_msi_ht_cap_quirk didn't locate host bridge\n"); in __nv_msi_ht_cap_quirk()
3101 /* Host bridge is to HT */ in __nv_msi_ht_cap_quirk()
3116 /* Host bridge is not to HT, disable HT MSI mapping on this device */ in __nv_msi_ht_cap_quirk()
3139 dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG; in quirk_msi_intx_disable_bug()
3148 * we need check PCI REVISION ID of SMBus controller to get SB700 in quirk_msi_intx_disable_ati_bug()
3156 if ((p->revision < 0x3B) && (p->revision >= 0x30)) in quirk_msi_intx_disable_ati_bug()
3157 dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG; in quirk_msi_intx_disable_ati_bug()
3164 if (dev->revision < 0x18) { in quirk_msi_intx_disable_qca_bug()
3166 dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG; in quirk_msi_intx_disable_qca_bug()
3230 * Amazon's Annapurna Labs 1c36:0031 Root Ports don't support MSI-X, so it
3234 * tested), since currently there is no standard way to disable only MSI-X.
3241 dev->no_msi = 1; in quirk_al_msi_disable()
3242 pci_warn(dev, "Disabling MSI/MSI-X\n"); in quirk_al_msi_disable()
3249 * Allow manual resource allocation for PCI hotplug bridges via
3250 * pci=hpmemsize=nnM and pci=hpiosize=nnM parameters. For some PCI-PCI
3252 * allocate resources when hotplug device is inserted and PCI bus is
3257 dev->is_hotplug_bridge = 1; in quirk_hotplug_bridge()
3272 * controllers (and PCI functions). The Linux SDHCI driver supports MMC
3274 * MMC controller - so the SDHCI driver never sees them.
3278 * case that the relevant PCI registers to deactivate the MMC controller
3279 * live on PCI function 0, which might be the CardBus controller or the
3283 * other PCI functions shift up one level, e.g. function #2 becomes function
3284 * #1, and this will confuse the PCI core.
3298 if (PCI_FUNC(dev->devfn)) in ricoh_mmc_fixup_rl5c476()
3329 if (PCI_FUNC(dev->devfn)) in ricoh_mmc_fixup_r5c832()
3336 * 0x150 - SD2.0 mode enable for changing base clock in ricoh_mmc_fixup_r5c832()
3338 * 0xe1 - Base clock frequency in ricoh_mmc_fixup_r5c832()
3339 * 0x32 - 50Mhz new clock frequency in ricoh_mmc_fixup_r5c832()
3340 * 0xf9 - Key register for 0x150 in ricoh_mmc_fixup_r5c832()
3341 * 0xfc - key register for 0xe1 in ricoh_mmc_fixup_r5c832()
3343 if (dev->device == PCI_DEVICE_ID_RICOH_R5CE822 || in ricoh_mmc_fixup_r5c832()
3344 dev->device == PCI_DEVICE_ID_RICOH_R5CE823) { in ricoh_mmc_fixup_r5c832()
3381 * This is a quirk for masking VT-d spec-defined errors to platform error
3384 * on the RAS config settings of the platform) when a VT-d fault happens.
3387 * VT-d spec-related errors are already handled by the VT-d OS code, so no
3403 u32 class = dev->class; in fixup_ti816x_class()
3406 dev->class = PCI_CLASS_MULTIMEDIA_VIDEO << 8; in fixup_ti816x_class()
3407 pci_info(dev, "PCI class overridden (%#08x -> %#08x)\n", in fixup_ti816x_class()
3408 class, dev->class); in fixup_ti816x_class()
3419 dev->pcie_mpss = 1; /* 256 bytes */ in fixup_mpss_256()
3434 * coalescing must be disabled. Unfortunately, it cannot be re-enabled because
3470 /* Intel 5000 series memory controllers and ports 2-7 */
3485 /* Intel 5100 series memory controllers and ports 2-7 */
3512 dev->resource[2].end = dev->resource[2].start + ((u64) 1 << val) - 1; in quirk_intel_ntb()
3518 dev->resource[4].end = dev->resource[4].start + ((u64) 1 << val) - 1; in quirk_intel_ntb()
3527 * and the interrupt ends up -somewhere-.
3540 pci_warn(dev, "igfx quirk: Can't iomap PCI device\n"); in disable_igfx_irq()
3562 * PCI devices which are on Intel chips can skip the 10ms delay
3567 dev->d3hot_delay = 0; in quirk_remove_d3hot_delay()
3573 /* Lynxpoint-H PCH devices do not need 10ms d3hot_delay */
3603 dev->broken_intx_masking = 1; in quirk_broken_intx_masking()
3607 DECLARE_PCI_FIXUP_FINAL(0x1814, 0x0601, /* Ralink RT2800 802.11n PCI */
3613 * Realtek RTL8169 PCI Gigabit Ethernet Controller (rev 10)
3614 * Subsystem: Realtek RTL8169/8110 Family PCI Gigabit Ethernet NIC
3616 * RTL8110SC - Fails under PCI device assignment using DisINTx masking.
3623 * DisINTx can be set but the interrupt status bit is non-functional.
3663 * Check ConnectX-4/LX FW version to see if it supports legacy interrupts.
3679 if (pdev->device == mellanox_broken_intx_devs[i]) { in mellanox_check_broken_intx_masking()
3680 pdev->broken_intx_masking = 1; in mellanox_check_broken_intx_masking()
3686 * Getting here means Connect-IB cards and up. Connect-IB has no INTx in mellanox_check_broken_intx_masking()
3689 if (pdev->device == PCI_DEVICE_ID_MELLANOX_CONNECTIB) in mellanox_check_broken_intx_masking()
3692 if (pdev->device != PCI_DEVICE_ID_MELLANOX_CONNECTX4 && in mellanox_check_broken_intx_masking()
3693 pdev->device != PCI_DEVICE_ID_MELLANOX_CONNECTX4_LX) in mellanox_check_broken_intx_masking()
3696 /* For ConnectX-4 and ConnectX-4LX, need to check FW support */ in mellanox_check_broken_intx_masking()
3704 pci_warn(pdev, "Can't map ConnectX-4 initialization segment\n"); in mellanox_check_broken_intx_masking()
3716 …pci_warn(pdev, "ConnectX-4: FW %u.%u.%u doesn't support INTx masking, disabling. Please upgrade FW… in mellanox_check_broken_intx_masking()
3717 fw_major, fw_minor, fw_subminor, pdev->device == in mellanox_check_broken_intx_masking()
3719 pdev->broken_intx_masking = 1; in mellanox_check_broken_intx_masking()
3732 dev->dev_flags |= PCI_DEV_FLAGS_NO_BUS_RESET; in quirk_no_bus_reset()
3741 if ((dev->device & 0xffc0) == 0x2340) in quirk_nvidia_no_bus_reset()
3749 * The device will throw a Link Down error on AER-capable systems and
3784 if (!pci_is_root_bus(dev->bus)) in quirk_no_pm_reset()
3785 dev->dev_flags |= PCI_DEV_FLAGS_NO_PM_RESET; in quirk_no_pm_reset()
3789 * Some AMD/ATI GPUS (HD8570 - Oland) report that a D3hot->D0 transition
3790 * causes a reset (i.e., they advertise NoSoftRst-). This transition seems
3800 * Spectrum-{1,2,3,4} devices report that a D3hot->D0 transition causes a reset
3801 * (i.e., they advertise NoSoftRst-). However, this transition does not have
3819 if (pdev->is_hotplug_bridge && in quirk_thunderbolt_hotplug_msi()
3820 (pdev->device != PCI_DEVICE_ID_INTEL_CACTUS_RIDGE_4C || in quirk_thunderbolt_hotplug_msi()
3821 pdev->revision <= 1)) in quirk_thunderbolt_hotplug_msi()
3822 pdev->no_msi = 1; in quirk_thunderbolt_hotplug_msi()
3840 * shutdown before suspend. Otherwise the native host interface (NHI) will not
3844 * bridges leading to the NHI and to the tunnel PCI bridges.
3869 bridge = ACPI_HANDLE(&dev->dev); in quirk_apple_poweroff_thunderbolt()
3876 * device ID as those on the host, but they will not have the in quirk_apple_poweroff_thunderbolt()
3900 * Following are device-specific reset methods which can be used to
3901 * reset a single function if other methods (e.g. FLR, PM D0->D3) are
3907 * http://www.intel.com/content/dam/doc/datasheet/82599-10-gbe-controller-datasheet.pdf in reset_intel_82599_sfp_virtfn()
3937 return -ENOMEM; in reset_ivb_igd()
3968 /* Device-specific reset method for Chelsio T4-based adapters */
3975 * If this isn't a Chelsio T4-based device, return -ENOTTY indicating in reset_chelsio_generic_dev()
3976 * that we have no device-specific reset method. in reset_chelsio_generic_dev()
3978 if ((dev->device & 0xf000) != 0x4000) in reset_chelsio_generic_dev()
3979 return -ENOTTY; in reset_chelsio_generic_dev()
4005 * T4 also suffers a Head-Of-Line blocking problem if MSI-X interrupts in reset_chelsio_generic_dev()
4006 * are disabled when an MSI-X interrupt message needs to be delivered. in reset_chelsio_generic_dev()
4007 * So we briefly re-enable MSI-X interrupts for the duration of the in reset_chelsio_generic_dev()
4009 * MSI-X state. in reset_chelsio_generic_dev()
4011 pci_read_config_word(dev, dev->msix_cap+PCI_MSIX_FLAGS, &msix_flags); in reset_chelsio_generic_dev()
4013 pci_write_config_word(dev, dev->msix_cap+PCI_MSIX_FLAGS, in reset_chelsio_generic_dev()
4022 * the original PCI Configuration Space Command word, and return in reset_chelsio_generic_dev()
4036 * FLR where config space reads from the device return -1. We seem to be
4038 * FLR. This quirk is generic for any NVMe class device requiring similar
4043 * Chapter 2: Required and optional PCI config registers
4053 if (dev->class != PCI_CLASS_STORAGE_EXPRESS || in nvme_disable_and_flr()
4055 return -ENOTTY; in nvme_disable_and_flr()
4062 return -ENOTTY; in nvme_disable_and_flr()
4141 /* Device-specific reset method for Huawei Intelligent NIC virtual functions */
4153 return -ENOTTY; in reset_hinic_vf_dev()
4159 return -ENOTTY; in reset_hinic_vf_dev()
4216 * These device-specific reset methods are here rather than in a driver
4217 * because when a host assigns a device to a guest VM, the host may need
4224 for (i = pci_dev_reset_methods; i->reset; i++) { in pci_dev_specific_reset()
4225 if ((i->vendor == dev->vendor || in pci_dev_specific_reset()
4226 i->vendor == (u16)PCI_ANY_ID) && in pci_dev_specific_reset()
4227 (i->device == dev->device || in pci_dev_specific_reset()
4228 i->device == (u16)PCI_ANY_ID)) in pci_dev_specific_reset()
4229 return i->reset(dev, probe); in pci_dev_specific_reset()
4232 return -ENOTTY; in pci_dev_specific_reset()
4237 if (PCI_FUNC(dev->devfn) != 0) in quirk_dma_func0_alias()
4238 pci_add_dma_alias(dev, PCI_DEVFN(PCI_SLOT(dev->devfn), 0), 1); in quirk_dma_func0_alias()
4251 if (PCI_FUNC(dev->devfn) != 1) in quirk_dma_func1_alias()
4252 pci_add_dma_alias(dev, PCI_DEVFN(PCI_SLOT(dev->devfn), 1), 1); in quirk_dma_func1_alias()
4310 DECLARE_PCI_FIXUP_HEADER(0x1c28, /* Lite-On */
4320 * processor. To software, this appears as a PCIe-to-PCI/X bridge with a
4324 * controller supports private devices, which can be hidden from PCI config
4345 pci_add_dma_alias(dev, id->driver_data, 1); in quirk_fixed_dma_alias()
4350 * A few PCIe-to-PCI bridges fail to expose a PCIe capability, resulting in
4355 * is for a non-root, non-PCIe bridge where the upstream device is PCIe and
4356 * is not a PCIe-to-PCI bridge, then @pdev is actually a PCIe-to-PCI bridge.
4360 if (!pci_is_root_bus(pdev->bus) && in quirk_use_pcie_bridge_dma_alias()
4361 pdev->hdr_type == PCI_HEADER_TYPE_BRIDGE && in quirk_use_pcie_bridge_dma_alias()
4362 !pci_is_pcie(pdev) && pci_is_pcie(pdev->bus->self) && in quirk_use_pcie_bridge_dma_alias()
4363 pci_pcie_type(pdev->bus->self) != PCI_EXP_TYPE_PCI_BRIDGE) in quirk_use_pcie_bridge_dma_alias()
4364 pdev->dev_flags |= PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS; in quirk_use_pcie_bridge_dma_alias()
4381 * when IOMMU is enabled. Following devfns have to match RIT-LUT table
4394 * Intel Visual Compute Accelerator (VCA) is a family of PCIe add-in devices
4399 * host memory. These aliases mark the whole VCA device as one IOMMU
4403 * what slot is used on other side. This quirk is intended for both host
4429 pdev->dev_flags |= PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT; in quirk_bridge_cavm_thrx2_pcie_root()
4437 * Intersil/Techwell TW686[4589]-based video capture cards have an empty (zero)
4442 u32 class = pdev->class; in quirk_tw686x_class()
4445 pdev->class = (PCI_CLASS_MULTIMEDIA_OTHER << 8) | 0x01; in quirk_tw686x_class()
4446 pci_info(pdev, "TW686x PCI class overridden (%#08x -> %#08x)\n", in quirk_tw686x_class()
4447 class, pdev->class); in quirk_tw686x_class()
4465 dev->dev_flags |= PCI_DEV_FLAGS_NO_RELAXED_ORDERING; in quirk_relaxedordering_disable()
4536 * outlined in Section 2.4.1 (PCI Express(r) Base Specification Revision 3.0
4552 * If a non-compliant device generates a completion with a different
4554 * seems non-compliant based on sec 2.3.2), or it may handle it as a
4558 * If the non-compliant device generates completions with zero attributes
4580 dev_name(&pdev->dev)); in quirk_disable_root_port_attributes()
4595 * PFs. PF[0..3] have PCI Device IDs of 0x50xx, but PF4 is uniquely in quirk_chelsio_T5_disable_root_port_attributes()
4598 if ((pdev->device & 0xff00) == 0x5400) in quirk_chelsio_T5_disable_root_port_attributes()
4605 * pci_acs_ctrl_enabled - compare desired ACS controls with those provided
4623 * AMD has indicated that the devices below do not support peer-to-peer
4626 * peer-to-peer between functions can claim to support a subset of ACS.
4638 * 1002:439d SB7x0/SB8x0/SB9x0 LPC host controller
4639 * 1002:4384 SBx00 PCI to PCI Bridge
4644 * 1022:780f [AMD] FCH PCI Bridge
4654 if (!dev->multifunction || !pci_is_root_bus(dev->bus)) in pci_quirk_amd_sb_acs()
4655 return -ENODEV; in pci_quirk_amd_sb_acs()
4660 return -ENODEV; in pci_quirk_amd_sb_acs()
4669 return -ENODEV; in pci_quirk_amd_sb_acs()
4678 switch (dev->device) { in pci_quirk_cavium_acs_match()
4695 return -ENOTTY; in pci_quirk_cavium_acs()
4712 * X-Gene Root Ports matching this quirk do not allow peer-to-peer in pci_quirk_xgene_acs()
4722 * But the implementation could block peer-to-peer transactions between them
4723 * and provide ACS-like functionality.
4730 return -ENOTTY; in pci_quirk_zhaoxin_pcie_ports_acs()
4736 switch (dev->device) { in pci_quirk_zhaoxin_pcie_ports_acs()
4748 * Many Intel PCH Root Ports do provide ACS-like features to disable peer
4763 /* Lynxpoint-H PCH */
4766 /* Lynxpoint-LP PCH */
4785 /* Filter out a few obvious non-matches first */ in pci_quirk_intel_pch_acs_match()
4790 if (pci_quirk_intel_pch_acs_ids[i] == dev->device) in pci_quirk_intel_pch_acs_match()
4799 return -ENOTTY; in pci_quirk_intel_pch_acs()
4801 if (dev->dev_flags & PCI_DEV_FLAGS_ACS_ENABLED_QUIRK) in pci_quirk_intel_pch_acs()
4809 * These QCOM Root Ports do provide ACS-like features to disable peer
4813 * Hardware doesn't support peer-to-peer and each Root Port is a Root
4839 return -ENOTTY; in pci_quirk_al_acs()
4843 * but do include ACS-like functionality. The hardware doesn't support in pci_quirk_al_acs()
4844 * peer-to-peer transactions via the root port and each has a unique in pci_quirk_al_acs()
4861 * dword accesses to them. This applies to the following PCI Device IDs, as
4864 * 0xa110-0xa11f Sunrise Point-H PCI Express Root Port #{0-16}
4865 * 0xa167-0xa16a Sunrise Point-H PCI Express Root Port #{17-20}
4873 * Hub, Specification Update, January 2017, Revision 001, Document# 335194-001,
4874 * Errata 22)[4]. Per the datasheet[5], root port PCI Device IDs for this
4877 * 0xa290-0xa29f PCI Express Root port #{0-16}
4878 * 0xa2e7-0xa2ee PCI Express Root port #{17-24}
4884 * August 2017, Revision 002, Document#: 334660-002)[6]
4887 * Quad Core Platforms, Vol 1 of 2, August 2017, Document#: 334658-003)[7]
4889 * 0x9d10-0x9d1b PCI Express Root port #{1-12}
4891 * [1] https://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-2.html
4892 * [2] https://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-1.html
4893 * [3] https://www.intel.com/content/www/us/en/chipsets/100-series-chipset-spec-update.html
4894 * [4] https://www.intel.com/content/www/us/en/chipsets/200-series-chipset-pch-spec-update.html
4895 * [5] https://www.intel.com/content/www/us/en/chipsets/200-series-chipset-pch-datasheet-vol-1.html
4896 …ww.intel.com/content/www/us/en/processors/core/7th-gen-core-family-mobile-u-y-processor-lines-i-o-…
4897 …tel.com/content/www/us/en/processors/core/7th-gen-core-family-mobile-u-y-processor-lines-i-o-datas…
4904 switch (dev->device) { in pci_quirk_intel_spt_pch_acs_match()
4922 return -ENOTTY; in pci_quirk_intel_spt_pch_acs()
4924 pos = dev->acs_cap; in pci_quirk_intel_spt_pch_acs()
4926 return -ENOTTY; in pci_quirk_intel_spt_pch_acs()
4943 * in their ACS capability if they support peer-to-peer transactions. in pci_quirk_mf_endpoint_acs()
4945 * perform peer-to-peer with other functions, allowing us to mask out in pci_quirk_mf_endpoint_acs()
4957 * addresses. Refer to Intel VT-d specification, r3.1, sec 3.16, in pci_quirk_rciep_acs()
4958 * "Root-Complex Peer to Peer Considerations". in pci_quirk_rciep_acs()
4961 return -ENOTTY; in pci_quirk_rciep_acs()
4971 * they do not allow peer-to-peer transactions between Root Ports. in pci_quirk_brcm_acs()
4980 * Wangxun 10G/1G NICs have no ACS capability, and on multi-function
4981 * devices, peer-to-peer transactions are not be used between the functions.
4988 switch (dev->device) { in pci_quirk_wangxun_nic_acs()
5061 /* 82571 (Quads omitted due to non-ACS switch) */
5078 { 0x19a2, 0x710, pci_quirk_mf_endpoint_acs }, /* Emulex BE3-R */
5079 { 0x10df, 0x720, pci_quirk_mf_endpoint_acs }, /* Emulex Skyhawk-R */
5082 /* Cavium multi-function devices */
5086 /* APM X-Gene */
5097 /* Broadcom multi-function device */
5105 /* Zhaoxin multi-function devices */
5110 /* LX2xx0A : without security features + CAN-FD */
5114 /* LX2xx0C : security features + CAN-FD */
5126 /* LX2xx2A : without security features + CAN-FD */
5130 /* LX2xx2C : security features + CAN-FD */
5150 * pci_dev_specific_acs_enabled - check whether device provides ACS controls
5151 * @dev: PCI device
5155 * -ENOTTY: No quirk applies to this device; we can't tell whether the
5167 * or control to indicate their support here. Multi-function express in pci_dev_specific_acs_enabled()
5168 * devices which do not allow internal peer-to-peer between functions, in pci_dev_specific_acs_enabled()
5171 for (i = pci_dev_acs_enabled; i->acs_enabled; i++) { in pci_dev_specific_acs_enabled()
5172 if ((i->vendor == dev->vendor || in pci_dev_specific_acs_enabled()
5173 i->vendor == (u16)PCI_ANY_ID) && in pci_dev_specific_acs_enabled()
5174 (i->device == dev->device || in pci_dev_specific_acs_enabled()
5175 i->device == (u16)PCI_ANY_ID)) { in pci_dev_specific_acs_enabled()
5176 ret = i->acs_enabled(dev, acs_flags); in pci_dev_specific_acs_enabled()
5182 return -ENOTTY; in pci_dev_specific_acs_enabled()
5194 /* Backbone Peer Non-Posted Disable */
5214 pci_bus_read_config_dword(dev->bus, PCI_DEVFN(31, 0), in pci_quirk_enable_intel_lpc_acs()
5217 return -EINVAL; in pci_quirk_enable_intel_lpc_acs()
5222 return -ENOMEM; in pci_quirk_enable_intel_lpc_acs()
5226 * therefore read-only. If both posted and non-posted peer cycles are in pci_quirk_enable_intel_lpc_acs()
5257 * equivalent of PCI ACS Source Validation (PCI_ACS_SV), which in pci_quirk_enable_intel_rp_mpc_acs()
5274 * if dev->external_facing || dev->untrusted
5279 return -ENOTTY; in pci_quirk_enable_intel_pch_acs()
5288 dev->dev_flags |= PCI_DEV_FLAGS_ACS_ENABLED_QUIRK; in pci_quirk_enable_intel_pch_acs()
5301 return -ENOTTY; in pci_quirk_enable_intel_spt_pch_acs()
5303 pos = dev->acs_cap; in pci_quirk_enable_intel_spt_pch_acs()
5305 return -ENOTTY; in pci_quirk_enable_intel_spt_pch_acs()
5315 if (pci_ats_disabled() || dev->external_facing || dev->untrusted) in pci_quirk_enable_intel_spt_pch_acs()
5331 return -ENOTTY; in pci_quirk_disable_intel_spt_pch_acs_redir()
5333 pos = dev->acs_cap; in pci_quirk_disable_intel_spt_pch_acs_redir()
5335 return -ENOTTY; in pci_quirk_disable_intel_spt_pch_acs_redir()
5371 if ((p->vendor == dev->vendor || in pci_dev_specific_enable_acs()
5372 p->vendor == (u16)PCI_ANY_ID) && in pci_dev_specific_enable_acs()
5373 (p->device == dev->device || in pci_dev_specific_enable_acs()
5374 p->device == (u16)PCI_ANY_ID) && in pci_dev_specific_enable_acs()
5375 p->enable_acs) { in pci_dev_specific_enable_acs()
5376 ret = p->enable_acs(dev); in pci_dev_specific_enable_acs()
5382 return -ENOTTY; in pci_dev_specific_enable_acs()
5392 if ((p->vendor == dev->vendor || in pci_dev_specific_disable_acs_redir()
5393 p->vendor == (u16)PCI_ANY_ID) && in pci_dev_specific_disable_acs_redir()
5394 (p->device == dev->device || in pci_dev_specific_disable_acs_redir()
5395 p->device == (u16)PCI_ANY_ID) && in pci_dev_specific_disable_acs_redir()
5396 p->disable_acs_redir) { in pci_dev_specific_disable_acs_redir()
5397 ret = p->disable_acs_redir(dev); in pci_dev_specific_disable_acs_redir()
5403 return -ENOTTY; in pci_dev_specific_disable_acs_redir()
5407 * The PCI capabilities list for Intel DH895xCC VFs (device ID 0x0443) with
5421 if (pdev->pcie_cap || pci_find_capability(pdev, PCI_CAP_ID_EXP)) in quirk_intel_qat_vf_cap()
5441 * Open-code some of set_pcie_port_type() and pci_cfg_space_size_ext() in quirk_intel_qat_vf_cap()
5454 pdev->pcie_cap = pos; in quirk_intel_qat_vf_cap()
5456 pdev->pcie_flags_reg = reg16; in quirk_intel_qat_vf_cap()
5458 pdev->pcie_mpss = reg16 & PCI_EXP_DEVCAP_PAYLOAD; in quirk_intel_qat_vf_cap()
5460 pdev->cfg_size = PCI_CFG_SPACE_EXP_SIZE; in quirk_intel_qat_vf_cap()
5463 pdev->cfg_size = PCI_CFG_SPACE_SIZE; in quirk_intel_qat_vf_cap()
5473 state->cap.cap_nr = PCI_CAP_ID_EXP; in quirk_intel_qat_vf_cap()
5474 state->cap.cap_extended = 0; in quirk_intel_qat_vf_cap()
5475 state->cap.size = size; in quirk_intel_qat_vf_cap()
5476 cap = (u16 *)&state->cap.data[0]; in quirk_intel_qat_vf_cap()
5484 hlist_add_head(&state->next, &pdev->saved_cap_space); in quirk_intel_qat_vf_cap()
5493 * AMD Starship USB 3.0 Host Controller 0x148c
5494 * AMD Matisse USB 3.0 Host Controller 0x149c
5501 dev->dev_flags |= PCI_DEV_FLAGS_NO_FLR_RESET; in quirk_no_flr()
5513 if (dev->revision == 0x1) in quirk_no_flr_snet()
5520 struct pci_host_bridge *bridge = pci_find_host_bridge(pdev->bus); in quirk_no_ext_tags()
5525 bridge->no_ext_tags = 1; in quirk_no_ext_tags()
5528 pci_walk_bus(bridge->bus, pci_configure_extended_tags, NULL); in quirk_no_ext_tags()
5542 pdev->ats_cap = 0; in quirk_no_ats()
5552 if (pdev->device == 0x15d8) { in quirk_amd_harvest_no_ats()
5553 if (pdev->revision == 0xcf && in quirk_amd_harvest_no_ats()
5554 pdev->subsystem_vendor == 0xea50 && in quirk_amd_harvest_no_ats()
5555 (pdev->subsystem_device == 0xce19 || in quirk_amd_harvest_no_ats()
5556 pdev->subsystem_device == 0xcc10 || in quirk_amd_harvest_no_ats()
5557 pdev->subsystem_device == 0xcc08)) in quirk_amd_harvest_no_ats()
5591 if (pdev->revision < 0x20) in quirk_intel_e2000_no_ats()
5609 pdev->no_msi = 1; in quirk_fsl_no_msi()
5614 * Although not allowed by the spec, some multi-function devices have
5627 if (PCI_FUNC(pdev->devfn) != consumer) in pci_create_device_link()
5630 supplier_pdev = pci_get_domain_bus_and_slot(pci_domain_nr(pdev->bus), in pci_create_device_link()
5631 pdev->bus->number, in pci_create_device_link()
5632 PCI_DEVFN(PCI_SLOT(pdev->devfn), supplier)); in pci_create_device_link()
5633 if (!supplier_pdev || (supplier_pdev->class >> class_shift) != class) { in pci_create_device_link()
5638 if (device_link_add(&pdev->dev, &supplier_pdev->dev, in pci_create_device_link()
5646 pm_runtime_allow(&pdev->dev); in pci_create_device_link()
5666 * Create device link for GPUs with integrated USB xHCI Host
5679 * Create device link for GPUs with integrated Type-C UCSI controller
5680 * to VGA. Currently there is no class code defined for UCSI device over PCI
5682 * over PCI gets a class code.
5706 if (gpu->device < PCI_DEVICE_ID_NVIDIA_GEFORCE_320M) in quirk_nvidia_hda()
5717 /* The GPU becomes a multi-function device when the HDA is enabled */ in quirk_nvidia_hda()
5719 gpu->multifunction = FIELD_GET(PCI_HEADER_TYPE_MFD, hdr_type); in quirk_nvidia_hda()
5730 * Validation. Here's the text of IDT 89H32H8G3-YC, erratum #36:
5732 * Item #36 - Downstream port applies ACS Source Validation to Completions
5733 * Section 6.12.1.1 of the PCI Express Base Specification 3.1 states that
5745 * write, so we do config reads until we receive a non-Config Request Retry
5756 struct pci_dev *bridge = bus->self; in pci_idt_bus_quirk()
5758 pos = bridge->acs_cap; in pci_idt_bus_quirk()
5770 /* Write Vendor ID (read-only) so the endpoint latches its bus/dev */ in pci_idt_bus_quirk()
5774 /* Re-enable ACS_SV if it was previously enabled */ in pci_idt_bus_quirk()
5784 * originating Requester ID TLPs which access host memory on peer NTB
5814 partition = ioread8(&mmio_ntb->partition_id); in quirk_switchtec_ntb_dma_alias()
5816 partition_map = ioread32(&mmio_ntb->ep_map); in quirk_switchtec_ntb_dma_alias()
5817 partition_map |= ((u64) ioread32(&mmio_ntb->ep_map + 4)) << 32; in quirk_switchtec_ntb_dma_alias()
5832 table_sz = ioread16(&mmio_peer_ctrl->req_id_table_size); in quirk_switchtec_ntb_dma_alias()
5849 rid_entry = ioread32(&mmio_peer_ctrl->req_id_table[te]); in quirk_switchtec_ntb_dma_alias()
5995 if (pdev->subsystem_vendor != PCI_VENDOR_ID_LENOVO || in quirk_reset_lenovo_thinkpad_p50_nvgpu()
5996 pdev->subsystem_device != 0x222e || in quirk_reset_lenovo_thinkpad_p50_nvgpu()
6039 dev->pme_support &= ~(PCI_PM_CAP_PME_D0 >> PCI_PM_CAP_PME_SHIFT); in pci_fixup_no_d0_pme()
6051 * 7.3.27, 7.3.29-7.3.31.
6057 dev->no_msi = 1; in pci_fixup_no_msi_no_pme()
6060 dev->pme_support = 0; in pci_fixup_no_msi_no_pme()
6067 pdev->class = (PCI_CLASS_SYSTEM_OTHER << 8) | pdev->class; in apex_pci_fixup_class()
6073 * Pericom PI7C9X2G404/PI7C9X2G304/PI7C9X2G303 switch erratum E5 -
6093 if (!pdev->acs_cap) in pci_fixup_pericom_acs_store_forward()
6095 pci_read_config_word(pdev, pdev->acs_cap + PCI_ACS_CTRL, &val); in pci_fixup_pericom_acs_store_forward()
6105 pci_info(upstream, "Setting PI7C9X2Gxxx store-forward mode to avoid ACS erratum\n"); in pci_fixup_pericom_acs_store_forward()
6129 pdev->dev_flags |= PCI_DEV_FLAGS_HAS_MSI_MASKING; in nvidia_ion_ahci_fixup()
6136 dev->rom_bar_overlap = 1; in rom_bar_overlap_defect()
6153 u32 l1_lat = FIELD_GET(PCI_EXP_DEVCAP_L1, dev->devcap); in aspm_l1_acceptable_latency()
6156 dev->devcap |= FIELD_PREP(PCI_EXP_DEVCAP_L1, 7); in aspm_l1_acceptable_latency()
6209 dev->dpc_rp_log_size = 4; in dpc_log_size()
6231 * For a PCI device with multiple downstream devices, its driver may use
6233 * To overlay the flattened device tree, the PCI device and all its ancestor
6250 pdev->d3cold_delay = 1000; in pci_fixup_d3cold_delay_1sec()