summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/debug_menu.c21
-rw-r--r--firmware/target/arm/as3525/debug-as3525.c380
2 files changed, 201 insertions, 200 deletions
diff --git a/apps/debug_menu.c b/apps/debug_menu.c
index 4af17700c9..dad9fe96c8 100644
--- a/apps/debug_menu.c
+++ b/apps/debug_menu.c
@@ -774,24 +774,26 @@ static bool dbg_cpufreq(void)
774{ 774{
775 int line; 775 int line;
776 int button; 776 int button;
777 int x = 0;
778 bool done = false;
777 779
778#ifdef HAVE_LCD_BITMAP 780#ifdef HAVE_LCD_BITMAP
779 lcd_setfont(FONT_SYSFIXED); 781 lcd_setfont(FONT_SYSFIXED);
780#endif 782#endif
781 lcd_clear_display(); 783 lcd_clear_display();
782 784
783 while(1) 785 while(!done)
784 { 786 {
785 line = 0; 787 line = 0;
786 788
787 int temp = FREQ/1000000; 789 int temp = FREQ / 1000;
788 lcd_putsf(0, line++, "Frequency: %ld.%ld MHz", temp, (FREQ-temp*1000000)/100000); 790 lcd_putsf(x, line++, "Frequency: %ld.%ld MHz", temp / 1000, temp % 1000);
789 lcd_putsf(0, line++, "boost_counter: %d", get_cpu_boost_counter()); 791 lcd_putsf(x, line++, "boost_counter: %d", get_cpu_boost_counter());
790 792
791#ifdef HAVE_ADJUSTABLE_CPU_VOLTAGE 793#ifdef HAVE_ADJUSTABLE_CPU_VOLTAGE
792 extern int get_cpu_voltage_setting(void); 794 extern int get_cpu_voltage_setting(void);
793 temp = get_cpu_voltage_setting(); 795 temp = get_cpu_voltage_setting();
794 lcd_putsf(0, line++, "CPU voltage: %d.%03dV", temp / 1000, temp % 1000); 796 lcd_putsf(x, line++, "CPU voltage: %d.%03dV", temp / 1000, temp % 1000);
795#endif 797#endif
796 798
797 lcd_update(); 799 lcd_update();
@@ -806,17 +808,20 @@ static bool dbg_cpufreq(void)
806 case ACTION_STD_NEXT: 808 case ACTION_STD_NEXT:
807 cpu_boost(false); 809 cpu_boost(false);
808 break; 810 break;
809 811 case ACTION_STD_MENU:
812 x--;
813 break;
810 case ACTION_STD_OK: 814 case ACTION_STD_OK:
815 x = 0;
811 while (get_cpu_boost_counter() > 0) 816 while (get_cpu_boost_counter() > 0)
812 cpu_boost(false); 817 cpu_boost(false);
813 set_cpu_frequency(CPUFREQ_DEFAULT); 818 set_cpu_frequency(CPUFREQ_DEFAULT);
814 break; 819 break;
815 820
816 case ACTION_STD_CANCEL: 821 case ACTION_STD_CANCEL:
817 lcd_setfont(FONT_UI); 822 done = true;;
818 return false;
819 } 823 }
824 lcd_clear_display();
820 } 825 }
821 lcd_setfont(FONT_UI); 826 lcd_setfont(FONT_UI);
822 return false; 827 return false;
diff --git a/firmware/target/arm/as3525/debug-as3525.c b/firmware/target/arm/as3525/debug-as3525.c
index bb731242aa..c4c4a7f4dc 100644
--- a/firmware/target/arm/as3525/debug-as3525.c
+++ b/firmware/target/arm/as3525/debug-as3525.c
@@ -22,7 +22,7 @@
22#include <stdbool.h> 22#include <stdbool.h>
23#include "system.h" 23#include "system.h"
24#include "kernel.h" 24#include "kernel.h"
25#include "button.h" 25#include "action.h"
26#include "lcd.h" 26#include "lcd.h"
27#include "font.h" 27#include "font.h"
28#include "cpu.h" 28#include "cpu.h"
@@ -31,7 +31,13 @@
31#include "adc.h" 31#include "adc.h"
32#include "storage.h" 32#include "storage.h"
33 33
34#define DEBUG_CANCEL BUTTON_LEFT 34#define DEBUG_CANCEL ACTION_STD_CANCEL
35#define DEBUG_NEXT ACTION_STD_NEXT
36#define DEBUG_LEFT_JUSTIFY ACTION_STD_OK
37#define DEBUG_LEFT_SCROLL ACTION_STD_MENU
38
39/* if the possiblity exists to divide by zero protect with this macro */
40#define DIV_FINITE(dividend, divisor) ((divisor == 0)? divisor : dividend/divisor)
35 41
36#define ON "Enabled" 42#define ON "Enabled"
37#define OFF "Disabled" 43#define OFF "Disabled"
@@ -41,21 +47,28 @@
41#define CP15_IC (1<<12) /* icache off/on */ 47#define CP15_IC (1<<12) /* icache off/on */
42 48
43#define CLK_MAIN 24000000 /* 24 MHz */ 49#define CLK_MAIN 24000000 /* 24 MHz */
50#define D_MHZ 1000000
51#define D_KHZ 1000
44 52
45#define CLK_PLLA 0 53enum dbg_clocks
46#define CLK_PLLB 1 54{
47#define CLK_PROC 2 55 CLK_PLLA = 0x0,
48#define CLK_FCLK 3 56 CLK_PLLB,
49#define CLK_EXTMEM 4 57 CLK_PROC,
50#define CLK_PCLK 5 58 CLK_FCLK,
51#define CLK_IDE 6 59 CLK_EXTMEM,
52#define CLK_I2C 7 60 CLK_PCLK,
53#define CLK_I2SI 8 61 CLK_IDE,
54#define CLK_I2SO 9 62 CLK_I2C,
55#define CLK_DBOP 10 63 CLK_I2SI,
56#define CLK_SD_MCLK_NAND 11 64 CLK_I2SO,
57#define CLK_SD_MCLK_MSD 12 65 CLK_DBOP,
58#define CLK_USB 13 66 CLK_SD_MCLK_NAND,
67 CLK_SD_MCLK_MSD,
68 CLK_SD_SLOT,
69 CLK_USB,
70 CLK_SSP,
71};
59 72
60#define MCI_NAND *((volatile unsigned long *)(NAND_FLASH_BASE + 0x04)) 73#define MCI_NAND *((volatile unsigned long *)(NAND_FLASH_BASE + 0x04))
61#define MCI_SD *((volatile unsigned long *)(SD_MCI_BASE + 0x04)) 74#define MCI_SD *((volatile unsigned long *)(SD_MCI_BASE + 0x04))
@@ -79,6 +92,7 @@ static int calc_freq(int clk)
79 unsigned int postdiv = ((unsigned int)CGU_PROC>>4) & 0xf; 92 unsigned int postdiv = ((unsigned int)CGU_PROC>>4) & 0xf;
80 unsigned int u_out_div; 93 unsigned int u_out_div;
81#if CONFIG_CPU == AS3525 94#if CONFIG_CPU == AS3525
95
82 switch(clk) { 96 switch(clk) {
83 /* clk_main = clk_int = 24MHz oscillator */ 97 /* clk_main = clk_int = 24MHz oscillator */
84 case CLK_PLLA: 98 case CLK_PLLA:
@@ -89,10 +103,9 @@ static int calc_freq(int clk)
89 u_out_div = ((CGU_PLLA>>13) & 0x3); /* bits 13:14 */ 103 u_out_div = ((CGU_PLLA>>13) & 0x3); /* bits 13:14 */
90 if (u_out_div == 3) /* for 11 NO=4 */ 104 if (u_out_div == 3) /* for 11 NO=4 */
91 u_out_div=4; 105 u_out_div=4;
92 if(u_out_div) /* NO = 0 not allowed */ 106 /* NO = 0 not allowed */
93 return ((2 * (CGU_PLLA & 0xff))*CLK_MAIN)/ 107 return DIV_FINITE(((2 * (CGU_PLLA & 0xff))*CLK_MAIN),
94 (((CGU_PLLA>>8) & 0x1f)*u_out_div); 108 (((CGU_PLLA>>8) & 0x1f)*u_out_div));
95 return 0;
96 case CLK_PLLB: 109 case CLK_PLLB:
97 if(CGU_PLLBSUP & (1<<3)) 110 if(CGU_PLLBSUP & (1<<3))
98 return 0; 111 return 0;
@@ -101,12 +114,12 @@ static int calc_freq(int clk)
101 u_out_div = ((CGU_PLLB>>13) & 0x3); /* bits 13:14 */ 114 u_out_div = ((CGU_PLLB>>13) & 0x3); /* bits 13:14 */
102 if (u_out_div == 3) /* for 11 NO=4 */ 115 if (u_out_div == 3) /* for 11 NO=4 */
103 u_out_div=4; 116 u_out_div=4;
104 if(u_out_div) /* NO = 0 not allowed */ 117 /* NO = 0 not allowed */
105 return ((2 * (CGU_PLLB & 0xff))*CLK_MAIN)/ 118 return DIV_FINITE(((2 * (CGU_PLLB & 0xff))*CLK_MAIN),
106 (((CGU_PLLB>>8) & 0x1f)*u_out_div); 119 (((CGU_PLLB>>8) & 0x1f)*u_out_div));
107 return 0; 120#else /* AS3525v2 */
108#else
109 int od, f, r; 121 int od, f, r;
122
110 /* AS3525v2 */ 123 /* AS3525v2 */
111 switch(clk) { 124 switch(clk) {
112 case CLK_PLLA: 125 case CLK_PLLA:
@@ -126,7 +139,20 @@ static int calc_freq(int clk)
126 r = ((CGU_PLLB >> 7) & 0x7) + 1; 139 r = ((CGU_PLLB >> 7) & 0x7) + 1;
127 od = (CGU_PLLB >> 10) & 1 ? 2 : 1; 140 od = (CGU_PLLB >> 10) & 1 ? 2 : 1;
128 return (CLK_MAIN / 2) * f / (r * od); 141 return (CLK_MAIN / 2) * f / (r * od);
129#endif 142
143 case CLK_SD_SLOT:
144 switch(CGU_SDSLOT & 3) {
145 case 0:
146 return CLK_MAIN/(((CGU_SDSLOT>>2)& 0xf)+1);
147 case 1:
148 return calc_freq(CLK_PLLA)/(((CGU_SDSLOT>>2)& 0xf)+1);
149 case 2:
150 return calc_freq(CLK_PLLB)/(((CGU_SDSLOT>>2)& 0xf)+1);
151 default:
152 return 0;
153 }
154#endif /* CONFIG_CPU == AS3525 */
155
130 case CLK_PROC: 156 case CLK_PROC:
131#if CONFIG_CPU == AS3525 /* not in arm926-ejs */ 157#if CONFIG_CPU == AS3525 /* not in arm926-ejs */
132 if (!(read_cp15()>>30)) /* fastbus */ 158 if (!(read_cp15()>>30)) /* fastbus */
@@ -150,10 +176,10 @@ static int calc_freq(int clk)
150 case CLK_EXTMEM: 176 case CLK_EXTMEM:
151#if CONFIG_CPU == AS3525 177#if CONFIG_CPU == AS3525
152 switch(CGU_PERI & 3) { 178 switch(CGU_PERI & 3) {
153#else 179#else /* as3525v2 */
154 /* bits 1:0 of CGU_PERI always read as 0 and source = FCLK */ 180 /* bits 1:0 of CGU_PERI always read as 0 and source = FCLK */
155 switch(3) { 181 switch(3) {
156#endif 182#endif /* CONFIG_CPU == AS3525 */
157 case 0: 183 case 0:
158 return CLK_MAIN/(((CGU_PERI>>2)& 0xf)+1); 184 return CLK_MAIN/(((CGU_PERI>>2)& 0xf)+1);
159 case 1: 185 case 1:
@@ -179,7 +205,8 @@ static int calc_freq(int clk)
179 } 205 }
180 case CLK_I2C: 206 case CLK_I2C:
181 ams_i2c_get_debug_cpsr(&u_out_div); 207 ams_i2c_get_debug_cpsr(&u_out_div);
182 return calc_freq(CLK_PCLK)/(u_out_div); 208 /* NO = 0 not allowed */
209 return DIV_FINITE(calc_freq(CLK_PCLK), (u_out_div));
183 case CLK_I2SI: 210 case CLK_I2SI:
184 switch((CGU_AUDIO>>12) & 3) { 211 switch((CGU_AUDIO>>12) & 3) {
185 case 0: 212 case 0:
@@ -219,7 +246,12 @@ static int calc_freq(int clk)
219 return calc_freq(CLK_PCLK); 246 return calc_freq(CLK_PCLK);
220 else 247 else
221 return calc_freq(CLK_PCLK)/(((MCI_SD & 0xff)+1)*2); 248 return calc_freq(CLK_PCLK)/(((MCI_SD & 0xff)+1)*2);
222#endif 249#else /* as3525v2 */
250 case CLK_SSP:
251 /* NO = 0 not allowed */
252 return DIV_FINITE(calc_freq(CLK_PCLK), SSP_CPSR);
253#endif /* CONFIG_CPU == AS3525 */
254
223 case CLK_USB: 255 case CLK_USB:
224 switch(CGU_USB & 3) { /* 0-> div=1 other->div=1/(2*n) */ 256 switch(CGU_USB & 3) { /* 0-> div=1 other->div=1/(2*n) */
225 case 0: 257 case 0:
@@ -245,174 +277,172 @@ static int calc_freq(int clk)
245 } 277 }
246} 278}
247 279
280static bool dbg_btn(bool *done, int *x)
281{
282 bool cont = !*done;
283 if (cont)
284 {
285 lcd_update();
286 int button = get_action(CONTEXT_STD,HZ/10);
287 switch(button)
288 {
289 case DEBUG_CANCEL:
290 *done = true;
291 case DEBUG_NEXT:
292 cont = false;
293 case DEBUG_LEFT_JUSTIFY:
294 (*x) = 0;
295 sleep(HZ/5);
296 break;
297 case DEBUG_LEFT_SCROLL:
298 (*x)--;
299 }
300 }
301 lcd_clear_display();
302 return cont;
303}
304
248bool dbg_hw_info(void) 305bool dbg_hw_info(void)
249{ 306{
250 int line; 307 int line;
308 int x = 0;
309 bool done = false;
310
251 lcd_clear_display(); 311 lcd_clear_display();
252 lcd_setfont(FONT_SYSFIXED); 312 lcd_setfont(FONT_SYSFIXED);
253 313
254 while(1) 314 while(!done)
255 { 315 {
256 while(1) 316 while(dbg_btn(&done, &x))
257 { 317 {
258#if defined(SANSA_C200V2) || defined(SANSA_FUZEV2) || \ 318#if defined(SANSA_C200V2) || defined(SANSA_FUZEV2) || \
259 defined(SANSA_CLIPPLUS) || defined(SANSA_CLIPZIP) 319 defined(SANSA_CLIPPLUS) || defined(SANSA_CLIPZIP)
260 lcd_clear_display(); 320
261 line = 0; 321 line = 0;
262 lcd_puts(0, line++, "[Submodel:]"); 322 lcd_puts(x, line++, "[Submodel:]");
263#if defined(SANSA_C200V2) 323#if defined(SANSA_C200V2)
264 lcd_putsf(0, line++, "C200v2 variant %d", c200v2_variant); 324 lcd_putsf(x, line++, "C200v2 variant %d", c200v2_variant);
265#elif defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) || \ 325#elif defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) || \
266 defined(SANSA_CLIPZIP) 326 defined(SANSA_CLIPZIP)
267 lcd_putsf(0, line++, "AMSv2 variant %d", amsv2_variant); 327 lcd_putsf(x, line++, "AMSv2 variant %d", amsv2_variant);
268#endif 328#endif
269 lcd_update();
270 int btn = button_get_w_tmo(HZ/10);
271 if(btn == (DEBUG_CANCEL|BUTTON_REL))
272 goto end;
273 else if(btn == (BUTTON_DOWN|BUTTON_REL))
274 break;
275 } 329 }
276 while(1) 330 while(dbg_btn(&done, &x))
277 { 331 {
278#endif 332#endif
279 lcd_clear_display();
280 line = 0; 333 line = 0;
281 lcd_puts(0, line++, "[Clock Frequencies:]"); 334 lcd_puts(x, line++, "[Clock Frequencies:]");
282 lcd_puts(0, line++, " SET ACTUAL"); 335 lcd_puts(x, line++, " SET ACTUAL");
283#if CONFIG_CPU == AS3525 336#if CONFIG_CPU == AS3525
284 lcd_putsf(0, line++, "922T:%s %3dMHz", 337 lcd_putsf(x, line++, "922T:%s %3dMHz",
285 (!(read_cp15()>>30)) ? "FAST " : 338 (!(read_cp15()>>30)) ? "FAST " :
286 (read_cp15()>>31) ? "ASYNC" : "SYNC ", 339 (read_cp15()>>31) ? "ASYNC" : "SYNC ",
287#else 340#else /* as3525v2 */
288 lcd_putsf(0, line++, "926ejs: %3dMHz", 341 lcd_putsf(x, line++, "926ejs: %3dMHz",
289#endif 342#endif
290 calc_freq(CLK_PROC)/1000000); 343 calc_freq(CLK_PROC)/D_MHZ);
291 lcd_putsf(0, line++, "PLLA:%3dMHz %3dMHz", AS3525_PLLA_FREQ/1000000, 344 lcd_putsf(x, line++, "%s:%3dMHz %3dMHz", "PLLA", AS3525_PLLA_FREQ/D_MHZ,
292 calc_freq(CLK_PLLA)/1000000); 345 calc_freq(CLK_PLLA)/D_MHZ);
293 lcd_putsf(0, line++, "PLLB: %3dMHz", calc_freq(CLK_PLLB)/1000000); 346 lcd_putsf(x, line++, "PLLB: %3dMHz", calc_freq(CLK_PLLB)/D_MHZ);
294 lcd_putsf(0, line++, "FCLK: %3dMHz", calc_freq(CLK_FCLK)/1000000); 347 lcd_putsf(x, line++, "FCLK: %3dMHz", calc_freq(CLK_FCLK)/D_MHZ);
295 lcd_putsf(0, line++, "DRAM:%3dMHz %3dMHz", AS3525_PCLK_FREQ/1000000, 348 lcd_putsf(x, line++, "%s:%3dMHz %3dMHz", "DRAM", AS3525_PCLK_FREQ/D_MHZ,
296 calc_freq(CLK_EXTMEM)/1000000); 349 calc_freq(CLK_EXTMEM)/D_MHZ);
297 lcd_putsf(0, line++, "PCLK:%3dMHz %3dMHz", AS3525_PCLK_FREQ/1000000, 350 lcd_putsf(x, line++, "%s:%3dMHz %3dMHz", "PCLK", AS3525_PCLK_FREQ/D_MHZ,
298 calc_freq(CLK_PCLK)/1000000); 351 calc_freq(CLK_PCLK)/D_MHZ);
299 352
300#if LCD_HEIGHT < 176 /* clip */ 353#if LCD_HEIGHT < 176 /* clip */
301 lcd_update();
302 int btn = button_get_w_tmo(HZ/10);
303 if(btn == (DEBUG_CANCEL|BUTTON_REL))
304 goto end;
305 else if(btn == (BUTTON_DOWN|BUTTON_REL))
306 break;
307 } 354 }
308 while(1) 355 while(dbg_btn(&done, &x))
309 { 356 {
310 lcd_clear_display();
311 line = 0; 357 line = 0;
312#endif /* LCD_HEIGHT < 176 */ 358#endif /* LCD_HEIGHT < 176 */
313 359
314 lcd_putsf(0, line++, "IDE :%3dMHz %3dMHz", AS3525_IDE_FREQ/1000000, 360 lcd_putsf(x, line++, "%s:%3dMHz %3dMHz", "IDE ", AS3525_IDE_FREQ/D_MHZ,
315 calc_freq(CLK_IDE)/1000000); 361 calc_freq(CLK_IDE)/D_MHZ);
316 lcd_putsf(0, line++, "DBOP:%3dMHz %3dMHz", AS3525_DBOP_FREQ/1000000, 362 lcd_putsf(x, line++, "%s:%3dMHz %3dMHz", "DBOP", AS3525_DBOP_FREQ/D_MHZ,
317 calc_freq(CLK_DBOP)/1000000); 363 calc_freq(CLK_DBOP)/D_MHZ);
318 lcd_putsf(0, line++, "I2C :%3dkHz %3dkHz", AS3525_I2C_FREQ/1000, 364 lcd_putsf(x, line++, "%s:%3dMHz %3dMHz", "I2C ", AS3525_I2C_FREQ/D_KHZ,
319 calc_freq(CLK_I2C)/1000); 365 calc_freq(CLK_I2C)/D_KHZ);
320 lcd_putsf(0, line++, "I2SI: %s %3dMHz", (CGU_AUDIO & (1<<23)) ? 366 lcd_putsf(x, line++, "I2SI: %s %3dMHz", (CGU_AUDIO & (1<<23)) ?
321 "on " : "off" , calc_freq(CLK_I2SI)/1000000); 367 "on " : "off" , calc_freq(CLK_I2SI)/D_MHZ);
322 lcd_putsf(0, line++, "I2SO: %s %3dMHz", (CGU_AUDIO & (1<<11)) ? 368 lcd_putsf(x, line++, "I2SO: %s %3dMHz", (CGU_AUDIO & (1<<11)) ?
323 "on " : "off", calc_freq(CLK_I2SO)/1000000); 369 "on " : "off", calc_freq(CLK_I2SO)/D_MHZ);
324#if CONFIG_CPU == AS3525 370#if CONFIG_CPU == AS3525
325 struct ams_sd_debug_info dbg; 371 struct ams_sd_debug_info dbg;
326 ams_sd_get_debug_info(&dbg); 372 ams_sd_get_debug_info(&dbg);
327 373
328 lcd_putsf(0, line++, "SD :%3dMHz %3dMHz", 374 lcd_putsf(x, line++, "%s:%3dMHz %3dMHz", "SD ",
329 ((AS3525_IDE_FREQ/ 1000000) / 375 ((AS3525_IDE_FREQ/ D_MHZ) /
330 ((dbg.mci_nand & MCI_CLOCK_BYPASS)? 1:(((dbg.mci_nand & 0xff)+1) * 2))), 376 ((dbg.mci_nand & MCI_CLOCK_BYPASS)? 1:(((dbg.mci_nand & 0xff)+1) * 2))),
331 calc_freq(CLK_SD_MCLK_NAND)/1000000); 377 calc_freq(CLK_SD_MCLK_NAND)/D_MHZ);
332#ifdef HAVE_MULTIDRIVE 378#ifdef HAVE_MULTIDRIVE
333 lcd_putsf(0, line++, "uSD :%3dMHz %3dMHz", 379 lcd_putsf(x, line++, "%s:%3dMHz %3dMHz", "uSD ",
334 ((AS3525_PCLK_FREQ/ 1000000) / 380 ((AS3525_PCLK_FREQ/ D_MHZ) /
335 ((dbg.mci_sd & MCI_CLOCK_BYPASS) ? 1: (((dbg.mci_sd & 0xff) + 1) * 2))), 381 ((dbg.mci_sd & MCI_CLOCK_BYPASS) ? 1: (((dbg.mci_sd & 0xff) + 1) * 2))),
336 calc_freq(CLK_SD_MCLK_MSD)/1000000); 382 calc_freq(CLK_SD_MCLK_MSD)/D_MHZ);
337#endif 383#endif
384
385#else /*AS3525v2*/
386 lcd_putsf(x, line++, "%s:%3dMHz %3dMHz", "SD ", AS3525_SDSLOT_FREQ/D_MHZ,
387 calc_freq(CLK_SD_SLOT)/D_MHZ);
388 long freq_ssp = calc_freq(CLK_SSP);
389 if (freq_ssp >= D_MHZ)
390 lcd_putsf(x, line++, "%s:%3dMHz %3dMHz", "SSP ", AS3525_SSP_FREQ/D_MHZ,
391 calc_freq(CLK_SSP)/D_MHZ);
392 else
393 lcd_putsf(x, line++, "SSP :%3dMHz %3dKHz", AS3525_SSP_FREQ/D_MHZ,
394 calc_freq(CLK_SSP)/D_KHZ);
338#endif /* CONFIG_CPU == AS3525 */ 395#endif /* CONFIG_CPU == AS3525 */
339 lcd_putsf(0, line++, "USB : %3dMHz", calc_freq(CLK_USB)/1000000); 396 lcd_putsf(x, line++, "USB : %3dMHz", calc_freq(CLK_USB)/D_MHZ);
340 397
341#if LCD_HEIGHT < 176 /* clip */ 398#if LCD_HEIGHT < 176 /* clip */
342 lcd_update();
343 int btn = button_get_w_tmo(HZ/10);
344 if(btn == (DEBUG_CANCEL|BUTTON_REL))
345 goto end;
346 else if(btn == (BUTTON_DOWN|BUTTON_REL))
347 break;
348 } 399 }
349 while(1) 400 while(dbg_btn(&done, &x))
350 { 401 {
351 lcd_clear_display(); 402 lcd_clear_display();
352 line = 0; 403 line = 0;
353#endif /* LCD_HEIGHT < 176 */ 404#endif /* LCD_HEIGHT < 176 */
354 405
355 lcd_putsf(0, line++, "MMU : %s CVDDP:%4d", (read_cp15() & CP15_MMU) ? 406 lcd_putsf(x, line++, "MMU : %s CVDDP:%4d", (read_cp15() & CP15_MMU) ?
356 " on" : "off", adc_read(ADC_CVDD) * 25); 407 " on" : "off", adc_read(ADC_CVDD) * 25);
357 lcd_putsf(0, line++, "Icache:%s Dcache:%s", 408 lcd_putsf(x, line++, "Icache:%s Dcache:%s",
358 (read_cp15() & CP15_IC) ? " on" : "off", 409 (read_cp15() & CP15_IC) ? " on" : "off",
359 (read_cp15() & CP15_DC) ? " on" : "off"); 410 (read_cp15() & CP15_DC) ? " on" : "off");
360
361 lcd_update();
362 int btn = button_get_w_tmo(HZ/10);
363 if(btn == (DEBUG_CANCEL|BUTTON_REL))
364 goto end;
365 else if(btn == (BUTTON_DOWN|BUTTON_REL))
366 break;
367 } 411 }
368 while(1) 412 while(dbg_btn(&done, &x))
369 { 413 {
370 lcd_clear_display();
371 line = 0; 414 line = 0;
372 415
373 lcd_putsf(0, line++, "CGU_PLLA :%8x", (unsigned int)(CGU_PLLA)); 416 lcd_putsf(x, line++, "CGU_PLLA :%8x", (unsigned int)(CGU_PLLA));
374 lcd_putsf(0, line++, "CGU_PLLB :%8x", (unsigned int)(CGU_PLLB)); 417 lcd_putsf(x, line++, "CGU_PLLB :%8x", (unsigned int)(CGU_PLLB));
375 lcd_putsf(0, line++, "CGU_PROC :%8x", (unsigned int)(CGU_PROC)); 418 lcd_putsf(x, line++, "CGU_PROC :%8x", (unsigned int)(CGU_PROC));
376 lcd_putsf(0, line++, "CGU_PERI :%8x", (unsigned int)(CGU_PERI)); 419 lcd_putsf(x, line++, "CGU_PERI :%8x", (unsigned int)(CGU_PERI));
377 lcd_putsf(0, line++, "CGU_IDE :%8x", (unsigned int)(CGU_IDE)); 420 lcd_putsf(x, line++, "CGU_IDE :%8x", (unsigned int)(CGU_IDE));
378 lcd_putsf(0, line++, "CGU_DBOP :%8x", (unsigned int)(CGU_DBOP)); 421 lcd_putsf(x, line++, "CGU_DBOP :%8x", (unsigned int)(CGU_DBOP));
379 lcd_putsf(0, line++, "CGU_AUDIO :%8x", (unsigned int)(CGU_AUDIO)); 422 lcd_putsf(x, line++, "CGU_AUDIO :%8x", (unsigned int)(CGU_AUDIO));
380 lcd_putsf(0, line++, "CGU_USB :%8x", (unsigned int)(CGU_USB)); 423 lcd_putsf(x, line++, "CGU_USB :%8x", (unsigned int)(CGU_USB));
381 424
382#if LCD_HEIGHT < 176 /* clip */ 425#if LCD_HEIGHT < 176 /* clip */
383 lcd_update();
384 int btn = button_get_w_tmo(HZ/10);
385 if(btn == (DEBUG_CANCEL|BUTTON_REL))
386 goto end;
387 else if(btn == (BUTTON_DOWN|BUTTON_REL))
388 break;
389 } 426 }
390 while(1) 427 while(dbg_btn(&done, &x))
391 { 428 {
392 lcd_clear_display();
393 line = 0; 429 line = 0;
394#endif /* LCD_HEIGHT < 176 */ 430#endif /* LCD_HEIGHT < 176 */
431
395 unsigned int i2c_cpsr; 432 unsigned int i2c_cpsr;
396 ams_i2c_get_debug_cpsr(&i2c_cpsr); 433 ams_i2c_get_debug_cpsr(&i2c_cpsr);
397 lcd_putsf(0, line++, "I2C2_CPSR :%8x", i2c_cpsr); 434 lcd_putsf(x, line++, "I2C2_CPSR :%8x", i2c_cpsr);
398#if CONFIG_CPU == AS3525 435#if CONFIG_CPU == AS3525
399 lcd_putsf(0, line++, "MCI_NAND :%8x", (unsigned int)(MCI_NAND)); 436 lcd_putsf(x, line++, "MCI_NAND :%8x", (unsigned int)(MCI_NAND));
400 lcd_putsf(0, line++, "MCI_SD :%8x", (unsigned int)(MCI_SD)); 437 lcd_putsf(x, line++, "MCI_SD :%8x", (unsigned int)(MCI_SD));
401#else 438#else /* as3525v2 */
402 lcd_putsf(0, line++, "CGU_MEMSTK:%8x", (unsigned int)(CGU_MEMSTICK)); 439 lcd_putsf(x, line++, "CGU_MEMSTK:%8x", (unsigned int)(CGU_MEMSTICK));
403 lcd_putsf(0, line++, "CGU_SDSLOT:%8x", (unsigned int)(CGU_SDSLOT)); 440 lcd_putsf(x, line++, "CGU_SDSLOT:%8x", (unsigned int)(CGU_SDSLOT));
404#endif 441#endif
405 442 lcd_putsf(x, line++, "SSP_CPSR :%8x", (unsigned int)(SSP_CPSR));
406 lcd_update();
407 int btn = button_get_w_tmo(HZ/10);
408 if(btn == (DEBUG_CANCEL|BUTTON_REL))
409 goto end;
410 else if(btn == (BUTTON_DOWN|BUTTON_REL))
411 break;
412 } 443 }
413 } 444 }
414 445
415end:
416 lcd_setfont(FONT_UI); 446 lcd_setfont(FONT_UI);
417 return false; 447 return false;
418} 448}
@@ -429,38 +459,29 @@ void adc_set_voltage_mux(int channel)
429 459
430bool dbg_ports(void) 460bool dbg_ports(void)
431{ 461{
432 int line, btn, i; 462 int line, i;
433 463 int x = 0;
464 bool done = false;
465 lcd_clear_display();
434 lcd_setfont(FONT_SYSFIXED); 466 lcd_setfont(FONT_SYSFIXED);
435 467
436 while(1) 468 while(!done)
437 { 469 {
438 lcd_clear_display(); 470 while(dbg_btn(&done, &x))
439
440 while(1)
441 { 471 {
442 line = 0; 472 line = 0;
443 lcd_puts(0, line++, "[GPIO Vals and Dirs]"); 473 lcd_puts(x, line++, "[GPIO Vals and Dirs]");
444 lcd_putsf(0, line++, "GPIOA: %2x DIR: %2x", GPIOA_DATA, GPIOA_DIR); 474 lcd_putsf(x, line++, "%s: %2x DIR: %2x", "GPIOA", GPIOA_DATA, GPIOA_DIR);
445 lcd_putsf(0, line++, "GPIOB: %2x DIR: %2x", GPIOB_DATA, GPIOB_DIR); 475 lcd_putsf(x, line++, "%s: %2x DIR: %2x", "GPIOB", GPIOB_DATA, GPIOB_DIR);
446 lcd_putsf(0, line++, "GPIOC: %2x DIR: %2x", GPIOC_DATA, GPIOC_DIR); 476 lcd_putsf(x, line++, "%s: %2x DIR: %2x", "GPIOC", GPIOC_DATA, GPIOC_DIR);
447 lcd_putsf(0, line++, "GPIOD: %2x DIR: %2x", GPIOD_DATA, GPIOD_DIR); 477 lcd_putsf(x, line++, "%s: %2x DIR: %2x", "GPIOD", GPIOD_DATA, GPIOD_DIR);
448 lcd_putsf(0, line++, "CCU_IO:%8x", CCU_IO); 478 lcd_putsf(x, line++, "CCU_IO:%8x", CCU_IO);
449#ifdef DEBUG_DBOP 479#ifdef DEBUG_DBOP
450 lcd_puts(0, line++, "[DBOP_DIN]"); 480 lcd_puts(x, line++, "[DBOP_DIN]");
451 lcd_putsf(0, line++, "DBOP_DIN: %4x", dbop_debug()); 481 lcd_putsf(x, line++, "DBOP_DIN: %4x", dbop_debug());
452#endif 482#endif
453 lcd_puts(0, line++, "[CP15]"); 483 lcd_puts(x, line++, "[CP15]");
454 lcd_putsf(0, line++, "CP15: 0x%8x", read_cp15()); 484 lcd_putsf(x, line++, "CP15: 0x%8x", read_cp15());
455 lcd_update();
456 if (button_get_w_tmo(HZ/10) == (DEBUG_CANCEL|BUTTON_REL))
457 break;
458
459 btn = button_get_w_tmo(HZ/10);
460 if(btn == (DEBUG_CANCEL|BUTTON_REL))
461 goto end;
462 else if(btn == (BUTTON_DOWN|BUTTON_REL))
463 break;
464 } 485 }
465 486
466#if CONFIG_CPU == AS3525 /* as3525v2 channels are different */ 487#if CONFIG_CPU == AS3525 /* as3525v2 channels are different */
@@ -516,72 +537,47 @@ bool dbg_ports(void)
516#endif 537#endif
517 538
518 lcd_clear_display(); 539 lcd_clear_display();
519 while(1) 540 while(dbg_btn(&done, &x))
520 { 541 {
521 line = 0; 542 line = 0;
522 543
523 for(i=0; i<5; i++) 544 for(i=0; i<5; i++)
524 lcd_putsf(0, line++, "%s: %d mV", adc_name[i], adc_read(i) * 5); 545 lcd_putsf(x, line++, "%s: %d mV", adc_name[i], adc_read(i) * 5);
525 for(; i<8; i++) 546 for(; i<8; i++)
526 if(adc_name[i]) 547 if(adc_name[i])
527 lcd_putsf(0, line++, "%s: %d mV", adc_name[i], 548 lcd_putsf(x, line++, "%s: %d mV", adc_name[i],
528 adc_read(i) * BATTEMP_UNIT); 549 adc_read(i) * BATTEMP_UNIT);
529#if LCD_HEIGHT < 176 /* clip */ 550#if LCD_HEIGHT < 176 /* clip */
530 lcd_update();
531
532 btn = button_get_w_tmo(HZ/10);
533 if(btn == (DEBUG_CANCEL|BUTTON_REL))
534 goto end;
535 else if(btn == (BUTTON_DOWN|BUTTON_REL))
536 break;
537 } 551 }
538 lcd_clear_display(); 552 while(dbg_btn(&done, &x))
539 while(1)
540 { 553 {
541 line = 0; 554 line = 0;
542#endif /* LCD_HEIGHT < 176 */ 555#endif /* LCD_HEIGHT < 176 */
543 for(i=8; i<10; i++) 556 for(i=8; i<10; i++)
544 if(adc_name[i]) 557 if(adc_name[i])
545 lcd_putsf(0, line++, "%s: %d mV", adc_name[i], adc_read(i)); 558 lcd_putsf(x, line++, "%s: %d mV", adc_name[i], adc_read(i));
546 for(; i<12; i++) 559 for(; i<12; i++)
547 if(adc_name[i]) 560 if(adc_name[i])
548 lcd_putsf(0, line++, "%s: %d uA", adc_name[i], adc_read(i)); 561 lcd_putsf(x, line++, "%s: %d uA", adc_name[i], adc_read(i));
549#if CONFIG_CPU == AS3525 /* different units */ 562#if CONFIG_CPU == AS3525 /* different units */
550 lcd_putsf(0, line++, "%s: %d mV", adc_name[i], adc_read(i)*5/2); 563 lcd_putsf(x, line++, "%s: %d mV", adc_name[i], adc_read(i)*5/2);
551#elif CONFIG_CPU == AS3525v2 564#elif CONFIG_CPU == AS3525v2
552 for(; i<16; i++) 565 for(; i<16; i++)
553 lcd_putsf(0, line++, "%s: %d mV", adc_name[i], adc_read(i)); 566 lcd_putsf(x, line++, "%s: %d mV", adc_name[i], adc_read(i));
554#endif 567#endif
555
556 lcd_update();
557
558 btn = button_get_w_tmo(HZ/10);
559 if(btn == (DEBUG_CANCEL|BUTTON_REL))
560 goto end;
561 else if(btn == (BUTTON_DOWN|BUTTON_REL))
562 break;
563 } 568 }
564#if CONFIG_CPU == AS3525v2 /*extend AS3543 voltage registers*/ 569#if CONFIG_CPU == AS3525v2 /*extend AS3543 voltage registers*/
565 lcd_clear_display(); 570 while(dbg_btn(&done, &x))
566 while(1)
567 { 571 {
568 line = 0; 572 line = 0;
569 for(i=1; i<9; i++){ 573 for(i=1; i<9; i++){
570 adc_set_voltage_mux(i); /*change the voltage mux to a new channel*/ 574 adc_set_voltage_mux(i); /*change the voltage mux to a new channel*/
571 lcd_putsf(0, line++, "%s: %d mV", adc_mux_name[i], adc_read(5) * 5); 575 lcd_putsf(x, line++, "%s: %d mV", adc_mux_name[i], adc_read(5) * 5);
572 } 576 }
573 lcd_update();
574
575 btn = button_get_w_tmo(HZ/10);
576 if(btn == (DEBUG_CANCEL|BUTTON_REL))
577 goto end;
578 else if(btn == (BUTTON_DOWN|BUTTON_REL))
579 break;
580 } 577 }
581#endif 578#endif
582 } 579 }
583 580
584end:
585 lcd_setfont(FONT_UI); 581 lcd_setfont(FONT_UI);
586 return false; 582 return false;
587} 583}
@@ -614,4 +610,4 @@ int get_cpu_voltage_setting(void)
614 610
615 return value; 611 return value;
616} 612}
617#endif /* HAVE_ADJUSTABLE_CPU_VOLTAGE */ 613#endif /* HAVE_ADJUSTABLE_CPU_VOLTAGE */ \ No newline at end of file