From 7cf68a0f16e265996143056754774481eb9df7eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Sun, 29 Nov 2015 03:09:46 +0100 Subject: [PATCH] xmc4xxx: Integrate build of erase check code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of pointing to the assembler sources in a comment and inline-commenting the THUMB bytecode, place the hex array alongside the assembler sources and include it via preprocessor. Originally inspired by a typo in the file path during driver development, but it also facilitates making changes to the assembler sources. A Makefile is provided to help automate updating the bytecode. It is not integrated with the automake system to avoid forcing an ARM cross-compiler onto every user, i.e. after modifying the sources they need to be rebuilt in that directory before building the usual way. ARM_CROSS_COMPILE= can be passed on the make command line to deal with native ARM toolchains or with varying prefixes of cross-toolchains. Change-Id: I00ceb980a68c8554a180dd13719ac77b677a8bcd Signed-off-by: Andreas Färber Reviewed-on: http://openocd.zylin.com/3133 Tested-by: jenkins Reviewed-by: Andreas Fritiofson Reviewed-by: Paul Fertser --- contrib/loaders/erase_check/Makefile | 19 +++++++++++++++++++ .../erase_check/armv7m_0_erase_check.inc | 2 ++ src/flash/nor/xmc4xxx.c | 10 +--------- 3 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 contrib/loaders/erase_check/Makefile create mode 100644 contrib/loaders/erase_check/armv7m_0_erase_check.inc diff --git a/contrib/loaders/erase_check/Makefile b/contrib/loaders/erase_check/Makefile new file mode 100644 index 000000000..32b751754 --- /dev/null +++ b/contrib/loaders/erase_check/Makefile @@ -0,0 +1,19 @@ +BIN2C = ../../../src/helper/bin2char.sh + +ARM_CROSS_COMPILE ?= arm-none-eabi- +ARM_AS ?= $(ARM_CROSS_COMPILE)as +ARM_OBJCOPY ?= $(ARM_CROSS_COMPILE)objcopy + +arm: armv7m_erase_check.inc armv7m_0_erase_check.inc + +armv7m_%.elf: armv7m_%.s + $(ARM_AS) $< -o $@ + +armv7m_%.bin: armv7m_%.elf + $(ARM_OBJCOPY) -Obinary $< $@ + +armv7m_%.inc: armv7m_%.bin + $(BIN2C) < $< > $@ + +clean: + -rm -f *.elf *.bin *.inc diff --git a/contrib/loaders/erase_check/armv7m_0_erase_check.inc b/contrib/loaders/erase_check/armv7m_0_erase_check.inc new file mode 100644 index 000000000..76115ec17 --- /dev/null +++ b/contrib/loaders/erase_check/armv7m_0_erase_check.inc @@ -0,0 +1,2 @@ +/* Autogenerated with ../../../src/helper/bin2char.sh */ +0x03,0x78,0x01,0x30,0x1a,0x43,0x01,0x39,0xfa,0xd1,0x00,0xbe, diff --git a/src/flash/nor/xmc4xxx.c b/src/flash/nor/xmc4xxx.c index 10497834a..f676e8cde 100644 --- a/src/flash/nor/xmc4xxx.c +++ b/src/flash/nor/xmc4xxx.c @@ -628,16 +628,8 @@ int xmc4xxx_blank_check_memory(struct target *target, struct armv7m_algorithm armv7m_info; int retval; - /* see contrib/loaders/erase_check/armv7m_0_erase_check.s for src */ - static const uint8_t erase_check_code[] = { - /* loop: */ - 0x03, 0x78, /* ldrb r3, [r0] */ - 0x01, 0x30, /* adds r0, #1 */ - 0x1A, 0x43, /* orrs r2, r2, r3 */ - 0x01, 0x39, /* subs r1, r1, #1 */ - 0xFA, 0xD1, /* bne loop */ - 0x00, 0xBE /* bkpt #0 */ +#include "../../../contrib/loaders/erase_check/armv7m_0_erase_check.inc" }; /* make sure we have a working area */