Commit 8204680c authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

Merge branch 'acpi-resources'

* acpi-resources:
  x86/PCI/ACPI: Relax ACPI resource descriptor checks to work around BIOS bugs
  x86/PCI/ACPI: Ignore resources consumed by host bridge itself
  PCI: versatile: Update for list_for_each_entry() API change
parents 13a7a6ac aa714d28
...@@ -331,7 +331,7 @@ static void probe_pci_root_info(struct pci_root_info *info, ...@@ -331,7 +331,7 @@ static void probe_pci_root_info(struct pci_root_info *info,
struct list_head *list) struct list_head *list)
{ {
int ret; int ret;
struct resource_entry *entry; struct resource_entry *entry, *tmp;
sprintf(info->name, "PCI Bus %04x:%02x", domain, busnum); sprintf(info->name, "PCI Bus %04x:%02x", domain, busnum);
info->bridge = device; info->bridge = device;
...@@ -345,8 +345,13 @@ static void probe_pci_root_info(struct pci_root_info *info, ...@@ -345,8 +345,13 @@ static void probe_pci_root_info(struct pci_root_info *info,
dev_dbg(&device->dev, dev_dbg(&device->dev,
"no IO and memory resources present in _CRS\n"); "no IO and memory resources present in _CRS\n");
else else
resource_list_for_each_entry(entry, list) resource_list_for_each_entry_safe(entry, tmp, list) {
if ((entry->res->flags & IORESOURCE_WINDOW) == 0 ||
(entry->res->flags & IORESOURCE_DISABLED))
resource_list_destroy_entry(entry);
else
entry->res->name = info->name; entry->res->name = info->name;
}
} }
struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
......
...@@ -42,8 +42,10 @@ static bool acpi_dev_resource_len_valid(u64 start, u64 end, u64 len, bool io) ...@@ -42,8 +42,10 @@ static bool acpi_dev_resource_len_valid(u64 start, u64 end, u64 len, bool io)
* CHECKME: len might be required to check versus a minimum * CHECKME: len might be required to check versus a minimum
* length as well. 1 for io is fine, but for memory it does * length as well. 1 for io is fine, but for memory it does
* not make any sense at all. * not make any sense at all.
* Note: some BIOSes report incorrect length for ACPI address space
* descriptor, so remove check of 'reslen == len' to avoid regression.
*/ */
if (len && reslen && reslen == len && start <= end) if (len && reslen && start <= end)
return true; return true;
pr_debug("ACPI: invalid or unassigned resource %s [%016llx - %016llx] length [%016llx]\n", pr_debug("ACPI: invalid or unassigned resource %s [%016llx - %016llx] length [%016llx]\n",
......
...@@ -80,7 +80,7 @@ static int versatile_pci_parse_request_of_pci_ranges(struct device *dev, ...@@ -80,7 +80,7 @@ static int versatile_pci_parse_request_of_pci_ranges(struct device *dev,
if (err) if (err)
return err; return err;
resource_list_for_each_entry(win, res, list) { resource_list_for_each_entry(win, res) {
struct resource *parent, *res = win->res; struct resource *parent, *res = win->res;
switch (resource_type(res)) { switch (resource_type(res)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment