diff -Nur linux-2.6.28.orig/arch/mips/include/asm/mips-boards/generic.h linux-2.6.28/arch/mips/include/asm/mips-boards/generic.h --- linux-2.6.28.orig/arch/mips/include/asm/mips-boards/generic.h 2008-12-25 00:26:37.000000000 +0100 +++ linux-2.6.28/arch/mips/include/asm/mips-boards/generic.h 2009-01-09 23:03:02.000000000 +0100 @@ -92,7 +92,7 @@ extern void mips_reboot_setup(void); #ifdef CONFIG_PCI -extern void mips_pcibios_init(void); +extern int mips_pcibios_init(void); #else #define mips_pcibios_init() do { } while (0) #endif diff -Nur linux-2.6.28.orig/arch/mips/mti-malta/malta-pci.c linux-2.6.28/arch/mips/mti-malta/malta-pci.c --- linux-2.6.28.orig/arch/mips/mti-malta/malta-pci.c 2008-12-25 00:26:37.000000000 +0100 +++ linux-2.6.28/arch/mips/mti-malta/malta-pci.c 2009-01-09 23:02:02.000000000 +0100 @@ -87,10 +87,11 @@ .mem_resource = &msc_mem_resource, }; -void __init mips_pcibios_init(void) +int __init mips_pcibios_init(void) { struct pci_controller *controller; resource_size_t start, end, map, start1, end1, map1, map2, map3, mask; + void __iomem *io_map_base; switch (mips_revision_sconid) { case MIPS_REVISION_SCON_GT64120: @@ -230,7 +231,7 @@ controller = &msc_controller; break; default: - return; + return 0; } if (controller->io_resource->start < 0x00001000UL) /* FIXME */ @@ -239,5 +240,14 @@ iomem_resource.end &= 0xfffffffffULL; /* 64 GB */ ioport_resource.end = controller->io_resource->end; + io_map_base = ioremap(MIPS_MSC01_PCI_REG_BASE, + controller->io_resource->end - controller->io_resource->start + 1); + if (!io_map_base) + return -EBUSY; + + controller->io_map_base = (unsigned long)io_map_base; + register_pci_controller(controller); + + return 0; }