Lines Matching +full:pci +full:- +full:domain

1 // SPDX-License-Identifier: GPL-2.0
3 #define pr_fmt(fmt) "PCI: " fmt
5 #include <linux/pci.h>
11 #include <linux/pci-acpi.h>
43 pr_info("%s detected: ignoring ACPI _SEG\n", id->ident); in set_ignore_seg()
51 id->ident); in set_no_e820()
70 .ident = "ASRock ALiveSATA2-GLAN",
72 DMI_MATCH(DMI_PRODUCT_NAME, "ALiveSATA2-GLAN"),
79 .ident = "ASUS M2V-MX SE",
82 DMI_MATCH(DMI_BOARD_NAME, "M2V-MX SE"),
89 .ident = "MSI MS-7253",
91 DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
92 DMI_MATCH(DMI_BOARD_NAME, "MS-7253"),
96 /* https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/931368 */
97 /* https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1033299 */
100 .ident = "Foxconn K8M890-8237A",
103 DMI_MATCH(DMI_BOARD_NAME, "K8M890-8237A"),
136 DMI_MATCH(DMI_PRODUCT_NAME, "X8DTH-i/6/iF/6F"),
146 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
153 * an E820 reserved region that covers the entire 32-bit host
155 * _CRS means no space is available for hot-added or uninitialized
156 * PCI devices. This typically breaks I2C controllers for touchpads
157 * and hot-added Thunderbolt devices. See the commit log for
170 * The Acer Spin 5 (SP513-54N) has the same E820 reservation covering
171 * the entire _CRS 32-bit window issue as the Lenovo *IIL* models.
176 .ident = "Acer Spin 5 (SP513-54N)",
179 DMI_MATCH(DMI_PRODUCT_NAME, "Spin SP513-54N"),
184 * Clevo X170KM-G barebones have the same E820 reservation covering
185 * the entire _CRS 32-bit window issue as the Lenovo *IIL* models.
190 .ident = "Clevo X170KM-G Barebone",
192 DMI_MATCH(DMI_BOARD_NAME, "X170KM-G"),
207 * hidden PCI device BARs, etc) in PCI host bridge _CRS. This is a in pci_acpi_crs_quirks()
214 * leaving none for hot-added or uninitialized devices. These E820 in pci_acpi_crs_quirks()
216 * clipping by default for post-2022 machines. in pci_acpi_crs_quirks()
218 * We already have quirks to disable clipping for pre-2023 in pci_acpi_crs_quirks()
220 * post-2022 machines that incorrectly include unusable space in in pci_acpi_crs_quirks()
229 * If the user specifies "pci=use_crs" or "pci=nocrs" explicitly, that in pci_acpi_crs_quirks()
237 pr_info("%s host bridge windows from ACPI; if necessary, use \"pci=%s\" and report a bug\n", in pci_acpi_crs_quirks()
241 /* "pci=use_e820"/"pci=no_e820" on the kernel cmdline takes precedence */ in pci_acpi_crs_quirks()
250 pr_info("Please notify linux-pci@vger.kernel.org so future kernels can do this automatically\n"); in pci_acpi_crs_quirks()
259 return -EIO; in check_segment()
277 struct acpi_pci_root *root = ci->root; in setup_mcfg_map()
278 struct device *dev = &ci->bridge->dev; in setup_mcfg_map()
281 info->start_bus = (u8)root->secondary.start; in setup_mcfg_map()
282 info->end_bus = (u8)root->secondary.end; in setup_mcfg_map()
283 info->mcfg_added = false; in setup_mcfg_map()
284 seg = info->sd.domain; in setup_mcfg_map()
287 &root->secondary, &root->mcfg_addr); in setup_mcfg_map()
296 result = pci_mmconfig_insert(dev, seg, info->start_bus, info->end_bus, in setup_mcfg_map()
297 root->mcfg_addr); in setup_mcfg_map()
302 info->mcfg_added = true; in setup_mcfg_map()
303 } else if (result != -EEXIST) in setup_mcfg_map()
315 if (info->mcfg_added) { in teardown_mcfg_map()
316 pci_mmconfig_delete(info->sd.domain, in teardown_mcfg_map()
317 info->start_bus, info->end_bus); in teardown_mcfg_map()
318 info->mcfg_added = false; in teardown_mcfg_map()
334 int busnum = root->secondary.start; in pci_acpi_root_get_node()
335 struct acpi_device *device = root->device; in pci_acpi_root_get_node()
336 int node = acpi_get_node(device->handle); in pci_acpi_root_get_node()
341 …dev_info(&device->dev, FW_BUG "no _PXM; falling back to node %d from hardware (may be inconsistent… in pci_acpi_root_get_node()
362 * An IO port or MMIO resource assigned to a PCI host bridge may be
370 * IO port [0xCF8-0xCFF] is consumed by the host bridge itself
371 * to access PCI configuration space.
373 * So explicitly filter out PCI CFG IO ports[0xCF8-0xCFF].
377 return (res->flags & IORESOURCE_IO) && in resource_is_pcicfg_ioport()
378 res->start == 0xCF8 && res->end == 0xCFF; in resource_is_pcicfg_ioport()
383 struct acpi_device *device = ci->bridge; in pci_acpi_root_prepare_resources()
384 int busnum = ci->root->secondary.start; in pci_acpi_root_prepare_resources()
391 resource_list_for_each_entry_safe(entry, tmp, &ci->resources) in pci_acpi_root_prepare_resources()
392 if (resource_is_pcicfg_ioport(entry->res)) in pci_acpi_root_prepare_resources()
397 resource_list_for_each_entry_safe(entry, tmp, &ci->resources) { in pci_acpi_root_prepare_resources()
398 dev_printk(KERN_DEBUG, &device->dev, in pci_acpi_root_prepare_resources()
399 "host bridge window %pR (ignored)\n", entry->res); in pci_acpi_root_prepare_resources()
402 x86_pci_root_bus_resources(busnum, &ci->resources); in pci_acpi_root_prepare_resources()
416 int domain = root->segment; in pci_acpi_scan_root() local
417 int busnum = root->secondary.start; in pci_acpi_scan_root()
422 root->segment = domain = 0; in pci_acpi_scan_root()
424 if (domain && !pci_domains_supported) { in pci_acpi_scan_root()
426 domain, busnum); in pci_acpi_scan_root()
430 bus = pci_find_bus(domain, busnum); in pci_acpi_scan_root()
434 * its bus->sysdata. in pci_acpi_scan_root()
437 .domain = domain, in pci_acpi_scan_root()
439 .companion = root->device in pci_acpi_scan_root()
442 memcpy(bus->sysdata, &sd, sizeof(sd)); in pci_acpi_scan_root()
448 dev_err(&root->device->dev, in pci_acpi_scan_root()
450 domain, busnum); in pci_acpi_scan_root()
452 info->sd.domain = domain; in pci_acpi_scan_root()
453 info->sd.node = node; in pci_acpi_scan_root()
454 info->sd.companion = root->device; in pci_acpi_scan_root()
456 &info->common, &info->sd); in pci_acpi_scan_root()
460 /* After the PCI-E bus has been walked and all devices discovered, in pci_acpi_scan_root()
465 list_for_each_entry(child, &bus->children, node) in pci_acpi_scan_root()
480 if (!bridge->dev.parent) { in pcibios_root_bridge_prepare()
481 struct pci_sysdata *sd = bridge->bus->sysdata; in pcibios_root_bridge_prepare()
482 ACPI_COMPANION_SET(&bridge->dev, sd->companion); in pcibios_root_bridge_prepare()
492 return -ENODEV; in pci_acpi_init()
498 x86_init.pci.init_irq = x86_init_noop; in pci_acpi_init()
502 * PCI IRQ routing is set up by pci_enable_device(), but we in pci_acpi_init()
506 pr_info("Routing PCI interrupts for all devices because \"pci=routeirq\" specified\n"); in pci_acpi_init()