|
@@ -3242,18 +3242,23 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
|
|
|
rxcsum &= ~E1000_RXCSUM_TUOFL;
|
|
|
ew32(RXCSUM, rxcsum);
|
|
|
|
|
|
- if (adapter->hw.mac.type == e1000_pch2lan) {
|
|
|
- /* With jumbo frames, excessive C-state transition
|
|
|
- * latencies result in dropped transactions.
|
|
|
- */
|
|
|
- if (adapter->netdev->mtu > ETH_DATA_LEN) {
|
|
|
+ /* With jumbo frames, excessive C-state transition latencies result
|
|
|
+ * in dropped transactions.
|
|
|
+ */
|
|
|
+ if (adapter->netdev->mtu > ETH_DATA_LEN) {
|
|
|
+ u32 lat =
|
|
|
+ ((er32(PBA) & E1000_PBA_RXA_MASK) * 1024 -
|
|
|
+ adapter->max_frame_size) * 8 / 1000;
|
|
|
+
|
|
|
+ if (adapter->flags & FLAG_IS_ICH) {
|
|
|
u32 rxdctl = er32(RXDCTL(0));
|
|
|
ew32(RXDCTL(0), rxdctl | 0x3);
|
|
|
- pm_qos_update_request(&adapter->netdev->pm_qos_req, 55);
|
|
|
- } else {
|
|
|
- pm_qos_update_request(&adapter->netdev->pm_qos_req,
|
|
|
- PM_QOS_DEFAULT_VALUE);
|
|
|
}
|
|
|
+
|
|
|
+ pm_qos_update_request(&adapter->netdev->pm_qos_req, lat);
|
|
|
+ } else {
|
|
|
+ pm_qos_update_request(&adapter->netdev->pm_qos_req,
|
|
|
+ PM_QOS_DEFAULT_VALUE);
|
|
|
}
|
|
|
|
|
|
/* Enable Receives */
|
|
@@ -4281,10 +4286,8 @@ static int e1000_open(struct net_device *netdev)
|
|
|
e1000_update_mng_vlan(adapter);
|
|
|
|
|
|
/* DMA latency requirement to workaround jumbo issue */
|
|
|
- if (adapter->hw.mac.type == e1000_pch2lan)
|
|
|
- pm_qos_add_request(&adapter->netdev->pm_qos_req,
|
|
|
- PM_QOS_CPU_DMA_LATENCY,
|
|
|
- PM_QOS_DEFAULT_VALUE);
|
|
|
+ pm_qos_add_request(&adapter->netdev->pm_qos_req, PM_QOS_CPU_DMA_LATENCY,
|
|
|
+ PM_QOS_DEFAULT_VALUE);
|
|
|
|
|
|
/* before we allocate an interrupt, we must be ready to handle it.
|
|
|
* Setting DEBUG_SHIRQ in the kernel makes it fire an interrupt
|
|
@@ -4392,8 +4395,7 @@ static int e1000_close(struct net_device *netdev)
|
|
|
!test_bit(__E1000_TESTING, &adapter->state))
|
|
|
e1000e_release_hw_control(adapter);
|
|
|
|
|
|
- if (adapter->hw.mac.type == e1000_pch2lan)
|
|
|
- pm_qos_remove_request(&adapter->netdev->pm_qos_req);
|
|
|
+ pm_qos_remove_request(&adapter->netdev->pm_qos_req);
|
|
|
|
|
|
pm_runtime_put_sync(&pdev->dev);
|
|
|
|