diff options
author | Len Brown <len.brown@intel.com> | 2015-03-25 23:20:37 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2015-08-15 22:10:26 -0400 |
commit | 493f133f47750aa5566fafa9403617e3f0506f8c (patch) | |
tree | 9abd99da8e0b0d56cefb5ccf550bcf200ba831ca /drivers/idle/intel_idle.c | |
parent | 7dd0e0af64afe4aa08ccdd167f64bd007f09b515 (diff) |
intel_idle: Skylake Client Support
Skylake Client CPU idle Power states (C-states)
are similar to the previous generation, Broadwell.
However, Skylake does get its own table with updated
worst-case latency and average energy-break-even residency values.
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/idle/intel_idle.c')
-rw-r--r-- | drivers/idle/intel_idle.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c index 008e943d224d..3a3738fe016b 100644 --- a/drivers/idle/intel_idle.c +++ b/drivers/idle/intel_idle.c | |||
@@ -591,6 +591,67 @@ static struct cpuidle_state bdw_cstates[] = { | |||
591 | .enter = NULL } | 591 | .enter = NULL } |
592 | }; | 592 | }; |
593 | 593 | ||
594 | static struct cpuidle_state skl_cstates[] = { | ||
595 | { | ||
596 | .name = "C1-SKL", | ||
597 | .desc = "MWAIT 0x00", | ||
598 | .flags = MWAIT2flg(0x00), | ||
599 | .exit_latency = 2, | ||
600 | .target_residency = 2, | ||
601 | .enter = &intel_idle, | ||
602 | .enter_freeze = intel_idle_freeze, }, | ||
603 | { | ||
604 | .name = "C1E-SKL", | ||
605 | .desc = "MWAIT 0x01", | ||
606 | .flags = MWAIT2flg(0x01), | ||
607 | .exit_latency = 10, | ||
608 | .target_residency = 20, | ||
609 | .enter = &intel_idle, | ||
610 | .enter_freeze = intel_idle_freeze, }, | ||
611 | { | ||
612 | .name = "C3-SKL", | ||
613 | .desc = "MWAIT 0x10", | ||
614 | .flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TLB_FLUSHED, | ||
615 | .exit_latency = 70, | ||
616 | .target_residency = 100, | ||
617 | .enter = &intel_idle, | ||
618 | .enter_freeze = intel_idle_freeze, }, | ||
619 | { | ||
620 | .name = "C6-SKL", | ||
621 | .desc = "MWAIT 0x20", | ||
622 | .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED, | ||
623 | .exit_latency = 75, | ||
624 | .target_residency = 200, | ||
625 | .enter = &intel_idle, | ||
626 | .enter_freeze = intel_idle_freeze, }, | ||
627 | { | ||
628 | .name = "C7s-SKL", | ||
629 | .desc = "MWAIT 0x33", | ||
630 | .flags = MWAIT2flg(0x33) | CPUIDLE_FLAG_TLB_FLUSHED, | ||
631 | .exit_latency = 124, | ||
632 | .target_residency = 800, | ||
633 | .enter = &intel_idle, | ||
634 | .enter_freeze = intel_idle_freeze, }, | ||
635 | { | ||
636 | .name = "C8-SKL", | ||
637 | .desc = "MWAIT 0x40", | ||
638 | .flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED, | ||
639 | .exit_latency = 174, | ||
640 | .target_residency = 800, | ||
641 | .enter = &intel_idle, | ||
642 | .enter_freeze = intel_idle_freeze, }, | ||
643 | { | ||
644 | .name = "C10-SKL", | ||
645 | .desc = "MWAIT 0x60", | ||
646 | .flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED, | ||
647 | .exit_latency = 890, | ||
648 | .target_residency = 5000, | ||
649 | .enter = &intel_idle, | ||
650 | .enter_freeze = intel_idle_freeze, }, | ||
651 | { | ||
652 | .enter = NULL } | ||
653 | }; | ||
654 | |||
594 | static struct cpuidle_state atom_cstates[] = { | 655 | static struct cpuidle_state atom_cstates[] = { |
595 | { | 656 | { |
596 | .name = "C1E-ATM", | 657 | .name = "C1E-ATM", |
@@ -810,6 +871,12 @@ static const struct idle_cpu idle_cpu_bdw = { | |||
810 | .disable_promotion_to_c1e = true, | 871 | .disable_promotion_to_c1e = true, |
811 | }; | 872 | }; |
812 | 873 | ||
874 | static const struct idle_cpu idle_cpu_skl = { | ||
875 | .state_table = skl_cstates, | ||
876 | .disable_promotion_to_c1e = true, | ||
877 | }; | ||
878 | |||
879 | |||
813 | static const struct idle_cpu idle_cpu_avn = { | 880 | static const struct idle_cpu idle_cpu_avn = { |
814 | .state_table = avn_cstates, | 881 | .state_table = avn_cstates, |
815 | .disable_promotion_to_c1e = true, | 882 | .disable_promotion_to_c1e = true, |
@@ -844,6 +911,8 @@ static const struct x86_cpu_id intel_idle_ids[] __initconst = { | |||
844 | ICPU(0x47, idle_cpu_bdw), | 911 | ICPU(0x47, idle_cpu_bdw), |
845 | ICPU(0x4f, idle_cpu_bdw), | 912 | ICPU(0x4f, idle_cpu_bdw), |
846 | ICPU(0x56, idle_cpu_bdw), | 913 | ICPU(0x56, idle_cpu_bdw), |
914 | ICPU(0x4e, idle_cpu_skl), | ||
915 | ICPU(0x5e, idle_cpu_skl), | ||
847 | {} | 916 | {} |
848 | }; | 917 | }; |
849 | MODULE_DEVICE_TABLE(x86cpu, intel_idle_ids); | 918 | MODULE_DEVICE_TABLE(x86cpu, intel_idle_ids); |