]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
PCI: Use preserve_config in place of pci_flags
authorVidya Sagar <vidyas@nvidia.com>
Sun, 28 Jul 2024 16:09:36 +0000 (12:09 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Jan 2025 12:24:50 +0000 (13:24 +0100)
[ Upstream commit 7246a4520b4bf1494d7d030166a11b5226f6d508 ]

Use preserve_config in place of checking for PCI_PROBE_ONLY flag to enable
support for "linux,pci-probe-only" on a per host bridge basis.

This also obviates the use of adding PCI_REASSIGN_ALL_BUS flag if
!PCI_PROBE_ONLY, as pci_assign_unassigned_root_bus_resources() takes care
of reassigning the resources that are not already claimed.

Link: https://lore.kernel.org/r/20240508174138.3630283-5-vidyas@nvidia.com
Signed-off-by: Vidya Sagar <vidyas@nvidia.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/pci/controller/pci-host-common.c
drivers/pci/probe.c

index 6ce34a1deecb2cd306f93fbd3b7ed113ef6f5cd7..2525bd0432616e4d987943bcec04a63b37b7908c 100644 (file)
@@ -71,10 +71,6 @@ int pci_host_common_probe(struct platform_device *pdev)
        if (IS_ERR(cfg))
                return PTR_ERR(cfg);
 
-       /* Do not reassign resources if probe only */
-       if (!pci_has_flag(PCI_PROBE_ONLY))
-               pci_add_flags(PCI_REASSIGN_ALL_BUS);
-
        bridge->sysdata = cfg;
        bridge->ops = (struct pci_ops *)&ops->pci_ops;
 
index 02a75f3b59208e1dc52af434858ce5417486f8a1..b0ac721e047dbaaa9b0018aae836ccce65747211 100644 (file)
@@ -3018,20 +3018,18 @@ int pci_host_probe(struct pci_host_bridge *bridge)
 
        bus = bridge->bus;
 
+       /* If we must preserve the resource configuration, claim now */
+       if (bridge->preserve_config)
+               pci_bus_claim_resources(bus);
+
        /*
-        * We insert PCI resources into the iomem_resource and
-        * ioport_resource trees in either pci_bus_claim_resources()
-        * or pci_bus_assign_resources().
+        * Assign whatever was left unassigned. If we didn't claim above,
+        * this will reassign everything.
         */
-       if (pci_has_flag(PCI_PROBE_ONLY)) {
-               pci_bus_claim_resources(bus);
-       } else {
-               pci_bus_size_bridges(bus);
-               pci_bus_assign_resources(bus);
+       pci_assign_unassigned_root_bus_resources(bus);
 
-               list_for_each_entry(child, &bus->children, node)
-                       pcie_bus_configure_settings(child);
-       }
+       list_for_each_entry(child, &bus->children, node)
+               pcie_bus_configure_settings(child);
 
        pci_bus_add_devices(bus);
        return 0;