Commit 712e6a91 authored by Huacai Chen's avatar Huacai Chen
Browse files

LoongArch: Preserve firmware configuration when desired



If we must preserve the firmware resource assignments, claim the existing
resources rather than reassigning everything.

According to PCI Firmware Specification: if ACPI DSM#5 function returns
0, the OS must retain the resource allocation for PCI in the firmware; if
ACPI DSM#5 function returns 1, the OS can ignore the resource allocation
for PCI and reallocate it.

Signed-off-by: default avatarQihang Gao <gaoqihang@loongson.cn>
Signed-off-by: default avatarJuxin Gao <gaojuxin@loongson.cn>
Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent 52c22661
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -194,6 +194,7 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
{
	struct pci_bus *bus;
	struct pci_root_info *info;
	struct pci_host_bridge *host;
	struct acpi_pci_root_ops *root_ops;
	int domain = root->segment;
	int busnum = root->secondary.start;
@@ -237,8 +238,17 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
			return NULL;
		}

		pci_bus_size_bridges(bus);
		pci_bus_assign_resources(bus);
		/* 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)
			pcie_bus_configure_settings(child);
	}