diff --git a/xen/arch/x86/cpu/mwait-idle.c b/xen/arch/x86/cpu/mwait-idle.c index 290c57baa3..e3cda1cd0a 100644 --- a/xen/arch/x86/cpu/mwait-idle.c +++ b/xen/arch/x86/cpu/mwait-idle.c @@ -580,6 +580,40 @@ static const struct cpuidle_state atom_cstates[] = { {} }; +static const struct cpuidle_state tangier_cstates[] = { + { + .name = "C1-TNG", + .flags = MWAIT2flg(0x00), + .exit_latency = 1, + .target_residency = 4, + }, + { + .name = "C4-TNG", + .flags = MWAIT2flg(0x30) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 100, + .target_residency = 400, + }, + { + .name = "C6-TNG", + .flags = MWAIT2flg(0x52) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 140, + .target_residency = 560, + }, + { + .name = "C7-TNG", + .flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 1200, + .target_residency = 4000, + }, + { + .name = "C9-TNG", + .flags = MWAIT2flg(0x64) | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 10000, + .target_residency = 20000, + }, + {} +}; + static const struct cpuidle_state avn_cstates[] = { { .name = "C1-AVN", @@ -800,6 +834,10 @@ static const struct idle_cpu idle_cpu_atom = { .state_table = atom_cstates, }; +static const struct idle_cpu idle_cpu_tangier = { + .state_table = tangier_cstates, +}; + static const struct idle_cpu idle_cpu_lincroft = { .state_table = atom_cstates, .auto_demotion_disable_flags = ATM_LNC_C6_AUTO_DEMOTE, @@ -889,6 +927,7 @@ static const struct x86_cpu_id intel_idle_ids[] __initconstrel = { ICPU(0x2d, snb), ICPU(0x36, atom), ICPU(0x37, byt), + ICPU(0x4a, tangier), ICPU(0x4c, cht), ICPU(0x3a, ivb), ICPU(0x3e, ivt),