summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx31/debug-imx31.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx31/debug-imx31.c')
-rw-r--r--firmware/target/arm/imx31/debug-imx31.c147
1 files changed, 146 insertions, 1 deletions
diff --git a/firmware/target/arm/imx31/debug-imx31.c b/firmware/target/arm/imx31/debug-imx31.c
index 1239c7cae7..f8dacbedd5 100644
--- a/firmware/target/arm/imx31/debug-imx31.c
+++ b/firmware/target/arm/imx31/debug-imx31.c
@@ -29,6 +29,7 @@
29#include "adc.h" 29#include "adc.h"
30#include "ccm-imx31.h" 30#include "ccm-imx31.h"
31#include "dvfs_dptc-imx31.h" 31#include "dvfs_dptc-imx31.h"
32#include <stdio.h>
32 33
33bool __dbg_hw_info(void) 34bool __dbg_hw_info(void)
34{ 35{
@@ -242,4 +243,148 @@ bool dbg_ports(void)
242 if (button_get_w_tmo(HZ/10) == (DEBUG_CANCEL|BUTTON_REL)) 243 if (button_get_w_tmo(HZ/10) == (DEBUG_CANCEL|BUTTON_REL))
243 return false; 244 return false;
244 } 245 }
245} 246}
247
248
249bool __dbg_dvfs_dptc(void)
250{
251 int ltwlevel;
252 unsigned long ltdetect;
253 int dvfs_wp, dvfs_mask;
254 bool dptc_on;
255 int i;
256 char buf[32];
257 unsigned long ltw[4];
258 bool ltwassert[4];
259
260 lcd_clear_display();
261 lcd_setfont(FONT_SYSFIXED);
262
263 dvfs_mask = dvfs_level_mask();
264
265 dvfs_wp = dvfs_enabled() ? -1 : (int)dvfs_get_level();
266 dptc_on = dptc_enabled();
267 dvfs_get_gp_sense(&ltwlevel, &ltdetect);
268
269 while (1)
270 {
271 int line = 0;
272
273 int button = button_get_w_tmo(HZ/10);
274
275 if (dvfs_wp < 0)
276 strcpy(buf, "Auto");
277 else
278 snprintf(buf, sizeof(buf), "%d", dvfs_wp);
279
280 lcd_puts(0, line, "[DVFS/DPTC]");
281 line += 2;
282 lcd_putsf(0, line, "CPU freq. point (Up/Dn) : %s", buf);
283 line += 2;
284 lcd_putsf(0, line, "DPTC volt. scale (Play) : %s",
285 dptc_on ? "Enabled" : "Disabled");
286 line += 2;
287 lcd_putsf(0, line, "GP load level (Vol +/-) : %d", ltwlevel);
288 line += 2;
289 lcd_puts(0, line, "----------------------------------------");
290 line += 2;
291 lcd_putsf(0, line++, "Frequency: %dHz", cpu_frequency);
292 i = dvfs_dptc_get_voltage();
293 lcd_putsf(0, line++, "Voltage : %d.%03d V", i / 1000, i % 1000);
294
295 for (i = 0; i <= 3; i++)
296 {
297 ltw[i] = dvfs_get_lt_weight(i + DVFS_LT_SIG_DVGP0);
298 ltwassert[i] = dvfs_get_gp_bit(i + DVFS_DVGP_0);
299 }
300
301 lcd_putsf(0, line++, "GPW (3-0): %lu%lu%lu%lu %c%c%c%c",
302 ltw[3], ltw[2], ltw[1], ltw[0],
303 ltwassert[3] ? 'y' : 'n',
304 ltwassert[2] ? 'y' : 'n',
305 ltwassert[1] ? 'y' : 'n',
306 ltwassert[0] ? 'y' : 'n');
307
308 line += 2;
309 lcd_puts(8, line, "(Press SELECT to revert)");
310
311 switch (button)
312 {
313 case DEBUG_CANCEL|BUTTON_REL:
314 return false;
315
316 /* CPU frequency */
317 case BUTTON_UP:
318 if (++dvfs_wp >= DVFS_NUM_LEVELS)
319 {
320 /* Going back to automatic */
321 dvfs_wp = -1;
322 dvfs_start();
323 }
324 else
325 {
326 if (dvfs_wp == 0)
327 {
328 /* Going to manual setting */
329 dvfs_stop();
330 }
331
332 /* Skip gaps in mask */
333 while (((1 << dvfs_wp) & dvfs_mask) == 0) dvfs_wp++;
334 dvfs_set_level(dvfs_wp);
335 }
336
337 break;
338
339 case BUTTON_DOWN:
340 if (--dvfs_wp == -1)
341 {
342 /* Going back to automatic */
343 dvfs_start();
344 }
345 else
346 {
347 if (dvfs_wp <= -2)
348 {
349 /* Going to manual setting */
350 dvfs_stop();
351 dvfs_wp = DVFS_NUM_LEVELS - 1;
352 }
353
354 /* Skip gaps in mask */
355 while (((1 << dvfs_wp) & dvfs_mask) == 0) dvfs_wp--;
356 dvfs_set_level(dvfs_wp);
357 }
358 break;
359
360 /* GP Load tracking */
361 case BUTTON_VOL_UP:
362 if (ltwlevel < 28)
363 dvfs_set_gp_sense(++ltwlevel, ltdetect);
364 break;
365
366 case BUTTON_VOL_DOWN:
367 if (ltwlevel > 0)
368 dvfs_set_gp_sense(--ltwlevel, ltdetect);
369 break;
370
371 case BUTTON_PLAY:
372 dptc_on = !dptc_enabled();
373 dptc_on ? dptc_start() : dptc_stop();
374 break;
375
376 case BUTTON_SELECT:
377 dvfs_start();
378 dptc_start();
379 dvfs_set_gp_sense(-1, 0);
380
381 dvfs_wp = dvfs_enabled() ? -1 : (int)dvfs_get_level();
382 dptc_on = dptc_enabled();
383 dvfs_get_gp_sense(&ltwlevel, &ltdetect);
384 break;
385 }
386
387 lcd_update();
388 yield();
389 }
390}