Merge remote-tracking branch 'kumar/next' into next
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 25 Nov 2011 04:25:39 +0000 (15:25 +1100)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 25 Nov 2011 04:25:39 +0000 (15:25 +1100)
1  2 
arch/powerpc/kernel/pci-common.c
arch/powerpc/platforms/85xx/mpc85xx_cds.c

index 8f428fff545f384822f415ec50a6d90591d37e99,069aa75e7161d82aa0fc7352175e49c7b896c15e..9bffc028f45ac120831d313d93b8292448bbd0ce
@@@ -921,22 -921,18 +921,22 @@@ static void __devinit pcibios_fixup_res
                struct resource *res = dev->resource + i;
                if (!res->flags)
                        continue;
 -              /* On platforms that have PCI_PROBE_ONLY set, we don't
 -               * consider 0 as an unassigned BAR value. It's technically
 -               * a valid value, but linux doesn't like it... so when we can
 -               * re-assign things, we do so, but if we can't, we keep it
 -               * around and hope for the best...
 +
 +              /* If we're going to re-assign everything, we mark all resources
 +               * as unset (and 0-base them). In addition, we mark BARs starting
 +               * at 0 as unset as well, except if PCI_PROBE_ONLY is also set
 +               * since in that case, we don't want to re-assign anything
                 */
 -              if (res->start == 0 && !pci_has_flag(PCI_PROBE_ONLY)) {
 -                      pr_debug("PCI:%s Resource %d %016llx-%016llx [%x] is unassigned\n",
 -                               pci_name(dev), i,
 -                               (unsigned long long)res->start,
 -                               (unsigned long long)res->end,
 -                               (unsigned int)res->flags);
 +              if (pci_has_flag(PCI_REASSIGN_ALL_RSRC) ||
 +                  (res->start == 0 && !pci_has_flag(PCI_PROBE_ONLY))) {
 +                      /* Only print message if not re-assigning */
 +                      if (!pci_has_flag(PCI_REASSIGN_ALL_RSRC))
 +                              pr_debug("PCI:%s Resource %d %016llx-%016llx [%x] "
 +                                       "is unassigned\n",
 +                                       pci_name(dev), i,
 +                                       (unsigned long long)res->start,
 +                                       (unsigned long long)res->end,
 +                                       (unsigned int)res->flags);
                        res->end -= res->start;
                        res->start = 0;
                        res->flags |= IORESOURCE_UNSET;
@@@ -1046,16 -1042,6 +1046,16 @@@ static void __devinit pcibios_fixup_bri
                if (i >= 3 && bus->self->transparent)
                        continue;
  
 +              /* If we are going to re-assign everything, mark the resource
 +               * as unset and move it down to 0
 +               */
 +              if (pci_has_flag(PCI_REASSIGN_ALL_RSRC)) {
 +                      res->flags |= IORESOURCE_UNSET;
 +                      res->end -= res->start;
 +                      res->start = 0;
 +                      continue;
 +              }
 +
                pr_debug("PCI:%s Bus rsrc %d %016llx-%016llx [%x] fixup...\n",
                         pci_name(dev), i,
                         (unsigned long long)res->start,\
@@@ -1276,15 -1262,18 +1276,15 @@@ void pcibios_allocate_bus_resources(str
        pci_bus_for_each_resource(bus, res, i) {
                if (!res || !res->flags || res->start > res->end || res->parent)
                        continue;
 +
 +              /* If the resource was left unset at this point, we clear it */
 +              if (res->flags & IORESOURCE_UNSET)
 +                      goto clear_resource;
 +
                if (bus->parent == NULL)
                        pr = (res->flags & IORESOURCE_IO) ?
                                &ioport_resource : &iomem_resource;
                else {
 -                      /* Don't bother with non-root busses when
 -                       * re-assigning all resources. We clear the
 -                       * resource flags as if they were colliding
 -                       * and as such ensure proper re-allocation
 -                       * later.
 -                       */
 -                      if (pci_has_flag(PCI_REASSIGN_ALL_RSRC))
 -                              goto clear_resource;
                        pr = pci_find_parent_resource(bus->self, res);
                        if (pr == res) {
                                /* this happens when the generic PCI
                        if (reparent_resources(pr, res) == 0)
                                continue;
                }
 -              printk(KERN_WARNING "PCI: Cannot allocate resource region "
 -                     "%d of PCI bridge %d, will remap\n", i, bus->number);
 -clear_resource:
 +              pr_warning("PCI: Cannot allocate resource region "
 +                         "%d of PCI bridge %d, will remap\n", i, bus->number);
 +      clear_resource:
                res->start = res->end = 0;
                res->flags = 0;
        }
@@@ -1462,11 -1451,16 +1462,11 @@@ void __init pcibios_resource_survey(voi
  {
        struct pci_bus *b;
  
 -      /* Allocate and assign resources. If we re-assign everything, then
 -       * we skip the allocate phase
 -       */
 +      /* Allocate and assign resources */
        list_for_each_entry(b, &pci_root_buses, node)
                pcibios_allocate_bus_resources(b);
 -
 -      if (!pci_has_flag(PCI_REASSIGN_ALL_RSRC)) {
 -              pcibios_allocate_resources(0);
 -              pcibios_allocate_resources(1);
 -      }
 +      pcibios_allocate_resources(0);
 +      pcibios_allocate_resources(1);
  
        /* Before we start assigning unassigned resource, we try to reserve
         * the low IO area and the VGA memory area if they intersect the
@@@ -1738,12 -1732,6 +1738,12 @@@ void __devinit pcibios_scan_phb(struct 
        if (mode == PCI_PROBE_NORMAL)
                hose->last_busno = bus->subordinate = pci_scan_child_bus(bus);
  
 +      /* Platform gets a chance to do some global fixups before
 +       * we proceed to resource allocation
 +       */
 +      if (ppc_md.pcibios_fixup_phb)
 +              ppc_md.pcibios_fixup_phb(hose);
 +
        /* Configure PCI Express settings */
        if (bus && !pci_has_flag(PCI_PROBE_ONLY)) {
                struct pci_bus *child;
  static void fixup_hide_host_resource_fsl(struct pci_dev *dev)
  {
        int i, class = dev->class >> 8;
+       /* When configured as agent, programing interface = 1 */
+       int prog_if = dev->class & 0xf;
  
        if ((class == PCI_CLASS_PROCESSOR_POWERPC ||
             class == PCI_CLASS_BRIDGE_OTHER) &&
                (dev->hdr_type == PCI_HEADER_TYPE_NORMAL) &&
+               (prog_if == 0) &&
                (dev->bus->parent == NULL)) {
                for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
                        dev->resource[i].start = 0;
index 7e2a4d231e74dce6b99d77fe5d5a8d19334fffaa,f24926b00451bda61565d5f4ab9ea5c7f3e49851..d993b66f1abf638de6eb3e8bfa802a766bbf8061
@@@ -46,6 -46,8 +46,8 @@@
  #include <sysdev/fsl_soc.h>
  #include <sysdev/fsl_pci.h>
  
+ #include "mpc85xx.h"
  /* CADMUS info */
  /* xxx - galak, move into device tree */
  #define CADMUS_BASE (0xf8004000)
@@@ -177,7 -179,7 +179,7 @@@ static irqreturn_t mpc85xx_8259_cascade
  
  static struct irqaction mpc85xxcds_8259_irqaction = {
        .handler = mpc85xx_8259_cascade_action,
 -      .flags = IRQF_SHARED,
 +      .flags = IRQF_SHARED | IRQF_NO_THREAD,
        .name = "8259 cascade",
  };
  #endif /* PPC_I8259 */
@@@ -330,19 -332,7 +332,7 @@@ static int __init mpc85xx_cds_probe(voi
          return of_flat_dt_is_compatible(root, "MPC85xxCDS");
  }
  
- static struct of_device_id __initdata of_bus_ids[] = {
-       { .type = "soc", },
-       { .compatible = "soc", },
-       { .compatible = "simple-bus", },
-       { .compatible = "gianfar", },
-       {},
- };
- static int __init declare_of_platform_devices(void)
- {
-       return of_platform_bus_probe(NULL, of_bus_ids, NULL);
- }
- machine_device_initcall(mpc85xx_cds, declare_of_platform_devices);
+ machine_device_initcall(mpc85xx_cds, mpc85xx_common_publish_devices);
  
  define_machine(mpc85xx_cds) {
        .name           = "MPC85xx CDS",