aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/idle/intel_idle.c66
1 files changed, 55 insertions, 11 deletions
diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
index f5b7fc56fa4a..1fb52f4e5870 100644
--- a/drivers/idle/intel_idle.c
+++ b/drivers/idle/intel_idle.c
@@ -218,18 +218,10 @@ static struct cpuidle_state byt_cstates[] = {
218 .enter = &intel_idle, 218 .enter = &intel_idle,
219 .enter_freeze = intel_idle_freeze, }, 219 .enter_freeze = intel_idle_freeze, },
220 { 220 {
221 .name = "C1E-BYT",
222 .desc = "MWAIT 0x01",
223 .flags = MWAIT2flg(0x01),
224 .exit_latency = 15,
225 .target_residency = 30,
226 .enter = &intel_idle,
227 .enter_freeze = intel_idle_freeze, },
228 {
229 .name = "C6N-BYT", 221 .name = "C6N-BYT",
230 .desc = "MWAIT 0x58", 222 .desc = "MWAIT 0x58",
231 .flags = MWAIT2flg(0x58) | CPUIDLE_FLAG_TLB_FLUSHED, 223 .flags = MWAIT2flg(0x58) | CPUIDLE_FLAG_TLB_FLUSHED,
232 .exit_latency = 40, 224 .exit_latency = 300,
233 .target_residency = 275, 225 .target_residency = 275,
234 .enter = &intel_idle, 226 .enter = &intel_idle,
235 .enter_freeze = intel_idle_freeze, }, 227 .enter_freeze = intel_idle_freeze, },
@@ -237,7 +229,7 @@ static struct cpuidle_state byt_cstates[] = {
237 .name = "C6S-BYT", 229 .name = "C6S-BYT",
238 .desc = "MWAIT 0x52", 230 .desc = "MWAIT 0x52",
239 .flags = MWAIT2flg(0x52) | CPUIDLE_FLAG_TLB_FLUSHED, 231 .flags = MWAIT2flg(0x52) | CPUIDLE_FLAG_TLB_FLUSHED,
240 .exit_latency = 140, 232 .exit_latency = 500,
241 .target_residency = 560, 233 .target_residency = 560,
242 .enter = &intel_idle, 234 .enter = &intel_idle,
243 .enter_freeze = intel_idle_freeze, }, 235 .enter_freeze = intel_idle_freeze, },
@@ -246,7 +238,7 @@ static struct cpuidle_state byt_cstates[] = {
246 .desc = "MWAIT 0x60", 238 .desc = "MWAIT 0x60",
247 .flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED, 239 .flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED,
248 .exit_latency = 1200, 240 .exit_latency = 1200,
249 .target_residency = 1500, 241 .target_residency = 4000,
250 .enter = &intel_idle, 242 .enter = &intel_idle,
251 .enter_freeze = intel_idle_freeze, }, 243 .enter_freeze = intel_idle_freeze, },
252 { 244 {
@@ -261,6 +253,51 @@ static struct cpuidle_state byt_cstates[] = {
261 .enter = NULL } 253 .enter = NULL }
262}; 254};
263 255
256static struct cpuidle_state cht_cstates[] = {
257 {
258 .name = "C1-CHT",
259 .desc = "MWAIT 0x00",
260 .flags = MWAIT2flg(0x00),
261 .exit_latency = 1,
262 .target_residency = 1,
263 .enter = &intel_idle,
264 .enter_freeze = intel_idle_freeze, },
265 {
266 .name = "C6N-CHT",
267 .desc = "MWAIT 0x58",
268 .flags = MWAIT2flg(0x58) | CPUIDLE_FLAG_TLB_FLUSHED,
269 .exit_latency = 80,
270 .target_residency = 275,
271 .enter = &intel_idle,
272 .enter_freeze = intel_idle_freeze, },
273 {
274 .name = "C6S-CHT",
275 .desc = "MWAIT 0x52",
276 .flags = MWAIT2flg(0x52) | CPUIDLE_FLAG_TLB_FLUSHED,
277 .exit_latency = 200,
278 .target_residency = 560,
279 .enter = &intel_idle,
280 .enter_freeze = intel_idle_freeze, },
281 {
282 .name = "C7-CHT",
283 .desc = "MWAIT 0x60",
284 .flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED,
285 .exit_latency = 1200,
286 .target_residency = 4000,
287 .enter = &intel_idle,
288 .enter_freeze = intel_idle_freeze, },
289 {
290 .name = "C7S-CHT",
291 .desc = "MWAIT 0x64",
292 .flags = MWAIT2flg(0x64) | CPUIDLE_FLAG_TLB_FLUSHED,
293 .exit_latency = 10000,
294 .target_residency = 20000,
295 .enter = &intel_idle,
296 .enter_freeze = intel_idle_freeze, },
297 {
298 .enter = NULL }
299};
300
264static struct cpuidle_state ivb_cstates[] = { 301static struct cpuidle_state ivb_cstates[] = {
265 { 302 {
266 .name = "C1-IVB", 303 .name = "C1-IVB",
@@ -748,6 +785,12 @@ static const struct idle_cpu idle_cpu_byt = {
748 .byt_auto_demotion_disable_flag = true, 785 .byt_auto_demotion_disable_flag = true,
749}; 786};
750 787
788static const struct idle_cpu idle_cpu_cht = {
789 .state_table = cht_cstates,
790 .disable_promotion_to_c1e = true,
791 .byt_auto_demotion_disable_flag = true,
792};
793
751static const struct idle_cpu idle_cpu_ivb = { 794static const struct idle_cpu idle_cpu_ivb = {
752 .state_table = ivb_cstates, 795 .state_table = ivb_cstates,
753 .disable_promotion_to_c1e = true, 796 .disable_promotion_to_c1e = true,
@@ -790,6 +833,7 @@ static const struct x86_cpu_id intel_idle_ids[] __initconst = {
790 ICPU(0x2d, idle_cpu_snb), 833 ICPU(0x2d, idle_cpu_snb),
791 ICPU(0x36, idle_cpu_atom), 834 ICPU(0x36, idle_cpu_atom),
792 ICPU(0x37, idle_cpu_byt), 835 ICPU(0x37, idle_cpu_byt),
836 ICPU(0x4c, idle_cpu_cht),
793 ICPU(0x3a, idle_cpu_ivb), 837 ICPU(0x3a, idle_cpu_ivb),
794 ICPU(0x3e, idle_cpu_ivt), 838 ICPU(0x3e, idle_cpu_ivt),
795 ICPU(0x3c, idle_cpu_hsw), 839 ICPU(0x3c, idle_cpu_hsw),