aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorShannon Nelson <shannon.nelson@intel.com>2013-12-11 03:17:10 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2014-01-08 00:49:36 -0500
commit42794bd8191b30e70e773f938f827f1ebb12e492 (patch)
tree439bf1454c925ed787e28370f13dd5f62a35c0e3 /drivers/net
parent7f61d1f70ba07e3875169433c407e9a4acd6a966 (diff)
i40e: Add code to wait for FW to complete in reset path
The RSTAT comes back with DEVICE READY to indicate that the HW is ready, but we still have to wait for the FW to indicate that the Core and Global modules are back up again. This needs a read of the NVM_ULD register. Change-Id: I88276165f9cd446d2f166fb4b8cff00521af4bec Signed-off-by: Anjali Singhai Jain <anjali.singhai@intel.com> Signed-off-by: Shannon Nelson <shannon.nelson@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_common.c20
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_register.h22
2 files changed, 42 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_common.c b/drivers/net/ethernet/intel/i40e/i40e_common.c
index 7cd59cefcc3b..337e9134903c 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_common.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_common.c
@@ -335,6 +335,7 @@ static enum i40e_media_type i40e_get_media_type(struct i40e_hw *hw)
335i40e_status i40e_pf_reset(struct i40e_hw *hw) 335i40e_status i40e_pf_reset(struct i40e_hw *hw)
336{ 336{
337 u32 cnt = 0; 337 u32 cnt = 0;
338 u32 cnt1 = 0;
338 u32 reg = 0; 339 u32 reg = 0;
339 u32 grst_del; 340 u32 grst_del;
340 341
@@ -355,6 +356,25 @@ i40e_status i40e_pf_reset(struct i40e_hw *hw)
355 return I40E_ERR_RESET_FAILED; 356 return I40E_ERR_RESET_FAILED;
356 } 357 }
357 358
359 /* Now Wait for the FW to be ready */
360 for (cnt1 = 0; cnt1 < I40E_PF_RESET_WAIT_COUNT; cnt1++) {
361 reg = rd32(hw, I40E_GLNVM_ULD);
362 reg &= (I40E_GLNVM_ULD_CONF_CORE_DONE_MASK |
363 I40E_GLNVM_ULD_CONF_GLOBAL_DONE_MASK);
364 if (reg == (I40E_GLNVM_ULD_CONF_CORE_DONE_MASK |
365 I40E_GLNVM_ULD_CONF_GLOBAL_DONE_MASK)) {
366 hw_dbg(hw, "Core and Global modules ready %d\n", cnt1);
367 break;
368 }
369 usleep_range(10000, 20000);
370 }
371 if (!(reg & (I40E_GLNVM_ULD_CONF_CORE_DONE_MASK |
372 I40E_GLNVM_ULD_CONF_GLOBAL_DONE_MASK))) {
373 hw_dbg(hw, "wait for FW Reset complete timedout\n");
374 hw_dbg(hw, "I40E_GLNVM_ULD = 0x%x\n", reg);
375 return I40E_ERR_RESET_FAILED;
376 }
377
358 /* Determine the PF number based on the PCI fn */ 378 /* Determine the PF number based on the PCI fn */
359 reg = rd32(hw, I40E_GLPCI_CAPSUP); 379 reg = rd32(hw, I40E_GLPCI_CAPSUP);
360 if (reg & I40E_GLPCI_CAPSUP_ARI_EN_MASK) 380 if (reg & I40E_GLPCI_CAPSUP_ARI_EN_MASK)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_register.h b/drivers/net/ethernet/intel/i40e/i40e_register.h
index 2394c66870f4..d188ec03aff2 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_register.h
+++ b/drivers/net/ethernet/intel/i40e/i40e_register.h
@@ -2053,6 +2053,28 @@
2053#define I40E_GLNVM_SRDATA_WRDATA_MASK (0xFFFF << I40E_GLNVM_SRDATA_WRDATA_SHIFT) 2053#define I40E_GLNVM_SRDATA_WRDATA_MASK (0xFFFF << I40E_GLNVM_SRDATA_WRDATA_SHIFT)
2054#define I40E_GLNVM_SRDATA_RDDATA_SHIFT 16 2054#define I40E_GLNVM_SRDATA_RDDATA_SHIFT 16
2055#define I40E_GLNVM_SRDATA_RDDATA_MASK (0xFFFF << I40E_GLNVM_SRDATA_RDDATA_SHIFT) 2055#define I40E_GLNVM_SRDATA_RDDATA_MASK (0xFFFF << I40E_GLNVM_SRDATA_RDDATA_SHIFT)
2056#define I40E_GLNVM_ULD 0x000B6008
2057#define I40E_GLNVM_ULD_CONF_PCIR_DONE_SHIFT 0
2058#define I40E_GLNVM_ULD_CONF_PCIR_DONE_MASK (0x1 << I40E_GLNVM_ULD_CONF_PCIR_DONE_SHIFT)
2059#define I40E_GLNVM_ULD_CONF_PCIRTL_DONE_SHIFT 1
2060#define I40E_GLNVM_ULD_CONF_PCIRTL_DONE_MASK (0x1 << I40E_GLNVM_ULD_CONF_PCIRTL_DONE_SHIFT)
2061#define I40E_GLNVM_ULD_CONF_LCB_DONE_SHIFT 2
2062#define I40E_GLNVM_ULD_CONF_LCB_DONE_MASK (0x1 << I40E_GLNVM_ULD_CONF_LCB_DONE_SHIFT)
2063#define I40E_GLNVM_ULD_CONF_CORE_DONE_SHIFT 3
2064#define I40E_GLNVM_ULD_CONF_CORE_DONE_MASK (0x1 << I40E_GLNVM_ULD_CONF_CORE_DONE_SHIFT)
2065#define I40E_GLNVM_ULD_CONF_GLOBAL_DONE_SHIFT 4
2066#define I40E_GLNVM_ULD_CONF_GLOBAL_DONE_MASK (0x1 << I40E_GLNVM_ULD_CONF_GLOBAL_DONE_SHIFT)
2067#define I40E_GLNVM_ULD_CONF_POR_DONE_SHIFT 5
2068#define I40E_GLNVM_ULD_CONF_POR_DONE_MASK (0x1 << I40E_GLNVM_ULD_CONF_POR_DONE_SHIFT)
2069#define I40E_GLNVM_ULD_CONF_PCIE_ANA_DONE_SHIFT 6
2070#define I40E_GLNVM_ULD_CONF_PCIE_ANA_DONE_MASK (0x1 << I40E_GLNVM_ULD_CONF_PCIE_ANA_DONE_SHIFT)
2071#define I40E_GLNVM_ULD_CONF_PHY_ANA_DONE_SHIFT 7
2072#define I40E_GLNVM_ULD_CONF_PHY_ANA_DONE_MASK (0x1 << I40E_GLNVM_ULD_CONF_PHY_ANA_DONE_SHIFT)
2073#define I40E_GLNVM_ULD_CONF_EMP_DONE_SHIFT 8
2074#define I40E_GLNVM_ULD_CONF_EMP_DONE_MASK (0x1 << I40E_GLNVM_ULD_CONF_EMP_DONE_SHIFT)
2075#define I40E_GLNVM_ULD_CONF_PCIALT_DONE_SHIFT 9
2076#define I40E_GLNVM_ULD_CONF_PCIALT_DONE_MASK (0x1 << I40E_GLNVM_ULD_CONF_PCIALT_DONE_SHIFT)
2077
2056#define I40E_GLPCI_BYTCTH 0x0009C484 2078#define I40E_GLPCI_BYTCTH 0x0009C484
2057#define I40E_GLPCI_BYTCTH_PCI_COUNT_BW_BCT_SHIFT 0 2079#define I40E_GLPCI_BYTCTH_PCI_COUNT_BW_BCT_SHIFT 0
2058#define I40E_GLPCI_BYTCTH_PCI_COUNT_BW_BCT_MASK (0xFFFFFFFF << I40E_GLPCI_BYTCTH_PCI_COUNT_BW_BCT_SHIFT) 2080#define I40E_GLPCI_BYTCTH_PCI_COUNT_BW_BCT_MASK (0xFFFFFFFF << I40E_GLPCI_BYTCTH_PCI_COUNT_BW_BCT_SHIFT)