Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -105,7 +105,7 @@ static void pcibios_fixup_device_resources(struct pci_dev *dev,
	struct pci_bus *bus)
{
	/* Update device resources.  */
	struct pci_channel *chan = bus->sysdata;
	struct pci_channel *hose = bus->sysdata;
	unsigned long offset = 0;
	int i;

@@ -115,9 +115,9 @@ static void pcibios_fixup_device_resources(struct pci_dev *dev,
		if (dev->resource[i].flags & IORESOURCE_PCI_FIXED)
			continue;
		if (dev->resource[i].flags & IORESOURCE_IO)
			offset = chan->io_base;
			offset = hose->io_offset;
		else if (dev->resource[i].flags & IORESOURCE_MEM)
			offset = 0;
			offset = hose->mem_offset;

		dev->resource[i].start += 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,
			 struct resource *res)
{
	struct pci_channel *chan = dev->sysdata;
	struct pci_channel *hose = dev->sysdata;
	unsigned long offset = 0;

	if (res->flags & IORESOURCE_IO)
		offset = chan->io_base;
		offset = hose->io_offset;
	else if (res->flags & IORESOURCE_MEM)
		offset = 0;
		offset = hose->mem_offset;

	region->start = res->start - offset;
	region->end = res->end - offset;
@@ -166,13 +166,13 @@ void __devinit
pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
			struct pci_bus_region *region)
{
	struct pci_channel *chan = dev->sysdata;
	struct pci_channel *hose = dev->sysdata;
	unsigned long offset = 0;

	if (res->flags & IORESOURCE_IO)
		offset = chan->io_base;
		offset = hose->io_offset;
	else if (res->flags & IORESOURCE_MEM)
		offset = 0;
		offset = hose->mem_offset;

	res->start = region->start + offset;
	res->end = region->end + offset;
+2 −0
Original line number Diff line number Diff line
@@ -34,7 +34,9 @@ static struct resource sh7785_mem_resource = {
static struct pci_channel sh7780_pci_controller = {
	.pci_ops	= &sh4_pci_ops,
	.mem_resource	= &sh7785_mem_resource,
	.mem_offset	= 0x00000000,
	.io_resource	= &sh7785_io_resource,
	.io_offset	= 0x00000000,
};

static struct sh4_pci_address_map sh7780_pci_map = {
+3 −0
Original line number Diff line number Diff line
@@ -25,6 +25,9 @@ struct pci_channel {
	struct resource		*io_resource;
	struct resource		*mem_resource;

	unsigned long		io_offset;
	unsigned long		mem_offset;

	int			first_devfn;
	int			last_devfn;
	int			enabled;