diff options
| author | 2014-11-19 21:32:12 +1100 | |
|---|---|---|
| committer | 2014-11-19 21:32:12 +1100 | |
| commit | b10778a00d40b3d9fdaaf5891e802794781ff71c (patch) | |
| tree | 6ba4cbac86eecedc3f30650e7f764ecf00c83898 /drivers/idle/intel_idle.c | |
| parent | integrity: do zero padding of the key id (diff) | |
| parent | Linux 3.17 (diff) | |
| download | wireguard-linux-b10778a00d40b3d9fdaaf5891e802794781ff71c.tar.xz wireguard-linux-b10778a00d40b3d9fdaaf5891e802794781ff71c.zip | |
Merge commit 'v3.17' into next
Diffstat (limited to '')
| -rw-r--r-- | drivers/idle/intel_idle.c | 77 | 
1 files changed, 76 insertions, 1 deletions
| diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c index 4d140bbbe100..9b7ee7e427df 100644 --- a/drivers/idle/intel_idle.c +++ b/drivers/idle/intel_idle.c @@ -89,6 +89,7 @@ struct idle_cpu {  	 * Indicate which enable bits to clear here.  	 */  	unsigned long auto_demotion_disable_flags; +	bool byt_auto_demotion_disable_flag;  	bool disable_promotion_to_c1e;  }; @@ -442,6 +443,66 @@ static struct cpuidle_state hsw_cstates[] = {  	{  		.enter = NULL }  }; +static struct cpuidle_state bdw_cstates[] = { +	{ +		.name = "C1-BDW", +		.desc = "MWAIT 0x00", +		.flags = MWAIT2flg(0x00) | CPUIDLE_FLAG_TIME_VALID, +		.exit_latency = 2, +		.target_residency = 2, +		.enter = &intel_idle }, +	{ +		.name = "C1E-BDW", +		.desc = "MWAIT 0x01", +		.flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_TIME_VALID, +		.exit_latency = 10, +		.target_residency = 20, +		.enter = &intel_idle }, +	{ +		.name = "C3-BDW", +		.desc = "MWAIT 0x10", +		.flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, +		.exit_latency = 40, +		.target_residency = 100, +		.enter = &intel_idle }, +	{ +		.name = "C6-BDW", +		.desc = "MWAIT 0x20", +		.flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, +		.exit_latency = 133, +		.target_residency = 400, +		.enter = &intel_idle }, +	{ +		.name = "C7s-BDW", +		.desc = "MWAIT 0x32", +		.flags = MWAIT2flg(0x32) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, +		.exit_latency = 166, +		.target_residency = 500, +		.enter = &intel_idle }, +	{ +		.name = "C8-BDW", +		.desc = "MWAIT 0x40", +		.flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, +		.exit_latency = 300, +		.target_residency = 900, +		.enter = &intel_idle }, +	{ +		.name = "C9-BDW", +		.desc = "MWAIT 0x50", +		.flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, +		.exit_latency = 600, +		.target_residency = 1800, +		.enter = &intel_idle }, +	{ +		.name = "C10-BDW", +		.desc = "MWAIT 0x60", +		.flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, +		.exit_latency = 2600, +		.target_residency = 7700, +		.enter = &intel_idle }, +	{ +		.enter = NULL } +};  static struct cpuidle_state atom_cstates[] = {  	{ @@ -613,6 +674,7 @@ static const struct idle_cpu idle_cpu_snb = {  static const struct idle_cpu idle_cpu_byt = {  	.state_table = byt_cstates,  	.disable_promotion_to_c1e = true, +	.byt_auto_demotion_disable_flag = true,  };  static const struct idle_cpu idle_cpu_ivb = { @@ -630,6 +692,11 @@ static const struct idle_cpu idle_cpu_hsw = {  	.disable_promotion_to_c1e = true,  }; +static const struct idle_cpu idle_cpu_bdw = { +	.state_table = bdw_cstates, +	.disable_promotion_to_c1e = true, +}; +  static const struct idle_cpu idle_cpu_avn = {  	.state_table = avn_cstates,  	.disable_promotion_to_c1e = true, @@ -658,7 +725,10 @@ static const struct x86_cpu_id intel_idle_ids[] = {  	ICPU(0x3f, idle_cpu_hsw),  	ICPU(0x45, idle_cpu_hsw),  	ICPU(0x46, idle_cpu_hsw), -	ICPU(0x4D, idle_cpu_avn), +	ICPU(0x4d, idle_cpu_avn), +	ICPU(0x3d, idle_cpu_bdw), +	ICPU(0x4f, idle_cpu_bdw), +	ICPU(0x56, idle_cpu_bdw),  	{}  };  MODULE_DEVICE_TABLE(x86cpu, intel_idle_ids); @@ -814,6 +884,11 @@ static int __init intel_idle_cpuidle_driver_init(void)  	if (icpu->auto_demotion_disable_flags)  		on_each_cpu(auto_demotion_disable, NULL, 1); +	if (icpu->byt_auto_demotion_disable_flag) { +		wrmsrl(MSR_CC6_DEMOTION_POLICY_CONFIG, 0); +		wrmsrl(MSR_MC6_DEMOTION_POLICY_CONFIG, 0); +	} +  	if (icpu->disable_promotion_to_c1e)	/* each-cpu is redundant */  		on_each_cpu(c1e_promotion_disable, NULL, 1); | 
