diff options
author | Adrian Calianu <adrian.calianu@enea.com> | 2017-05-22 08:43:50 +0200 |
---|---|---|
committer | Adrian Dudau <adrian.dudau@enea.com> | 2017-05-23 14:58:35 +0200 |
commit | 16b0e3313f53566481c106ace9992e477f8efe9b (patch) | |
tree | 5ec03a62db7836d2fb59813cb0c912751556c378 /patches/boot_time_opt/0119-reduce-e1000e-boot-time-by-tightening-sleep-ranges.patch | |
parent | 28da254d1c5ae012a6e064671aa14850c2a21a25 (diff) | |
download | enea-kernel-cache-16b0e3313f53566481c106ace9992e477f8efe9b.tar.gz |
patches: Boot time optimizations with ClearLinux patches
Signed-off-by: Adrian Calianu <adrian.calianu@enea.com>
Signed-off-by: Adrian Dudau <adrian.dudau@enea.com>
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.patch | 311 |
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 @@ | |||
1 | From d9390cb702de5cbef64f893efd2344c4f58dae82 Mon Sep 17 00:00:00 2001 | ||
2 | From: Arjan van de Ven <arjan@linux.intel.com> | ||
3 | Date: Mon, 25 Jul 2016 06:44:34 -0500 | ||
4 | Subject: [PATCH 119/124] reduce e1000e boot time by tightening sleep ranges | ||
5 | |||
6 | The e1000e driver is a great user of the usleep_range() API, | ||
7 | and has any nice ranges that in principle help power management. | ||
8 | |||
9 | However the ranges that are used only during system startup are | ||
10 | very long (and can add easily 100 msec to the boot time) while | ||
11 | the power savings of such long ranges is irrelevant due to the | ||
12 | one-off, boot only, nature of these functions. | ||
13 | |||
14 | This patch shrinks some of the longest ranges to be shorter | ||
15 | (while still using a power friendly 1 msec range); this saves | ||
16 | 100msec+ of boot time on my BDW NUCs | ||
17 | |||
18 | Signed-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 | |||
29 | diff --git a/drivers/net/ethernet/intel/e1000e/80003es2lan.c b/drivers/net/ethernet/intel/e1000e/80003es2lan.c | ||
30 | index 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 | |||
42 | diff --git a/drivers/net/ethernet/intel/e1000e/82571.c b/drivers/net/ethernet/intel/e1000e/82571.c | ||
43 | index 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. | ||
55 | diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c | ||
56 | index 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 */ | ||
122 | diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c | ||
123 | index 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) { | ||
216 | diff --git a/drivers/net/ethernet/intel/e1000e/mac.c b/drivers/net/ethernet/intel/e1000e/mac.c | ||
217 | index 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; | ||
229 | diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c | ||
230 | index 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 | |||
296 | diff --git a/drivers/net/ethernet/intel/e1000e/nvm.c b/drivers/net/ethernet/intel/e1000e/nvm.c | ||
297 | index 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 | -- | ||
310 | 2.11.1 | ||
311 | |||