|
@@ -826,6 +826,35 @@ static struct cpuidle_state bxt_cstates[] = {
|
|
|
.enter = NULL }
|
|
|
};
|
|
|
|
|
|
+static struct cpuidle_state dnv_cstates[] = {
|
|
|
+ {
|
|
|
+ .name = "C1-DNV",
|
|
|
+ .desc = "MWAIT 0x00",
|
|
|
+ .flags = MWAIT2flg(0x00),
|
|
|
+ .exit_latency = 2,
|
|
|
+ .target_residency = 2,
|
|
|
+ .enter = &intel_idle,
|
|
|
+ .enter_freeze = intel_idle_freeze, },
|
|
|
+ {
|
|
|
+ .name = "C1E-DNV",
|
|
|
+ .desc = "MWAIT 0x01",
|
|
|
+ .flags = MWAIT2flg(0x01),
|
|
|
+ .exit_latency = 10,
|
|
|
+ .target_residency = 20,
|
|
|
+ .enter = &intel_idle,
|
|
|
+ .enter_freeze = intel_idle_freeze, },
|
|
|
+ {
|
|
|
+ .name = "C6-DNV",
|
|
|
+ .desc = "MWAIT 0x20",
|
|
|
+ .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED,
|
|
|
+ .exit_latency = 50,
|
|
|
+ .target_residency = 500,
|
|
|
+ .enter = &intel_idle,
|
|
|
+ .enter_freeze = intel_idle_freeze, },
|
|
|
+ {
|
|
|
+ .enter = NULL }
|
|
|
+};
|
|
|
+
|
|
|
/**
|
|
|
* intel_idle
|
|
|
* @dev: cpuidle_device
|
|
@@ -1015,6 +1044,11 @@ static const struct idle_cpu idle_cpu_bxt = {
|
|
|
.disable_promotion_to_c1e = true,
|
|
|
};
|
|
|
|
|
|
+static const struct idle_cpu idle_cpu_dnv = {
|
|
|
+ .state_table = dnv_cstates,
|
|
|
+ .disable_promotion_to_c1e = true,
|
|
|
+};
|
|
|
+
|
|
|
#define ICPU(model, cpu) \
|
|
|
{ X86_VENDOR_INTEL, 6, model, X86_FEATURE_MWAIT, (unsigned long)&cpu }
|
|
|
|
|
@@ -1051,6 +1085,7 @@ static const struct x86_cpu_id intel_idle_ids[] __initconst = {
|
|
|
ICPU(INTEL_FAM6_SKYLAKE_X, idle_cpu_skx),
|
|
|
ICPU(INTEL_FAM6_XEON_PHI_KNL, idle_cpu_knl),
|
|
|
ICPU(INTEL_FAM6_ATOM_GOLDMONT, idle_cpu_bxt),
|
|
|
+ ICPU(INTEL_FAM6_ATOM_DENVERTON, idle_cpu_dnv),
|
|
|
{}
|
|
|
};
|
|
|
|