diff options
author | Solomon Peachy <pizza@shaftnet.org> | 2018-08-29 21:56:10 -0400 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2018-09-20 18:59:19 -0400 |
commit | 72820d8b2d5ebe8405f8c4833f2ff54fe6324faa (patch) | |
tree | 1c9ef29e5b76fbb17f5a9625390cd70277030071 /firmware/target | |
parent | 08ab3aea4f43c733af0e78ee306780e2dbb12970 (diff) | |
download | rockbox-72820d8b2d5ebe8405f8c4833f2ff54fe6324faa.tar.gz rockbox-72820d8b2d5ebe8405f8c4833f2ff54fe6324faa.zip |
jz4760: Greatly enhance debug code and silence some compilation warnings.
Change-Id: I1746d67c818ad099edea83e6242ffd5c79be0000
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c | 4 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/ata-sd-jz4760.c | 5 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/debug-jz4760.c | 225 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/i2c-jz4760.c | 13 |
4 files changed, 138 insertions, 109 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c b/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c index 9215d7d08a..4de35367ba 100644 --- a/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c | |||
@@ -38,7 +38,7 @@ static int sd_drive_nr = 0; | |||
38 | static tCardInfo card; | 38 | static tCardInfo card; |
39 | 39 | ||
40 | static struct mutex sd_mtx; | 40 | static struct mutex sd_mtx; |
41 | static struct semaphore sd_wakeup; | 41 | //static struct semaphore sd_wakeup; |
42 | 42 | ||
43 | static int use_4bit; | 43 | static int use_4bit; |
44 | static int num_6; | 44 | static int num_6; |
@@ -1218,7 +1218,7 @@ int sd_init(void) | |||
1218 | static bool inited = false; | 1218 | static bool inited = false; |
1219 | if(!inited) | 1219 | if(!inited) |
1220 | { | 1220 | { |
1221 | semaphore_init(&sd_wakeup, 1, 0); | 1221 | // semaphore_init(&sd_wakeup, 1, 0); |
1222 | mutex_init(&sd_mtx); | 1222 | mutex_init(&sd_mtx); |
1223 | inited = true; | 1223 | inited = true; |
1224 | } | 1224 | } |
diff --git a/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4760.c b/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4760.c index c34f74a202..a80e3ec919 100644 --- a/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4760.c +++ b/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4760.c | |||
@@ -34,7 +34,7 @@ static long last_disk_activity = -1; | |||
34 | static tCardInfo card[NUM_DRIVES]; | 34 | static tCardInfo card[NUM_DRIVES]; |
35 | 35 | ||
36 | static struct mutex sd_mtx; | 36 | static struct mutex sd_mtx; |
37 | static struct semaphore sd_wakeup; | 37 | //static struct semaphore sd_wakeup; |
38 | 38 | ||
39 | static int use_4bit[NUM_DRIVES]; | 39 | static int use_4bit[NUM_DRIVES]; |
40 | static int num_6[NUM_DRIVES]; | 40 | static int num_6[NUM_DRIVES]; |
@@ -1229,7 +1229,7 @@ int sd_init(void) | |||
1229 | 1229 | ||
1230 | if(!inited) | 1230 | if(!inited) |
1231 | { | 1231 | { |
1232 | semaphore_init(&sd_wakeup, 1, 0); | 1232 | // semaphore_init(&sd_wakeup, 1, 0); |
1233 | mutex_init(&sd_mtx); | 1233 | mutex_init(&sd_mtx); |
1234 | inited = true; | 1234 | inited = true; |
1235 | } | 1235 | } |
@@ -1457,6 +1457,7 @@ bool sd_present(const int drive) | |||
1457 | #ifdef CONFIG_STORAGE_MULTI | 1457 | #ifdef CONFIG_STORAGE_MULTI |
1458 | int sd_num_drives(int first_drive) | 1458 | int sd_num_drives(int first_drive) |
1459 | { | 1459 | { |
1460 | (void)first_drive; | ||
1460 | return NUM_DRIVES; | 1461 | return NUM_DRIVES; |
1461 | } | 1462 | } |
1462 | #endif /* CONFIG_STORAGE_MULTI */ | 1463 | #endif /* CONFIG_STORAGE_MULTI */ |
diff --git a/firmware/target/mips/ingenic_jz47xx/debug-jz4760.c b/firmware/target/mips/ingenic_jz47xx/debug-jz4760.c index 88fc351946..848fa5343e 100644 --- a/firmware/target/mips/ingenic_jz47xx/debug-jz4760.c +++ b/firmware/target/mips/ingenic_jz47xx/debug-jz4760.c | |||
@@ -5,9 +5,8 @@ | |||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | 5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < |
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | 6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ |
7 | * \/ \/ \/ \/ \/ | 7 | * \/ \/ \/ \/ \/ |
8 | * $Id$ | ||
9 | * | 8 | * |
10 | * Copyright (C) 2016 by Roman Stolyarov | 9 | * Copyright (C) 2018 by Solomon Peachy |
11 | * | 10 | * |
12 | * This program is free software; you can redistribute it and/or | 11 | * This program is free software; you can redistribute it and/or |
13 | * modify it under the terms of the GNU General Public License | 12 | * modify it under the terms of the GNU General Public License |
@@ -30,117 +29,143 @@ | |||
30 | #include "button.h" | 29 | #include "button.h" |
31 | #include "timefuncs.h" | 30 | #include "timefuncs.h" |
32 | 31 | ||
33 | #define CFG_UART_BASE UART1_BASE /* Base of the UART channel */ | 32 | static int line = 0; |
34 | 33 | ||
35 | void serial_putc (const char c) | 34 | /* |
36 | { | 35 | * Clock Generation Module |
37 | volatile u8 *uart_lsr = (volatile u8 *)(CFG_UART_BASE + OFF_LSR); | 36 | */ |
38 | volatile u8 *uart_tdr = (volatile u8 *)(CFG_UART_BASE + OFF_TDR); | 37 | #define TO_MHZ(x) ((x)/1000000), ((x)%1000000)/10000 |
39 | 38 | #define TO_KHZ(x) ((x)/1000), ((x)%1000)/10 | |
40 | if (c == '\n') serial_putc ('\r'); | ||
41 | |||
42 | /* Wait for fifo to shift out some bytes */ | ||
43 | while ( !((*uart_lsr & (UARTLSR_TDRQ | UARTLSR_TEMT)) == 0x60) ); | ||
44 | 39 | ||
45 | *uart_tdr = (u8)c; | 40 | static void display_clocks(void) |
46 | } | ||
47 | |||
48 | void serial_puts (const char *s) | ||
49 | { | 41 | { |
50 | while (*s) { | 42 | unsigned int cppcr0 = REG_CPM_CPPCR0; /* PLL Control Register */ |
51 | serial_putc (*s++); | 43 | unsigned int cppcr1 = REG_CPM_CPPCR1; /* PLL Control Register */ |
52 | } | 44 | unsigned int div[] = {1, 2, 3, 4, 6, 8, 12, 16, 24, 32}; |
45 | unsigned int od[4] = {1, 2, 2, 4}; | ||
46 | |||
47 | lcd_putsf(0, line++, "CPPCR0:0x%08x", cppcr0); | ||
48 | lcd_putsf(0, line++, "PLL0 :%s", (cppcr0 & CPPCR0_PLLEN) ? "ON" : "OFF"); | ||
49 | lcd_putsf(0, line++, "PLL0 :%3d.%02d MHz", TO_MHZ(__cpm_get_pllout())); | ||
50 | lcd_putsf(0, line++, "m:n:o :%d:%d:%d", | ||
51 | __cpm_get_pllm() + 2, | ||
52 | __cpm_get_plln() + 2, | ||
53 | od[__cpm_get_pllod()] | ||
54 | ); | ||
55 | |||
56 | lcd_putsf(0, line++, "CPPCR1:0x%08x", cppcr1); | ||
57 | |||
58 | lcd_putsf(0, line++, "PLL1 :%s", (cppcr1 & CPPCR1_PLL1EN) ? "ON" : "OFF"); | ||
59 | lcd_putsf(0, line++, "PLL1 :%3d.%02d MHz", TO_MHZ(__cpm_get_pll1out())); | ||
60 | lcd_putsf(0, line++, "m:n:o :%d:%d:%d", | ||
61 | __cpm_get_pll1m() + 2, | ||
62 | __cpm_get_pll1n() + 2, | ||
63 | od[__cpm_get_pll1od()] | ||
64 | ); | ||
65 | |||
66 | lcd_putsf(0, line++, "C:H:M:P:%d:%d:%d:%d", | ||
67 | div[__cpm_get_cdiv()], | ||
68 | div[__cpm_get_hdiv()], | ||
69 | div[__cpm_get_mdiv()], | ||
70 | div[__cpm_get_pdiv()] | ||
71 | ); | ||
72 | lcd_putsf(0, line++, "I:P:M : %d:%d:%d", | ||
73 | __cpm_get_i2sdiv()+1, | ||
74 | __cpm_get_pixdiv()+1, | ||
75 | __cpm_get_mscdiv()+1 | ||
76 | ); | ||
77 | lcd_putsf(0, line++, "CCLK :%3d.%02d MHz", TO_MHZ(__cpm_get_cclk())); | ||
78 | lcd_putsf(0, line++, "HCLK :%3d.%02d MHz", TO_MHZ(__cpm_get_hclk())); | ||
79 | lcd_putsf(0, line++, "MCLK :%3d.%02d MHz", TO_MHZ(__cpm_get_mclk())); | ||
80 | lcd_putsf(0, line++, "PCLK :%3d.%02d MHz", TO_MHZ(__cpm_get_pclk())); | ||
81 | lcd_putsf(0, line++, "PIXCLK:%6d.%02d KHz", TO_KHZ(__cpm_get_pixclk())); | ||
82 | lcd_putsf(0, line++, "I2SCLK:%3d.%02d MHz", TO_MHZ(__cpm_get_i2sclk())); | ||
83 | lcd_putsf(0, line++, "MSCCLK:%3d.%02d MHz", TO_MHZ(__cpm_get_mscclk())); | ||
84 | lcd_putsf(0, line++, "EXTALCLK:%3d.%02d MHz", TO_MHZ(__cpm_get_extalclk())); | ||
85 | lcd_putsf(0, line++, "RTCCLK:%3d.%02d KHz", TO_KHZ(__cpm_get_rtcclk())); | ||
53 | } | 86 | } |
54 | 87 | ||
55 | void serial_putsf(const char *format, ...) | 88 | static void display_enabled_clocks(void) |
56 | { | 89 | { |
57 | static char printfbuf[256]; | 90 | unsigned long lcr = REG_CPM_LCR; |
58 | int len; | 91 | unsigned long clkgr0 = REG_CPM_CLKGR0; |
59 | unsigned char *ptr; | 92 | |
60 | va_list ap; | 93 | lcd_putsf(0, line++, "Low Power Mode : %s", |
61 | va_start(ap, format); | 94 | ((lcr & LCR_LPM_MASK) == LCR_LPM_IDLE) ? |
62 | 95 | "IDLE" : (((lcr & LCR_LPM_MASK) == LCR_LPM_SLEEP) ? "SLEEP" : "HIBERNATE") | |
63 | ptr = printfbuf; | 96 | ); |
64 | len = vsnprintf(ptr, sizeof(printfbuf), format, ap); | 97 | |
65 | va_end(ap); | 98 | lcd_putsf(0, line++, "Doze Mode : %s", |
66 | 99 | (lcr & LCR_DOZE) ? "ON" : "OFF"); | |
67 | serial_puts(ptr); | 100 | if (lcr & LCR_DOZE) |
68 | serial_putc('\n'); | 101 | lcd_putsf(0, line++, " duty : %d", (int)((lcr & LCR_DUTY_MASK) >> LCR_DUTY_LSB)); |
69 | } | 102 | |
70 | 103 | lcd_putsf(0, line++, "IPU : %s", | |
71 | void serial_put_hex(unsigned int d) | 104 | (clkgr0 & CLKGR0_IPU) ? "stopped" : "running"); |
72 | { | 105 | lcd_putsf(0, line++, "DMAC : %s", |
73 | char c[12]; | 106 | (clkgr0 & CLKGR0_DMAC) ? "stopped" : "running"); |
74 | int i; | 107 | lcd_putsf(0, line++, "UHC : %s", |
75 | for(i = 0; i < 8;i++) | 108 | (clkgr0 & CLKGR0_UHC) ? "stopped" : "running"); |
76 | { | 109 | lcd_putsf(0, line++, "LCD : %s", |
77 | c[i] = (d >> ((7 - i) * 4)) & 0xf; | 110 | (clkgr0 & CLKGR0_LCD) ? "stopped" : "running"); |
78 | if(c[i] < 10) | 111 | lcd_putsf(0, line++, "CIM : %s", |
79 | c[i] += 0x30; | 112 | (clkgr0 & CLKGR0_CIM) ? "stopped" : "running"); |
80 | else | 113 | lcd_putsf(0, line++, "SADC : %s", |
81 | c[i] += (0x41 - 10); | 114 | (clkgr0 & CLKGR0_SADC) ? "stopped" : "running"); |
82 | } | 115 | lcd_putsf(0, line++, "MSC0 : %s", |
83 | c[8] = '\n'; | 116 | (clkgr0 & CLKGR0_MSC0) ? "stopped" : "running"); |
84 | c[9] = 0; | 117 | lcd_putsf(0, line++, "MSC1 : %s", |
85 | serial_puts(c); | 118 | (clkgr0 & CLKGR0_MSC1) ? "stopped" : "running"); |
86 | 119 | lcd_putsf(0, line++, "MSC2 : %s", | |
87 | } | 120 | (clkgr0 & CLKGR0_MSC2) ? "stopped" : "running"); |
88 | 121 | lcd_putsf(0, line++, "AIC : %s", | |
89 | void serial_put_dec(unsigned int d) | 122 | (clkgr0 & CLKGR0_AIC) ? "stopped" : "running"); |
90 | { | 123 | lcd_putsf(0, line++, "SSI1 : %s", |
91 | char c[16]; | 124 | (clkgr0 & CLKGR0_SSI1) ? "stopped" : "running"); |
92 | int i; | 125 | lcd_putsf(0, line++, "SSI2 : %s", |
93 | int j = 0; | 126 | (clkgr0 & CLKGR0_SSI2) ? "stopped" : "running"); |
94 | int x = d; | 127 | lcd_putsf(0, line++, "I2C0 : %s", |
95 | 128 | (clkgr0 & CLKGR0_I2C0) ? "stopped" : "running"); | |
96 | while (x /= 10) | 129 | lcd_putsf(0, line++, "I2C1 : %s", |
97 | j++; | 130 | (clkgr0 & CLKGR0_I2C1) ? "stopped" : "running"); |
98 | 131 | lcd_putsf(0, line++, "UART1 : %s", | |
99 | for (i = j; i >= 0; i--) { | 132 | (clkgr0 & CLKGR0_UART1) ? "stopped" : "running"); |
100 | c[i] = d % 10; | 133 | lcd_putsf(0, line++, "UART0 : %s", |
101 | c[i] += 0x30; | 134 | (clkgr0 & CLKGR0_UART0) ? "stopped" : "running"); |
102 | d /= 10; | ||
103 | } | ||
104 | c[j + 1] = '\n'; | ||
105 | c[j + 2] = 0; | ||
106 | serial_puts(c); | ||
107 | } | ||
108 | |||
109 | void serial_dump_data(unsigned char* data, int len) | ||
110 | { | ||
111 | int i; | ||
112 | for(i=0; i<len; i++) | ||
113 | { | ||
114 | unsigned char a = ((*data)>>4) & 0xf; | ||
115 | if(a < 10) | ||
116 | a += 0x30; | ||
117 | else | ||
118 | a += (0x41 - 10); | ||
119 | serial_putc( a ); | ||
120 | |||
121 | a = (*data) & 0xf; | ||
122 | if(a < 10) | ||
123 | a += 0x30; | ||
124 | else | ||
125 | a += (0x41 - 10); | ||
126 | serial_putc( a ); | ||
127 | |||
128 | serial_putc( ' ' ); | ||
129 | |||
130 | data++; | ||
131 | } | ||
132 | |||
133 | serial_putc( '\n' ); | ||
134 | } | 135 | } |
135 | 136 | ||
136 | bool dbg_ports(void) | 137 | bool dbg_ports(void) |
137 | { | 138 | { |
138 | serial_puts("dbg_ports\n"); | ||
139 | return false; | 139 | return false; |
140 | } | 140 | } |
141 | 141 | ||
142 | bool dbg_hw_info(void) | 142 | bool dbg_hw_info(void) |
143 | { | 143 | { |
144 | serial_puts("dbg_hw_info\n"); | 144 | int btn = 0; |
145 | return false; | 145 | #ifdef HAVE_TOUCHSCREEN |
146 | int touch; | ||
147 | #endif | ||
148 | struct tm *cur_time; | ||
149 | |||
150 | lcd_setfont(FONT_UI); | ||
151 | while(btn ^ BUTTON_POWER) | ||
152 | { | ||
153 | lcd_clear_display(); | ||
154 | line = 0; | ||
155 | display_clocks(); | ||
156 | display_enabled_clocks(); | ||
157 | #ifdef HAVE_TOUCHSCREEN | ||
158 | btn = button_read_device(&touch); | ||
159 | lcd_putsf(0, line++, "X: %d Y: %d BTN: 0x%X", touch>>16, touch&0xFFFF, btn); | ||
160 | #else | ||
161 | btn = button_read_device(); | ||
162 | #endif | ||
163 | cur_time = get_time(); | ||
164 | lcd_putsf(0, line++, "%02d/%02d/%04d %02d:%02d:%02d", cur_time->tm_mday, | ||
165 | cur_time->tm_mon, cur_time->tm_year, cur_time->tm_hour, | ||
166 | cur_time->tm_min, cur_time->tm_sec); | ||
167 | lcd_update(); | ||
168 | sleep(HZ/16); | ||
169 | } | ||
170 | return true; | ||
146 | } | 171 | } |
diff --git a/firmware/target/mips/ingenic_jz47xx/i2c-jz4760.c b/firmware/target/mips/ingenic_jz47xx/i2c-jz4760.c index e35fe7a091..cf67b9d1f6 100644 --- a/firmware/target/mips/ingenic_jz47xx/i2c-jz4760.c +++ b/firmware/target/mips/ingenic_jz47xx/i2c-jz4760.c | |||
@@ -57,6 +57,7 @@ void I2C1(void) | |||
57 | cmd_flag = -1; | 57 | cmd_flag = -1; |
58 | __i2c_clear_interrupts(ret,I2C_CHN); | 58 | __i2c_clear_interrupts(ret,I2C_CHN); |
59 | REG_I2C_INTM(I2C_CHN) = 0x0; | 59 | REG_I2C_INTM(I2C_CHN) = 0x0; |
60 | (void)ret; | ||
60 | return; | 61 | return; |
61 | } | 62 | } |
62 | 63 | ||
@@ -83,7 +84,7 @@ void I2C1(void) | |||
83 | } | 84 | } |
84 | 85 | ||
85 | cmd_cnt--; | 86 | cmd_cnt--; |
86 | 87 | ||
87 | if (!(cmd_cnt)) { | 88 | if (!(cmd_cnt)) { |
88 | REG_I2C_INTM(I2C_CHN) = 0x0; | 89 | REG_I2C_INTM(I2C_CHN) = 0x0; |
89 | cmd_flag = 2; | 90 | cmd_flag = 2; |
@@ -198,9 +199,9 @@ int xfer_read_subaddr(unsigned char subaddr, unsigned char device, unsigned char | |||
198 | i2c_rwflags = I2C_M_RD; | 199 | i2c_rwflags = I2C_M_RD; |
199 | i2c_ctrl_rest = I2C_CTRL_REST; | 200 | i2c_ctrl_rest = I2C_CTRL_REST; |
200 | i2c_init_as_master(device); | 201 | i2c_init_as_master(device); |
201 | 202 | ||
202 | REG_I2C_DC(I2C_CHN) = (I2C_WRITE << 8) | subaddr; | 203 | REG_I2C_DC(I2C_CHN) = (I2C_WRITE << 8) | subaddr; |
203 | 204 | ||
204 | cmd_flag = 0; | 205 | cmd_flag = 0; |
205 | REG_I2C_INTM(I2C_CHN) = 0x10; | 206 | REG_I2C_INTM(I2C_CHN) = 0x10; |
206 | timeout = TIMEOUT; | 207 | timeout = TIMEOUT; |
@@ -224,6 +225,7 @@ int xfer_read_subaddr(unsigned char subaddr, unsigned char device, unsigned char | |||
224 | int ret; | 225 | int ret; |
225 | r_i = 2; | 226 | r_i = 2; |
226 | __i2c_clear_interrupts(ret,I2C_CHN); | 227 | __i2c_clear_interrupts(ret,I2C_CHN); |
228 | (void)ret; | ||
227 | goto R_dev_err; | 229 | goto R_dev_err; |
228 | } | 230 | } |
229 | } | 231 | } |
@@ -269,14 +271,14 @@ int xfer_write_subaddr(unsigned char subaddr, unsigned char device, const unsign | |||
269 | i2c_rwflags = I2C_M_WR; | 271 | i2c_rwflags = I2C_M_WR; |
270 | i2c_ctrl_rest = I2C_CTRL_REST; | 272 | i2c_ctrl_rest = I2C_CTRL_REST; |
271 | i2c_init_as_master(device); | 273 | i2c_init_as_master(device); |
272 | 274 | ||
273 | REG_I2C_DC(I2C_CHN) = (I2C_WRITE << 8) | subaddr; | 275 | REG_I2C_DC(I2C_CHN) = (I2C_WRITE << 8) | subaddr; |
274 | 276 | ||
275 | cmd_flag = 0; | 277 | cmd_flag = 0; |
276 | REG_I2C_INTM(I2C_CHN) = 0x10; | 278 | REG_I2C_INTM(I2C_CHN) = 0x10; |
277 | 279 | ||
278 | timeout = TIMEOUT; | 280 | timeout = TIMEOUT; |
279 | while ((cmd_flag != 2) && (--timeout)) | 281 | while ((cmd_flag != 2) && (--timeout)) |
280 | { | 282 | { |
281 | if (cmd_flag == -1){ | 283 | if (cmd_flag == -1){ |
282 | w_i = 1; | 284 | w_i = 1; |
@@ -308,6 +310,7 @@ int xfer_write_subaddr(unsigned char subaddr, unsigned char device, const unsign | |||
308 | int ret; | 310 | int ret; |
309 | w_i = 5; | 311 | w_i = 5; |
310 | __i2c_clear_interrupts(ret,I2C_CHN); | 312 | __i2c_clear_interrupts(ret,I2C_CHN); |
313 | (void)ret; | ||
311 | goto W_dev_err; | 314 | goto W_dev_err; |
312 | } | 315 | } |
313 | 316 | ||