diff --git a/src/crc32.c b/src/crc32.c index 8ce25dff..80e16f3a 100644 --- a/src/crc32.c +++ b/src/crc32.c @@ -132,7 +132,7 @@ int generic_crc32(target *t, uint32_t *crc_res, uint32_t base, size_t len) base += read_len; len -= read_len; } - DEBUG_WARN("%d ms\n", platform_time_ms() - start_time); + DEBUG_WARN("%" PRIu32 " ms\n", platform_time_ms() - start_time); *crc_res = crc; return 0; } diff --git a/src/target/jtag_devs.c b/src/target/jtag_devs.c index af55a636..f0ddea43 100644 --- a/src/target/jtag_devs.c +++ b/src/target/jtag_devs.c @@ -3,6 +3,7 @@ * * Copyright (C) 2011 Black Sphere Technologies Ltd. * Written by Gareth McMullin + * Copyright (C) 2022 1bitsquared - Rachel Mant * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,37 +26,47 @@ jtag_dev_descr_t dev_descr[] = { {.idcode = 0x0BA00477, .idmask = 0x0FFF0FFF, - .descr = "ARM Limited: ADIv5 JTAG-DP port.", + .descr = "ADIv5 JTAG-DP port.", .handler = adiv5_jtag_dp_handler}, + {.idcode = 0x00000477, .idmask = 0x00000FFF, + .descr = "Unknown ARM."}, {.idcode = 0x06410041, .idmask = 0x0FFFFFFF, - .descr = "ST Microelectronics: STM32, Medium density."}, + .descr = "STM32, Medium density."}, {.idcode = 0x06412041, .idmask = 0x0FFFFFFF, - .descr = "ST Microelectronics: STM32, Low density."}, + .descr = "STM32, Low density."}, {.idcode = 0x06414041, .idmask = 0x0FFFFFFF, - .descr = "ST Microelectronics: STM32, High density."}, + .descr = "STM32, High density."}, {.idcode = 0x06416041, .idmask = 0x0FFFFFFF, - .descr = "ST Microelectronics: STM32L."}, + .descr = "STM32L."}, {.idcode = 0x06418041, .idmask = 0x0FFFFFFF, - .descr = "ST Microelectronics: STM32, Connectivity Line."}, + .descr = "STM32, Connectivity Line."}, {.idcode = 0x06420041, .idmask = 0x0FFFFFFF, - .descr = "ST Microelectronics: STM32, Value Line."}, + .descr = "STM32, Value Line."}, {.idcode = 0x06428041, .idmask = 0x0FFFFFFF, - .descr = "ST Microelectronics: STM32, Value Line, High density."}, + .descr = "STM32, Value Line, High density."}, {.idcode = 0x06411041, .idmask = 0xFFFFFFFF, - .descr = "ST Microelectronics: STM32F2xx."}, + .descr = "STM32F2xx."}, {.idcode = 0x06422041, .idmask = 0xFFFFFFFF, - .descr = "ST Microelectronics: STM32F3xx."}, - {.idcode = 0x06413041 , .idmask = 0xFFFFFFFF, - .descr = "ST Microelectronics: STM32F4xx."}, - {.idcode = 0x0BB11477 , .idmask = 0xFFFFFFFF, + .descr = "STM32F3xx."}, + {.idcode = 0x06413041, .idmask = 0xFFFFFFFF, + .descr = "STM32F4xx."}, + {.idcode = 0x00000041, .idmask = 0x00000FFF, + .descr = "STM32 BSD."}, + {.idcode = 0x0BB11477, .idmask = 0xFFFFFFFF, .descr = "NPX: LPC11C24."}, - {.idcode = 0x4BA00477 , .idmask = 0xFFFFFFFF, + {.idcode = 0x4BA00477, .idmask = 0xFFFFFFFF, .descr = "NXP: LPC17xx family."}, + {.idcode = 0x00000093, .idmask = 0x00000FFF, + .descr = "Xilinx."}, + {.idcode = 0x0000063D, .idmask = 0x00000FFF, + .descr = "Xambala: RVDBG013."}, + {.idcode = 0x000007A3, .idmask = 0x00000FFF, + .descr = "Gigadevice BSD."}, /* Just for fun, unsupported */ - {.idcode = 0x8940303F, .idmask = 0xFFFFFFFF, .descr = "ATMEL: ATMega16."}, - {.idcode = 0x0792603F, .idmask = 0xFFFFFFFF, .descr = "ATMEL: AT91SAM9261."}, - {.idcode = 0x20270013, .idmask = 0xFFFFFFFF, .descr = "Intel: i80386ex."}, - {.idcode = 0x07B7617F, .idmask = 0xFFFFFFFF, .descr = "Broadcom: BCM2835."}, - {.idcode = 0x4BA00477, .idmask = 0xFFFFFFFF, .descr = "Broadcom: BCM2836."}, + {.idcode = 0x8940303F, .idmask = 0xFFFFFFFF, .descr = "ATMega16."}, + {.idcode = 0x0792603F, .idmask = 0xFFFFFFFF, .descr = "AT91SAM9261."}, + {.idcode = 0x20270013, .idmask = 0xFFFFFFFF, .descr = "i80386ex."}, + {.idcode = 0x07B7617F, .idmask = 0xFFFFFFFF, .descr = "BCM2835."}, + {.idcode = 0x4BA00477, .idmask = 0xFFFFFFFF, .descr = "BCM2836."}, {.idcode = 0, .idmask = 0, .descr = "Unknown"}, }; diff --git a/src/target/jtag_scan.c b/src/target/jtag_scan.c index c547ef6b..4addc492 100644 --- a/src/target/jtag_scan.c +++ b/src/target/jtag_scan.c @@ -3,6 +3,7 @@ * * Copyright (C) 2011 Black Sphere Technologies Ltd. * Written by Gareth McMullin + * Copyright (C) 2022 1bitsquared - Rachel Mant * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,7 +35,7 @@ struct jtag_dev_s jtag_devs[JTAG_MAX_DEVS+1]; int jtag_dev_count; /* bucket of ones for don't care TDI */ -static const uint8_t ones[] = "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"; +static const uint8_t ones[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; #if PC_HOSTED == 0 void jtag_add_device(const int dev_index, const jtag_dev_t *jtag_dev) diff --git a/src/target/samd.c b/src/target/samd.c index 6f3c574b..8bde7f12 100644 --- a/src/target/samd.c +++ b/src/target/samd.c @@ -715,51 +715,45 @@ static bool samd_set_flashlock(target *t, uint16_t value, const char **argv) return true; } -static bool parse_unsigned(const char *s, uint32_t *val) { +static bool parse_unsigned(const char *s, uint32_t *val) +{ int l, st; unsigned long num; - - l=strlen(s); - - if (l>2 && s[0]=='0' && (s[1]=='x' || s[1]=='X')) { - st=sscanf(s+2, "%lx", &num); - } else { - st=sscanf(s, "%lu", &num); - } - - if (st<1) { + + l = strlen(s); + // TODO: port to use substrate::toInt_t<> style parser for robustness and smaller code size + if (l > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) + st = sscanf(s + 2, "%lx", &num); + else + st = sscanf(s, "%lu", &num); + + if (st < 1) return false; - } - - *val=(uint32_t)num; + + *val = (uint32_t)num; return true; } static bool samd_cmd_lock_flash(target *t, int argc, const char **argv) { - unsigned long val; - - (void)argc; - (void)argv; - - if (argc>2) { + if (argc > 2) { tc_printf(t, "usage: monitor lock_flash [number]\n"); return false; - } else if (argc==1) { - return samd_set_flashlock(t, 0x0000, NULL); - } else { + } else if (argc == 2) { + uint32_t val = 0; if (!parse_unsigned(argv[1], &val)) { tc_printf(t, "number must be either decimal or 0x prefixed hexadecimal\n"); return false; } - - if (val>0xffff) { - tc_printf(t, "number must be between 0 and 0xFFFF\n"); + + if (val > 0xffffu) { + tc_printf(t, "number must be between 0 and 65535\n"); return false; } - + return samd_set_flashlock(t, (uint16_t)val, NULL); - } + } else + return samd_set_flashlock(t, 0x0000, NULL); } static bool samd_cmd_unlock_flash(target *t, int argc, const char **argv) @@ -804,30 +798,25 @@ static bool samd_set_bootprot(target *t, uint16_t value, const char **argv) static bool samd_cmd_lock_bootprot(target *t, int argc, const char **argv) { - unsigned long val; - - (void)argc; - (void)argv; /* locks first 0x7 .. 0, 0x6 .. 512, 0x5 .. 1024, ..., 0x0 .. 32768 bytes of flash*/ - - if (argc>2) { + if (argc > 2) { tc_printf(t, "usage: monitor lock_bootprot [number]\n"); return false; - } else if (argc==1) { - return samd_set_bootprot(t, 0, NULL); - } else { + } else if (argc == 2) { + uint32_t val = 0; if (!parse_unsigned(argv[1], &val)) { tc_printf(t, "number must be either decimal or 0x prefixed hexadecimal\n"); return false; } - - if (val>7) { + + if (val > 7) { tc_printf(t, "number must be between 0 and 7\n"); return false; } - + return samd_set_bootprot(t, (uint16_t)val, NULL); - } + } else + return samd_set_bootprot(t, 0, NULL); } static bool samd_cmd_unlock_bootprot(target *t, int argc, const char **argv)