summaryrefslogtreecommitdiffstats
path: root/patches/boot_time_opt/0119-reduce-e1000e-boot-time-by-tightening-sleep-ranges.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/boot_time_opt/0119-reduce-e1000e-boot-time-by-tightening-sleep-ranges.patch')
-rw-r--r--patches/boot_time_opt/0119-reduce-e1000e-boot-time-by-tightening-sleep-ranges.patch311
1 files changed, 311 insertions, 0 deletions
diff --git a/patches/boot_time_opt/0119-reduce-e1000e-boot-time-by-tightening-sleep-ranges.patch b/patches/boot_time_opt/0119-reduce-e1000e-boot-time-by-tightening-sleep-ranges.patch
new file mode 100644
index 0000000..a068afb
--- /dev/null
+++ b/patches/boot_time_opt/0119-reduce-e1000e-boot-time-by-tightening-sleep-ranges.patch
@@ -0,0 +1,311 @@
1From d9390cb702de5cbef64f893efd2344c4f58dae82 Mon Sep 17 00:00:00 2001
2From: Arjan van de Ven <arjan@linux.intel.com>
3Date: Mon, 25 Jul 2016 06:44:34 -0500
4Subject: [PATCH 119/124] reduce e1000e boot time by tightening sleep ranges
5
6The e1000e driver is a great user of the usleep_range() API,
7and has any nice ranges that in principle help power management.
8
9However the ranges that are used only during system startup are
10very long (and can add easily 100 msec to the boot time) while
11the power savings of such long ranges is irrelevant due to the
12one-off, boot only, nature of these functions.
13
14This patch shrinks some of the longest ranges to be shorter
15(while still using a power friendly 1 msec range); this saves
16100msec+ of boot time on my BDW NUCs
17
18Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
19---
20 drivers/net/ethernet/intel/e1000e/80003es2lan.c | 2 +-
21 drivers/net/ethernet/intel/e1000e/82571.c | 2 +-
22 drivers/net/ethernet/intel/e1000e/ethtool.c | 14 +++++++-------
23 drivers/net/ethernet/intel/e1000e/ich8lan.c | 20 ++++++++++----------
24 drivers/net/ethernet/intel/e1000e/mac.c | 2 +-
25 drivers/net/ethernet/intel/e1000e/netdev.c | 14 +++++++-------
26 drivers/net/ethernet/intel/e1000e/nvm.c | 2 +-
27 7 files changed, 28 insertions(+), 28 deletions(-)
28
29diff --git a/drivers/net/ethernet/intel/e1000e/80003es2lan.c b/drivers/net/ethernet/intel/e1000e/80003es2lan.c
30index cd391376036c..b5759899eeb8 100644
31--- a/drivers/net/ethernet/intel/e1000e/80003es2lan.c
32+++ b/drivers/net/ethernet/intel/e1000e/80003es2lan.c
33@@ -698,7 +698,7 @@ static s32 e1000_reset_hw_80003es2lan(struct e1000_hw *hw)
34 ew32(TCTL, E1000_TCTL_PSP);
35 e1e_flush();
36
37- usleep_range(10000, 20000);
38+ usleep_range(10000, 11000);
39
40 ctrl = er32(CTRL);
41
42diff --git a/drivers/net/ethernet/intel/e1000e/82571.c b/drivers/net/ethernet/intel/e1000e/82571.c
43index 6b03c8553e59..d31145269dd9 100644
44--- a/drivers/net/ethernet/intel/e1000e/82571.c
45+++ b/drivers/net/ethernet/intel/e1000e/82571.c
46@@ -977,7 +977,7 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
47 ew32(TCTL, tctl);
48 e1e_flush();
49
50- usleep_range(10000, 20000);
51+ usleep_range(10000, 11000);
52
53 /* Must acquire the MDIO ownership before MAC reset.
54 * Ownership defaults to firmware after a reset.
55diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c
56index 7aff68a4a4df..7cb689bd41f8 100644
57--- a/drivers/net/ethernet/intel/e1000e/ethtool.c
58+++ b/drivers/net/ethernet/intel/e1000e/ethtool.c
59@@ -1023,7 +1023,7 @@ static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)
60 /* Disable all the interrupts */
61 ew32(IMC, 0xFFFFFFFF);
62 e1e_flush();
63- usleep_range(10000, 20000);
64+ usleep_range(10000, 11000);
65
66 /* Test each interrupt */
67 for (i = 0; i < 10; i++) {
68@@ -1055,7 +1055,7 @@ static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)
69 ew32(IMC, mask);
70 ew32(ICS, mask);
71 e1e_flush();
72- usleep_range(10000, 20000);
73+ usleep_range(10000, 11000);
74
75 if (adapter->test_icr & mask) {
76 *data = 3;
77@@ -1073,7 +1073,7 @@ static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)
78 ew32(IMS, mask);
79 ew32(ICS, mask);
80 e1e_flush();
81- usleep_range(10000, 20000);
82+ usleep_range(10000, 11000);
83
84 if (!(adapter->test_icr & mask)) {
85 *data = 4;
86@@ -1091,7 +1091,7 @@ static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)
87 ew32(IMC, ~mask & 0x00007FFF);
88 ew32(ICS, ~mask & 0x00007FFF);
89 e1e_flush();
90- usleep_range(10000, 20000);
91+ usleep_range(10000, 11000);
92
93 if (adapter->test_icr) {
94 *data = 5;
95@@ -1103,7 +1103,7 @@ static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)
96 /* Disable all the interrupts */
97 ew32(IMC, 0xFFFFFFFF);
98 e1e_flush();
99- usleep_range(10000, 20000);
100+ usleep_range(10000, 11000);
101
102 /* Unhook test interrupt handler */
103 free_irq(irq, netdev);
104@@ -1479,7 +1479,7 @@ static int e1000_set_82571_fiber_loopback(struct e1000_adapter *adapter)
105 */
106 ew32(SCTL, E1000_SCTL_ENABLE_SERDES_LOOPBACK);
107 e1e_flush();
108- usleep_range(10000, 20000);
109+ usleep_range(10000, 11000);
110
111 return 0;
112 }
113@@ -1592,7 +1592,7 @@ static void e1000_loopback_cleanup(struct e1000_adapter *adapter)
114 hw->phy.media_type == e1000_media_type_internal_serdes) {
115 ew32(SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
116 e1e_flush();
117- usleep_range(10000, 20000);
118+ usleep_range(10000, 11000);
119 break;
120 }
121 /* Fall Through */
122diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
123index f3aaca743ea3..bef75cec259f 100644
124--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
125+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
126@@ -289,7 +289,7 @@ static void e1000_toggle_lanphypc_pch_lpt(struct e1000_hw *hw)
127 u16 count = 20;
128
129 do {
130- usleep_range(5000, 10000);
131+ usleep_range(5000, 6000);
132 } while (!(er32(CTRL_EXT) & E1000_CTRL_EXT_LPCD) && count--);
133
134 msleep(30);
135@@ -422,7 +422,7 @@ static s32 e1000_init_phy_workarounds_pchlan(struct e1000_hw *hw)
136 /* Ungate automatic PHY configuration on non-managed 82579 */
137 if ((hw->mac.type == e1000_pch2lan) &&
138 !(fwsm & E1000_ICH_FWSM_FW_VALID)) {
139- usleep_range(10000, 20000);
140+ usleep_range(10000, 11000);
141 e1000_gate_hw_phy_config_ich8lan(hw, false);
142 }
143
144@@ -547,7 +547,7 @@ static s32 e1000_init_phy_params_ich8lan(struct e1000_hw *hw)
145 phy->id = 0;
146 while ((e1000_phy_unknown == e1000e_get_phy_type_from_id(phy->id)) &&
147 (i++ < 100)) {
148- usleep_range(1000, 2000);
149+ usleep_range(1000, 1100);
150 ret_val = e1000e_get_phy_id(hw);
151 if (ret_val)
152 return ret_val;
153@@ -1259,7 +1259,7 @@ static s32 e1000_disable_ulp_lpt_lp(struct e1000_hw *hw, bool force)
154 goto out;
155 }
156
157- usleep_range(10000, 20000);
158+ usleep_range(10000, 11000);
159 }
160 e_dbg("ULP_CONFIG_DONE cleared after %dmsec\n", i * 10);
161
162@@ -2011,7 +2011,7 @@ static s32 e1000_check_reset_block_ich8lan(struct e1000_hw *hw)
163
164 while ((blocked = !(er32(FWSM) & E1000_ICH_FWSM_RSPCIPHY)) &&
165 (i++ < 30))
166- usleep_range(10000, 20000);
167+ usleep_range(10000, 11000);
168 return blocked ? E1000_BLK_PHY_RESET : 0;
169 }
170
171@@ -2827,7 +2827,7 @@ static s32 e1000_post_phy_reset_ich8lan(struct e1000_hw *hw)
172 return 0;
173
174 /* Allow time for h/w to get to quiescent state after reset */
175- usleep_range(10000, 20000);
176+ usleep_range(10000, 11000);
177
178 /* Perform any necessary post-reset workarounds */
179 switch (hw->mac.type) {
180@@ -2863,7 +2863,7 @@ static s32 e1000_post_phy_reset_ich8lan(struct e1000_hw *hw)
181 if (hw->mac.type == e1000_pch2lan) {
182 /* Ungate automatic PHY configuration on non-managed 82579 */
183 if (!(er32(FWSM) & E1000_ICH_FWSM_FW_VALID)) {
184- usleep_range(10000, 20000);
185+ usleep_range(10000, 11000);
186 e1000_gate_hw_phy_config_ich8lan(hw, false);
187 }
188
189@@ -3884,7 +3884,7 @@ static s32 e1000_update_nvm_checksum_spt(struct e1000_hw *hw)
190 */
191 if (!ret_val) {
192 nvm->ops.reload(hw);
193- usleep_range(10000, 20000);
194+ usleep_range(10000, 11000);
195 }
196
197 out:
198@@ -4035,7 +4035,7 @@ static s32 e1000_update_nvm_checksum_ich8lan(struct e1000_hw *hw)
199 */
200 if (!ret_val) {
201 nvm->ops.reload(hw);
202- usleep_range(10000, 20000);
203+ usleep_range(10000, 11000);
204 }
205
206 out:
207@@ -4658,7 +4658,7 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw)
208 ew32(TCTL, E1000_TCTL_PSP);
209 e1e_flush();
210
211- usleep_range(10000, 20000);
212+ usleep_range(10000, 11000);
213
214 /* Workaround for ICH8 bit corruption issue in FIFO memory */
215 if (hw->mac.type == e1000_ich8lan) {
216diff --git a/drivers/net/ethernet/intel/e1000e/mac.c b/drivers/net/ethernet/intel/e1000e/mac.c
217index b322011ec282..eecbf7a12735 100644
218--- a/drivers/net/ethernet/intel/e1000e/mac.c
219+++ b/drivers/net/ethernet/intel/e1000e/mac.c
220@@ -815,7 +815,7 @@ static s32 e1000_poll_fiber_serdes_link_generic(struct e1000_hw *hw)
221 * milliseconds even if the other end is doing it in SW).
222 */
223 for (i = 0; i < FIBER_LINK_UP_LIMIT; i++) {
224- usleep_range(10000, 20000);
225+ usleep_range(10000, 11000);
226 status = er32(STATUS);
227 if (status & E1000_STATUS_LU)
228 break;
229diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
230index 7017281ba2dc..7d68d694ed9e 100644
231--- a/drivers/net/ethernet/intel/e1000e/netdev.c
232+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
233@@ -3206,7 +3206,7 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
234 if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX))
235 ew32(RCTL, rctl & ~E1000_RCTL_EN);
236 e1e_flush();
237- usleep_range(10000, 20000);
238+ usleep_range(10000, 11000);
239
240 if (adapter->flags2 & FLAG2_DMA_BURST) {
241 /* set the writeback threshold (only takes effect if the RDTR
242@@ -4258,7 +4258,7 @@ void e1000e_down(struct e1000_adapter *adapter, bool reset)
243
244 /* flush both disables and wait for them to finish */
245 e1e_flush();
246- usleep_range(10000, 20000);
247+ usleep_range(10000, 11000);
248
249 e1000_irq_disable(adapter);
250
251@@ -4296,7 +4296,7 @@ void e1000e_reinit_locked(struct e1000_adapter *adapter)
252 {
253 might_sleep();
254 while (test_and_set_bit(__E1000_RESETTING, &adapter->state))
255- usleep_range(1000, 2000);
256+ usleep_range(1000, 1100);
257 e1000e_down(adapter, true);
258 e1000e_up(adapter);
259 clear_bit(__E1000_RESETTING, &adapter->state);
260@@ -4671,7 +4671,7 @@ int e1000e_close(struct net_device *netdev)
261 int count = E1000_CHECK_RESET_COUNT;
262
263 while (test_bit(__E1000_RESETTING, &adapter->state) && count--)
264- usleep_range(10000, 20000);
265+ usleep_range(10000, 11000);
266
267 WARN_ON(test_bit(__E1000_RESETTING, &adapter->state));
268
269@@ -5996,7 +5996,7 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
270 }
271
272 while (test_and_set_bit(__E1000_RESETTING, &adapter->state))
273- usleep_range(1000, 2000);
274+ usleep_range(1000, 1100);
275 /* e1000e_down -> e1000e_reset dependent on max_frame_size & mtu */
276 adapter->max_frame_size = max_frame;
277 e_info("changing MTU from %d to %d\n", netdev->mtu, new_mtu);
278@@ -6276,7 +6276,7 @@ static int e1000e_pm_freeze(struct device *dev)
279 int count = E1000_CHECK_RESET_COUNT;
280
281 while (test_bit(__E1000_RESETTING, &adapter->state) && count--)
282- usleep_range(10000, 20000);
283+ usleep_range(10000, 11000);
284
285 WARN_ON(test_bit(__E1000_RESETTING, &adapter->state));
286
287@@ -6687,7 +6687,7 @@ static int e1000e_pm_runtime_suspend(struct device *dev)
288 int count = E1000_CHECK_RESET_COUNT;
289
290 while (test_bit(__E1000_RESETTING, &adapter->state) && count--)
291- usleep_range(10000, 20000);
292+ usleep_range(10000, 11000);
293
294 WARN_ON(test_bit(__E1000_RESETTING, &adapter->state));
295
296diff --git a/drivers/net/ethernet/intel/e1000e/nvm.c b/drivers/net/ethernet/intel/e1000e/nvm.c
297index 2efd80dfd88e..38f7c8fb3061 100644
298--- a/drivers/net/ethernet/intel/e1000e/nvm.c
299+++ b/drivers/net/ethernet/intel/e1000e/nvm.c
300@@ -410,7 +410,7 @@ s32 e1000e_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
301 break;
302 }
303 }
304- usleep_range(10000, 20000);
305+ usleep_range(10000, 11000);
306 nvm->ops.release(hw);
307 }
308
309--
3102.11.1
311