MIPS: Fix SSB PCIcore IO resource management
The SSB PCIcore code reused the IO resource fixup code from the original 2.4.x Broadcom patch for BCM47xx based devices, which was a quick hack for doing PCI IO resource configuration back then (the boot loader doesn't configure PCI devices on this platform). However, this code is no longer necessary since the kernel now can do PCI resource management fine all by itself, so remove the old code. When removing the code, it becomes obvious that the mem_offset setting in the PCIcore driver was wrong, however this was masked by the fixup code before, except in a few cases involving yenta_socket. For BCM47xx, the correct offset is 0, and since this is the only device using PCIcore in host mode, the offset can simply be removed unconditionally. Signed-off-by: Andreas Ferber <af@chaos-agency.de> Signed-off-by: Michael Buesch <mb@bu3sch.de> Cc: Markus Wigge <markus@cultcom.de> Cc: linux-mips@linux-mips.org Patchwork: http://patchwork.linux-mips.org/patch/1070/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
Родитель
86f7d75eb7
Коммит
847253b948
|
@ -246,20 +246,12 @@ static struct pci_controller ssb_pcicore_controller = {
|
|||
.pci_ops = &ssb_pcicore_pciops,
|
||||
.io_resource = &ssb_pcicore_io_resource,
|
||||
.mem_resource = &ssb_pcicore_mem_resource,
|
||||
.mem_offset = 0x24000000,
|
||||
};
|
||||
|
||||
static u32 ssb_pcicore_pcibus_iobase = 0x100;
|
||||
static u32 ssb_pcicore_pcibus_membase = SSB_PCI_DMA;
|
||||
|
||||
/* This function is called when doing a pci_enable_device().
|
||||
* We must first check if the device is a device on the PCI-core bridge. */
|
||||
int ssb_pcicore_plat_dev_init(struct pci_dev *d)
|
||||
{
|
||||
struct resource *res;
|
||||
int pos, size;
|
||||
u32 *base;
|
||||
|
||||
if (d->bus->ops != &ssb_pcicore_pciops) {
|
||||
/* This is not a device on the PCI-core bridge. */
|
||||
return -ENODEV;
|
||||
|
@ -268,27 +260,6 @@ int ssb_pcicore_plat_dev_init(struct pci_dev *d)
|
|||
ssb_printk(KERN_INFO "PCI: Fixing up device %s\n",
|
||||
pci_name(d));
|
||||
|
||||
/* Fix up resource bases */
|
||||
for (pos = 0; pos < 6; pos++) {
|
||||
res = &d->resource[pos];
|
||||
if (res->flags & IORESOURCE_IO)
|
||||
base = &ssb_pcicore_pcibus_iobase;
|
||||
else
|
||||
base = &ssb_pcicore_pcibus_membase;
|
||||
res->flags |= IORESOURCE_PCI_FIXED;
|
||||
if (res->end) {
|
||||
size = res->end - res->start + 1;
|
||||
if (*base & (size - 1))
|
||||
*base = (*base + size) & ~(size - 1);
|
||||
res->start = *base;
|
||||
res->end = res->start + size - 1;
|
||||
*base += size;
|
||||
pci_write_config_dword(d, PCI_BASE_ADDRESS_0 + (pos << 2), res->start);
|
||||
}
|
||||
/* Fix up PCI bridge BAR0 only */
|
||||
if (d->bus->number == 0 && PCI_SLOT(d->devfn) == 0)
|
||||
break;
|
||||
}
|
||||
/* Fix up interrupt lines */
|
||||
d->irq = ssb_mips_irq(extpci_core->dev) + 2;
|
||||
pci_write_config_byte(d, PCI_INTERRUPT_LINE, d->irq);
|
||||
|
|
Загрузка…
Ссылка в новой задаче