Commit 09cfeb13 authored by Paul Mundt's avatar Paul Mundt

sh: pci: Track io and mem_offset per-channel.

This implements a per-hose offset for I/O and mem resources.
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent e79066a6
...@@ -105,7 +105,7 @@ static void pcibios_fixup_device_resources(struct pci_dev *dev, ...@@ -105,7 +105,7 @@ static void pcibios_fixup_device_resources(struct pci_dev *dev,
struct pci_bus *bus) struct pci_bus *bus)
{ {
/* Update device resources. */ /* Update device resources. */
struct pci_channel *chan = bus->sysdata; struct pci_channel *hose = bus->sysdata;
unsigned long offset = 0; unsigned long offset = 0;
int i; int i;
...@@ -115,9 +115,9 @@ static void pcibios_fixup_device_resources(struct pci_dev *dev, ...@@ -115,9 +115,9 @@ static void pcibios_fixup_device_resources(struct pci_dev *dev,
if (dev->resource[i].flags & IORESOURCE_PCI_FIXED) if (dev->resource[i].flags & IORESOURCE_PCI_FIXED)
continue; continue;
if (dev->resource[i].flags & IORESOURCE_IO) if (dev->resource[i].flags & IORESOURCE_IO)
offset = chan->io_base; offset = hose->io_offset;
else if (dev->resource[i].flags & IORESOURCE_MEM) else if (dev->resource[i].flags & IORESOURCE_MEM)
offset = 0; offset = hose->mem_offset;
dev->resource[i].start += offset; dev->resource[i].start += offset;
dev->resource[i].end += offset; dev->resource[i].end += offset;
...@@ -150,13 +150,13 @@ void __devinit __weak pcibios_fixup_bus(struct pci_bus *bus) ...@@ -150,13 +150,13 @@ void __devinit __weak pcibios_fixup_bus(struct pci_bus *bus)
void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
struct resource *res) struct resource *res)
{ {
struct pci_channel *chan = dev->sysdata; struct pci_channel *hose = dev->sysdata;
unsigned long offset = 0; unsigned long offset = 0;
if (res->flags & IORESOURCE_IO) if (res->flags & IORESOURCE_IO)
offset = chan->io_base; offset = hose->io_offset;
else if (res->flags & IORESOURCE_MEM) else if (res->flags & IORESOURCE_MEM)
offset = 0; offset = hose->mem_offset;
region->start = res->start - offset; region->start = res->start - offset;
region->end = res->end - offset; region->end = res->end - offset;
...@@ -166,13 +166,13 @@ void __devinit ...@@ -166,13 +166,13 @@ void __devinit
pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
struct pci_bus_region *region) struct pci_bus_region *region)
{ {
struct pci_channel *chan = dev->sysdata; struct pci_channel *hose = dev->sysdata;
unsigned long offset = 0; unsigned long offset = 0;
if (res->flags & IORESOURCE_IO) if (res->flags & IORESOURCE_IO)
offset = chan->io_base; offset = hose->io_offset;
else if (res->flags & IORESOURCE_MEM) else if (res->flags & IORESOURCE_MEM)
offset = 0; offset = hose->mem_offset;
res->start = region->start + offset; res->start = region->start + offset;
res->end = region->end + offset; res->end = region->end + offset;
......
...@@ -34,7 +34,9 @@ static struct resource sh7785_mem_resource = { ...@@ -34,7 +34,9 @@ static struct resource sh7785_mem_resource = {
static struct pci_channel sh7780_pci_controller = { static struct pci_channel sh7780_pci_controller = {
.pci_ops = &sh4_pci_ops, .pci_ops = &sh4_pci_ops,
.mem_resource = &sh7785_mem_resource, .mem_resource = &sh7785_mem_resource,
.mem_offset = 0x00000000,
.io_resource = &sh7785_io_resource, .io_resource = &sh7785_io_resource,
.io_offset = 0x00000000,
}; };
static struct sh4_pci_address_map sh7780_pci_map = { static struct sh4_pci_address_map sh7780_pci_map = {
......
...@@ -25,6 +25,9 @@ struct pci_channel { ...@@ -25,6 +25,9 @@ struct pci_channel {
struct resource *io_resource; struct resource *io_resource;
struct resource *mem_resource; struct resource *mem_resource;
unsigned long io_offset;
unsigned long mem_offset;
int first_devfn; int first_devfn;
int last_devfn; int last_devfn;
int enabled; int enabled;
......
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