Merge commit '4fe8fd8944ad49e40a46287e2286328af6871226' into sam-update
This commit is contained in:
commit
03331b3fff
@ -132,7 +132,7 @@ int generic_crc32(target *t, uint32_t *crc_res, uint32_t base, size_t len)
|
|||||||
base += read_len;
|
base += read_len;
|
||||||
len -= 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;
|
*crc_res = crc;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (C) 2011 Black Sphere Technologies Ltd.
|
* Copyright (C) 2011 Black Sphere Technologies Ltd.
|
||||||
* Written by Gareth McMullin <gareth@blacksphere.co.nz>
|
* Written by Gareth McMullin <gareth@blacksphere.co.nz>
|
||||||
|
* Copyright (C) 2022 1bitsquared - Rachel Mant <git@dragonmux.network>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -25,37 +26,47 @@
|
|||||||
|
|
||||||
jtag_dev_descr_t dev_descr[] = {
|
jtag_dev_descr_t dev_descr[] = {
|
||||||
{.idcode = 0x0BA00477, .idmask = 0x0FFF0FFF,
|
{.idcode = 0x0BA00477, .idmask = 0x0FFF0FFF,
|
||||||
.descr = "ARM Limited: ADIv5 JTAG-DP port.",
|
.descr = "ADIv5 JTAG-DP port.",
|
||||||
.handler = adiv5_jtag_dp_handler},
|
.handler = adiv5_jtag_dp_handler},
|
||||||
|
{.idcode = 0x00000477, .idmask = 0x00000FFF,
|
||||||
|
.descr = "Unknown ARM."},
|
||||||
{.idcode = 0x06410041, .idmask = 0x0FFFFFFF,
|
{.idcode = 0x06410041, .idmask = 0x0FFFFFFF,
|
||||||
.descr = "ST Microelectronics: STM32, Medium density."},
|
.descr = "STM32, Medium density."},
|
||||||
{.idcode = 0x06412041, .idmask = 0x0FFFFFFF,
|
{.idcode = 0x06412041, .idmask = 0x0FFFFFFF,
|
||||||
.descr = "ST Microelectronics: STM32, Low density."},
|
.descr = "STM32, Low density."},
|
||||||
{.idcode = 0x06414041, .idmask = 0x0FFFFFFF,
|
{.idcode = 0x06414041, .idmask = 0x0FFFFFFF,
|
||||||
.descr = "ST Microelectronics: STM32, High density."},
|
.descr = "STM32, High density."},
|
||||||
{.idcode = 0x06416041, .idmask = 0x0FFFFFFF,
|
{.idcode = 0x06416041, .idmask = 0x0FFFFFFF,
|
||||||
.descr = "ST Microelectronics: STM32L."},
|
.descr = "STM32L."},
|
||||||
{.idcode = 0x06418041, .idmask = 0x0FFFFFFF,
|
{.idcode = 0x06418041, .idmask = 0x0FFFFFFF,
|
||||||
.descr = "ST Microelectronics: STM32, Connectivity Line."},
|
.descr = "STM32, Connectivity Line."},
|
||||||
{.idcode = 0x06420041, .idmask = 0x0FFFFFFF,
|
{.idcode = 0x06420041, .idmask = 0x0FFFFFFF,
|
||||||
.descr = "ST Microelectronics: STM32, Value Line."},
|
.descr = "STM32, Value Line."},
|
||||||
{.idcode = 0x06428041, .idmask = 0x0FFFFFFF,
|
{.idcode = 0x06428041, .idmask = 0x0FFFFFFF,
|
||||||
.descr = "ST Microelectronics: STM32, Value Line, High density."},
|
.descr = "STM32, Value Line, High density."},
|
||||||
{.idcode = 0x06411041, .idmask = 0xFFFFFFFF,
|
{.idcode = 0x06411041, .idmask = 0xFFFFFFFF,
|
||||||
.descr = "ST Microelectronics: STM32F2xx."},
|
.descr = "STM32F2xx."},
|
||||||
{.idcode = 0x06422041, .idmask = 0xFFFFFFFF,
|
{.idcode = 0x06422041, .idmask = 0xFFFFFFFF,
|
||||||
.descr = "ST Microelectronics: STM32F3xx."},
|
.descr = "STM32F3xx."},
|
||||||
{.idcode = 0x06413041 , .idmask = 0xFFFFFFFF,
|
{.idcode = 0x06413041, .idmask = 0xFFFFFFFF,
|
||||||
.descr = "ST Microelectronics: STM32F4xx."},
|
.descr = "STM32F4xx."},
|
||||||
{.idcode = 0x0BB11477 , .idmask = 0xFFFFFFFF,
|
{.idcode = 0x00000041, .idmask = 0x00000FFF,
|
||||||
|
.descr = "STM32 BSD."},
|
||||||
|
{.idcode = 0x0BB11477, .idmask = 0xFFFFFFFF,
|
||||||
.descr = "NPX: LPC11C24."},
|
.descr = "NPX: LPC11C24."},
|
||||||
{.idcode = 0x4BA00477 , .idmask = 0xFFFFFFFF,
|
{.idcode = 0x4BA00477, .idmask = 0xFFFFFFFF,
|
||||||
.descr = "NXP: LPC17xx family."},
|
.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 */
|
/* Just for fun, unsupported */
|
||||||
{.idcode = 0x8940303F, .idmask = 0xFFFFFFFF, .descr = "ATMEL: ATMega16."},
|
{.idcode = 0x8940303F, .idmask = 0xFFFFFFFF, .descr = "ATMega16."},
|
||||||
{.idcode = 0x0792603F, .idmask = 0xFFFFFFFF, .descr = "ATMEL: AT91SAM9261."},
|
{.idcode = 0x0792603F, .idmask = 0xFFFFFFFF, .descr = "AT91SAM9261."},
|
||||||
{.idcode = 0x20270013, .idmask = 0xFFFFFFFF, .descr = "Intel: i80386ex."},
|
{.idcode = 0x20270013, .idmask = 0xFFFFFFFF, .descr = "i80386ex."},
|
||||||
{.idcode = 0x07B7617F, .idmask = 0xFFFFFFFF, .descr = "Broadcom: BCM2835."},
|
{.idcode = 0x07B7617F, .idmask = 0xFFFFFFFF, .descr = "BCM2835."},
|
||||||
{.idcode = 0x4BA00477, .idmask = 0xFFFFFFFF, .descr = "Broadcom: BCM2836."},
|
{.idcode = 0x4BA00477, .idmask = 0xFFFFFFFF, .descr = "BCM2836."},
|
||||||
{.idcode = 0, .idmask = 0, .descr = "Unknown"},
|
{.idcode = 0, .idmask = 0, .descr = "Unknown"},
|
||||||
};
|
};
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (C) 2011 Black Sphere Technologies Ltd.
|
* Copyright (C) 2011 Black Sphere Technologies Ltd.
|
||||||
* Written by Gareth McMullin <gareth@blacksphere.co.nz>
|
* Written by Gareth McMullin <gareth@blacksphere.co.nz>
|
||||||
|
* Copyright (C) 2022 1bitsquared - Rachel Mant <git@dragonmux.network>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* 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;
|
int jtag_dev_count;
|
||||||
|
|
||||||
/* bucket of ones for don't care TDI */
|
/* 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
|
#if PC_HOSTED == 0
|
||||||
void jtag_add_device(const int dev_index, const jtag_dev_t *jtag_dev)
|
void jtag_add_device(const int dev_index, const jtag_dev_t *jtag_dev)
|
||||||
|
@ -715,51 +715,45 @@ static bool samd_set_flashlock(target *t, uint16_t value, const char **argv)
|
|||||||
return true;
|
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;
|
int l, st;
|
||||||
unsigned long num;
|
unsigned long num;
|
||||||
|
|
||||||
l=strlen(s);
|
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 (l>2 && s[0]=='0' && (s[1]=='x' || s[1]=='X')) {
|
if (st < 1)
|
||||||
st=sscanf(s+2, "%lx", &num);
|
|
||||||
} else {
|
|
||||||
st=sscanf(s, "%lu", &num);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (st<1) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
*val=(uint32_t)num;
|
*val = (uint32_t)num;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool samd_cmd_lock_flash(target *t, int argc, const char **argv)
|
static bool samd_cmd_lock_flash(target *t, int argc, const char **argv)
|
||||||
{
|
{
|
||||||
unsigned long val;
|
if (argc > 2) {
|
||||||
|
|
||||||
(void)argc;
|
|
||||||
(void)argv;
|
|
||||||
|
|
||||||
if (argc>2) {
|
|
||||||
tc_printf(t, "usage: monitor lock_flash [number]\n");
|
tc_printf(t, "usage: monitor lock_flash [number]\n");
|
||||||
return false;
|
return false;
|
||||||
} else if (argc==1) {
|
} else if (argc == 2) {
|
||||||
return samd_set_flashlock(t, 0x0000, NULL);
|
uint32_t val = 0;
|
||||||
} else {
|
|
||||||
if (!parse_unsigned(argv[1], &val)) {
|
if (!parse_unsigned(argv[1], &val)) {
|
||||||
tc_printf(t, "number must be either decimal or 0x prefixed hexadecimal\n");
|
tc_printf(t, "number must be either decimal or 0x prefixed hexadecimal\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (val>0xffff) {
|
if (val > 0xffffu) {
|
||||||
tc_printf(t, "number must be between 0 and 0xFFFF\n");
|
tc_printf(t, "number must be between 0 and 65535\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return samd_set_flashlock(t, (uint16_t)val, NULL);
|
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)
|
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)
|
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*/
|
/* 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");
|
tc_printf(t, "usage: monitor lock_bootprot [number]\n");
|
||||||
return false;
|
return false;
|
||||||
} else if (argc==1) {
|
} else if (argc == 2) {
|
||||||
return samd_set_bootprot(t, 0, NULL);
|
uint32_t val = 0;
|
||||||
} else {
|
|
||||||
if (!parse_unsigned(argv[1], &val)) {
|
if (!parse_unsigned(argv[1], &val)) {
|
||||||
tc_printf(t, "number must be either decimal or 0x prefixed hexadecimal\n");
|
tc_printf(t, "number must be either decimal or 0x prefixed hexadecimal\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (val>7) {
|
if (val > 7) {
|
||||||
tc_printf(t, "number must be between 0 and 7\n");
|
tc_printf(t, "number must be between 0 and 7\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return samd_set_bootprot(t, (uint16_t)val, NULL);
|
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)
|
static bool samd_cmd_unlock_bootprot(target *t, int argc, const char **argv)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user