* [PATCH] x86/PCI: parse additional host bridge window resource types
@ 2010-04-20 19:52 Bjorn Helgaas
2010-04-22 23:17 ` Jesse Barnes
0 siblings, 1 reply; 2+ messages in thread
From: Bjorn Helgaas @ 2010-04-20 19:52 UTC (permalink / raw)
To: Jesse Barnes; +Cc: linux-pci, linux-acpi, linux-kernel, Thomas Renninger
This adds support for Memory24, Memory32, and Memory32Fixed descriptors in
PCI host bridge _CRS.
I experimentally determined that Windows (2008 R2) accepts these descriptors
and treats them as windows that are forwarded to the PCI bus, e.g., if
it finds any PCI devices with BARs outside the windows, it moves them into
the windows.
I don't know whether any machines actually use these descriptors in PCI
host bridge _CRS methods, but if any exist and they're new enough that we
automatically turn on "pci=use_crs", they will work with Windows but not
with Linux.
Here are the details: https://bugzilla.kernel.org/show_bug.cgi?id=15817
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
---
arch/x86/pci/acpi.c | 43 +++++++++++++++++++++++++++++++++++++------
1 files changed, 37 insertions(+), 6 deletions(-)
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
index 334153c..44f83ce 100644
--- a/arch/x86/pci/acpi.c
+++ b/arch/x86/pci/acpi.c
@@ -66,13 +66,44 @@ resource_to_addr(struct acpi_resource *resource,
struct acpi_resource_address64 *addr)
{
acpi_status status;
-
- status = acpi_resource_to_address64(resource, addr);
- if (ACPI_SUCCESS(status) &&
- (addr->resource_type == ACPI_MEMORY_RANGE ||
- addr->resource_type == ACPI_IO_RANGE) &&
- addr->address_length > 0) {
+ struct acpi_resource_memory24 *memory24;
+ struct acpi_resource_memory32 *memory32;
+ struct acpi_resource_fixed_memory32 *fixed_memory32;
+
+ memset(addr, 0, sizeof(*addr));
+ switch (resource->type) {
+ case ACPI_RESOURCE_TYPE_MEMORY24:
+ memory24 = &resource->data.memory24;
+ addr->resource_type = ACPI_MEMORY_RANGE;
+ addr->minimum = memory24->minimum;
+ addr->address_length = memory24->address_length;
+ addr->maximum = addr->minimum + addr->address_length - 1;
+ return AE_OK;
+ case ACPI_RESOURCE_TYPE_MEMORY32:
+ memory32 = &resource->data.memory32;
+ addr->resource_type = ACPI_MEMORY_RANGE;
+ addr->minimum = memory32->minimum;
+ addr->address_length = memory32->address_length;
+ addr->maximum = addr->minimum + addr->address_length - 1;
return AE_OK;
+ case ACPI_RESOURCE_TYPE_FIXED_MEMORY32:
+ fixed_memory32 = &resource->data.fixed_memory32;
+ addr->resource_type = ACPI_MEMORY_RANGE;
+ addr->minimum = fixed_memory32->address;
+ addr->address_length = fixed_memory32->address_length;
+ addr->maximum = addr->minimum + addr->address_length - 1;
+ return AE_OK;
+ case ACPI_RESOURCE_TYPE_ADDRESS16:
+ case ACPI_RESOURCE_TYPE_ADDRESS32:
+ case ACPI_RESOURCE_TYPE_ADDRESS64:
+ status = acpi_resource_to_address64(resource, addr);
+ if (ACPI_SUCCESS(status) &&
+ (addr->resource_type == ACPI_MEMORY_RANGE ||
+ addr->resource_type == ACPI_IO_RANGE) &&
+ addr->address_length > 0) {
+ return AE_OK;
+ }
+ break;
}
return AE_ERROR;
}
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] x86/PCI: parse additional host bridge window resource types
2010-04-20 19:52 [PATCH] x86/PCI: parse additional host bridge window resource types Bjorn Helgaas
@ 2010-04-22 23:17 ` Jesse Barnes
0 siblings, 0 replies; 2+ messages in thread
From: Jesse Barnes @ 2010-04-22 23:17 UTC (permalink / raw)
To: Bjorn Helgaas; +Cc: linux-pci, linux-acpi, linux-kernel, Thomas Renninger
On Tue, 20 Apr 2010 13:52:41 -0600
Bjorn Helgaas <bjorn.helgaas@hp.com> wrote:
>
> This adds support for Memory24, Memory32, and Memory32Fixed descriptors in
> PCI host bridge _CRS.
>
> I experimentally determined that Windows (2008 R2) accepts these descriptors
> and treats them as windows that are forwarded to the PCI bus, e.g., if
> it finds any PCI devices with BARs outside the windows, it moves them into
> the windows.
>
> I don't know whether any machines actually use these descriptors in PCI
> host bridge _CRS methods, but if any exist and they're new enough that we
> automatically turn on "pci=use_crs", they will work with Windows but not
> with Linux.
>
> Here are the details: https://bugzilla.kernel.org/show_bug.cgi?id=15817
>
> Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
> ---
Applied to for-linus, thanks.
--
Jesse Barnes, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-04-22 23:17 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-20 19:52 [PATCH] x86/PCI: parse additional host bridge window resource types Bjorn Helgaas
2010-04-22 23:17 ` Jesse Barnes
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).