sh: pci: Track io and mem_offset per-channel.
This implements a per-hose offset for I/O and mem resources. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
@@ -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,
|
|||||||
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)
|
|||||||
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
|
|||||||
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 = {
|
|||||||
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 {
|
|||||||
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;
|
||||||
|
Reference in New Issue
Block a user