]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge branch 'linus' into pci-for-jesse
authorIngo Molnar <mingo@elte.hu>
Fri, 18 Jul 2008 20:39:59 +0000 (22:39 +0200)
committerIngo Molnar <mingo@elte.hu>
Fri, 18 Jul 2008 20:39:59 +0000 (22:39 +0200)
1  2 
drivers/pci/probe.c
drivers/pci/setup-bus.c

diff --combined drivers/pci/probe.c
index 27cdbb06c4dd1a14ba0fec57e8f6d43a6d4caea8,b1724cf31b669ef459d3250aa8fae48b38e4c7fa..d2bd74ee3e0875c9f6211ed90ae7ab696b4a54a7
@@@ -275,11 -275,10 +275,11 @@@ static void pci_read_bases(struct pci_d
                        }
                        res->start = l64 & PCI_BASE_ADDRESS_MEM_MASK;
                        res->end = res->start + sz64;
 +                      printk(KERN_INFO "PCI: %s reg %x 64bit mmio: [%llx, %llx]\n", pci_name(dev), reg, res->start, res->end);
  #else
                        if (sz64 > 0x100000000ULL) {
-                               printk(KERN_ERR "PCI: Unable to handle 64-bit "
-                                       "BAR for device %s\n", pci_name(dev));
+                               dev_err(&dev->dev, "BAR %d: can't handle 64-bit"
+                                       " BAR\n", pos);
                                res->start = 0;
                                res->flags = 0;
                        } else if (lhi) {
                                res->end = sz;
                        }
  #endif
 +              } else {
 +                      printk(KERN_INFO "PCI: %s reg %x %s: [%llx, %llx]\n", pci_name(dev), reg, (res->flags & IORESOURCE_IO)? "io port":"32bit mmio", res->start, res->end);
                }
        }
        if (rom) {
@@@ -332,7 -329,7 +332,7 @@@ void __devinit pci_read_bridge_bases(st
                return;
  
        if (dev->transparent) {
-               printk(KERN_INFO "PCI: Transparent bridge - %s\n", pci_name(dev));
+               dev_info(&dev->dev, "transparent bridge\n");
                for(i = 3; i < PCI_BUS_NUM_RESOURCES; i++)
                        child->resource[i] = child->parent->resource[i - 3];
        }
                        res->start = base;
                if (!res->end)
                        res->end = limit + 0xfff;
 +              printk(KERN_INFO "PCI: bridge %s io port: [%llx, %llx]\n", pci_name(dev), res->start, res->end);
        }
  
        res = child->resource[1];
                res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
                res->start = base;
                res->end = limit + 0xfffff;
 +              printk(KERN_INFO "PCI: bridge %s 32bit mmio: [%llx, %llx]\n", pci_name(dev), res->start, res->end);
        }
  
        res = child->resource[2];
                        limit |= ((long) mem_limit_hi) << 32;
  #else
                        if (mem_base_hi || mem_limit_hi) {
-                               printk(KERN_ERR "PCI: Unable to handle 64-bit address space for bridge %s\n", pci_name(dev));
+                               dev_err(&dev->dev, "can't handle 64-bit "
+                                       "address space for bridge\n");
                                return;
                        }
  #endif
                res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM | IORESOURCE_PREFETCH;
                res->start = base;
                res->end = limit + 0xfffff;
 +              printk(KERN_INFO "PCI: bridge %s %sbit mmio pref: [%llx, %llx]\n", pci_name(dev), (res->flags & PCI_PREF_RANGE_TYPE_64)?"64":"32",res->start, res->end);
        }
  }
  
@@@ -420,6 -415,7 +421,7 @@@ static struct pci_bus * pci_alloc_bus(v
                INIT_LIST_HEAD(&b->node);
                INIT_LIST_HEAD(&b->children);
                INIT_LIST_HEAD(&b->devices);
+               INIT_LIST_HEAD(&b->slots);
        }
        return b;
  }
