|
@@ -37,7 +37,6 @@
|
|
|
#define BYT_TURBO_RATIOS 0x66c
|
|
|
#define BYT_TURBO_VIDS 0x66d
|
|
|
|
|
|
-
|
|
|
#define FRAC_BITS 8
|
|
|
#define int_tofp(X) ((int64_t)(X) << FRAC_BITS)
|
|
|
#define fp_toint(X) ((X) >> FRAC_BITS)
|
|
@@ -167,7 +166,6 @@ static inline void pid_i_gain_set(struct _pid *pid, int percent)
|
|
|
|
|
|
static inline void pid_d_gain_set(struct _pid *pid, int percent)
|
|
|
{
|
|
|
-
|
|
|
pid->d_gain = div_fp(int_tofp(percent), int_tofp(100));
|
|
|
}
|
|
|
|
|
@@ -217,6 +215,7 @@ static inline void intel_pstate_busy_pid_reset(struct cpudata *cpu)
|
|
|
static inline void intel_pstate_reset_all_pid(void)
|
|
|
{
|
|
|
unsigned int cpu;
|
|
|
+
|
|
|
for_each_online_cpu(cpu) {
|
|
|
if (all_cpu_data[cpu])
|
|
|
intel_pstate_busy_pid_reset(all_cpu_data[cpu]);
|
|
@@ -230,6 +229,7 @@ static int pid_param_set(void *data, u64 val)
|
|
|
intel_pstate_reset_all_pid();
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
static int pid_param_get(void *data, u64 *val)
|
|
|
{
|
|
|
*val = *(u32 *)data;
|
|
@@ -284,6 +284,7 @@ static ssize_t store_no_turbo(struct kobject *a, struct attribute *b,
|
|
|
{
|
|
|
unsigned int input;
|
|
|
int ret;
|
|
|
+
|
|
|
ret = sscanf(buf, "%u", &input);
|
|
|
if (ret != 1)
|
|
|
return -EINVAL;
|
|
@@ -300,6 +301,7 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b,
|
|
|
{
|
|
|
unsigned int input;
|
|
|
int ret;
|
|
|
+
|
|
|
ret = sscanf(buf, "%u", &input);
|
|
|
if (ret != 1)
|
|
|
return -EINVAL;
|
|
@@ -307,6 +309,7 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b,
|
|
|
limits.max_sysfs_pct = clamp_t(int, input, 0 , 100);
|
|
|
limits.max_perf_pct = min(limits.max_policy_pct, limits.max_sysfs_pct);
|
|
|
limits.max_perf = div_fp(int_tofp(limits.max_perf_pct), int_tofp(100));
|
|
|
+
|
|
|
return count;
|
|
|
}
|
|
|
|
|
@@ -315,6 +318,7 @@ static ssize_t store_min_perf_pct(struct kobject *a, struct attribute *b,
|
|
|
{
|
|
|
unsigned int input;
|
|
|
int ret;
|
|
|
+
|
|
|
ret = sscanf(buf, "%u", &input);
|
|
|
if (ret != 1)
|
|
|
return -EINVAL;
|
|
@@ -360,6 +364,7 @@ static void __init intel_pstate_sysfs_expose_params(void)
|
|
|
static int byt_get_min_pstate(void)
|
|
|
{
|
|
|
u64 value;
|
|
|
+
|
|
|
rdmsrl(BYT_RATIOS, value);
|
|
|
return (value >> 8) & 0x7F;
|
|
|
}
|
|
@@ -367,6 +372,7 @@ static int byt_get_min_pstate(void)
|
|
|
static int byt_get_max_pstate(void)
|
|
|
{
|
|
|
u64 value;
|
|
|
+
|
|
|
rdmsrl(BYT_RATIOS, value);
|
|
|
return (value >> 16) & 0x7F;
|
|
|
}
|
|
@@ -374,6 +380,7 @@ static int byt_get_max_pstate(void)
|
|
|
static int byt_get_turbo_pstate(void)
|
|
|
{
|
|
|
u64 value;
|
|
|
+
|
|
|
rdmsrl(BYT_TURBO_RATIOS, value);
|
|
|
return value & 0x7F;
|
|
|
}
|
|
@@ -407,7 +414,6 @@ static void byt_get_vid(struct cpudata *cpudata)
|
|
|
{
|
|
|
u64 value;
|
|
|
|
|
|
-
|
|
|
rdmsrl(BYT_VIDS, value);
|
|
|
cpudata->vid.min = int_tofp((value >> 8) & 0x7f);
|
|
|
cpudata->vid.max = int_tofp((value >> 16) & 0x7f);
|
|
@@ -420,10 +426,10 @@ static void byt_get_vid(struct cpudata *cpudata)
|
|
|
cpudata->vid.turbo = value & 0x7f;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
static int core_get_min_pstate(void)
|
|
|
{
|
|
|
u64 value;
|
|
|
+
|
|
|
rdmsrl(MSR_PLATFORM_INFO, value);
|
|
|
return (value >> 40) & 0xFF;
|
|
|
}
|
|
@@ -431,6 +437,7 @@ static int core_get_min_pstate(void)
|
|
|
static int core_get_max_pstate(void)
|
|
|
{
|
|
|
u64 value;
|
|
|
+
|
|
|
rdmsrl(MSR_PLATFORM_INFO, value);
|
|
|
return (value >> 8) & 0xFF;
|
|
|
}
|
|
@@ -439,6 +446,7 @@ static int core_get_turbo_pstate(void)
|
|
|
{
|
|
|
u64 value;
|
|
|
int nont, ret;
|
|
|
+
|
|
|
rdmsrl(MSR_NHM_TURBO_RATIO_LIMIT, value);
|
|
|
nont = core_get_max_pstate();
|
|
|
ret = ((value) & 255);
|
|
@@ -493,12 +501,12 @@ static struct cpu_defaults byt_params = {
|
|
|
},
|
|
|
};
|
|
|
|
|
|
-
|
|
|
static void intel_pstate_get_min_max(struct cpudata *cpu, int *min, int *max)
|
|
|
{
|
|
|
int max_perf = cpu->pstate.turbo_pstate;
|
|
|
int max_perf_adj;
|
|
|
int min_perf;
|
|
|
+
|
|
|
if (limits.no_turbo)
|
|
|
max_perf = cpu->pstate.max_pstate;
|
|
|
|