diff options
author | Bruce Allan <bruce.w.allan@intel.com> | 2008-11-21 19:53:51 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-11-21 19:53:51 -0500 |
commit | 75eb0fad56da8494b43865097f362633debdc958 (patch) | |
tree | a0c0b5ba3ad92712b52d934d911ebb69eee254bf /drivers/net/e1000e/netdev.c | |
parent | 438b365a2758c012393a7be24d31a9c06aa0a504 (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.c | 8 |
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 | ||