]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/frv/mb93090-mb00/pci-vdk.c
Merge branch 'pci-for-jesse' of git://git.kernel.org/pub/scm/linux/kernel/git/x86...
[linux-2.6-omap-h63xx.git] / arch / frv / mb93090-mb00 / pci-vdk.c
index 0b581e3cf7c75602cfc122d9f58098620dccecdc..f003cfa68b7a0cbe78ee1ca3444dd6deb7884e18 100644 (file)
@@ -198,58 +198,6 @@ static struct pci_ops * __init pci_check_direct(void)
        return NULL;
 }
 
-/*
- * Several buggy motherboards address only 16 devices and mirror
- * them to next 16 IDs. We try to detect this `feature' on all
- * primary buses (those containing host bridges as they are
- * expected to be unique) and remove the ghost devices.
- */
-
-static void __init pcibios_fixup_ghosts(struct pci_bus *b)
-{
-       struct list_head *ln, *mn;
-       struct pci_dev *d, *e;
-       int mirror = PCI_DEVFN(16,0);
-       int seen_host_bridge = 0;
-       int i;
-
-       for (ln=b->devices.next; ln != &b->devices; ln=ln->next) {
-               d = pci_dev_b(ln);
-               if ((d->class >> 8) == PCI_CLASS_BRIDGE_HOST)
-                       seen_host_bridge++;
-               for (mn=ln->next; mn != &b->devices; mn=mn->next) {
-                       e = pci_dev_b(mn);
-                       if (e->devfn != d->devfn + mirror ||
-                           e->vendor != d->vendor ||
-                           e->device != d->device ||
-                           e->class != d->class)
-                               continue;
-                       for(i=0; i<PCI_NUM_RESOURCES; i++)
-                               if (e->resource[i].start != d->resource[i].start ||
-                                   e->resource[i].end != d->resource[i].end ||
-                                   e->resource[i].flags != d->resource[i].flags)
-                                       continue;
-                       break;
-               }
-               if (mn == &b->devices)
-                       return;
-       }
-       if (!seen_host_bridge)
-               return;
-       printk("PCI: Ignoring ghost devices on bus %02x\n", b->number);
-
-       ln = &b->devices;
-       while (ln->next != &b->devices) {
-               d = pci_dev_b(ln->next);
-               if (d->devfn >= mirror) {
-                       list_del(&d->global_list);
-                       list_del(&d->bus_list);
-                       kfree(d);
-               } else
-                       ln = ln->next;
-       }
-}
-
 /*
  * Discover remaining PCI buses in case there are peer host bridges.
  * We use the number of last PCI bus provided by the PCI BIOS.
@@ -356,7 +304,6 @@ void __init pcibios_fixup_bus(struct pci_bus *bus)
 #if 0
        printk("### PCIBIOS_FIXUP_BUS(%d)\n",bus->number);
 #endif
-       pcibios_fixup_ghosts(bus);
        pci_read_bridge_bases(bus);
 
        if (bus->number == 0) {
@@ -400,7 +347,8 @@ int __init pcibios_init(void)
        __reg_MB86943_pci_sl_mem_base   = __region_CS2 + 0x08000000;
        mb();
 
-       *(volatile unsigned long *)(__region_CS2+0x01300014) == 1;
+       /* enable PCI arbitration */
+       __reg_MB86943_pci_arbiter       = MB86943_PCIARB_EN;
 
        ioport_resource.start   = (__reg_MB86943_sl_pci_io_base << 9) & 0xfffffc00;
        ioport_resource.end     = (__reg_MB86943_sl_pci_io_range << 9) | 0x3ff;