diff options
Diffstat (limited to 'firmware/target/arm/imx31/debug-imx31.c')
-rw-r--r-- | firmware/target/arm/imx31/debug-imx31.c | 147 |
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 | ||
33 | bool __dbg_hw_info(void) | 34 | bool __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 | |||
249 | bool __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(<wlevel, <detect); | ||
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(<wlevel, <detect); | ||
384 | break; | ||
385 | } | ||
386 | |||
387 | lcd_update(); | ||
388 | yield(); | ||
389 | } | ||
390 | } | ||