aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/e1000e/netdev.c22
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