Skip to content

Commit

Permalink
Rebase with master
Browse files Browse the repository at this point in the history
Signed-off-by: Jerry Jacobs <jerry.jacobs@xor-gate.org>
  • Loading branch information
xor-gate committed Aug 3, 2016
2 parents 4514e91 + 57cf59a commit b809473
Show file tree
Hide file tree
Showing 9 changed files with 78 additions and 46 deletions.
7 changes: 7 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 2.8.7)

project(stlink C)
include(CheckCCompilerFlag)
include(CheckIncludeFile)
find_package(PkgConfig)

if (POLICY CMP0042)
# Newer cmake on MacOS should use @rpath
Expand Down Expand Up @@ -97,6 +99,11 @@ elseif()
add_cflag_if_supported("-O2")
endif()

CHECK_INCLUDE_FILE(sys/mman.h STLINK_HAVE_SYS_MMAN_H)
if (STLINK_HAVE_SYS_MMAN_H)
add_definitions(-DSTLINK_HAVE_SYS_MMAN_H)
endif()

message("Building ${PROJECT_NAME} ${STLINK_PACKAGE_VERSION}")

set(STLINK_HEADERS
Expand Down
2 changes: 1 addition & 1 deletion include/stlink/mmap.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#ifndef STLINK_MMAP_H
#define STLINK_MMAP_H

#ifdef HAVE_SYS_MMAN_H
#ifdef STLINK_HAVE_SYS_MMAN_H
#include <sys/mman.h>
#else

Expand Down
58 changes: 37 additions & 21 deletions src/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -298,20 +298,29 @@ static void __attribute__((unused)) clear_flash_cr_per(stlink_t *sl) {
}

static void set_flash_cr_mer(stlink_t *sl) {
uint32_t val, cr_reg, cr_mer;
uint32_t val, cr_reg, cr_mer, cr_pg;

if (sl->flash_type == STLINK_FLASH_TYPE_F4) {
cr_reg = FLASH_F4_CR;
cr_mer = 1 << FLASH_CR_MER;
cr_pg = 1 << FLASH_CR_PG;
} else if (sl->flash_type == STLINK_FLASH_TYPE_L4) {
cr_reg = STM32L4_FLASH_CR;
cr_mer = (1 << STM32L4_FLASH_CR_MER1) | (1 << STM32L4_FLASH_CR_MER2);
cr_pg = 1 << STM32L4_FLASH_CR_PG;
} else {
cr_reg = FLASH_CR;
cr_mer = 1 << FLASH_CR_MER;
cr_pg = 1 << FLASH_CR_PG;
}

stlink_read_debug32(sl, cr_reg, &val);
if (val & cr_pg) {
/* STM32F030 will drop MER bit if PG was set */
val &= ~cr_pg;
stlink_write_debug32(sl, cr_reg, val);
}

val |= cr_mer;
stlink_write_debug32(sl, cr_reg, val);
}
Expand Down Expand Up @@ -611,9 +620,9 @@ int stlink_load_device_params(stlink_t *sl) {

ILOG("Device connected is: %s, id %#x\n", params->description, chip_id);
// TODO make note of variable page size here.....
ILOG("SRAM size: %#x bytes (%d KiB), Flash: %#x bytes (%d KiB) in pages of %zd bytes\n",
ILOG("SRAM size: %#x bytes (%d KiB), Flash: %#x bytes (%d KiB) in pages of %u bytes\n",
sl->sram_size, sl->sram_size / 1024, sl->flash_size, sl->flash_size / 1024,
sl->flash_pgsz);
(unsigned int)sl->flash_pgsz);
return 0;
}

Expand Down Expand Up @@ -1154,7 +1163,7 @@ uint32_t calculate_F4_sectornum(uint32_t flashaddr){
if (flashaddr >= 0x100000) {
offset = 12;
flashaddr -= 0x100000;
}
}
if (flashaddr<0x4000) return (offset + 0);
else if(flashaddr<0x8000) return(offset + 1);
else if(flashaddr<0xc000) return(offset + 2);
Expand Down Expand Up @@ -1202,7 +1211,7 @@ uint32_t stlink_calculate_pagesize(stlink_t *sl, uint32_t flashaddr){
else if(sector<5) sl->flash_pgsz=0x10000;
else sl->flash_pgsz=0x20000;
}
else if (sl->chip_id == STLINK_CHIPID_STM32_F7) {
else if (sl->chip_id == STLINK_CHIPID_STM32_F7 || sl->chip_id == STLINK_CHIPID_STM32_F7XXXX) {
uint32_t sector=calculate_F7_sectornum(flashaddr);
if (sector<4) sl->flash_pgsz=0x8000;
else if(sector<5) sl->flash_pgsz=0x20000;
Expand Down Expand Up @@ -1234,7 +1243,7 @@ int stlink_erase_flash_page(stlink_t *sl, stm32_addr_t flashaddr)
fprintf(stderr, "EraseFlash - Page:0x%x Size:0x%x ", page, stlink_calculate_pagesize(sl, flashaddr));

write_flash_cr_bker_pnb(sl, page);
} else if (sl->chip_id == STLINK_CHIPID_STM32_F7) {
} else if (sl->chip_id == STLINK_CHIPID_STM32_F7 || sl->chip_id == STLINK_CHIPID_STM32_F7XXXX) {
// calculate the actual page from the address
uint32_t sector=calculate_F7_sectornum(flashaddr);

Expand All @@ -1246,7 +1255,7 @@ int stlink_erase_flash_page(stlink_t *sl, stm32_addr_t flashaddr)
uint32_t sector=calculate_F4_sectornum(flashaddr);

fprintf(stderr, "EraseFlash - Sector:0x%x Size:0x%x ", sector, stlink_calculate_pagesize(sl, flashaddr));

//the SNB values for flash sectors in the second bank do not directly follow the values for the first bank on 2mb devices...
if (sector >= 12) sector += 4;

Expand Down Expand Up @@ -1445,7 +1454,7 @@ int stlink_verify_write_flash(stlink_t *sl, stm32_addr_t address, uint8_t *data,
stlink_read_mem32(sl, address + (uint32_t) off, aligned_size);

if (memcmp(sl->q_buf, data + off, cmp_size)) {
ELOG("Verification of flash failed at offset: %zd\n", off);
ELOG("Verification of flash failed at offset: %u\n", (unsigned int)off);
return -1;
}
}
Expand Down Expand Up @@ -1578,17 +1587,23 @@ int stlink_write_flash(stlink_t *sl, stm32_addr_t addr, uint8_t* base, uint32_t

/* TODO: Check that Voltage range is 2.7 - 3.6 V */
if (sl->chip_id != STLINK_CHIPID_STM32_L4) {
/* set parallelisim to 32 bit*/
int voltage = stlink_target_voltage(sl);
if (voltage == -1) {
printf("Failed to read Target voltage\n");
return voltage;
} else if (voltage > 2700) {
printf("enabling 32-bit flash writes\n");
if( sl->version.stlink_v == 1 ) {
printf("STLINK V1 cannot read voltage, defaulting to 32-bit writes on F4 devices\n");
write_flash_cr_psiz(sl, 2);
} else {
printf("Target voltage (%d mV) too low for 32-bit flash, using 8-bit flash writes\n", voltage);
write_flash_cr_psiz(sl, 0);
}
else {
/* set parallelisim to 32 bit*/
int voltage = stlink_target_voltage(sl);
if (voltage == -1) {
printf("Failed to read Target voltage\n");
return voltage;
} else if (voltage > 2700) {
printf("enabling 32-bit flash writes\n");
write_flash_cr_psiz(sl, 2);
} else {
printf("Target voltage (%d mV) too low for 32-bit flash, using 8-bit flash writes\n", voltage);
write_flash_cr_psiz(sl, 0);
}
}
} else {
/* L4 does not have a byte-write mode */
Expand All @@ -1608,7 +1623,7 @@ int stlink_write_flash(stlink_t *sl, stm32_addr_t addr, uint8_t* base, uint32_t
for(off = 0; off < len;) {
size_t size = len - off > 0x8000 ? 0x8000 : len - off;

printf("size: %zu\n", size);
printf("size: %u\n", (unsigned int)size);

if (stlink_flash_loader_run(sl, &fl, addr + (uint32_t) off, base + off, size) == -1) {
ELOG("stlink_flash_loader_run(%#zx) failed! == -1\n", addr + off);
Expand Down Expand Up @@ -1677,8 +1692,9 @@ int stlink_write_flash(stlink_t *sl, stm32_addr_t addr, uint8_t* base, uint32_t
fprintf(stdout, "\r");

if ((off % sl->flash_pgsz) > (sl->flash_pgsz -5)) {
fprintf(stdout, "\r%3zd/%3zd pages written",
off/sl->flash_pgsz, len/sl->flash_pgsz);
fprintf(stdout, "\r%3u/%3u pages written",
(unsigned int)(off/sl->flash_pgsz),
(unsigned int)(len/sl->flash_pgsz));
fflush(stdout);
}

Expand Down
25 changes: 16 additions & 9 deletions src/flash_loader.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,16 +220,23 @@ int stlink_flash_loader_write_to_sram(stlink_t *sl, stm32_addr_t* addr, size_t*
sl->chip_id == STLINK_CHIPID_STM32_F411RE ||
sl->chip_id == STLINK_CHIPID_STM32_F446
) {
int voltage = stlink_target_voltage(sl);
if (voltage == -1) {
printf("Failed to read Target voltage\n");
return voltage;
} else if (voltage > 2700) {
if( sl->version.stlink_v == 1 ) {
printf("STLINK V1 cannot read voltage, defaulting to 32-bit writes on F4 devices\n");
loader_code = loader_code_stm32f4;
loader_size = sizeof(loader_code_stm32f4);
} else {
loader_code = loader_code_stm32f4_lv;
loader_size = sizeof(loader_code_stm32f4_lv);
}
else {
int voltage = stlink_target_voltage(sl);
if (voltage == -1) {
printf("Failed to read Target voltage\n");
return voltage;
} else if (voltage > 2700) {
loader_code = loader_code_stm32f4;
loader_size = sizeof(loader_code_stm32f4);
} else {
loader_code = loader_code_stm32f4_lv;
loader_size = sizeof(loader_code_stm32f4_lv);
}
}
} else if (sl->core_id == STM32F7_CORE_ID ||
sl->chip_id == STLINK_CHIPID_STM32_F7 ||
Expand Down Expand Up @@ -263,7 +270,7 @@ int stlink_flash_loader_run(stlink_t *sl, flash_loader_t* fl, stm32_addr_t targe
int i = 0;
size_t count = 0;

DLOG("Running flash loader, write address:%#x, size: %zd\n", target, size);
DLOG("Running flash loader, write address:%#x, size: %u\n", target, (unsigned int)size);
// FIXME This can never return -1
if (write_buffer_to_sram(sl, fl, buf, size) == -1) {
// IMPOSSIBLE!
Expand Down
14 changes: 7 additions & 7 deletions src/gdbserver/gdb-server.c
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ char* make_memory_map(stlink_t *sl) {

if(sl->chip_id==STLINK_CHIPID_STM32_F4 || sl->chip_id==STLINK_CHIPID_STM32_F446) {
strcpy(map, memory_map_template_F4);
} else if(sl->chip_id==STLINK_CHIPID_STM32_F4 || sl->chip_id==STLINK_CHIPID_STM32_F7) {
} else if(sl->chip_id==STLINK_CHIPID_STM32_F4 || sl->core_id==STM32F7_CORE_ID) {
strcpy(map, memory_map_template_F7);
} else if(sl->chip_id==STLINK_CHIPID_STM32_F4_HD) {
strcpy(map, memory_map_template_F4_HD);
Expand Down Expand Up @@ -601,7 +601,7 @@ static int update_code_breakpoint(stlink_t *sl, stm32_addr_t addr, int set) {
return -1;
}

if (sl->chip_id==STLINK_CHIPID_STM32_F7) {
if (sl->core_id==STM32F7_CORE_ID) {
fpb_addr = addr;
} else {
fpb_addr = addr & ~0x3;
Expand All @@ -625,7 +625,7 @@ static int update_code_breakpoint(stlink_t *sl, stm32_addr_t addr, int set) {

brk->addr = fpb_addr;

if (sl->chip_id==STLINK_CHIPID_STM32_F7) {
if (sl->core_id==STM32F7_CORE_ID) {
if(set) brk->type = type;
else brk->type = 0;

Expand Down Expand Up @@ -751,7 +751,7 @@ static int flash_go(stlink_t *sl) {
send, 0) < 0)
goto error;
length -= send;

}
}

Expand Down Expand Up @@ -835,7 +835,7 @@ static void init_cache (stlink_t *sl) {
int i;

/* Assume only F7 has a cache. */
if(sl->chip_id!=STLINK_CHIPID_STM32_F7)
if(sl->core_id!=STM32F7_CORE_ID)
return;

stlink_read_debug32(sl, CLIDR, &clidr);
Expand Down Expand Up @@ -916,7 +916,7 @@ static void cache_sync(stlink_t *sl)
{
unsigned ccr;

if(sl->chip_id!=STLINK_CHIPID_STM32_F7)
if(sl->core_id!=STM32F7_CORE_ID)
return;
if (!cache_modified)
return;
Expand Down Expand Up @@ -1019,7 +1019,7 @@ int serve(stlink_t *sl, st_state_t *st) {
if(!strcmp(queryName, "Supported")) {
if(sl->chip_id==STLINK_CHIPID_STM32_F4
|| sl->chip_id==STLINK_CHIPID_STM32_F4_HD
|| sl->chip_id==STLINK_CHIPID_STM32_F7) {
|| sl->core_id==STM32F7_CORE_ID) {
reply = strdup("PacketSize=3fff;qXfer:memory-map:read+;qXfer:features:read+");
}
else {
Expand Down
2 changes: 1 addition & 1 deletion src/tools/gui/stlink-gui.c
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ dev_format_chip_id (guint32 chip_id)
static gchar *
dev_format_mem_size (gsize flash_size)
{
return g_strdup_printf ("%zu kB", flash_size / 1024);
return g_strdup_printf ("%u kB", (unsigned int)(flash_size / 1024));
}


Expand Down
8 changes: 5 additions & 3 deletions src/tools/info.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,10 @@ static void stlink_print_info(stlink_t *sl)
printf("openocd: ");
stlink_print_serial(sl, true);

printf(" flash: %zu (pagesize: %zu)\n", sl->flash_size, sl->flash_pgsz);
printf(" sram: %zu\n", sl->sram_size);
printf(" flash: %u (pagesize: %u)\n",
(unsigned int)sl->flash_size, (unsigned int)sl->flash_pgsz);

printf(" sram: %u\n", (unsigned int)sl->sram_size);
printf(" chipid: 0x%.4x\n", sl->chip_id);

params = stlink_chipid_get_params(sl->chip_id);
Expand All @@ -65,7 +67,7 @@ static void stlink_probe(void)

size = stlink_probe_usb(&stdevs);

printf("Found %zu stlink programmers\n", size);
printf("Found %u stlink programmers\n", (unsigned int)size);

for (size_t n = 0; n < size; n++)
stlink_print_info(stdevs[n]);
Expand Down
4 changes: 2 additions & 2 deletions src/tools/term.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ struct stlinky* stlinky_detect(stlink_t* sl)
st->off = sram_base + off;
stlink_read_mem32(sl, st->off + 4, 4);
st->bufsize = READ_UINT32_LE(sl->q_buf);
printf("stlinky buffer size 0x%zu \n", st->bufsize);
printf("stlinky buffer size 0x%u \n", (unsigned int)st->bufsize);
multiple++;
}
}
Expand Down Expand Up @@ -283,7 +283,7 @@ int main(int ac, char** av) {
printf("using stlinky at 0x%x\n", st->off);
stlink_read_mem32(gsl, st->off + 4, 4);
st->bufsize = READ_UINT32_LE(gsl->q_buf);
printf("stlinky buffer size 0x%zu \n", st->bufsize);
printf("stlinky buffer size 0x%u \n", (unsigned int)st->bufsize);
}else{
cleanup(0);
}
Expand Down
4 changes: 2 additions & 2 deletions src/usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ ssize_t send_recv(struct stlink_libusb* handle, int terminate,
printf("[!] send_recv send request failed: %s\n", libusb_error_name(t));
return -1;
} else if ((size_t)res != txsize) {
printf("[!] send_recv send request wrote %d bytes (instead of %zu).\n",
res, txsize);
printf("[!] send_recv send request wrote %u bytes (instead of %u).\n",
(unsigned int)res, (unsigned int)txsize);
}

if (rxsize != 0) {
Expand Down

0 comments on commit b809473

Please sign in to comment.