touchscreen:add calibration for touchscreen ili2102 to support it's APK
[firefly-linux-kernel-4.4.55.git] / drivers / cpufreq / cpufreq_ondemand.c
1 /*
2  *  drivers/cpufreq/cpufreq_ondemand.c
3  *
4  *  Copyright (C)  2001 Russell King
5  *            (C)  2003 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>.
6  *                      Jun Nakajima <jun.nakajima@intel.com>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12
13 #include <linux/kernel.h>
14 #include <linux/module.h>
15 #include <linux/init.h>
16 #include <linux/cpufreq.h>
17 #include <linux/cpu.h>
18 #include <linux/jiffies.h>
19 #include <linux/kernel_stat.h>
20 #include <linux/mutex.h>
21 #include <linux/hrtimer.h>
22 #include <linux/tick.h>
23 #include <linux/ktime.h>
24 #include <linux/sched.h>
25
26 /*
27  * dbs is used in this file as a shortform for demandbased switching
28  * It helps to keep variable names smaller, simpler
29  */
30
31 #define DEF_FREQUENCY_DOWN_DIFFERENTIAL         (10)
32 #define DEF_FREQUENCY_UP_THRESHOLD              (80)
33 #ifdef CONFIG_ARCH_RK29
34 #define MICRO_FREQUENCY_DOWN_DIFFERENTIAL       (10)
35 #define MICRO_FREQUENCY_UP_THRESHOLD            (80)
36 #else
37 #define MICRO_FREQUENCY_DOWN_DIFFERENTIAL       (3)
38 #define MICRO_FREQUENCY_UP_THRESHOLD            (95)
39 #endif
40 #define MICRO_FREQUENCY_MIN_SAMPLE_RATE         (10000)
41 #define MIN_FREQUENCY_UP_THRESHOLD              (11)
42 #define MAX_FREQUENCY_UP_THRESHOLD              (100)
43
44 /*
45  * The polling frequency of this governor depends on the capability of
46  * the processor. Default polling frequency is 1000 times the transition
47  * latency of the processor. The governor will work on any processor with
48  * transition latency <= 10mS, using appropriate sampling
49  * rate.
50  * For CPUs with transition latency > 10mS (mostly drivers with CPUFREQ_ETERNAL)
51  * this governor will not work.
52  * All times here are in uS.
53  */
54 #define MIN_SAMPLING_RATE_RATIO                 (2)
55
56 static unsigned int min_sampling_rate;
57
58 #define LATENCY_MULTIPLIER                      (1000)
59 #define MIN_LATENCY_MULTIPLIER                  (100)
60 #define TRANSITION_LATENCY_LIMIT                (10 * 1000 * 1000)
61
62 static void do_dbs_timer(struct work_struct *work);
63 static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
64                                 unsigned int event);
65
66 #ifndef CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND
67 static
68 #endif
69 struct cpufreq_governor cpufreq_gov_ondemand = {
70        .name                   = "ondemand",
71        .governor               = cpufreq_governor_dbs,
72        .max_transition_latency = TRANSITION_LATENCY_LIMIT,
73        .owner                  = THIS_MODULE,
74 };
75
76 /* Sampling types */
77 enum {DBS_NORMAL_SAMPLE, DBS_SUB_SAMPLE};
78
79 struct cpu_dbs_info_s {
80         cputime64_t prev_cpu_idle;
81         cputime64_t prev_cpu_wall;
82         cputime64_t prev_cpu_nice;
83         struct cpufreq_policy *cur_policy;
84         struct delayed_work work;
85         struct cpufreq_frequency_table *freq_table;
86         unsigned int freq_lo;
87         unsigned int freq_lo_jiffies;
88         unsigned int freq_hi_jiffies;
89         int cpu;
90         unsigned int sample_type:1;
91         /*
92          * percpu mutex that serializes governor limit change with
93          * do_dbs_timer invocation. We do not want do_dbs_timer to run
94          * when user is changing the governor or limits.
95          */
96         struct mutex timer_mutex;
97 };
98 static DEFINE_PER_CPU(struct cpu_dbs_info_s, od_cpu_dbs_info);
99
100 static unsigned int dbs_enable; /* number of CPUs using this policy */
101
102 /*
103  * dbs_mutex protects data in dbs_tuners_ins from concurrent changes on
104  * different CPUs. It protects dbs_enable in governor start/stop.
105  */
106 static DEFINE_MUTEX(dbs_mutex);
107
108 static struct workqueue_struct  *kondemand_wq;
109
110 static struct dbs_tuners {
111         unsigned int sampling_rate;
112         unsigned int up_threshold;
113         unsigned int down_differential;
114         unsigned int ignore_nice;
115         unsigned int powersave_bias;
116 } dbs_tuners_ins = {
117         .up_threshold = DEF_FREQUENCY_UP_THRESHOLD,
118         .down_differential = DEF_FREQUENCY_DOWN_DIFFERENTIAL,
119         .ignore_nice = 0,
120         .powersave_bias = 0,
121 };
122
123 static inline cputime64_t get_cpu_idle_time_jiffy(unsigned int cpu,
124                                                         cputime64_t *wall)
125 {
126         cputime64_t idle_time;
127         cputime64_t cur_wall_time;
128         cputime64_t busy_time;
129
130         cur_wall_time = jiffies64_to_cputime64(get_jiffies_64());
131         busy_time = cputime64_add(kstat_cpu(cpu).cpustat.user,
132                         kstat_cpu(cpu).cpustat.system);
133
134         busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.irq);
135         busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.softirq);
136         busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.steal);
137         busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.nice);
138
139         idle_time = cputime64_sub(cur_wall_time, busy_time);
140         if (wall)
141                 *wall = (cputime64_t)jiffies_to_usecs(cur_wall_time);
142
143         return (cputime64_t)jiffies_to_usecs(idle_time);
144 }
145
146 static inline cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall)
147 {
148         u64 idle_time = get_cpu_idle_time_us(cpu, wall);
149
150         if (idle_time == -1ULL)
151                 return get_cpu_idle_time_jiffy(cpu, wall);
152
153         return idle_time;
154 }
155
156 /*
157  * Find right freq to be set now with powersave_bias on.
158  * Returns the freq_hi to be used right now and will set freq_hi_jiffies,
159  * freq_lo, and freq_lo_jiffies in percpu area for averaging freqs.
160  */
161 static unsigned int powersave_bias_target(struct cpufreq_policy *policy,
162                                           unsigned int freq_next,
163                                           unsigned int relation)
164 {
165         unsigned int freq_req, freq_reduc, freq_avg;
166         unsigned int freq_hi, freq_lo;
167         unsigned int index = 0;
168         unsigned int jiffies_total, jiffies_hi, jiffies_lo;
169         struct cpu_dbs_info_s *dbs_info = &per_cpu(od_cpu_dbs_info,
170                                                    policy->cpu);
171
172         if (!dbs_info->freq_table) {
173                 dbs_info->freq_lo = 0;
174                 dbs_info->freq_lo_jiffies = 0;
175                 return freq_next;
176         }
177
178         cpufreq_frequency_table_target(policy, dbs_info->freq_table, freq_next,
179                         relation, &index);
180         freq_req = dbs_info->freq_table[index].frequency;
181         freq_reduc = freq_req * dbs_tuners_ins.powersave_bias / 1000;
182         freq_avg = freq_req - freq_reduc;
183
184         /* Find freq bounds for freq_avg in freq_table */
185         index = 0;
186         cpufreq_frequency_table_target(policy, dbs_info->freq_table, freq_avg,
187                         CPUFREQ_RELATION_H, &index);
188         freq_lo = dbs_info->freq_table[index].frequency;
189         index = 0;
190         cpufreq_frequency_table_target(policy, dbs_info->freq_table, freq_avg,
191                         CPUFREQ_RELATION_L, &index);
192         freq_hi = dbs_info->freq_table[index].frequency;
193
194         /* Find out how long we have to be in hi and lo freqs */
195         if (freq_hi == freq_lo) {
196                 dbs_info->freq_lo = 0;
197                 dbs_info->freq_lo_jiffies = 0;
198                 return freq_lo;
199         }
200         jiffies_total = usecs_to_jiffies(dbs_tuners_ins.sampling_rate);
201         jiffies_hi = (freq_avg - freq_lo) * jiffies_total;
202         jiffies_hi += ((freq_hi - freq_lo) / 2);
203         jiffies_hi /= (freq_hi - freq_lo);
204         jiffies_lo = jiffies_total - jiffies_hi;
205         dbs_info->freq_lo = freq_lo;
206         dbs_info->freq_lo_jiffies = jiffies_lo;
207         dbs_info->freq_hi_jiffies = jiffies_hi;
208         return freq_hi;
209 }
210
211 static void ondemand_powersave_bias_init_cpu(int cpu)
212 {
213         struct cpu_dbs_info_s *dbs_info = &per_cpu(od_cpu_dbs_info, cpu);
214         dbs_info->freq_table = cpufreq_frequency_get_table(cpu);
215         dbs_info->freq_lo = 0;
216 }
217
218 static void ondemand_powersave_bias_init(void)
219 {
220         int i;
221         for_each_online_cpu(i) {
222                 ondemand_powersave_bias_init_cpu(i);
223         }
224 }
225
226 /************************** sysfs interface ************************/
227
228 static ssize_t show_sampling_rate_max(struct kobject *kobj,
229                                       struct attribute *attr, char *buf)
230 {
231         printk_once(KERN_INFO "CPUFREQ: ondemand sampling_rate_max "
232                "sysfs file is deprecated - used by: %s\n", current->comm);
233         return sprintf(buf, "%u\n", -1U);
234 }
235
236 static ssize_t show_sampling_rate_min(struct kobject *kobj,
237                                       struct attribute *attr, char *buf)
238 {
239         return sprintf(buf, "%u\n", min_sampling_rate);
240 }
241
242 #define define_one_ro(_name)            \
243 static struct global_attr _name =       \
244 __ATTR(_name, 0444, show_##_name, NULL)
245
246 define_one_ro(sampling_rate_max);
247 define_one_ro(sampling_rate_min);
248
249 /* cpufreq_ondemand Governor Tunables */
250 #define show_one(file_name, object)                                     \
251 static ssize_t show_##file_name                                         \
252 (struct kobject *kobj, struct attribute *attr, char *buf)              \
253 {                                                                       \
254         return sprintf(buf, "%u\n", dbs_tuners_ins.object);             \
255 }
256 show_one(sampling_rate, sampling_rate);
257 show_one(up_threshold, up_threshold);
258 show_one(ignore_nice_load, ignore_nice);
259 show_one(powersave_bias, powersave_bias);
260
261 /*** delete after deprecation time ***/
262
263 #define DEPRECATION_MSG(file_name)                                      \
264         printk_once(KERN_INFO "CPUFREQ: Per core ondemand sysfs "       \
265                     "interface is deprecated - " #file_name "\n");
266
267 #define show_one_old(file_name)                                         \
268 static ssize_t show_##file_name##_old                                   \
269 (struct cpufreq_policy *unused, char *buf)                              \
270 {                                                                       \
271         printk_once(KERN_INFO "CPUFREQ: Per core ondemand sysfs "       \
272                     "interface is deprecated - " #file_name "\n");      \
273         return show_##file_name(NULL, NULL, buf);                       \
274 }
275 show_one_old(sampling_rate);
276 show_one_old(up_threshold);
277 show_one_old(ignore_nice_load);
278 show_one_old(powersave_bias);
279 show_one_old(sampling_rate_min);
280 show_one_old(sampling_rate_max);
281
282 #define define_one_ro_old(object, _name)       \
283 static struct freq_attr object =               \
284 __ATTR(_name, 0444, show_##_name##_old, NULL)
285
286 define_one_ro_old(sampling_rate_min_old, sampling_rate_min);
287 define_one_ro_old(sampling_rate_max_old, sampling_rate_max);
288
289 /*** delete after deprecation time ***/
290
291 static ssize_t store_sampling_rate(struct kobject *a, struct attribute *b,
292                                    const char *buf, size_t count)
293 {
294         unsigned int input;
295         int ret;
296         ret = sscanf(buf, "%u", &input);
297         if (ret != 1)
298                 return -EINVAL;
299
300         mutex_lock(&dbs_mutex);
301         dbs_tuners_ins.sampling_rate = max(input, min_sampling_rate);
302         mutex_unlock(&dbs_mutex);
303
304         return count;
305 }
306
307 static ssize_t store_up_threshold(struct kobject *a, struct attribute *b,
308                                   const char *buf, size_t count)
309 {
310         unsigned int input;
311         int ret;
312         ret = sscanf(buf, "%u", &input);
313
314         if (ret != 1 || input > MAX_FREQUENCY_UP_THRESHOLD ||
315                         input < MIN_FREQUENCY_UP_THRESHOLD) {
316                 return -EINVAL;
317         }
318
319         mutex_lock(&dbs_mutex);
320         dbs_tuners_ins.up_threshold = input;
321         mutex_unlock(&dbs_mutex);
322
323         return count;
324 }
325
326 static ssize_t store_ignore_nice_load(struct kobject *a, struct attribute *b,
327                                       const char *buf, size_t count)
328 {
329         unsigned int input;
330         int ret;
331
332         unsigned int j;
333
334         ret = sscanf(buf, "%u", &input);
335         if (ret != 1)
336                 return -EINVAL;
337
338         if (input > 1)
339                 input = 1;
340
341         mutex_lock(&dbs_mutex);
342         if (input == dbs_tuners_ins.ignore_nice) { /* nothing to do */
343                 mutex_unlock(&dbs_mutex);
344                 return count;
345         }
346         dbs_tuners_ins.ignore_nice = input;
347
348         /* we need to re-evaluate prev_cpu_idle */
349         for_each_online_cpu(j) {
350                 struct cpu_dbs_info_s *dbs_info;
351                 dbs_info = &per_cpu(od_cpu_dbs_info, j);
352                 dbs_info->prev_cpu_idle = get_cpu_idle_time(j,
353                                                 &dbs_info->prev_cpu_wall);
354                 if (dbs_tuners_ins.ignore_nice)
355                         dbs_info->prev_cpu_nice = kstat_cpu(j).cpustat.nice;
356
357         }
358         mutex_unlock(&dbs_mutex);
359
360         return count;
361 }
362
363 static ssize_t store_powersave_bias(struct kobject *a, struct attribute *b,
364                                     const char *buf, size_t count)
365 {
366         unsigned int input;
367         int ret;
368         ret = sscanf(buf, "%u", &input);
369
370         if (ret != 1)
371                 return -EINVAL;
372
373         if (input > 1000)
374                 input = 1000;
375
376         mutex_lock(&dbs_mutex);
377         dbs_tuners_ins.powersave_bias = input;
378         ondemand_powersave_bias_init();
379         mutex_unlock(&dbs_mutex);
380
381         return count;
382 }
383
384 #define define_one_rw(_name) \
385 static struct global_attr _name = \
386 __ATTR(_name, 0644, show_##_name, store_##_name)
387
388 define_one_rw(sampling_rate);
389 define_one_rw(up_threshold);
390 define_one_rw(ignore_nice_load);
391 define_one_rw(powersave_bias);
392
393 static struct attribute *dbs_attributes[] = {
394         &sampling_rate_max.attr,
395         &sampling_rate_min.attr,
396         &sampling_rate.attr,
397         &up_threshold.attr,
398         &ignore_nice_load.attr,
399         &powersave_bias.attr,
400         NULL
401 };
402
403 static struct attribute_group dbs_attr_group = {
404         .attrs = dbs_attributes,
405         .name = "ondemand",
406 };
407
408 /*** delete after deprecation time ***/
409
410 #define write_one_old(file_name)                                        \
411 static ssize_t store_##file_name##_old                                  \
412 (struct cpufreq_policy *unused, const char *buf, size_t count)          \
413 {                                                                       \
414        printk_once(KERN_INFO "CPUFREQ: Per core ondemand sysfs "        \
415                    "interface is deprecated - " #file_name "\n");       \
416        return store_##file_name(NULL, NULL, buf, count);                \
417 }
418 write_one_old(sampling_rate);
419 write_one_old(up_threshold);
420 write_one_old(ignore_nice_load);
421 write_one_old(powersave_bias);
422
423 #define define_one_rw_old(object, _name)       \
424 static struct freq_attr object =               \
425 __ATTR(_name, 0644, show_##_name##_old, store_##_name##_old)
426
427 define_one_rw_old(sampling_rate_old, sampling_rate);
428 define_one_rw_old(up_threshold_old, up_threshold);
429 define_one_rw_old(ignore_nice_load_old, ignore_nice_load);
430 define_one_rw_old(powersave_bias_old, powersave_bias);
431
432 static struct attribute *dbs_attributes_old[] = {
433        &sampling_rate_max_old.attr,
434        &sampling_rate_min_old.attr,
435        &sampling_rate_old.attr,
436        &up_threshold_old.attr,
437        &ignore_nice_load_old.attr,
438        &powersave_bias_old.attr,
439        NULL
440 };
441
442 static struct attribute_group dbs_attr_group_old = {
443        .attrs = dbs_attributes_old,
444        .name = "ondemand",
445 };
446
447 /*** delete after deprecation time ***/
448
449 /************************** sysfs end ************************/
450
451 static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info)
452 {
453         unsigned int max_load_freq;
454
455         struct cpufreq_policy *policy;
456         unsigned int j;
457
458         this_dbs_info->freq_lo = 0;
459         policy = this_dbs_info->cur_policy;
460
461         /*
462          * Every sampling_rate, we check, if current idle time is less
463          * than 20% (default), then we try to increase frequency
464          * Every sampling_rate, we look for a the lowest
465          * frequency which can sustain the load while keeping idle time over
466          * 30%. If such a frequency exist, we try to decrease to this frequency.
467          *
468          * Any frequency increase takes it to the maximum frequency.
469          * Frequency reduction happens at minimum steps of
470          * 5% (default) of current frequency
471          */
472
473         /* Get Absolute Load - in terms of freq */
474         max_load_freq = 0;
475
476         for_each_cpu(j, policy->cpus) {
477                 struct cpu_dbs_info_s *j_dbs_info;
478                 cputime64_t cur_wall_time, cur_idle_time;
479                 unsigned int idle_time, wall_time;
480                 unsigned int load, load_freq;
481                 int freq_avg;
482
483                 j_dbs_info = &per_cpu(od_cpu_dbs_info, j);
484
485                 cur_idle_time = get_cpu_idle_time(j, &cur_wall_time);
486
487                 wall_time = (unsigned int) cputime64_sub(cur_wall_time,
488                                 j_dbs_info->prev_cpu_wall);
489                 j_dbs_info->prev_cpu_wall = cur_wall_time;
490
491                 idle_time = (unsigned int) cputime64_sub(cur_idle_time,
492                                 j_dbs_info->prev_cpu_idle);
493                 j_dbs_info->prev_cpu_idle = cur_idle_time;
494
495                 if (dbs_tuners_ins.ignore_nice) {
496                         cputime64_t cur_nice;
497                         unsigned long cur_nice_jiffies;
498
499                         cur_nice = cputime64_sub(kstat_cpu(j).cpustat.nice,
500                                          j_dbs_info->prev_cpu_nice);
501                         /*
502                          * Assumption: nice time between sampling periods will
503                          * be less than 2^32 jiffies for 32 bit sys
504                          */
505                         cur_nice_jiffies = (unsigned long)
506                                         cputime64_to_jiffies64(cur_nice);
507
508                         j_dbs_info->prev_cpu_nice = kstat_cpu(j).cpustat.nice;
509                         idle_time += jiffies_to_usecs(cur_nice_jiffies);
510                 }
511
512                 if (unlikely(!wall_time || wall_time < idle_time))
513                         continue;
514
515                 load = 100 * (wall_time - idle_time) / wall_time;
516
517                 freq_avg = __cpufreq_driver_getavg(policy, j);
518                 if (freq_avg <= 0)
519                         freq_avg = policy->cur;
520
521                 load_freq = load * freq_avg;
522                 if (load_freq > max_load_freq)
523                         max_load_freq = load_freq;
524         }
525
526         /* Check for frequency increase */
527         if (max_load_freq > dbs_tuners_ins.up_threshold * policy->cur) {
528                 /* if we are already at full speed then break out early */
529                 if (!dbs_tuners_ins.powersave_bias) {
530                         if (policy->cur == policy->max)
531                                 return;
532
533                         __cpufreq_driver_target(policy, policy->max,
534                                 CPUFREQ_RELATION_H);
535                 } else {
536                         int freq = powersave_bias_target(policy, policy->max,
537                                         CPUFREQ_RELATION_H);
538                         __cpufreq_driver_target(policy, freq,
539                                 CPUFREQ_RELATION_L);
540                 }
541                 return;
542         }
543
544         /* Check for frequency decrease */
545         /* if we cannot reduce the frequency anymore, break out early */
546         if (policy->cur == policy->min)
547                 return;
548
549         /*
550          * The optimal frequency is the frequency that is the lowest that
551          * can support the current CPU usage without triggering the up
552          * policy. To be safe, we focus 10 points under the threshold.
553          */
554         if (max_load_freq <
555             (dbs_tuners_ins.up_threshold - dbs_tuners_ins.down_differential) *
556              policy->cur) {
557                 unsigned int freq_next;
558                 freq_next = max_load_freq /
559                                 (dbs_tuners_ins.up_threshold -
560                                  dbs_tuners_ins.down_differential);
561
562                 if (!dbs_tuners_ins.powersave_bias) {
563                         __cpufreq_driver_target(policy, freq_next,
564                                         CPUFREQ_RELATION_L);
565                 } else {
566                         int freq = powersave_bias_target(policy, freq_next,
567                                         CPUFREQ_RELATION_L);
568                         __cpufreq_driver_target(policy, freq,
569                                 CPUFREQ_RELATION_L);
570                 }
571         }
572 }
573
574 static void do_dbs_timer(struct work_struct *work)
575 {
576         struct cpu_dbs_info_s *dbs_info =
577                 container_of(work, struct cpu_dbs_info_s, work.work);
578         unsigned int cpu = dbs_info->cpu;
579         int sample_type = dbs_info->sample_type;
580
581         /* We want all CPUs to do sampling nearly on same jiffy */
582         int delay = usecs_to_jiffies(dbs_tuners_ins.sampling_rate);
583
584         if (num_online_cpus() > 1)
585                 delay -= jiffies % delay;
586
587         mutex_lock(&dbs_info->timer_mutex);
588
589         /* Common NORMAL_SAMPLE setup */
590         dbs_info->sample_type = DBS_NORMAL_SAMPLE;
591         if (!dbs_tuners_ins.powersave_bias ||
592             sample_type == DBS_NORMAL_SAMPLE) {
593                 dbs_check_cpu(dbs_info);
594                 if (dbs_info->freq_lo) {
595                         /* Setup timer for SUB_SAMPLE */
596                         dbs_info->sample_type = DBS_SUB_SAMPLE;
597                         delay = dbs_info->freq_hi_jiffies;
598                 }
599         } else {
600                 __cpufreq_driver_target(dbs_info->cur_policy,
601                         dbs_info->freq_lo, CPUFREQ_RELATION_H);
602         }
603         queue_delayed_work_on(cpu, kondemand_wq, &dbs_info->work, delay);
604         mutex_unlock(&dbs_info->timer_mutex);
605 }
606
607 static inline void dbs_timer_init(struct cpu_dbs_info_s *dbs_info)
608 {
609         /* We want all CPUs to do sampling nearly on same jiffy */
610         int delay = usecs_to_jiffies(dbs_tuners_ins.sampling_rate);
611         delay -= jiffies % delay;
612
613         dbs_info->sample_type = DBS_NORMAL_SAMPLE;
614         INIT_DELAYED_WORK_DEFERRABLE(&dbs_info->work, do_dbs_timer);
615         queue_delayed_work_on(dbs_info->cpu, kondemand_wq, &dbs_info->work,
616                 delay);
617 }
618
619 static inline void dbs_timer_exit(struct cpu_dbs_info_s *dbs_info)
620 {
621         cancel_delayed_work_sync(&dbs_info->work);
622 }
623
624 static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
625                                    unsigned int event)
626 {
627         unsigned int cpu = policy->cpu;
628         struct cpu_dbs_info_s *this_dbs_info;
629         unsigned int j;
630         int rc;
631
632         this_dbs_info = &per_cpu(od_cpu_dbs_info, cpu);
633
634         switch (event) {
635         case CPUFREQ_GOV_START:
636                 if ((!cpu_online(cpu)) || (!policy->cur))
637                         return -EINVAL;
638
639                 mutex_lock(&dbs_mutex);
640
641                 rc = sysfs_create_group(&policy->kobj, &dbs_attr_group_old);
642                 if (rc) {
643                         mutex_unlock(&dbs_mutex);
644                         return rc;
645                 }
646
647                 dbs_enable++;
648                 for_each_cpu(j, policy->cpus) {
649                         struct cpu_dbs_info_s *j_dbs_info;
650                         j_dbs_info = &per_cpu(od_cpu_dbs_info, j);
651                         j_dbs_info->cur_policy = policy;
652
653                         j_dbs_info->prev_cpu_idle = get_cpu_idle_time(j,
654                                                 &j_dbs_info->prev_cpu_wall);
655                         if (dbs_tuners_ins.ignore_nice) {
656                                 j_dbs_info->prev_cpu_nice =
657                                                 kstat_cpu(j).cpustat.nice;
658                         }
659                 }
660                 this_dbs_info->cpu = cpu;
661                 ondemand_powersave_bias_init_cpu(cpu);
662                 /*
663                  * Start the timerschedule work, when this governor
664                  * is used for first time
665                  */
666                 if (dbs_enable == 1) {
667                         unsigned int latency;
668
669                         rc = sysfs_create_group(cpufreq_global_kobject,
670                                                 &dbs_attr_group);
671                         if (rc) {
672                                 mutex_unlock(&dbs_mutex);
673                                 return rc;
674                         }
675
676                         /* policy latency is in nS. Convert it to uS first */
677                         latency = policy->cpuinfo.transition_latency / 1000;
678                         if (latency == 0)
679                                 latency = 1;
680                         /* Bring kernel and HW constraints together */
681                         min_sampling_rate = max(min_sampling_rate,
682                                         MIN_LATENCY_MULTIPLIER * latency);
683                         dbs_tuners_ins.sampling_rate =
684                                 max(min_sampling_rate,
685                                     latency * LATENCY_MULTIPLIER);
686                 }
687                 mutex_unlock(&dbs_mutex);
688
689                 mutex_init(&this_dbs_info->timer_mutex);
690                 dbs_timer_init(this_dbs_info);
691                 break;
692
693         case CPUFREQ_GOV_STOP:
694                 dbs_timer_exit(this_dbs_info);
695
696                 mutex_lock(&dbs_mutex);
697                 sysfs_remove_group(&policy->kobj, &dbs_attr_group_old);
698                 mutex_destroy(&this_dbs_info->timer_mutex);
699                 dbs_enable--;
700                 mutex_unlock(&dbs_mutex);
701                 if (!dbs_enable)
702                         sysfs_remove_group(cpufreq_global_kobject,
703                                            &dbs_attr_group);
704
705                 break;
706
707         case CPUFREQ_GOV_LIMITS:
708                 mutex_lock(&this_dbs_info->timer_mutex);
709                 if (policy->max < this_dbs_info->cur_policy->cur)
710                         __cpufreq_driver_target(this_dbs_info->cur_policy,
711                                 policy->max, CPUFREQ_RELATION_H);
712                 else if (policy->min > this_dbs_info->cur_policy->cur)
713                         __cpufreq_driver_target(this_dbs_info->cur_policy,
714                                 policy->min, CPUFREQ_RELATION_L);
715                 mutex_unlock(&this_dbs_info->timer_mutex);
716                 break;
717         }
718         return 0;
719 }
720
721 static int __init cpufreq_gov_dbs_init(void)
722 {
723         int err;
724         cputime64_t wall;
725         u64 idle_time;
726         int cpu = get_cpu();
727
728         idle_time = get_cpu_idle_time_us(cpu, &wall);
729         put_cpu();
730         if (idle_time != -1ULL) {
731                 /* Idle micro accounting is supported. Use finer thresholds */
732                 dbs_tuners_ins.up_threshold = MICRO_FREQUENCY_UP_THRESHOLD;
733                 dbs_tuners_ins.down_differential =
734                                         MICRO_FREQUENCY_DOWN_DIFFERENTIAL;
735                 /*
736                  * In no_hz/micro accounting case we set the minimum frequency
737                  * not depending on HZ, but fixed (very low). The deferred
738                  * timer might skip some samples if idle/sleeping as needed.
739                 */
740                 min_sampling_rate = MICRO_FREQUENCY_MIN_SAMPLE_RATE;
741         } else {
742                 /* For correct statistics, we need 10 ticks for each measure */
743                 min_sampling_rate =
744                         MIN_SAMPLING_RATE_RATIO * jiffies_to_usecs(10);
745         }
746
747         kondemand_wq = create_workqueue("kondemand");
748         if (!kondemand_wq) {
749                 printk(KERN_ERR "Creation of kondemand failed\n");
750                 return -EFAULT;
751         }
752         err = cpufreq_register_governor(&cpufreq_gov_ondemand);
753         if (err)
754                 destroy_workqueue(kondemand_wq);
755
756         return err;
757 }
758
759 static void __exit cpufreq_gov_dbs_exit(void)
760 {
761         cpufreq_unregister_governor(&cpufreq_gov_ondemand);
762         destroy_workqueue(kondemand_wq);
763 }
764
765
766 MODULE_AUTHOR("Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>");
767 MODULE_AUTHOR("Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>");
768 MODULE_DESCRIPTION("'cpufreq_ondemand' - A dynamic cpufreq governor for "
769         "Low Latency Frequency Transition capable processors");
770 MODULE_LICENSE("GPL");
771
772 #ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND
773 fs_initcall(cpufreq_gov_dbs_init);
774 #else
775 module_init(cpufreq_gov_dbs_init);
776 #endif
777 module_exit(cpufreq_gov_dbs_exit);