Merge tag 'char-misc-4.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[cascardo/linux.git] / drivers / misc / hpilo.c
index d6a901c..fea8ff4 100644 (file)
@@ -688,7 +688,8 @@ static void ilo_unmap_device(struct pci_dev *pdev, struct ilo_hwinfo *hw)
 
 static int ilo_map_device(struct pci_dev *pdev, struct ilo_hwinfo *hw)
 {
-       int error = -ENOMEM;
+       int bar;
+       unsigned long off;
 
        /* map the memory mapped i/o registers */
        hw->mmio_vaddr = pci_iomap(pdev, 1, 0);
@@ -698,7 +699,15 @@ static int ilo_map_device(struct pci_dev *pdev, struct ilo_hwinfo *hw)
        }
 
        /* map the adapter shared memory region */
-       hw->ram_vaddr = pci_iomap(pdev, 2, max_ccb * ILOHW_CCB_SZ);
+       if (pdev->subsystem_device == 0x00E4) {
+               bar = 5;
+               /* Last 8k is reserved for CCBs */
+               off = pci_resource_len(pdev, bar) - 0x2000;
+       } else {
+               bar = 2;
+               off = 0;
+       }
+       hw->ram_vaddr = pci_iomap_range(pdev, bar, off, max_ccb * ILOHW_CCB_SZ);
        if (hw->ram_vaddr == NULL) {
                dev_err(&pdev->dev, "Error mapping shared mem\n");
                goto mmio_free;
@@ -717,7 +726,7 @@ ram_free:
 mmio_free:
        pci_iounmap(pdev, hw->mmio_vaddr);
 out:
-       return error;
+       return -ENOMEM;
 }
 
 static void ilo_remove(struct pci_dev *pdev)
@@ -899,7 +908,7 @@ static void __exit ilo_exit(void)
        class_destroy(ilo_class);
 }
 
-MODULE_VERSION("1.4.1");
+MODULE_VERSION("1.5.0");
 MODULE_ALIAS(ILO_NAME);
 MODULE_DESCRIPTION(ILO_NAME);
 MODULE_AUTHOR("David Altobelli <david.altobelli@hpe.com>");