aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e/netdev.c
diff options
context:
space:
mode:
authorBruce Allan <bruce.w.allan@intel.com>2008-11-21 19:53:51 -0500
committerDavid S. Miller <davem@davemloft.net>2008-11-21 19:53:51 -0500
commit75eb0fad56da8494b43865097f362633debdc958 (patch)
treea0c0b5ba3ad92712b52d934d911ebb69eee254bf /drivers/net/e1000e/netdev.c
parent438b365a2758c012393a7be24d31a9c06aa0a504 (diff)
e1000e: ESB2 config after link up
On ESB2, the MAC-to-PHY (Kumeran) interface must be configured after link is up before any traffic is sent; a new PHY operations function pointer is provided for this. To facilitate read/write of the Kumeran registers without blocking PHY register writes, the driver/firmware synchronization method which previously used a hardware semaphore for both PHY and Kumeran register accesses is now split. New Kumeran register read/write functions utilize this new synchronization method. Signed-off-by: Bruce Allan <bruce.w.allan@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/e1000e/netdev.c')
-rw-r--r--drivers/net/e1000e/netdev.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index ae6dce584d85..7eb1a3603db9 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -3493,6 +3493,7 @@ static void e1000_watchdog_task(struct work_struct *work)
3493 struct e1000_adapter, watchdog_task); 3493 struct e1000_adapter, watchdog_task);
3494 struct net_device *netdev = adapter->netdev; 3494 struct net_device *netdev = adapter->netdev;
3495 struct e1000_mac_info *mac = &adapter->hw.mac; 3495 struct e1000_mac_info *mac = &adapter->hw.mac;
3496 struct e1000_phy_info *phy = &adapter->hw.phy;
3496 struct e1000_ring *tx_ring = adapter->tx_ring; 3497 struct e1000_ring *tx_ring = adapter->tx_ring;
3497 struct e1000_hw *hw = &adapter->hw; 3498 struct e1000_hw *hw = &adapter->hw;
3498 u32 link, tctl; 3499 u32 link, tctl;
@@ -3599,6 +3600,13 @@ static void e1000_watchdog_task(struct work_struct *work)
3599 tctl |= E1000_TCTL_EN; 3600 tctl |= E1000_TCTL_EN;
3600 ew32(TCTL, tctl); 3601 ew32(TCTL, tctl);
3601 3602
3603 /*
3604 * Perform any post-link-up configuration before
3605 * reporting link up.
3606 */
3607 if (phy->ops.cfg_on_link_up)
3608 phy->ops.cfg_on_link_up(hw);
3609
3602 netif_carrier_on(netdev); 3610 netif_carrier_on(netdev);
3603 netif_tx_wake_all_queues(netdev); 3611 netif_tx_wake_all_queues(netdev);
3604 3612