]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
Merge branch 'pci/bjorn-p2p-bridge-windows' into next
authorBjorn Helgaas <bhelgaas@google.com>
Tue, 10 Jul 2012 14:36:09 +0000 (08:36 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 10 Jul 2012 14:36:09 +0000 (08:36 -0600)
* pci/bjorn-p2p-bridge-windows:
  sparc/PCI: replace pci_cfg_fake_ranges() with pci_read_bridge_bases()
  PCI: support sizing P2P bridge I/O windows with 1K granularity
  PCI: reimplement P2P bridge 1K I/O windows (Intel P64H2)
  PCI: allow P2P bridge windows starting at PCI bus address zero

Conflicts:
drivers/pci/probe.c
include/linux/pci.h

1  2 
arch/sparc/kernel/pci.c
drivers/pci/probe.c
drivers/pci/quirks.c
drivers/pci/setup-bus.c
include/linux/pci.h
include/linux/pci_regs.h

Simple merge
index 5e5358a3dd92c09679d9cb519ba7faf9feb1e948,ef24cf765b2f9644d6efa87a90b0dc7cb749ec13..6c143b4497ca4381677dcc34459ecf269e5cdc88
@@@ -318,23 -289,17 +326,18 @@@ static void __devinit pci_read_bridge_i
  
        if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
                u16 io_base_hi, io_limit_hi;
 +
                pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
                pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
 -              base |= (io_base_hi << 16);
 -              limit |= (io_limit_hi << 16);
 +              base |= ((unsigned long) io_base_hi << 16);
 +              limit |= ((unsigned long) io_limit_hi << 16);
        }
  
-       if (base && base <= limit) {
+       if (base <= limit) {
                res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
-               res2.flags = res->flags;
                region.start = base;
-               region.end = limit + 0xfff;
-               pcibios_bus_to_resource(dev, &res2, &region);
-               if (!res->start)
-                       res->start = res2.start;
-               if (!res->end)
-                       res->end = res2.end;
+               region.end = limit + io_granularity - 1;
+               pcibios_bus_to_resource(dev, res, &region);
                dev_printk(KERN_DEBUG, &dev->dev, "  bridge window %pR\n", res);
        }
  }
@@@ -350,9 -315,9 +353,9 @@@ static void __devinit pci_read_bridge_m
        res = child->resource[1];
        pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo);
        pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
 -      base = (mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
 -      limit = (mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
 +      base = ((unsigned long) mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
 +      limit = ((unsigned long) mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
-       if (base && base <= limit) {
+       if (base <= limit) {
                res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
                region.start = base;
                region.end = limit + 0xfffff;
Simple merge
index 561e41cf102d3dd1e77baf3df95a50b8f3fdf168,eb0293e23e48010979c645e3e5acd3355c55bbe1..fdb11770af1ff69b277c20f5307f037673a65060
@@@ -755,10 -777,11 +777,11 @@@ static void pbus_size_io(struct pci_bu
        b_res->end = b_res->start + size0 - 1;
        b_res->flags |= IORESOURCE_STARTALIGN;
        if (size1 > size0 && realloc_head) {
-               add_to_list(realloc_head, bus->self, b_res, size1-size0, 4096);
+               add_to_list(realloc_head, bus->self, b_res, size1-size0,
+                           min_align);
                dev_printk(KERN_DEBUG, &bus->self->dev, "bridge window "
 -                               "%pR to [bus %02x-%02x] add_size %lx\n", b_res,
 -                               bus->secondary, bus->subordinate, size1-size0);
 +                               "%pR to %pR add_size %lx\n", b_res,
 +                               &bus->busn_res, size1-size0);
        }
  }
  
index 85cffb823b4ec310378ab048acb845446bfad8d7,89b46fd245c60188ef476dae89776b835e054d60..5faa8310eec9ea02df6618345eb299cdee74d26b
@@@ -332,7 -324,7 +332,8 @@@ struct pci_dev 
        unsigned int    is_hotplug_bridge:1;
        unsigned int    __aer_firmware_first_valid:1;
        unsigned int    __aer_firmware_first:1;
 +      unsigned int    broken_intx_masking:1;
+       unsigned int    io_window_1k:1; /* Intel P2P bridge 1K I/O windows */
        pci_dev_flags_t dev_flags;
        atomic_t        enable_cnt;     /* pci_enable_device has been called */
  
Simple merge