Commit 79dba2ea authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6:
  x86/PCI: compute Address Space length rather than using _LEN
  x86/PCI: never allocate PCI MMIO resources below BIOS_END
parents d9e80b7d 48728e07
...@@ -121,30 +121,6 @@ count_resource(struct acpi_resource *acpi_res, void *data) ...@@ -121,30 +121,6 @@ count_resource(struct acpi_resource *acpi_res, void *data)
return AE_OK; return AE_OK;
} }
static void
align_resource(struct acpi_device *bridge, struct resource *res)
{
int align = (res->flags & IORESOURCE_MEM) ? 16 : 4;
/*
* Host bridge windows are not BARs, but the decoders on the PCI side
* that claim this address space have starting alignment and length
* constraints, so fix any obvious BIOS goofs.
*/
if (!IS_ALIGNED(res->start, align)) {
dev_printk(KERN_DEBUG, &bridge->dev,
"host bridge window %pR invalid; "
"aligning start to %d-byte boundary\n", res, align);
res->start &= ~(align - 1);
}
if (!IS_ALIGNED(res->end + 1, align)) {
dev_printk(KERN_DEBUG, &bridge->dev,
"host bridge window %pR invalid; "
"aligning end to %d-byte boundary\n", res, align);
res->end = ALIGN(res->end, align) - 1;
}
}
static acpi_status static acpi_status
setup_resource(struct acpi_resource *acpi_res, void *data) setup_resource(struct acpi_resource *acpi_res, void *data)
{ {
...@@ -154,7 +130,7 @@ setup_resource(struct acpi_resource *acpi_res, void *data) ...@@ -154,7 +130,7 @@ setup_resource(struct acpi_resource *acpi_res, void *data)
acpi_status status; acpi_status status;
unsigned long flags; unsigned long flags;
struct resource *root, *conflict; struct resource *root, *conflict;
u64 start, end, max_len; u64 start, end;
status = resource_to_addr(acpi_res, &addr); status = resource_to_addr(acpi_res, &addr);
if (!ACPI_SUCCESS(status)) if (!ACPI_SUCCESS(status))
...@@ -171,19 +147,8 @@ setup_resource(struct acpi_resource *acpi_res, void *data) ...@@ -171,19 +147,8 @@ setup_resource(struct acpi_resource *acpi_res, void *data)
} else } else
return AE_OK; return AE_OK;
max_len = addr.maximum - addr.minimum + 1;
if (addr.address_length > max_len) {
dev_printk(KERN_DEBUG, &info->bridge->dev,
"host bridge window length %#llx doesn't fit in "
"%#llx-%#llx, trimming\n",
(unsigned long long) addr.address_length,
(unsigned long long) addr.minimum,
(unsigned long long) addr.maximum);
addr.address_length = max_len;
}
start = addr.minimum + addr.translation_offset; start = addr.minimum + addr.translation_offset;
end = start + addr.address_length - 1; end = addr.maximum + addr.translation_offset;
res = &info->res[info->res_num]; res = &info->res[info->res_num];
res->name = info->name; res->name = info->name;
...@@ -191,7 +156,6 @@ setup_resource(struct acpi_resource *acpi_res, void *data) ...@@ -191,7 +156,6 @@ setup_resource(struct acpi_resource *acpi_res, void *data)
res->start = start; res->start = start;
res->end = end; res->end = end;
res->child = NULL; res->child = NULL;
align_resource(info->bridge, res);
if (!pci_use_crs) { if (!pci_use_crs) {
dev_printk(KERN_DEBUG, &info->bridge->dev, dev_printk(KERN_DEBUG, &info->bridge->dev,
......
...@@ -72,6 +72,9 @@ pcibios_align_resource(void *data, const struct resource *res, ...@@ -72,6 +72,9 @@ pcibios_align_resource(void *data, const struct resource *res,
return start; return start;
if (start & 0x300) if (start & 0x300)
start = (start + 0x3ff) & ~0x3ff; start = (start + 0x3ff) & ~0x3ff;
} else if (res->flags & IORESOURCE_MEM) {
if (start < BIOS_END)
start = BIOS_END;
} }
return start; return start;
} }
......
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