diff options
-rw-r--r-- | drivers/net/e1000e/netdev.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index 46c5ac6b4d77..e87ed3133528 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
@@ -2328,8 +2328,11 @@ void e1000e_reset(struct e1000_adapter *adapter) | |||
2328 | struct e1000_mac_info *mac = &adapter->hw.mac; | 2328 | struct e1000_mac_info *mac = &adapter->hw.mac; |
2329 | struct e1000_hw *hw = &adapter->hw; | 2329 | struct e1000_hw *hw = &adapter->hw; |
2330 | u32 tx_space, min_tx_space, min_rx_space; | 2330 | u32 tx_space, min_tx_space, min_rx_space; |
2331 | u32 pba; | ||
2331 | u16 hwm; | 2332 | u16 hwm; |
2332 | 2333 | ||
2334 | ew32(PBA, adapter->pba); | ||
2335 | |||
2333 | if (mac->max_frame_size > ETH_FRAME_LEN + ETH_FCS_LEN ) { | 2336 | if (mac->max_frame_size > ETH_FRAME_LEN + ETH_FCS_LEN ) { |
2334 | /* To maintain wire speed transmits, the Tx FIFO should be | 2337 | /* To maintain wire speed transmits, the Tx FIFO should be |
2335 | * large enough to accommodate two full transmit packets, | 2338 | * large enough to accommodate two full transmit packets, |
@@ -2337,11 +2340,11 @@ void e1000e_reset(struct e1000_adapter *adapter) | |||
2337 | * the Rx FIFO should be large enough to accommodate at least | 2340 | * the Rx FIFO should be large enough to accommodate at least |
2338 | * one full receive packet and is similarly rounded up and | 2341 | * one full receive packet and is similarly rounded up and |
2339 | * expressed in KB. */ | 2342 | * expressed in KB. */ |
2340 | adapter->pba = er32(PBA); | 2343 | pba = er32(PBA); |
2341 | /* upper 16 bits has Tx packet buffer allocation size in KB */ | 2344 | /* upper 16 bits has Tx packet buffer allocation size in KB */ |
2342 | tx_space = adapter->pba >> 16; | 2345 | tx_space = pba >> 16; |
2343 | /* lower 16 bits has Rx packet buffer allocation size in KB */ | 2346 | /* lower 16 bits has Rx packet buffer allocation size in KB */ |
2344 | adapter->pba &= 0xffff; | 2347 | pba &= 0xffff; |
2345 | /* the tx fifo also stores 16 bytes of information about the tx | 2348 | /* the tx fifo also stores 16 bytes of information about the tx |
2346 | * but don't include ethernet FCS because hardware appends it */ | 2349 | * but don't include ethernet FCS because hardware appends it */ |
2347 | min_tx_space = (mac->max_frame_size + | 2350 | min_tx_space = (mac->max_frame_size + |
@@ -2357,20 +2360,21 @@ void e1000e_reset(struct e1000_adapter *adapter) | |||
2357 | /* If current Tx allocation is less than the min Tx FIFO size, | 2360 | /* If current Tx allocation is less than the min Tx FIFO size, |
2358 | * and the min Tx FIFO size is less than the current Rx FIFO | 2361 | * and the min Tx FIFO size is less than the current Rx FIFO |
2359 | * allocation, take space away from current Rx allocation */ | 2362 | * allocation, take space away from current Rx allocation */ |
2360 | if (tx_space < min_tx_space && | 2363 | if ((tx_space < min_tx_space) && |
2361 | ((min_tx_space - tx_space) < adapter->pba)) { | 2364 | ((min_tx_space - tx_space) < pba)) { |
2362 | adapter->pba -= - (min_tx_space - tx_space); | 2365 | pba -= min_tx_space - tx_space; |
2363 | 2366 | ||
2364 | /* if short on rx space, rx wins and must trump tx | 2367 | /* if short on rx space, rx wins and must trump tx |
2365 | * adjustment or use Early Receive if available */ | 2368 | * adjustment or use Early Receive if available */ |
2366 | if ((adapter->pba < min_rx_space) && | 2369 | if ((pba < min_rx_space) && |
2367 | (!(adapter->flags & FLAG_HAS_ERT))) | 2370 | (!(adapter->flags & FLAG_HAS_ERT))) |
2368 | /* ERT enabled in e1000_configure_rx */ | 2371 | /* ERT enabled in e1000_configure_rx */ |
2369 | adapter->pba = min_rx_space; | 2372 | pba = min_rx_space; |
2370 | } | 2373 | } |
2374 | |||
2375 | ew32(PBA, pba); | ||
2371 | } | 2376 | } |
2372 | 2377 | ||
2373 | ew32(PBA, adapter->pba); | ||
2374 | 2378 | ||
2375 | /* flow control settings */ | 2379 | /* flow control settings */ |
2376 | /* The high water mark must be low enough to fit one full frame | 2380 | /* The high water mark must be low enough to fit one full frame |