]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
arm64: PCI: Preserve firmware configuration when desired
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Sat, 15 Jun 2019 00:23:59 +0000 (10:23 +1000)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 21 Jun 2019 23:11:54 +0000 (18:11 -0500)
If we must preserve the firmware resource assignments, claim the existing
resources rather than reassigning everything.

Link: https://lore.kernel.org/r/20190615002359.29577-4-benh@kernel.crashing.org
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
[bhelgaas: commit log]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
arch/arm64/kernel/pci.c

index 1419b1b4e9b9a1c41eb3d9020ffb4c358051b640..16fcb8d7255381e70a390c2375fdcf272d934dd7 100644 (file)
@@ -168,6 +168,7 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
        struct acpi_pci_generic_root_info *ri;
        struct pci_bus *bus, *child;
        struct acpi_pci_root_ops *root_ops;
+       struct pci_host_bridge *host;
 
        ri = kzalloc(sizeof(*ri), GFP_KERNEL);
        if (!ri)
@@ -193,6 +194,15 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
        if (!bus)
                return NULL;
 
+       /* If we must preserve the resource configuration, claim now */
+       host = pci_find_host_bridge(bus);
+       if (host->preserve_config)
+               pci_bus_claim_resources(bus);
+
+       /*
+        * Assign whatever was left unassigned. If we didn't claim above,
+        * this will reassign everything.
+        */
        pci_assign_unassigned_root_bus_resources(bus);
 
        list_for_each_entry(child, &bus->children, node)