printk(KERN_WARNING "Can't get bus-range for %s, assume"
                       " bus 0\n", dev->full_name);
 
+       pci_assign_all_buses = 1;
        hose = pcibios_alloc_controller();
        if (!hose)
                return -ENOMEM;
        hose->arch_data = dev;
-       hose->indirect_type = PPC_INDIRECT_TYPE_EXT_REG;
+       hose->indirect_type = PPC_INDIRECT_TYPE_EXT_REG |
+                               PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS;
 
        hose->first_busno = bus_range ? bus_range[0] : 0x0;
        hose->last_busno = bus_range ? bus_range[1] : 0xff;
 
                 (0x80000000 | (bus_no << 16)
                  | (devfn << 8) | reg | cfg_type));
 
+       /* surpress setting of PCI_PRIMARY_BUS */
+       if (hose->indirect_type & PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS)
+               if ((offset == PCI_PRIMARY_BUS) &&
+                       (bus->number == hose->first_busno))
+               val &= 0xffffff00;
+
        /*
         * Note: the caller has already checked that offset is
         * suitably aligned and that len is 1, 2 or 4.
 
         * Used for variants of PCI indirect handling and possible quirks:
         *  SET_CFG_TYPE - used on 4xx or any PHB that does explicit type0/1
         *  EXT_REG - provides access to PCI-e extended registers
+        *  SURPRESS_PRIMARY_BUS - we surpress the setting of PCI_PRIMARY_BUS
+        *   on Freescale PCI-e controllers since they used the PCI_PRIMARY_BUS
+        *   to determine which bus number to match on when generating type0
+        *   config cycles
         */
 #define PPC_INDIRECT_TYPE_SET_CFG_TYPE         (0x00000001)
 #define PPC_INDIRECT_TYPE_EXT_REG              (0x00000002)
+#define PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS (0x00000004)
        u32 indirect_type;
 
        /* Currently, we limit ourselves to 1 IO range and 3 mem