i40e: Ioremap changes
authorAnjali Singhai <anjali.singhai@intel.com>
Thu, 26 Feb 2015 16:15:39 +0000 (16:15 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Thu, 5 Mar 2015 15:15:28 +0000 (07:15 -0800)
For future device support we do not want to map the whole CSR space since some
of it is mapped by other drivers with different mapping methods.

Note: As a side effect, the flash region (if exposed through the memory map)
gets unmapped too since it follows the future use region.

Change-ID: Ic729a2eacd692984220b1a415ff4fa0f98ea419a
Signed-off-by: Anjali Singhai Jain <anjali.singhai@intel.com>
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Tested-by: Jim Young <james.m.young@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e.h
drivers/net/ethernet/intel/i40e/i40e_main.c

index c5137313b62a3bd97bd1bfa880df902735eb6627..ce3fbb87544e7d07db2f48bb9f563fa9569ddeae 100644 (file)
@@ -72,6 +72,7 @@
 
 #define I40E_MAX_NUM_DESCRIPTORS      4096
 #define I40E_MAX_REGISTER     0x800000
+#define I40E_MAX_CSR_SPACE (4 * 1024 * 1024 - 64 * 1024)
 #define I40E_DEFAULT_NUM_DESCRIPTORS  512
 #define I40E_REQ_DESCRIPTOR_MULTIPLE  32
 #define I40E_MIN_NUM_DESCRIPTORS      64
index 02b57c3aa4bb7402780000c42be524dc77ff28eb..f769005ea28cafeff53e2c8ed1ef71605682f468 100644 (file)
@@ -9459,6 +9459,7 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        struct i40e_pf *pf;
        struct i40e_hw *hw;
        static u16 pfs_found;
+       u32 ioremap_len;
        u16 link_status;
        int err = 0;
        u32 len;
@@ -9507,8 +9508,11 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        hw = &pf->hw;
        hw->back = pf;
-       hw->hw_addr = ioremap(pci_resource_start(pdev, 0),
-                             pci_resource_len(pdev, 0));
+
+       ioremap_len = min_t(int, pci_resource_len(pdev, 0),
+                           I40E_MAX_CSR_SPACE);
+
+       hw->hw_addr = ioremap(pci_resource_start(pdev, 0), ioremap_len);
        if (!hw->hw_addr) {
                err = -EIO;
                dev_info(&pdev->dev, "ioremap(0x%04x, 0x%04x) failed: 0x%x\n",