powerpc/PCI: compute I/O space bus-to-resource offset consistently
Make sure we compute CPU addresses (resource start/end) the same way both
when we set up the I/O aperture (hose->io_resource) and when we use
pcibios_bus_to_resource() to convert BAR values into resources.
This fixes a build failure ("cast from pointer to integer of different
size" in configs where resource_size_t is 64 bits but pointers are 32 bits)
I introduced in 6c5705fec6
.
Acked-By: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
committed by
Jesse Barnes
parent
d85c6d97d3
commit
38973ba790
@@ -182,6 +182,7 @@ extern void pci_resource_to_user(const struct pci_dev *dev, int bar,
|
|||||||
const struct resource *rsrc,
|
const struct resource *rsrc,
|
||||||
resource_size_t *start, resource_size_t *end);
|
resource_size_t *start, resource_size_t *end);
|
||||||
|
|
||||||
|
extern resource_size_t pcibios_io_space_offset(struct pci_controller *hose);
|
||||||
extern void pcibios_setup_bus_devices(struct pci_bus *bus);
|
extern void pcibios_setup_bus_devices(struct pci_bus *bus);
|
||||||
extern void pcibios_setup_bus_self(struct pci_bus *bus);
|
extern void pcibios_setup_bus_self(struct pci_bus *bus);
|
||||||
extern void pcibios_setup_phb_io_space(struct pci_controller *hose);
|
extern void pcibios_setup_phb_io_space(struct pci_controller *hose);
|
||||||
|
@@ -1492,6 +1492,11 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
|
|||||||
return pci_enable_resources(dev, mask);
|
return pci_enable_resources(dev, mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource_size_t pcibios_io_space_offset(struct pci_controller *hose)
|
||||||
|
{
|
||||||
|
return (unsigned long) hose->io_base_virt - _IO_BASE;
|
||||||
|
}
|
||||||
|
|
||||||
static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose, struct list_head *resources)
|
static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose, struct list_head *resources)
|
||||||
{
|
{
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
@@ -1516,8 +1521,7 @@ static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose, s
|
|||||||
(unsigned long long)res->start,
|
(unsigned long long)res->start,
|
||||||
(unsigned long long)res->end,
|
(unsigned long long)res->end,
|
||||||
(unsigned long)res->flags);
|
(unsigned long)res->flags);
|
||||||
pci_add_resource_offset(resources, res,
|
pci_add_resource_offset(resources, res, pcibios_io_space_offset(hose));
|
||||||
(resource_size_t) hose->io_base_virt - _IO_BASE);
|
|
||||||
|
|
||||||
/* Hookup PHB Memory resources */
|
/* Hookup PHB Memory resources */
|
||||||
for (i = 0; i < 3; ++i) {
|
for (i = 0; i < 3; ++i) {
|
||||||
|
@@ -219,9 +219,9 @@ void __devinit pcibios_setup_phb_io_space(struct pci_controller *hose)
|
|||||||
struct resource *res = &hose->io_resource;
|
struct resource *res = &hose->io_resource;
|
||||||
|
|
||||||
/* Fixup IO space offset */
|
/* Fixup IO space offset */
|
||||||
io_offset = (unsigned long)hose->io_base_virt - isa_io_base;
|
io_offset = pcibios_io_space_offset(hose);
|
||||||
res->start = (res->start + io_offset) & 0xffffffffu;
|
res->start += io_offset;
|
||||||
res->end = (res->end + io_offset) & 0xffffffffu;
|
res->end += io_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init pcibios_init(void)
|
static int __init pcibios_init(void)
|
||||||
|
@@ -168,7 +168,7 @@ static int __devinit pcibios_map_phb_io_space(struct pci_controller *hose)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
/* Fixup hose IO resource */
|
/* Fixup hose IO resource */
|
||||||
io_virt_offset = (unsigned long)hose->io_base_virt - _IO_BASE;
|
io_virt_offset = pcibios_io_space_offset(hose);
|
||||||
hose->io_resource.start += io_virt_offset;
|
hose->io_resource.start += io_virt_offset;
|
||||||
hose->io_resource.end += io_virt_offset;
|
hose->io_resource.end += io_virt_offset;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user