@@@ -517,8 -513,8 +519,8 @@@ int __devinit pci_scan_bridge(struct pc
  
        pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
  
-       pr_debug("PCI: Scanning behind PCI bridge %s, config %06x, pass %d\n",
-                pci_name(dev), buses & 0xffffff, pass);
+       dev_dbg(&dev->dev, "scanning behind bridge, config %06x, pass %d\n",
+               buses & 0xffffff, pass);
  
        /* Disable MasterAbortMode during probing to avoid reporting
           of bus errors (in some architectures) */ 
                 * ignore it.  This can happen with the i450NX chipset.
                 */
                if (pci_find_bus(pci_domain_nr(bus), busnr)) {
-                       printk(KERN_INFO "PCI: Bus %04x:%02x already known\n",
-                                       pci_domain_nr(bus), busnr);
+                       dev_info(&dev->dev, "bus %04x:%02x already known\n",
+                                pci_domain_nr(bus), busnr);
                        goto out;
                }
  
@@@ -717,8 -713,9 +719,9 @@@ static int pci_setup_device(struct pci_
  {
        u32 class;
  
-       sprintf(pci_name(dev), "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
-               dev->bus->number, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn));
+       dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
+                    dev->bus->number, PCI_SLOT(dev->devfn),
+                    PCI_FUNC(dev->devfn));
  
        pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
        dev->revision = class & 0xff;
        dev->class = class;
        class >>= 8;
  
-       pr_debug("PCI: Found %s [%04x/%04x] %06x %02x\n", pci_name(dev),
+       dev_dbg(&dev->dev, "found [%04x/%04x] class %06x header type %02x\n",
                 dev->vendor, dev->device, class, dev->hdr_type);
  
        /* "Unknown power state" */
                break;
  
        default:                                    /* unknown header */
-               printk(KERN_ERR "PCI: device %s has unknown header type %02x, ignoring.\n",
-                       pci_name(dev), dev->hdr_type);
+               dev_err(&dev->dev, "unknown header type %02x, "
+                       "ignoring device\n", dev->hdr_type);
                return -1;
  
        bad:
-               printk(KERN_ERR "PCI: %s: class %x doesn't match header type %02x. Ignoring class.\n",
-                      pci_name(dev), class, dev->hdr_type);
+               dev_err(&dev->dev, "ignoring class %02x (doesn't match header "
+                       "type %02x)\n", class, dev->hdr_type);
                dev->class = PCI_CLASS_NOT_DEFINED;
        }
  
@@@ -933,7 -930,7 +936,7 @@@ static struct pci_dev *pci_scan_device(
                        return NULL;
                /* Card hasn't responded in 60 seconds?  Must be stuck. */
                if (delay > 60 * 1000) {
-                       printk(KERN_WARNING "Device %04x:%02x:%02x.%d not "
+                       printk(KERN_WARNING "pci %04x:%02x:%02x.%d: not "
                                        "responding\n", pci_domain_nr(bus),
                                        bus->number, PCI_SLOT(devfn),
                                        PCI_FUNC(devfn));
@@@ -990,6 -987,9 +993,9 @@@ void pci_device_add(struct pci_dev *dev
        /* Fix up broken headers */
        pci_fixup_device(pci_fixup_header, dev);
  
+       /* Initialize power management of the device */
+       pci_pm_init(dev);
        /*
         * Add the device to our list of discovered devices
         * and the bus list for fixup functions, etc.
diff --combined drivers/pci/setup-bus.c
index c74a2bce083d3bc9c68646835f8f29faf07e2f93,827c0a520e2b3aec87bcc2a160720fbd48e836b2..82634a2f1b1d82da305e73ef1287330ea0cf01ed
  #include <linux/slab.h>
  
  
- #define DEBUG_CONFIG 1
- #if DEBUG_CONFIG
- #define DBG(x...)     printk(x)
- #else
- #define DBG(x...)
- #endif
  static void pbus_assign_resources_sorted(struct pci_bus *bus)
  {
        struct pci_dev *dev;
@@@ -81,8 -74,8 +74,8 @@@ void pci_setup_cardbus(struct pci_bus *
        struct pci_dev *bridge = bus->self;
        struct pci_bus_region region;
  
-       printk("PCI: Bus %d, cardbus bridge: %s\n",
-               bus->number, pci_name(bridge));
+       dev_info(&bridge->dev, "CardBus bridge, secondary bus %04x:%02x\n",
+                pci_domain_nr(bus), bus->number);
  
        pcibios_resource_to_bus(bridge, &region, bus->resource[0]);
        if (bus->resource[0]->flags & IORESOURCE_IO) {
@@@ -90,7 -83,7 +83,7 @@@
                 * The IO resource is allocated a range twice as large as it
                 * would normally need.  This allows us to set both IO regs.
                 */
-               printk(KERN_INFO "  IO window: 0x%08lx-0x%08lx\n",
+               dev_info(&bridge->dev, "  IO window: %#08lx-%#08lx\n",
                       (unsigned long)region.start,
                       (unsigned long)region.end);
                pci_write_config_dword(bridge, PCI_CB_IO_BASE_0,
  
        pcibios_resource_to_bus(bridge, &region, bus->resource[1]);
        if (bus->resource[1]->flags & IORESOURCE_IO) {
-               printk(KERN_INFO "  IO window: 0x%08lx-0x%08lx\n",
+               dev_info(&bridge->dev, "  IO window: %#08lx-%#08lx\n",
                       (unsigned long)region.start,
                       (unsigned long)region.end);
                pci_write_config_dword(bridge, PCI_CB_IO_BASE_1,
  
        pcibios_resource_to_bus(bridge, &region, bus->resource[2]);
        if (bus->resource[2]->flags & IORESOURCE_MEM) {
-               printk(KERN_INFO "  PREFETCH window: 0x%08lx-0x%08lx\n",
+               dev_info(&bridge->dev, "  PREFETCH window: %#08lx-%#08lx\n",
                       (unsigned long)region.start,
                       (unsigned long)region.end);
                pci_write_config_dword(bridge, PCI_CB_MEMORY_BASE_0,
  
        pcibios_resource_to_bus(bridge, &region, bus->resource[3]);
        if (bus->resource[3]->flags & IORESOURCE_MEM) {
-               printk(KERN_INFO "  MEM window: 0x%08lx-0x%08lx\n",
+               dev_info(&bridge->dev, "  MEM window: %#08lx-%#08lx\n",
                       (unsigned long)region.start,
                       (unsigned long)region.end);
                pci_write_config_dword(bridge, PCI_CB_MEMORY_BASE_1,
@@@ -151,7 -144,8 +144,8 @@@ static void pci_setup_bridge(struct pci
        struct pci_bus_region region;
        u32 l, bu, lu, io_upper16;
  
-       DBG(KERN_INFO "PCI: Bridge: %s\n", pci_name(bridge));
+       dev_info(&bridge->dev, "PCI bridge, secondary bus %04x:%02x\n",
+                pci_domain_nr(bus), bus->number);
  
        /* Set up the top and bottom of the PCI I/O segment for this bus. */
        pcibios_resource_to_bus(bridge, &region, bus->resource[0]);
                l |= region.end & 0xf000;
                /* Set up upper 16 bits of I/O base/limit. */
                io_upper16 = (region.end & 0xffff0000) | (region.start >> 16);
-               DBG(KERN_INFO "  IO window: %04lx-%04lx\n",
+               dev_info(&bridge->dev, "  IO window: %#04lx-%#04lx\n",
                    (unsigned long)region.start,
                    (unsigned long)region.end);
        }
                /* Clear upper 16 bits of I/O base/limit. */
                io_upper16 = 0;
                l = 0x00f0;
-               DBG(KERN_INFO "  IO window: disabled.\n");
+               dev_info(&bridge->dev, "  IO window: disabled\n");
        }
        /* Temporarily disable the I/O range before updating PCI_IO_BASE. */
        pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, 0x0000ffff);
        if (bus->resource[1]->flags & IORESOURCE_MEM) {
                l = (region.start >> 16) & 0xfff0;
                l |= region.end & 0xfff00000;
-               DBG(KERN_INFO "  MEM window: 0x%08lx-0x%08lx\n",
+               dev_info(&bridge->dev, "  MEM window: %#08lx-%#08lx\n",
                    (unsigned long)region.start,
                    (unsigned long)region.end);
        }
        else {
                l = 0x0000fff0;
-               DBG(KERN_INFO "  MEM window: disabled.\n");
+               dev_info(&bridge->dev, "  MEM window: disabled\n");
        }
        pci_write_config_dword(bridge, PCI_MEMORY_BASE, l);
  
                l |= region.end & 0xfff00000;
                bu = upper_32_bits(region.start);
                lu = upper_32_bits(region.end);
-               DBG(KERN_INFO "  PREFETCH window: 0x%016llx-0x%016llx\n",
+               dev_info(&bridge->dev, "  PREFETCH window: %#016llx-%#016llx\n",
                    (unsigned long long)region.start,
                    (unsigned long long)region.end);
        }
        else {
                l = 0x0000fff0;
-               DBG(KERN_INFO "  PREFETCH window: disabled.\n");
+               dev_info(&bridge->dev, "  PREFETCH window: disabled\n");
        }
        pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, l);
  
@@@ -361,9 -355,8 +355,8 @@@ static int pbus_size_mem(struct pci_bu
                        align = (i < PCI_BRIDGE_RESOURCES) ? r_size : r->start;
                        order = __ffs(align) - 20;
                        if (order > 11) {
-                               printk(KERN_WARNING "PCI: region %s/%d "
-                                      "too large: 0x%016llx-0x%016llx\n",
-                                       pci_name(dev), i,
+                               dev_warn(&dev->dev, "BAR %d too large: "
+                                      "%#016llx-%#016llx\n", i,
                                       (unsigned long long)r->start,
                                       (unsigned long long)r->end);
                                r->flags = 0;
@@@ -529,44 -522,14 +522,44 @@@ void __ref pci_bus_assign_resources(str
                        break;
  
                default:
-                       printk(KERN_INFO "PCI: not setting up bridge %s "
-                              "for bus %d\n", pci_name(dev), b->number);
+                       dev_info(&dev->dev, "not setting up bridge for bus "
+                                "%04x:%02x\n", pci_domain_nr(b), b->number);
                        break;
                }
        }
  }
  EXPORT_SYMBOL(pci_bus_assign_resources);
  
 +static void pci_bus_dump_res(struct pci_bus *bus)
 +{
 +        int i;
 +
 +        for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) {
 +                struct resource *res = bus->resource[i];
 +                if (!res)
 +                        continue;
 +
 +              printk(KERN_INFO "bus: %02x index %x %s: [%llx, %llx]\n", bus->number, i, (res->flags & IORESOURCE_IO)? "io port":"mmio", res->start, res->end);
 +        }
 +}
 +
 +static void pci_bus_dump_resources(struct pci_bus *bus)
 +{
 +      struct pci_bus *b;
 +      struct pci_dev *dev;
 +
 +
 +      pci_bus_dump_res(bus);
 +
 +      list_for_each_entry(dev, &bus->devices, bus_list) {
 +              b = dev->subordinate;
 +              if (!b)
 +                      continue;
 +
 +              pci_bus_dump_resources(b);
 +      }
 +}
 +
  void __init
  pci_assign_unassigned_resources(void)
  {
                pci_bus_assign_resources(bus);
                pci_enable_bridges(bus);
        }
 +
 +      /* dump the resource on buses */
 +      list_for_each_entry(bus, &pci_root_buses, node) {
 +              pci_bus_dump_resources(bus);
 +      }
  }