diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/e1000e/netdev.c | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index 25b0ef8dc86a..39f01d998b4d 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
@@ -2472,21 +2472,23 @@ static void e1000_configure_rx(struct e1000_adapter *adapter) | |||
2472 | * packet size is equal or larger than the specified value (in 8 byte | 2472 | * packet size is equal or larger than the specified value (in 8 byte |
2473 | * units), e.g. using jumbo frames when setting to E1000_ERT_2048 | 2473 | * units), e.g. using jumbo frames when setting to E1000_ERT_2048 |
2474 | */ | 2474 | */ |
2475 | if ((adapter->flags & FLAG_HAS_ERT) && | 2475 | if (adapter->flags & FLAG_HAS_ERT) { |
2476 | (adapter->netdev->mtu > ETH_DATA_LEN)) { | 2476 | if (adapter->netdev->mtu > ETH_DATA_LEN) { |
2477 | u32 rxdctl = er32(RXDCTL(0)); | 2477 | u32 rxdctl = er32(RXDCTL(0)); |
2478 | ew32(RXDCTL(0), rxdctl | 0x3); | 2478 | ew32(RXDCTL(0), rxdctl | 0x3); |
2479 | ew32(ERT, E1000_ERT_2048 | (1 << 13)); | 2479 | ew32(ERT, E1000_ERT_2048 | (1 << 13)); |
2480 | /* | 2480 | /* |
2481 | * With jumbo frames and early-receive enabled, excessive | 2481 | * With jumbo frames and early-receive enabled, |
2482 | * C4->C2 latencies result in dropped transactions. | 2482 | * excessive C-state transition latencies result in |
2483 | */ | 2483 | * dropped transactions. |
2484 | pm_qos_update_requirement(PM_QOS_CPU_DMA_LATENCY, | 2484 | */ |
2485 | e1000e_driver_name, 55); | 2485 | pm_qos_update_requirement(PM_QOS_CPU_DMA_LATENCY, |
2486 | } else { | 2486 | adapter->netdev->name, 55); |
2487 | pm_qos_update_requirement(PM_QOS_CPU_DMA_LATENCY, | 2487 | } else { |
2488 | e1000e_driver_name, | 2488 | pm_qos_update_requirement(PM_QOS_CPU_DMA_LATENCY, |
2489 | PM_QOS_DEFAULT_VALUE); | 2489 | adapter->netdev->name, |
2490 | PM_QOS_DEFAULT_VALUE); | ||
2491 | } | ||
2490 | } | 2492 | } |
2491 | 2493 | ||
2492 | /* Enable Receives */ | 2494 | /* Enable Receives */ |
@@ -2804,6 +2806,12 @@ int e1000e_up(struct e1000_adapter *adapter) | |||
2804 | { | 2806 | { |
2805 | struct e1000_hw *hw = &adapter->hw; | 2807 | struct e1000_hw *hw = &adapter->hw; |
2806 | 2808 | ||
2809 | /* DMA latency requirement to workaround early-receive/jumbo issue */ | ||
2810 | if (adapter->flags & FLAG_HAS_ERT) | ||
2811 | pm_qos_add_requirement(PM_QOS_CPU_DMA_LATENCY, | ||
2812 | adapter->netdev->name, | ||
2813 | PM_QOS_DEFAULT_VALUE); | ||
2814 | |||
2807 | /* hardware has been reset, we need to reload some things */ | 2815 | /* hardware has been reset, we need to reload some things */ |
2808 | e1000_configure(adapter); | 2816 | e1000_configure(adapter); |
2809 | 2817 | ||
@@ -2864,6 +2872,10 @@ void e1000e_down(struct e1000_adapter *adapter) | |||
2864 | e1000_clean_tx_ring(adapter); | 2872 | e1000_clean_tx_ring(adapter); |
2865 | e1000_clean_rx_ring(adapter); | 2873 | e1000_clean_rx_ring(adapter); |
2866 | 2874 | ||
2875 | if (adapter->flags & FLAG_HAS_ERT) | ||
2876 | pm_qos_remove_requirement(PM_QOS_CPU_DMA_LATENCY, | ||
2877 | adapter->netdev->name); | ||
2878 | |||
2867 | /* | 2879 | /* |
2868 | * TODO: for power management, we could drop the link and | 2880 | * TODO: for power management, we could drop the link and |
2869 | * pci_disable_device here. | 2881 | * pci_disable_device here. |
@@ -5363,9 +5375,7 @@ static int __init e1000_init_module(void) | |||
5363 | printk(KERN_INFO "%s: Copyright (c) 1999 - 2009 Intel Corporation.\n", | 5375 | printk(KERN_INFO "%s: Copyright (c) 1999 - 2009 Intel Corporation.\n", |
5364 | e1000e_driver_name); | 5376 | e1000e_driver_name); |
5365 | ret = pci_register_driver(&e1000_driver); | 5377 | ret = pci_register_driver(&e1000_driver); |
5366 | pm_qos_add_requirement(PM_QOS_CPU_DMA_LATENCY, e1000e_driver_name, | 5378 | |
5367 | PM_QOS_DEFAULT_VALUE); | ||
5368 | |||
5369 | return ret; | 5379 | return ret; |
5370 | } | 5380 | } |
5371 | module_init(e1000_init_module); | 5381 | module_init(e1000_init_module); |
@@ -5379,7 +5389,6 @@ module_init(e1000_init_module); | |||
5379 | static void __exit e1000_exit_module(void) | 5389 | static void __exit e1000_exit_module(void) |
5380 | { | 5390 | { |
5381 | pci_unregister_driver(&e1000_driver); | 5391 | pci_unregister_driver(&e1000_driver); |
5382 | pm_qos_remove_requirement(PM_QOS_CPU_DMA_LATENCY, e1000e_driver_name); | ||
5383 | } | 5392 | } |
5384 | module_exit(e1000_exit_module); | 5393 | module_exit(e1000_exit_module); |
5385 | 5394 | ||