Lines Matching +full:pci +full:- +full:domain
1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/pci.h>
8 #include <linux/pci-acpi.h>
39 printk(KERN_INFO "PCI: %s detected: ignoring ACPI _SEG\n", id->ident); in set_ignore_seg()
58 .ident = "ASRock ALiveSATA2-GLAN",
60 DMI_MATCH(DMI_PRODUCT_NAME, "ALiveSATA2-GLAN"),
67 .ident = "ASUS M2V-MX SE",
70 DMI_MATCH(DMI_BOARD_NAME, "M2V-MX SE"),
77 .ident = "MSI MS-7253",
79 DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
80 DMI_MATCH(DMI_BOARD_NAME, "MS-7253"),
84 /* https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/931368 */
85 /* https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1033299 */
88 .ident = "Foxconn K8M890-8237A",
91 DMI_MATCH(DMI_BOARD_NAME, "K8M890-8237A"),
124 DMI_MATCH(DMI_PRODUCT_NAME, "X8DTH-i/6/iF/6F"),
134 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
151 * If the user specifies "pci=use_crs" or "pci=nocrs" explicitly, that in pci_acpi_crs_quirks()
159 printk(KERN_INFO "PCI: %s host bridge windows from ACPI; " in pci_acpi_crs_quirks()
160 "if necessary, use \"pci=%s\" and report a bug\n", in pci_acpi_crs_quirks()
170 "%s can't access PCI configuration " in check_segment()
173 return -EIO; in check_segment()
182 "%s can't access extended PCI configuration " in check_segment()
193 struct acpi_pci_root *root = ci->root; in setup_mcfg_map()
194 struct device *dev = &ci->bridge->dev; in setup_mcfg_map()
197 info->start_bus = (u8)root->secondary.start; in setup_mcfg_map()
198 info->end_bus = (u8)root->secondary.end; in setup_mcfg_map()
199 info->mcfg_added = false; in setup_mcfg_map()
200 seg = info->sd.domain; in setup_mcfg_map()
209 result = pci_mmconfig_insert(dev, seg, info->start_bus, info->end_bus, in setup_mcfg_map()
210 root->mcfg_addr); in setup_mcfg_map()
215 info->mcfg_added = true; in setup_mcfg_map()
216 } else if (result != -EEXIST) in setup_mcfg_map()
228 if (info->mcfg_added) { in teardown_mcfg_map()
229 pci_mmconfig_delete(info->sd.domain, in teardown_mcfg_map()
230 info->start_bus, info->end_bus); in teardown_mcfg_map()
231 info->mcfg_added = false; in teardown_mcfg_map()
247 int busnum = root->secondary.start; in pci_acpi_root_get_node()
248 struct acpi_device *device = root->device; in pci_acpi_root_get_node()
249 int node = acpi_get_node(device->handle); in pci_acpi_root_get_node()
254 …dev_info(&device->dev, FW_BUG "no _PXM; falling back to node %d from hardware (may be inconsistent… in pci_acpi_root_get_node()
275 * An IO port or MMIO resource assigned to a PCI host bridge may be
283 * IO port [0xCF8-0xCFF] is consumed by the host bridge itself
284 * to access PCI configuration space.
286 * So explicitly filter out PCI CFG IO ports[0xCF8-0xCFF].
290 return (res->flags & IORESOURCE_IO) && in resource_is_pcicfg_ioport()
291 res->start == 0xCF8 && res->end == 0xCFF; in resource_is_pcicfg_ioport()
296 struct acpi_device *device = ci->bridge; in pci_acpi_root_prepare_resources()
297 int busnum = ci->root->secondary.start; in pci_acpi_root_prepare_resources()
303 resource_list_for_each_entry_safe(entry, tmp, &ci->resources) in pci_acpi_root_prepare_resources()
304 if (resource_is_pcicfg_ioport(entry->res)) in pci_acpi_root_prepare_resources()
309 resource_list_for_each_entry_safe(entry, tmp, &ci->resources) { in pci_acpi_root_prepare_resources()
310 dev_printk(KERN_DEBUG, &device->dev, in pci_acpi_root_prepare_resources()
311 "host bridge window %pR (ignored)\n", entry->res); in pci_acpi_root_prepare_resources()
314 x86_pci_root_bus_resources(busnum, &ci->resources); in pci_acpi_root_prepare_resources()
328 int domain = root->segment; in pci_acpi_scan_root() local
329 int busnum = root->secondary.start; in pci_acpi_scan_root()
334 root->segment = domain = 0; in pci_acpi_scan_root()
336 if (domain && !pci_domains_supported) { in pci_acpi_scan_root()
339 domain, busnum); in pci_acpi_scan_root()
343 bus = pci_find_bus(domain, busnum); in pci_acpi_scan_root()
347 * its bus->sysdata. in pci_acpi_scan_root()
350 .domain = domain, in pci_acpi_scan_root()
352 .companion = root->device in pci_acpi_scan_root()
355 memcpy(bus->sysdata, &sd, sizeof(sd)); in pci_acpi_scan_root()
361 dev_err(&root->device->dev, in pci_acpi_scan_root()
363 domain, busnum); in pci_acpi_scan_root()
365 info->sd.domain = domain; in pci_acpi_scan_root()
366 info->sd.node = node; in pci_acpi_scan_root()
367 info->sd.companion = root->device; in pci_acpi_scan_root()
369 &info->common, &info->sd); in pci_acpi_scan_root()
373 /* After the PCI-E bus has been walked and all devices discovered, in pci_acpi_scan_root()
378 list_for_each_entry(child, &bus->children, node) in pci_acpi_scan_root()
393 if (!bridge->dev.parent) { in pcibios_root_bridge_prepare()
394 struct pci_sysdata *sd = bridge->bus->sysdata; in pcibios_root_bridge_prepare()
395 ACPI_COMPANION_SET(&bridge->dev, sd->companion); in pcibios_root_bridge_prepare()
405 return -ENODEV; in pci_acpi_init()
407 printk(KERN_INFO "PCI: Using ACPI for IRQ routing\n"); in pci_acpi_init()
411 x86_init.pci.init_irq = x86_init_noop; in pci_acpi_init()
415 * PCI IRQ routing is set up by pci_enable_device(), but we in pci_acpi_init()
419 …printk(KERN_INFO "PCI: Routing PCI interrupts for all devices because \"pci=routeirq\" specified\n… in pci_acpi_init()