]> git.baikalelectronics.ru Git - kernel.git/commit
PCI: convert bus addresses to resource when reading BARs
authorBjorn Helgaas <bhelgaas@google.com>
Fri, 24 Feb 2012 03:19:00 +0000 (20:19 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 24 Feb 2012 03:19:00 +0000 (20:19 -0700)
commitabf165da65c9f73ad6edc90357fdd84fff151619
treedc28c99c694007fca535b906c1044101241abb73
parent64860e0ee70560003e3939b0ccce59f79ffaf3ae
PCI: convert bus addresses to resource when reading BARs

Some PCI host bridges translate CPU addresses to PCI bus addresses.
Previously, we initialized pci_dev resources with PCI bus addresses,
then converted them to CPU addresses later in arch-specific code
(pcibios_fixup_resources()), which leaves a window of time where the
pci_dev resources are incorrect.

This patch adds support in the core for this address translation.
When the arch creates the root bus, it can supply the host bridge
address translation information, and the core can use it to set the
pci_dev resources correctly from the beginning.

This gives us a way to fix the problem that quirks that run between device
discovery and pcibios_fixup_resources() fail because they use pci_dev
resources that haven't been converted.  The reference below is to one
such problem that affected ARM and ia64.

Note that this patch has no effect until an arch starts using
pci_add_resource_offset() with a non-zero offset: before that, all
all host bridge windows have a zero offset and pci_bus_to_resource()
copies the pci_bus_region directly to the struct resource.

Reference: https://lkml.org/lkml/2009/10/12/405
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/probe.c