|
@@ -318,10 +318,11 @@ static void __devinit pci_read_bridge_io(struct pci_bus *child)
|
|
|
|
|
|
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) {
|
|
@@ -349,8 +350,8 @@ static void __devinit pci_read_bridge_mmio(struct pci_bus *child)
|
|
|
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) {
|
|
|
res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
|
|
|
region.start = base;
|
|
@@ -371,11 +372,12 @@ static void __devinit pci_read_bridge_mmio_pref(struct pci_bus *child)
|
|
|
res = child->resource[2];
|
|
|
pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
|
|
|
pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
|
|
|
- base = (mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
|
|
|
- limit = (mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
|
|
|
+ base = ((unsigned long) mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
|
|
|
+ limit = ((unsigned long) mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
|
|
|
|
|
|
if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
|
|
|
u32 mem_base_hi, mem_limit_hi;
|
|
|
+
|
|
|
pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi);
|
|
|
pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi);
|
|
|
|
|
@@ -386,8 +388,8 @@ static void __devinit pci_read_bridge_mmio_pref(struct pci_bus *child)
|
|
|
*/
|
|
|
if (mem_base_hi <= mem_limit_hi) {
|
|
|
#if BITS_PER_LONG == 64
|
|
|
- base |= ((long) mem_base_hi) << 32;
|
|
|
- limit |= ((long) mem_limit_hi) << 32;
|
|
|
+ base |= ((unsigned long) mem_base_hi) << 32;
|
|
|
+ limit |= ((unsigned long) mem_limit_hi) << 32;
|
|
|
#else
|
|
|
if (mem_base_hi || mem_limit_hi) {
|
|
|
dev_err(&dev->dev, "can't handle 64-bit "
|