removing unused kernel-maemo files
[kernel-bfs] / kernel-power-2.6.28 / debian / patches / overclock.diff
1 --- kernel-power-2.6.28.orig/arch/arm/mach-omap2/omap3-opp.h
2 +++ kernel-power-2.6.28/arch/arm/mach-omap2/omap3-opp.h
3 @@ -4,6 +4,15 @@
4  #include <mach/omap-pm.h>
5  
6  /* MPU speeds */
7 +#define S1150M  1150000000
8 +#define S1100M  1100000000
9 +#define S1000M  1000000000
10 +#define S950M   950000000
11 +#define S900M   900000000
12 +#define S850M   850000000
13 +#define S805M   805000000
14 +#define S750M   750000000
15 +#define S700M   700000000
16  #define S600M   600000000
17  #define S550M   550000000
18  #define S500M   500000000
19 @@ -11,6 +20,7 @@
20  #define S125M   125000000
21  
22  /* DSP speeds */
23 +#define S520M   520000000
24  #define S430M   430000000
25  #define S400M   400000000
26  #define S360M   360000000
27 @@ -21,42 +31,8 @@
28  #define S83M    83000000
29  #define S166M   166000000
30  
31 -static struct omap_opp omap3_mpu_rate_table[] = {
32 -       {0, 0, 0},
33 -       /*OPP1*/
34 -       {0, VDD1_OPP1, 0x1E},
35 -       /*OPP2*/
36 -       {S250M, VDD1_OPP2, 0x26},
37 -       /*OPP3*/
38 -       {S500M, VDD1_OPP3, 0x30},
39 -       /*OPP4*/
40 -       {S550M, VDD1_OPP4, 0x36},
41 -       /*OPP5*/
42 -       {S600M, VDD1_OPP5, 0x3C},
43 -};
44 -
45 -static struct omap_opp omap3_l3_rate_table[] = {
46 -       {0, 0, 0},
47 -       /*OPP1*/
48 -       {0, VDD2_OPP1, 0x1E},
49 -       /*OPP2*/
50 -       {S83M, VDD2_OPP2, 0x24},
51 -       /*OPP3*/
52 -       {S166M, VDD2_OPP3, 0x2C},
53 -};
54 -
55 -static struct omap_opp omap3_dsp_rate_table[] = {
56 -       {0, 0, 0},
57 -       /*OPP1*/
58 -       {S90M, VDD1_OPP1, 0x1E},
59 -       /*OPP2*/
60 -       {S180M, VDD1_OPP2, 0x26},
61 -       /*OPP3*/
62 -       {S360M, VDD1_OPP3, 0x30},
63 -       /*OPP4*/
64 -       {S400M, VDD1_OPP4, 0x36},
65 -       /*OPP5*/
66 -       {S430M, VDD1_OPP5, 0x3C},
67 -};
68 +extern struct omap_opp omap3_mpu_rate_table[];
69 +extern struct omap_opp omap3_dsp_rate_table[];
70 +extern struct omap_opp omap3_l3_rate_table[];
71  
72  #endif
73 --- kernel-power-2.6.28.orig/arch/arm/plat-omap/include/mach/omap34xx.h
74 +++ kernel-power-2.6.28/arch/arm/plat-omap/include/mach/omap34xx.h
75 @@ -114,7 +114,8 @@
76  #define VDD2_OPP3      0x3
77  
78  #define MIN_VDD1_OPP   VDD1_OPP1
79 -#define MAX_VDD1_OPP   VDD1_OPP5
80 +/*#define MAX_VDD1_OPP VDD1_OPP5*/
81 +#define MAX_VDD1_OPP   15
82  #define MIN_VDD2_OPP   VDD2_OPP1
83  #define MAX_VDD2_OPP   VDD2_OPP3
84  
85 --- kernel-power-2.6.28.orig/arch/arm/mach-omap2/smartreflex.c
86 +++ kernel-power-2.6.28/arch/arm/mach-omap2/smartreflex.c
87 @@ -513,7 +513,7 @@
88         sr->req_opp_no = target_opp_no;
89  
90         if (sr->srid == SR1) {
91 -               switch (target_opp_no) {
92 +               switch (min(target_opp_no-1,5)) {
93                 case 5:
94                         nvalue_reciprocal = sr->opp5_nvalue;
95                         break;
96 @@ -527,6 +527,7 @@
97                         nvalue_reciprocal = sr->opp2_nvalue;
98                         break;
99                 case 1:
100 +               case 0:
101                         nvalue_reciprocal = sr->opp1_nvalue;
102                         break;
103                 default:
104 --- kernel-power-2.6.28.orig/arch/arm/plat-omap/cpu-omap.c
105 +++ kernel-power-2.6.28/arch/arm/plat-omap/cpu-omap.c
106 @@ -148,10 +148,13 @@
107                                                         VERY_HI_RATE) / 1000;
108         }
109  
110 -       clk_set_rate(mpu_clk, policy->cpuinfo.max_freq * 1000);
111 +       /*clk_set_rate(mpu_clk, policy->cpuinfo.max_freq * 1000);*/
112 +       clk_set_rate(mpu_clk, 600000 * 1000); /*N900 hack: set default max to 600MHz */
113  
114 -       policy->min = policy->cpuinfo.min_freq;
115 -       policy->max = policy->cpuinfo.max_freq;
116 +       /*policy->min = policy->cpuinfo.min_freq;*/
117 +       /*policy->max = policy->cpuinfo.max_freq;*/
118 +       policy->min = 250000;
119 +       policy->max = 600000; /*N900 hack: set default to 250-600MHz */
120         policy->cur = omap_getspeed(0);
121  
122         policy->cpuinfo.transition_latency = 300 * 1000;
123 --- kernel-power-2.6.28.orig/arch/arm/mach-omap2/smartreflex.h
124 +++ kernel-power-2.6.28/arch/arm/mach-omap2/smartreflex.h
125 @@ -254,7 +254,7 @@
126  /* XXX: end remove/move */
127  
128  /* SR_MAX_LOW_OPP: the highest of the "low OPPs", 1 and 2. */
129 -#define SR_MAX_LOW_OPP         2
130 +#define SR_MAX_LOW_OPP         3
131  
132  /* XXX: find more appropriate place for these once DVFS is in place */
133  extern u32 current_vdd1_opp;
134 --- kernel-power-2.6.28.orig/drivers/cpufreq/cpufreq.c
135 +++ kernel-power-2.6.28/drivers/cpufreq/cpufreq.c
136 @@ -465,7 +465,7 @@
137  /**
138   * cpufreq_per_cpu_attr_write() / store_##file_name() - sysfs write access
139   */
140 -#define store_one(file_name, object)                   \
141 +#define store_one(file_name, object,ignore,replace)                    \
142  static ssize_t store_##file_name                                       \
143  (struct cpufreq_policy *policy, const char *buf, size_t count)         \
144  {                                                                      \
145 @@ -479,15 +479,17 @@
146         ret = sscanf (buf, "%u", &new_policy.object);                   \
147         if (ret != 1)                                                   \
148                 return -EINVAL;                                         \
149 -                                                                       \
150 -       ret = __cpufreq_set_policy(policy, &new_policy);                \
151 +       if (new_policy.object != ignore && new_policy.object >= 100000) {       \
152 +           if (new_policy.object == replace) new_policy.object = ignore;       \
153 +           ret = __cpufreq_set_policy(policy, &new_policy);            \
154 +       }                                                               \
155         policy->user_policy.object = policy->object;                    \
156                                                                         \
157         return ret ? ret : count;                                       \
158  }
159  
160 -store_one(scaling_min_freq,min);
161 -store_one(scaling_max_freq,max);
162 +store_one(scaling_min_freq,min,0,0);
163 +store_one(scaling_max_freq,max,600000,599000);
164  
165  /**
166   * show_cpuinfo_cur_freq - current CPU frequency as detected by hardware
167 --- kernel-power-2.6.28.orig/arch/arm/mach-omap2/pm.c
168 +++ kernel-power-2.6.28/arch/arm/mach-omap2/pm.c
169 @@ -39,6 +39,62 @@
170  #include "prm-regbits-34xx.h"
171  #include "pm.h"
172  #include "smartreflex.h"
173 +#include "resource34xx_mutex.h"
174 +#include "omap3-opp.h"
175 +
176 +struct omap_opp omap3_mpu_rate_table[] = {
177 +       {0, 0, 0},
178 +       {0, 1, 0x1E},
179 +       /*underclocking*/
180 +       {S125M, 2, 0x1E},
181 +       /*default*/
182 +       {S250M, 3, 0x26},
183 +       {S500M, 4, 0x30},
184 +       {S550M, 5, 0x36},
185 +       {S600M, 6, 0x3C},
186 +       /*overclocking*/
187 +       {S700M, 7, 0x3C},
188 +       {S750M, 8, 0x3C},
189 +       {S805M, 9, 0x3C},
190 +       {S850M, 10, 0x3C},
191 +       {S900M, 11, 0x3C},
192 +       {S950M, 12, 0x3C},
193 +       {S1000M, 13, 0x3C},
194 +       {S1100M, 14, 0x48},
195 +       {S1150M, 15, 0x48},
196 +};
197 +
198 +struct omap_opp omap3_l3_rate_table[] = {
199 +       {0, 0, 0},
200 +       /*OPP1*/
201 +       {0, VDD2_OPP1, 0x1E},
202 +       /*OPP2*/
203 +       {S83M, VDD2_OPP2, 0x24},
204 +       /*OPP3*/
205 +       {S166M, VDD2_OPP3, 0x2C},
206 +};
207 +
208 +struct omap_opp omap3_dsp_rate_table[] = {
209 +       {0, 0, 0},
210 +       /*underclocking*/
211 +       {S90M,  1, 0x1E},
212 +       /*default*/
213 +       {S90M,  2, 0x1E},
214 +       {S180M, 3, 0x26},
215 +       {S360M, 4, 0x30},
216 +       {S400M, 5, 0x36},
217 +       {S430M, 6, 0x3C},
218 +       /*overclocking*/
219 +       {S430M, 7, 0x3C},
220 +       {S430M, 8, 0x3C},
221 +       {S430M, 9, 0x3C},/*800MHz*/
222 +       {S500M, 10, 0x3C},
223 +       {S500M, 11, 0x3C},
224 +       {S500M, 12, 0x3C},
225 +       {S500M, 13, 0x3C},
226 +       {S520M, 14, 0x48},
227 +       {S520M, 15, 0x48},
228 +};
229  
230  unsigned short enable_dyn_sleep;
231  unsigned short clocks_off_while_idle;
232 @@ -81,6 +137,108 @@
233  
234  #endif
235  
236 +static ssize_t omap_vdd1_opps_vsel_show(struct kobject *kobj,
237 +                                       struct kobj_attribute *attr, char *buf)
238 +{
239 +       int i;
240 +       char *b=buf;
241 +       for(i=1;i<=MAX_VDD1_OPP;i++)
242 +               b+=sprintf(b, "%hu ", mpu_opps[i].vsel);
243 +       b+=sprintf(b, "\n");
244 +       return b-buf;
245 +}
246 +
247 +static ssize_t omap_vdd1_opps_vsel_store(struct kobject *kobj,
248 +                                       struct kobj_attribute *attr,
249 +                                       const char *buf, size_t n)
250 +{
251 +       u16 value[16];
252 +       int i;
253 +
254 +       if (sscanf(buf, "%hu %hu %hu %hu %hu %hu %hu %hu %hu %hu %hu %hu %hu %hu %hu %hu",
255 +                               &value[0], &value[1], &value[2], &value[3],
256 +                               &value[4], &value[5], &value[6], &value[7],
257 +                               &value[8], &value[9], &value[10], &value[11],
258 +                               &value[12], &value[13], &value[14], &value[15]
259 +                               ) != MAX_VDD1_OPP) {
260 +               printk(KERN_ERR "vdd1_opps_vsel: Invalid value\n");
261 +               return -EINVAL;
262 +       }
263 +
264 +       mutex_lock(&dvfs_mutex);
265 +
266 +       for(i=1;i<=MAX_VDD1_OPP;i++) {
267 +               if(value[i-1]<0x49) {
268 +                       mpu_opps[i].vsel = value[i-1];
269 +               }
270 +       }
271 +
272 +       mutex_unlock(&dvfs_mutex);
273 +
274 +       return n;
275 +}
276 +
277 +static struct kobj_attribute vdd1_opps_vsel = {
278 +       .attr = {
279 +       .name = __stringify(vdd1_opps_vsel),
280 +       .mode = 0644,
281 +       },
282 +       .show = omap_vdd1_opps_vsel_show,
283 +       .store = omap_vdd1_opps_vsel_store,
284 +};
285 +
286 +static ssize_t omap_dsp_opps_rate_show(struct kobject *kobj,
287 +                                       struct kobj_attribute *attr, char *buf)
288 +{
289 +       int i;
290 +       char *b=buf;
291 +       for(i=1;i<=MAX_VDD1_OPP;i++)
292 +               b+=sprintf(b, "%u ", (u16) (dsp_opps[i].rate/1000000));
293 +       b+=sprintf(b, "\n");
294 +       return b-buf;
295 +}
296 +
297 +static ssize_t omap_dsp_opps_rate_store(struct kobject *kobj,
298 +                                       struct kobj_attribute *attr,
299 +                                       const char *buf, size_t n)
300 +{
301 +       u16 value[16];
302 +       int i;
303 +
304 +       if (sscanf(buf, "%hu %hu %hu %hu %hu %hu %hu %hu %hu %hu %hu %hu %hu %hu %hu %hu",
305 +                               &value[0], &value[1], &value[2], &value[3],
306 +                               &value[4], &value[5], &value[6], &value[7],
307 +                               &value[8], &value[9], &value[10], &value[11],
308 +                               &value[12], &value[13], &value[14], &value[15]
309 +                               ) != MAX_VDD1_OPP) {
310 +               printk(KERN_ERR "dsp_opps_rate: Invalid value\n");
311 +               return -EINVAL;
312 +       }
313 +
314 +       mutex_lock(&dvfs_mutex);
315 +
316 +       for(i=1;i<=MAX_VDD1_OPP;i++) {
317 +               if(value[i-1]<=600) {
318 +                       dsp_opps[i].rate = 1000000 * (u32)value[i-1];
319 +               }
320 +       }
321 +
322 +       mutex_unlock(&dvfs_mutex);
323 +
324 +       return n;
325 +}
326 +
327 +static struct kobj_attribute dsp_opps_rate = {
328 +       .attr = {
329 +       .name = __stringify(dsp_opps_rate),
330 +       .mode = 0644,
331 +       },
332 +       .show = omap_dsp_opps_rate_show,
333 +       .store = omap_dsp_opps_rate_store,
334 +};
335 +
336 +
337 +
338  static ssize_t idle_show(struct kobject *kobj, struct kobj_attribute *attr,
339                          char *buf)
340  {
341 @@ -258,6 +416,17 @@
342                 printk(KERN_ERR "sysfs_create_file failed: %d\n", error);
343                 return error;
344         }
345 +       error = sysfs_create_file(power_kobj, &vdd1_opps_vsel.attr);
346 +       if (error) {
347 +               printk(KERN_ERR "sysfs_create_file failed: %d\n", error);
348 +               return error;
349 +       }
350 +       error = sysfs_create_file(power_kobj, &dsp_opps_rate.attr);
351 +       if (error) {
352 +               printk(KERN_ERR "sysfs_create_file failed: %d\n", error);
353 +               return error;
354 +       }
355 +
356  #ifdef CONFIG_OMAP_PM_SRF
357         error = sysfs_create_file(power_kobj,
358                                   &vdd1_opp_attr.attr);
359 --- kernel-power-2.6.28.orig/drivers/cpufreq/cpufreq_ondemand.c
360 +++ kernel-power-2.6.28/drivers/cpufreq/cpufreq_ondemand.c
361 @@ -844,6 +844,10 @@
362         u64 idle_time;
363         int cpu = get_cpu();
364  
365 +       /* N900 hack */
366 +       avoid_frequencies_table[0] = 125000;
367 +       avoid_frequencies_count=1;
368 +
369         idle_time = get_cpu_idle_time_us(cpu, &wall);
370         put_cpu();
371         if (idle_time != -1ULL) {