2 * Copyright (c) 2013 Qualcomm Atheros, Inc.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted (subject to the limitations in the
7 * disclaimer below) provided that the following conditions are met:
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the
17 * * Neither the name of Qualcomm Atheros nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
21 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
22 * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
23 * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
24 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
32 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
33 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 #include "athos_api.h"
38 #if defined(PROJECT_K2)
39 #if SYSTEM_MODULE_SFLASH
40 #include "sflash_api.h"
42 #endif /* #if defined(PROJECT_K2) */
44 #if defined(SYSTEM_MODULE_DBG)
46 /* Function prototypes */
47 int db_help_cmd(char *, char*, char*, char*);
48 int db_ldr_cmd(char*, char*, char*, char*);
49 int db_str_cmd(char*, char*, char*, char*);
50 int db_dump_memory(char* cmd, char* param1, char* param2, char* param3);
51 int db_info_cmd(char*, char*, char*, char*);
52 int db_cmd_dbg(char*, char*, char*, char*);
53 int db_usb_cmd(char*, char*, char*, char*);
54 int db_intr_cmd(char*, char*, char*, char*);
55 int db_patch_cmd(char*, char*, char*, char*);
57 int db_cmd_memtest(char* cmd, char* param1, char* param2, char* param3);
58 int db_cmd_dmips(char* cmd, char* param1, char* param2, char* param3);
59 int db_cmd_starthtc(char* cmd, char* param1, char* param2, char* param3);
61 int db_eeprom_cmd(char* cmd, char* param1, char* param2, char* param3);
62 int db_wdt_cmd(char* cmd, char* param1, char* param2, char* param3);
64 #if defined(PROJECT_K2)
65 #if SYSTEM_MODULE_SFLASH
66 int db_cmd_sferase(char* cmd, char* param1, char* param2, char* param3);
67 int db_cmd_sfpg(char* cmd, char* param1, char* param2, char* param3);
68 int db_cmd_sfru(char* cmd, char* param1, char* param2, char* param3);
69 int db_cmd_sfrm(char* cmd, char* param1, char* param2, char* param3);
70 int db_cmd_sfrdsr(char* cmd, char* param1, char* param2, char* param3);
72 #endif /* #if defined(PROJECT_K2) */
73 int db_cmd_memcmp(char* cmd, char* param1, char* param2, char* param3);
74 int db_cmd_memdump(char* cmd, char* param1, char* param2, char* param3);
76 int db_clock_cmd(char* cmd, char* param1, char* param2, char* param3);
78 uint16_t db_get_cmd_line(uint8_t ch, char *cmd_line, uint16_t* i);
79 int db_formalize_command(char*, char*);
80 int db_ascii_to_hex(char*, unsigned long*);
81 int db_hex_to_ascii(unsigned long, char*);
82 void zfDebugTask(void);
84 int db_info_intr(char* cmd, char* param1, char* param2, char* param3);
86 extern u32_t this_is_global_variables;
88 /* Console debug command table */
89 const struct DB_COMMAND_STRUCT command_table[] =
91 {"HELP", ", List all debug commands", db_help_cmd},
92 {"?", ", Equal to HELP comamnd", db_help_cmd},
94 /* Basic load/store/dump command */
95 {"LDR", "<Hex addr>, Load word", db_ldr_cmd},
96 {"LDRH", "<Hex addr>, Load half word", db_ldr_cmd},
97 {"LDRB", "<Hex addr>, Load byte", db_ldr_cmd},
98 {"STR", "<Hex addr> <Hex value>, Store word", db_str_cmd},
99 {"STRH", "<Hex addr> <Hex value>, Store half word", db_str_cmd},
100 {"STRB", "<Hex addr> <Hex value>, Store byte", db_str_cmd},
101 {"DUMP", "<Hex addr>, Dump memory", db_dump_memory},
102 {"INFO", ", Print debug information", db_info_cmd},
103 {"USB", ", usb releated command", db_usb_cmd},
104 {"INTR", ", intr releated command", db_intr_cmd},
105 {"PATCH", ", patch function releated command", db_patch_cmd},
106 {"DBG", ", mute all print msg", db_cmd_dbg},
107 {"CLOCK", ", change the clock...", db_clock_cmd},
108 {"MEMTEST", "<Hex addr> <Number of bytes> test memory", db_cmd_memtest},
109 {"HTCR", "Issue HTC ready to host", db_cmd_starthtc},
110 {"EEP", ", eeprom r/w debug command", db_eeprom_cmd},
111 {"WDT", ", wdt debug command", db_wdt_cmd},
112 #if defined(PROJECT_K2)
113 #if SYSTEM_MODULE_SFLASH
114 {"SFE", ", S<Hex>/B<Hex>/C, SPI Flash chip erase", db_cmd_sferase},
115 {"SFPG", "<Hex addr> <Hex len> <Hex buf>, SPI Flash program", db_cmd_sfpg},
116 {"SFRU", "f/r <Hex addr> <Hex addr>, SPI Flash fast read/read to UART", db_cmd_sfru},
117 {"SFRM", "f/r <Hex addr> <Hex addr>, SPI Flash fast read/read to Memory 0x520000", db_cmd_sfrm},
118 {"SFRDSR", ", SPI Flash status register read", db_cmd_sfrdsr},
120 #endif /* #if defined(PROJECT_K2) */
121 {"MEMCMP", "<Hex addr> <Hex addr> <Hex len>, memory comparison", db_cmd_memcmp},
122 {"MEMDMP", "<Hex addr> <Hex addr>, memory dump", db_cmd_memdump},
124 /* {Command, Help description, function} */
127 char cmd_buffer[COMMAND_BUFFER_SIZE][DB_MAX_COMMAND_LENGTH]; /* Backup previous command */
130 char raw_cmd[DB_MAX_COMMAND_LENGTH];
131 char cmd_str[DB_MAX_COMMAND_LENGTH*4];
136 //////////////////////////////////////////////////
137 #define MAX_REG_NUM 16
139 typedef struct reg_elem {
141 unsigned char mode; // byte, half-word word
142 unsigned long reg_addr;
145 t_reg_elem reg_buffer[MAX_REG_NUM];
147 //////////////////////////////////////////////////
149 void zfDebugInit(void)
154 while ((zm_get_char(&ch)) != 0)
159 cmd_buf_full = FALSE;
164 void zfDebugTask(void)
169 if ((zm_get_char(&ch)) == 0)
174 if (db_get_cmd_line(ch, raw_cmd, &gvLen) == 0)
179 if (db_formalize_command(raw_cmd, cmd_str))
184 cmd_not_found = TRUE;
185 while(command_table[i].cmd_func)
187 if (!strcmp(command_table[i].cmd_str, cmd_str))
189 cmd_not_found = FALSE;
190 command_table[i].cmd_func(cmd_str,
191 cmd_str+DB_MAX_COMMAND_LENGTH,
192 cmd_str+DB_MAX_COMMAND_LENGTH*2,
193 cmd_str+DB_MAX_COMMAND_LENGTH*3);
200 zm_uart_send("Error, HELP for command list.\n\r", 31);
205 zm_uart_send(">", 1);
209 uint16_t db_get_cmd_line(uint8_t ch, char *cmd_line, uint16_t* i)
215 case '\\' : /* Last command */
217 if (pressed_time >= COMMAND_BUFFER_SIZE)
221 cmd_buf_loc = cmd_buf_ptr - pressed_time;
224 if (cmd_buf_full == TRUE)
226 cmd_buf_loc += COMMAND_BUFFER_SIZE;
234 if (A_STRLEN(cmd_buffer[cmd_buf_loc]) != 0)
236 A_STRCPY(cmd_line, cmd_buffer[cmd_buf_loc]);
237 *i = A_STRLEN(cmd_buffer[cmd_buf_loc]);
238 zm_uart_send("\r>", 2);
239 zm_uart_send(cmd_line, *i);
242 case 13 : /* Return */
245 zm_uart_send("\n\r", 2);
248 //Filter duplicated string in command history
249 if (strcmp(cmd_buffer[(cmd_buf_ptr==0)?(COMMAND_BUFFER_SIZE-1):(cmd_buf_ptr-1)], cmd_line) != 0)
251 A_STRCPY(cmd_buffer[cmd_buf_ptr++], cmd_line);
254 if (cmd_buf_ptr >= COMMAND_BUFFER_SIZE)
260 case '\b' : /* Backspace */
265 zm_uart_send("\b \b", 3);
271 if ((ch >= ' ') && (ch <= '~'))
274 if (*i < DB_MAX_COMMAND_LENGTH-2)
276 if ((ch >= 0x11) && (ch <= 0x7e))
278 //if ((buf <= 'z') && (buf >= 'a'))
284 zm_uart_send(&ch, 1);
291 zm_uart_send(&ch, 1);
294 } /* end of switch */
300 int db_formalize_command(char* raw_str, char* cmd_str)
309 /* Remove preceeding spaces */
310 while (raw_str[i++] == ' '){}
313 /* Copy command string */
315 while(raw_str[i] && (raw_str[i] != ' '))
319 if ((raw_str[i] <= 'z') && (raw_str[i] >= 'a'))
321 raw_str[i] -= 'a' - 'A';
323 cmd_str[k*DB_MAX_COMMAND_LENGTH + j++] = raw_str[i++];
327 cmd_str[k*DB_MAX_COMMAND_LENGTH + j++] = raw_str[i++];
330 cmd_str[k*DB_MAX_COMMAND_LENGTH + j] = 0;
332 return (int)A_STRLEN(cmd_str);
335 int db_ascii_to_hex(char* num_str, unsigned long* hex_num)
342 if ((num_str[i] >= '0') && (num_str[i] <= '9'))
345 *hex_num += (num_str[i] - '0');
347 else if ((num_str[i] >= 'A') && (num_str[i] <= 'F'))
350 *hex_num += (num_str[i] - 'A' + 10);
352 else if ((num_str[i] >= 'a') && (num_str[i] <= 'f'))
355 *hex_num += (num_str[i] - 'a' + 10);
366 int db_ascii_to_int(char* num_str, unsigned long* int_num)
373 if ((num_str[i] >= '0') && (num_str[i] <= '9'))
376 *int_num += (num_str[i] - '0');
387 int db_hex_to_ascii(unsigned long hex_num, char* num_str)
390 unsigned long four_bits;
394 four_bits = (hex_num >> i*4) & 0xf;
397 num_str[7-i] = four_bits + '0';
401 num_str[7-i] = four_bits - 10 + 'A';
408 int db_help_cmd(char* cmd, char* param1, char* param2, char* param3)
414 zm_uart_send(ATH_DEBUGGER_VERSION_STR,
415 A_STRLEN(ATH_DEBUGGER_VERSION_STR));
416 zm_uart_send(ATH_COMMAND_LIST_STR,
417 A_STRLEN(ATH_COMMAND_LIST_STR));
419 while (command_table[i].cmd_func)
421 zm_uart_send(command_table[i].cmd_str,
422 A_STRLEN(command_table[i].cmd_str));
423 zm_uart_send("\t", 1);
424 zm_uart_send(command_table[i].help_str,
425 A_STRLEN(command_table[i].help_str));
426 zm_uart_send("\n\r", 2);
432 int db_ldr_cmd(char* cmd, char* param1, char* param2, char* param3)
439 if (db_ascii_to_hex(param1, &addr) != -1)
443 zm_uart_send("Error! bad address 0x%08x.\n\r", (unsigned long)addr);
446 if (strcmp(cmd, "LDR") == 0)
449 //val = *(unsigned long *)addr;
451 val = HAL_WORD_REG_READ(addr);
453 else if (strcmp(cmd, "LDRH") == 0)
456 val = HAL_HALF_WORD_REG_READ(addr);
458 else if (strcmp(cmd, "LDRB") == 0)
462 db_hex_to_ascii(val, val_str);
463 db_hex_to_ascii(addr, addr_str);
465 zm_uart_send(addr_str, A_STRLEN(addr_str));
466 zm_uart_send(" : ", 3);
467 zm_uart_send(val_str, A_STRLEN(val_str));
468 zm_uart_send("\n\r", 2);
474 zm_uart_send("Error! Incorrect format.\n\r", 26);
480 int db_str_cmd(char* cmd, char* param1, char* param2, char* param3)
487 if ((A_STRLEN(param2) > 0) &&
488 (db_ascii_to_hex(param1, &addr) != -1) &&
489 (db_ascii_to_hex(param2, &val) != -1))
491 if (strcmp(cmd, "STR") == 0)
494 //HAL_WORD_REG_WRITE(addr, val);
495 HAL_WORD_REG_WRITE(addr, val);
496 //*(volatile unsigned long *)(addr & 0xfffffffc) = (unsigned long)val;
499 else if (strcmp(cmd, "STRH") == 0)
502 //*(volatile unsigned short *)(addr & 0xfffffffe) = (unsigned short)val;
503 HAL_HALF_WORD_REG_WRITE(addr, val);
505 else if (strcmp(cmd, "STRB") == 0)
507 if( addr & 0x00f00000 )
508 HAL_BYTE_REG_WRITE(addr, val);
510 HAL_BYTE_REG_WRITE(addr^3, val);
511 //*(volatile unsigned char *)addr = (unsigned char)val;
514 db_hex_to_ascii(val, val_str);
515 db_hex_to_ascii(addr, addr_str);
517 zm_uart_send(addr_str, A_STRLEN(addr_str));
518 zm_uart_send(" : ", 3);
519 zm_uart_send(val_str, A_STRLEN(val_str));
520 zm_uart_send("\n\r", 2);
526 zm_uart_send("Error! Incorrect format.\n\r", 26);
532 // macro extension the address to dump the memory
533 #define FOUR_BYTE_HEX_DUMP(addr) (" %02x %02x %02x %02x", \
534 *(uint8_t*)((addr)+3), *(uint8_t*)((addr)+2), \
535 *(uint8_t*)((addr)+1), *(uint8_t*)((addr)))
538 int db_dump_memory(char* cmd, char* param1, char* param2, char* param3)
541 unsigned long length;
542 unsigned long ptrAddr;
545 if (db_ascii_to_hex(param1, &addr) != -1 &&
546 (db_ascii_to_int(param2, &length) != -1))
548 // if no length, default is 128 bytes to dump
553 A_PRINTF("length: %d\n\r", length);
555 //zm_uart_send(" 7 6 5 4 3 2 1 0\n\r", 28);
556 A_PRINTF(" 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00\n\r");
557 A_PRINTF("------------------------------------------------------------\n\r");
558 for (i=0; i<length/16; i++)
560 //zfUartSendHex((unsigned long)addr);
561 A_PRINTF("%08x: ", (unsigned long)addr);
563 ptrAddr = (unsigned long *)addr;
565 // dump from MSB to LSB
566 A_PRINTF FOUR_BYTE_HEX_DUMP(ptrAddr+12);
567 A_PRINTF FOUR_BYTE_HEX_DUMP(ptrAddr+8);
569 A_PRINTF FOUR_BYTE_HEX_DUMP(ptrAddr+4);
570 A_PRINTF FOUR_BYTE_HEX_DUMP(ptrAddr);
575 // the rest of the byte to dump
576 if( (length %16)!=0 )
578 A_PRINTF("%08x: ", (unsigned long)addr);
580 // make the space, since we dump MSB first
581 for(i=0; i<(16-(length %16)); i++)
584 // if less than 8 bytes, add 2 more space for " -"
585 if( (length%16) < 8 )
588 for(i=0; i<length%16; i++)
591 A_PRINTF(" %02x", *(uint8_t*)((addr+(length%16)-1)-i));
593 if((16-(length%16))+i==7)
603 LOCAL void dbg_timer_func(A_HANDLE alarm, void *data)
605 A_PRINTF("this is a timer alarm function 0x%08x\n\r", xthal_get_ccount());
608 int db_patch_cmd(char* cmd, char* param1, char* param2, char* param3)
616 int db_intr_cmd(char* cmd, char* param1, char* param2, char* param3)
618 #if SYSTEM_MODULE_INTR
619 uint32_t pending_intrs;
621 if(strcmp(param1, "read") == 0 )
624 /* Update snapshot of pending interrupts */
626 pending_intrs = A_INTR_GET_INTRPENDING();
628 A_PRINTF("intr mask [0x%08x]\n\r", xthal_get_intenable());
629 A_PRINTF("intr on [0x%08x]\n\r", pending_intrs);
632 else if (strcmp(param1, "timer") == 0 )
636 if (strcmp(param2, "on") == 0 )
638 /* TODO: this part is probably dead. */
639 pending_intrs = A_INTR_GET_INTRENABLE()|CMNOS_IMASK_XTTIMER;
640 A_INTR_SET_INTRENABLE(pending_intrs);
641 A_PRINTF("- intr [0x%08x]\n\r", pending_intrs);
643 else if ( strcmp(param2, "off") == 0 )
645 pending_intrs = A_INTR_GET_INTRENABLE()&(~CMNOS_IMASK_XTTIMER);
646 A_INTR_SET_INTRENABLE(pending_intrs);
647 A_PRINTF("- intr [0x%08x]\n\r", pending_intrs);
650 else if( db_ascii_to_hex(param2, &data)==0 )
652 if( data>=0 && data <=10 )
657 A_PRINTF("==>set cb to %d seconds \n\r", delay);
663 A_PRINTF("\tintr read - read the interrenable status\n\r");
664 A_PRINTF("\tintr timer on/off/tick - timer attach on/off/ticks\n\r");
668 #endif //#if SYSTEM_MODULE_INTR
672 uint32_t usb_swap_flag = 0; //default
673 uint32_t usb_swap_flag_changed = 0;
674 int db_usb_cmd(char* cmd, char* param1, char* param2, char* param3)
676 A_PRINTF("THIS IS USB COMMAND\n\r");
678 if( strcmp(param1, "que") == 0 )
680 HIFusb_DescTraceDump();
684 A_PRINTF("\tusb que - dump descriptor queue\n\r");
685 A_PRINTF("\tusb fw on/off - enable/disable write fw download to ram\n\r");
691 static void clk_change(uint32_t clk, uint32_t ratio, uint32_t baud)
693 uint32_t clk_sel = 0;
716 HAL_WORD_REG_WRITE(0x50040, (0x300|clk_sel|(ratio>>1)<<12));
717 A_UART_HWINIT((clk*1000*1000)/ratio, baud);
721 int db_clock_cmd(char* cmd, char* param1, char* param2, char* param3)
724 uint32_t baud = 19200;
727 if( db_ascii_to_int(param1, &clk) != -1 )
729 A_PRINTF("changing clock to %d\n", clk);
730 clk_change(clk, ratio, baud);
734 int db_info_cmd(char* cmd, char* param1, char* param2, char* param3)
738 if(strcmp(param1, "ram") == 0 )
742 #if SYSTEM_MODULE_SYS_MONITOR
743 else if(strcmp(param1, "cpu") == 0)
744 zfPrintCpuUtilization();
747 HIFusb_DescTraceDump();
758 register uint32_t data1;
759 if( db_ascii_to_hex(param1, &data1)==0 )
761 __asm__ __volatile__ (
763 : "=a" (ccount1) : : "memory"
765 data = *(volatile uint32_t *)(data1);
766 __asm__ __volatile__ (
768 : "=a" (ccount2) : : "memory"
770 A_PRINTF("\n\rread 0x%08x (0x%08x) use %d clocks\n\r", data1, data, ccount2-ccount1);
773 __asm__ __volatile__ (
775 : "=a" (ccount1) : : "memory"
777 data = *(volatile uint32_t *)(data1);
778 __asm__ __volatile__ (
780 : "=a" (ccount2) : : "memory"
782 A_PRINTF("\n\rread 0x%08x (0x%08x) use %d clocks\n\r", data1, data, ccount2-ccount1);
785 __asm__ __volatile__ (
787 : "=a" (ccount1) : : "memory"
789 data = *(volatile uint32_t *)(data2);
790 __asm__ __volatile__ (
792 : "=a" (ccount2) : : "memory"
794 A_PRINTF("read 0x%08x (0x%08x) use %d clocks\n\r", data2, data, ccount2-ccount1);
797 __asm__ __volatile__ (
799 : "=a" (ccount1) : : "memory"
801 data = *(volatile uint32_t *)(data3);
802 __asm__ __volatile__ (
804 : "=a" (ccount2) : : "memory"
806 A_PRINTF("read 0x%08x (0x%08x) use %d clocks\n\r", data3, data, ccount2-ccount1);
813 int db_cmd_dbg(char* cmd, char* param1, char* param2, char* param3)
817 int db_cmd_dmips(char* cmd, char* param1, char* param2, char* param3)
822 int db_cmd_starthtc(char* cmd, char* param1, char* param2, char* param3)
824 extern htc_handle_t htc_handle;
825 HTC_Ready(htc_handle);
828 int db_cmd_memtest(char* cmd, char* param1, char* param2, char* param3)
837 #define WRITE_USB_DESC(pDesc, Offset) \
839 uint16_t *pSrc = 0; \
840 uint16_t mSize = 0; \
841 pSrc = (uint16_t *)(pDesc); \
842 mSize = (*pSrc&0xff)/2; \
843 A_PRINTF("0x%04x, 0x%04x, 0x%08x\n", Offset, mSize, pSrc); \
844 A_EEP_WRITE(Offset, mSize, pSrc); \
845 A_DELAY_USECS(500); \
848 #define READ_USB_DESC(pDesc, Offset, Size) \
852 pDst = (uint16_t *)pDesc; \
853 A_EEP_READ(Offset, 1, &mSize); \
854 mSize = mSize &0xff; \
858 A_PRINTF("0x%04x, 0x%04x, 0x%08x\n", Offset, mSize, pDst); \
859 A_EEP_READ(Offset, mSize, pDst); \
860 A_DELAY_USECS(500); \
864 ////////////////////////////////////////////////////////////////////////////////////////////////
866 extern uint16_t UsbDeviceDescriptor[];
867 extern uint16_t String00Descriptor[];
868 extern uint16_t String10Descriptor[];
869 extern uint16_t String20Descriptor[];
870 extern uint16_t String30Descriptor[];
872 int db_eeprom_cmd(char* cmd, char* param1, char* param2, char* param3)
877 int db_wdt_cmd(char* cmd, char* param1, char* param2, char* param3)
879 if ( strcmp(param1, "rst") == 0 )
881 A_PRINTF(" reseting.....................\n\n\r");
884 else if( strcmp(param1, "on") == 0 )
888 else if (strcmp(param1, "off") == 0 )
892 else if ( strcmp(param1, "boot") == 0 )
894 if (ENUM_WDT_BOOT == A_WDT_LASTBOOT() )
895 A_PRINTF("LAST BOOT IS %s", "wdt");
897 A_PRINTF("LAST BOOT IS %s", "normal boot");
899 else if (strcmp(param1, "loop") == 0 )
902 uint32_t time_offset;
903 A_PRINTF(" doing the wdt reseting................\n\n\r");
905 if( db_ascii_to_hex(param2, &time_offset)!=0 )
907 if( time_offset < 0 || time_offset >0xffffffff )
908 time_offset = 0xffffff;
910 A_PRINTF(" doing the wdt reseting (wdt tick: 0x%08x................\n\n\r", time_offset);
911 wdt_cmd.cmd = WDT_TIMEOUT;
912 wdt_cmd.timeout = time_offset;
917 else if (strcmp(param1, "noloop") == 0 )
920 uint32_t time_offset;
921 A_PRINTF(" doing the wdt reseting................\n\n\r");
923 if( db_ascii_to_hex(param3, &time_offset)!=0 )
925 if( time_offset < 0 || time_offset >0xffffffff )
926 time_offset = 0xffffff;
928 A_PRINTF(" doing the wdt reseting (wdt tick: 0x%08x................\n\n\r", time_offset);
930 wdt_cmd.cmd = WDT_TIMEOUT;
931 wdt_cmd.timeout = time_offset;
935 else if( strcmp(param1, "event") == 0 )
937 uint32_t event= 0x00123400;
938 #define USB_BYTE_REG_WRITE(addr, val) HAL_BYTE_REG_WRITE(USB_CTRL_BASE_ADDRESS|(uint8_t)(addr^3), (val))
939 #define USB_BYTE_REG_READ(addr) HAL_BYTE_REG_READ(USB_CTRL_BASE_ADDRESS|(uint8_t)(addr^3))
941 #define USB_WORD_REG_WRITE(addr, val) HAL_WORD_REG_WRITE(USB_CTRL_BASE_ADDRESS|(uint32_t)(addr), (val))
942 #define USB_WORD_REG_READ(addr) HAL_WORD_REG_READ(USB_CTRL_BASE_ADDRESS|(uint32_t)(addr))
945 USB_BYTE_REG_WRITE(0x17, USB_BYTE_REG_READ(0x17)|0xc0);
947 //ZM_CBUS_FIFO_SIZE_REG = 0xf;
948 USB_WORD_REG_WRITE(0x100, 0x0f);
950 //ZM_EP3_DATA_REG = event;
951 USB_WORD_REG_WRITE(0xF8, event);
954 USB_BYTE_REG_WRITE(0xAE, USB_BYTE_REG_READ(0xAE)|0x08);
957 USB_BYTE_REG_WRITE(0x17, USB_BYTE_REG_READ(0x17)&0xbf);
961 #if defined(PROJECT_K2)
962 #if SYSTEM_MODULE_SFLASH
963 /* Serial Flash -> Chip Erase, Sector Erase, Block Erase */
964 int db_cmd_sferase(char* cmd, char* param1, char* param2, char* param3)
968 if (strcmp(param1, "s") == 0)
970 if (db_ascii_to_hex(param2, &addr) != -1 && addr < SPI_FLASH_MAX_SIZE)
972 /* Sector size is 4K (0x1000) */
973 A_PRINTF("Sector addr : 0x%08X\n\r", addr - addr%0x1000);
974 A_SFLASH_ERASE(ZM_SFLASH_SECTOR_ERASE, addr);
980 A_PRINTF("Error! Incorrect format.\n\r");
984 else if (strcmp(param2, "b") == 0)
986 if (db_ascii_to_hex(param2, &addr) != -1 && addr < SPI_FLASH_MAX_SIZE)
988 /* Sector size is 64K (0x10000) */
989 A_PRINTF("Block addr : 0x%08X\n\r", addr - addr%0x10000);
990 A_SFLASH_ERASE(ZM_SFLASH_BLOCK_ERASE, addr);
996 A_PRINTF("Error! Incorrect format.\n\r");
1000 else if (strcmp(param1, "c") == 0)
1002 A_SFLASH_ERASE(ZM_SFLASH_CHIP_ERASE, addr);
1009 A_PRINTF("Error! Unknown command.\n\r");
1014 /* Serial Flash -> Program */
1015 int db_cmd_sfpg(char* cmd, char* param1, char* param2, char* param3)
1017 unsigned long addr, len, buf;
1019 if (db_ascii_to_hex(param1, &addr) != -1 &&
1020 db_ascii_to_hex(param2, &len) != -1 &&
1021 db_ascii_to_hex(param3, &buf) != -1 &&
1022 ((addr+len) <= SPI_FLASH_MAX_SIZE) &&
1023 addr%4 == 0 && len%4 == 0 && buf%4 == 0 &&
1024 ((buf >=0x500000 && buf < 0x528000) || (buf >=0x4e0000 && buf < 0x4e6000)) )
1026 A_SFLASH_PROG(addr, len, (A_UINT8 *)buf);
1033 A_PRINTF("Error! Incorrect format.\n\r");
1038 /* Serial Flash -> Read, Fast Read to UART */
1039 int db_cmd_sfru(char* cmd, char* param1, char* param2, char* param3)
1042 unsigned long addr1, addr2, t_addr;
1045 if (strcmp(param1, "r") == 0)
1047 else if (strcmp(param1, "f") == 0)
1051 A_PRINTF("Error! Unknown command.\n\r");
1055 if (db_ascii_to_hex(param2, &addr1) != -1 &&
1056 db_ascii_to_hex(param3, &addr2) != -1 &&
1057 addr1 < addr2 && addr1 < SPI_FLASH_MAX_SIZE &&
1058 addr2 < SPI_FLASH_MAX_SIZE && addr1%4 == 0)
1060 A_PRINTF("addr data data data data data data data data\n\r");
1061 A_PRINTF("====== ======== ======== ======== ======== ======== ======== ======== ========");
1063 for (i = 0, t_addr = addr1; t_addr < addr2; i++, t_addr += 4)
1066 A_PRINTF("\n\r%06X ", t_addr);
1068 A_SFLASH_READ(fast, t_addr, 4, (A_UINT8 *)&val);
1069 A_PRINTF("%08X ", val);
1077 A_PRINTF("Error! Incorrect format.\n\r");
1082 /* Serial Flash -> Read, Fast Read to Memory */
1083 int db_cmd_sfrm(char* cmd, char* param1, char* param2, char* param3)
1086 unsigned long addr1, addr2, t_addr;
1088 A_UINT8 *buf = (A_UINT8 *)0x520000;
1090 if (strcmp(param1, "r") == 0)
1092 else if (strcmp(param1, "f") == 0)
1096 A_PRINTF("Error! Unknown command.\n\r");
1100 if (db_ascii_to_hex(param2, &addr1) != -1 &&
1101 db_ascii_to_hex(param3, &addr2) != -1 &&
1102 addr1 < addr2 && addr1 < SPI_FLASH_MAX_SIZE &&
1103 addr2 < SPI_FLASH_MAX_SIZE && addr1%4 == 0)
1105 for (i = 0, t_addr = addr1; t_addr < addr2; i++, t_addr += 4)
1107 A_SFLASH_READ(fast, t_addr, 4, buf + i*4);
1115 A_PRINTF("Error! Incorrect format.\n\r");
1120 /* Serial Flash -> Read Status Register */
1121 int db_cmd_sfrdsr(char* cmd, char* param1, char* param2, char* param3)
1123 A_PRINTF("0x%02X\n\r", A_SFLASH_RDSR());
1127 #endif /* #if defined(PROJECT_K2) */
1129 /* Memory Comparison */
1130 int db_cmd_memcmp(char* cmd, char* param1, char* param2, char* param3)
1132 unsigned long addr1, addr2, len;
1133 A_UINT8 *buf1, *buf2;
1135 if (db_ascii_to_hex(param1, &addr1) != -1 &&
1136 db_ascii_to_hex(param2, &addr2) != -1 &&
1137 db_ascii_to_hex(param3, &len) != -1 &&
1138 addr1 != addr2 && addr1%4 == 0 && addr2%4 == 0 && len%4 == 0)
1140 buf1 = (A_UINT8 *)addr1;
1141 buf2 = (A_UINT8 *)addr2; ;
1143 A_PRINTF("memcmp(buf1, buf2, len) = %d\n\r", A_MEMCMP(buf1, buf2, len));
1148 A_PRINTF("Error! Incorrect format.\n\r");
1154 int db_cmd_memdump(char* cmd, char* param1, char* param2, char* param3)
1157 unsigned long addr1, addr2, t_addr;
1160 if (db_ascii_to_hex(param1, &addr1) != -1 && db_ascii_to_hex(param2, &addr2) != -1 && addr1 < addr2 && addr1%4 == 0)
1162 A_PRINTF("addr data data data data data data data data\n\r");
1163 A_PRINTF("====== ======== ======== ======== ======== ======== ======== ======== ========");
1165 for (i = 0, t_addr = addr1; t_addr < addr2; i++, t_addr += 4)
1168 A_PRINTF("\n\r%06X ", t_addr);
1170 val = (A_UINT32 *)t_addr;
1171 A_PRINTF("%08X ", *val);
1179 A_PRINTF("Error! Incorrect format.\n\r");
1183 void cmnos_dbg_module_install(struct dbg_api *apis)
1185 apis->_dbg_init = zfDebugInit;
1186 apis->_dbg_task = zfDebugTask;
1189 #endif /* SYSTEM_MODULE_DBG */