aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ixgbe
diff options
context:
space:
mode:
authorGreg Rose <gregory.v.rose@intel.com>2010-01-22 17:46:22 -0500
committerDavid S. Miller <davem@davemloft.net>2010-01-23 04:13:55 -0500
commitc9205697c7527173c8f8bfa9f8c9dabdbced3c49 (patch)
treebee9e69b62c7373fd050fed926d2116f8a097dd8 /drivers/net/ixgbe
parentef291b8c71ee934d077676b891494c50e17ccc28 (diff)
ixgbe: Allow the VF driver to be loaded before the PF driver
The PF Reset Done bit should not be set in the extended control register until the PF has actually completed the bring up process. It is a mis- interpretation of the purpose of this bit to assume it should be set when the physical reset of the device is done. Instead it should be used to indicate to the VFs when the PF is ready to provide them with required services. This is not until after the PF is finished coming up and ready to process mailbox events. Signed-off-by: Greg Rose <gregory.v.rose@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ixgbe')
-rw-r--r--drivers/net/ixgbe/ixgbe_82599.c6
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c7
2 files changed, 8 insertions, 5 deletions
diff --git a/drivers/net/ixgbe/ixgbe_82599.c b/drivers/net/ixgbe/ixgbe_82599.c
index c92b5b8b3181..d4ed6adb7975 100644
--- a/drivers/net/ixgbe/ixgbe_82599.c
+++ b/drivers/net/ixgbe/ixgbe_82599.c
@@ -890,7 +890,7 @@ static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
890static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw) 890static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
891{ 891{
892 s32 status = 0; 892 s32 status = 0;
893 u32 ctrl, ctrl_ext; 893 u32 ctrl;
894 u32 i; 894 u32 i;
895 u32 autoc; 895 u32 autoc;
896 u32 autoc2; 896 u32 autoc2;
@@ -945,10 +945,6 @@ static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
945 status = IXGBE_ERR_RESET_FAILED; 945 status = IXGBE_ERR_RESET_FAILED;
946 hw_dbg(hw, "Reset polling failed to complete.\n"); 946 hw_dbg(hw, "Reset polling failed to complete.\n");
947 } 947 }
948 /* Clear PF Reset Done bit so PF/VF Mail Ops can work */
949 ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT);
950 ctrl_ext |= IXGBE_CTRL_EXT_PFRSTD;
951 IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext);
952 948
953 msleep(50); 949 msleep(50);
954 950
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index b8fd81748602..b96afd98fa3d 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -2826,6 +2826,7 @@ static int ixgbe_up_complete(struct ixgbe_adapter *adapter)
2826 u32 txdctl, rxdctl, mhadd; 2826 u32 txdctl, rxdctl, mhadd;
2827 u32 dmatxctl; 2827 u32 dmatxctl;
2828 u32 gpie; 2828 u32 gpie;
2829 u32 ctrl_ext;
2829 2830
2830 ixgbe_get_hw_control(adapter); 2831 ixgbe_get_hw_control(adapter);
2831 2832
@@ -3015,6 +3016,12 @@ static int ixgbe_up_complete(struct ixgbe_adapter *adapter)
3015 adapter->flags |= IXGBE_FLAG_NEED_LINK_UPDATE; 3016 adapter->flags |= IXGBE_FLAG_NEED_LINK_UPDATE;
3016 adapter->link_check_timeout = jiffies; 3017 adapter->link_check_timeout = jiffies;
3017 mod_timer(&adapter->watchdog_timer, jiffies); 3018 mod_timer(&adapter->watchdog_timer, jiffies);
3019
3020 /* Set PF Reset Done bit so PF/VF Mail Ops can work */
3021 ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT);
3022 ctrl_ext |= IXGBE_CTRL_EXT_PFRSTD;
3023 IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext);
3024
3018 return 0; 3025 return 0;
3019} 3026}
3020 3027