aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/idle
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2015-03-27 20:54:01 -0400
committerLen Brown <len.brown@intel.com>2015-03-31 21:57:15 -0400
commitcab07a5652d1d124b505c2b7ed21c6823295c5d7 (patch)
treed3944fd4847add04e7afb337ecb3d4e152ea7618 /drivers/idle
parentd7ef76717322c8e2df7d4360b33faa9466cb1a0d (diff)
intel_idle: Add support for the Airmont Core in the Cherrytrail and Braswell SOCs
Support C-states for the Airmont core in the Cherrytrail and Braswell SOCs. The states are similar to those of Silvermont in Baytrail, except both flavors of C6 states are faster. Signed-off-by: Len Brown <len.brown@intel.com> Cc: Kumar P Mahesh <mahesh.kumar.p@intel.com> Cc: Alan Cox <alan@linux.intel.com> Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
Diffstat (limited to 'drivers/idle')
-rw-r--r--drivers/idle/intel_idle.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
index 44d1d7920202..2ec8618c376f 100644
--- a/drivers/idle/intel_idle.c
+++ b/drivers/idle/intel_idle.c
@@ -253,6 +253,51 @@ static struct cpuidle_state byt_cstates[] = {
253 .enter = NULL } 253 .enter = NULL }
254}; 254};
255 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
256static struct cpuidle_state ivb_cstates[] = { 301static struct cpuidle_state ivb_cstates[] = {
257 { 302 {
258 .name = "C1-IVB", 303 .name = "C1-IVB",
@@ -740,6 +785,12 @@ static const struct idle_cpu idle_cpu_byt = {
740 .byt_auto_demotion_disable_flag = true, 785 .byt_auto_demotion_disable_flag = true,
741}; 786};
742 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
743static const struct idle_cpu idle_cpu_ivb = { 794static const struct idle_cpu idle_cpu_ivb = {
744 .state_table = ivb_cstates, 795 .state_table = ivb_cstates,
745 .disable_promotion_to_c1e = true, 796 .disable_promotion_to_c1e = true,
@@ -782,6 +833,7 @@ static const struct x86_cpu_id intel_idle_ids[] = {
782 ICPU(0x2d, idle_cpu_snb), 833 ICPU(0x2d, idle_cpu_snb),
783 ICPU(0x36, idle_cpu_atom), 834 ICPU(0x36, idle_cpu_atom),
784 ICPU(0x37, idle_cpu_byt), 835 ICPU(0x37, idle_cpu_byt),
836 ICPU(0x4c, idle_cpu_cht),
785 ICPU(0x3a, idle_cpu_ivb), 837 ICPU(0x3a, idle_cpu_ivb),
786 ICPU(0x3e, idle_cpu_ivt), 838 ICPU(0x3e, idle_cpu_ivt),
787 ICPU(0x3c, idle_cpu_hsw), 839 ICPU(0x3c, idle_cpu_hsw),