This is an automated email from Gerrit. "Jian-Hong Pan <chienhung....@gmail.com>" just uploaded a new patch set to Gerrit, which you can find at https://review.openocd.org/c/openocd/+/7343
-- gerrit commit 0b271d21ea9ca5b66958076568771384ce54d8e2 Author: Jian-Hong Pan <chienhung....@gmail.com> Date: Thu Nov 10 00:14:10 2022 +0800 [WIP] flash/nor, contrib/loaders: move numicro M4 write assembly to contrib/loaders Simply move numicro M4 flash write assembly to contrib/loaders. Also, add corresponding Makefile and generated numicro_m4.inc. Signed-off-by: Jian-Hong Pan <chienhung....@gmail.com> Change-Id: I22b8be0a245857335b11bd0b538db415fc34748d diff --git a/contrib/loaders/flash/numicro_m4/Makefile b/contrib/loaders/flash/numicro_m4/Makefile new file mode 100644 index 0000000000..0f9c507cd5 --- /dev/null +++ b/contrib/loaders/flash/numicro_m4/Makefile @@ -0,0 +1,31 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +BIN2C = ../../../../src/helper/bin2char.sh + +CROSS_COMPILE ?= arm-none-eabi- + +CC=$(CROSS_COMPILE)gcc +OBJCOPY=$(CROSS_COMPILE)objcopy +OBJDUMP=$(CROSS_COMPILE)objdump + + +AFLAGS = -static -nostartfiles -mlittle-endian -mcpu=cortex-m4 -Wa,-EL + +all: numicro_m4.inc + +.PHONY: clean + +%.elf: %.S + $(CC) $(AFLAGS) $< -o $@ + +%.lst: %.elf + $(OBJDUMP) -S $< > $@ + +%.bin: %.elf + $(OBJCOPY) -Obinary $< $@ + +%.inc: %.bin + $(BIN2C) < $< > $@ + +clean: + -rm -f *.elf *.lst *.bin *.inc diff --git a/contrib/loaders/flash/numicro_m4/numicro_m4.S b/contrib/loaders/flash/numicro_m4/numicro_m4.S new file mode 100644 index 0000000000..2ec2aec238 --- /dev/null +++ b/contrib/loaders/flash/numicro_m4/numicro_m4.S @@ -0,0 +1,70 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +/*************************************************************************** + * Copyright (C) 2017 Zale Yu * + * c...@nuvoton.com * + * * + * Copyright (C) 2022 Jian-Hong Pan * + * chienhung....@gmail.com * + ***************************************************************************/ + + .text + .cpu cortex-m4 + .thumb + + /* Params: + * r0 - workarea buffer / result + * r1 - target address + * r2 - wordcount + * Clobbered: + * r4 - tmp + * r5 - tmp + * r6 - tmp + * r7 - tmp + */ + +.L1: + /* for(register uint32_t i=0;i<wcount;i++){ */ + mov r4, r0 + mov r3, #0 +.L2: + sub r5, r1, r0 + add r7, r4, r7 + cmp r3, r2 + beq .L7 +.L4: + /* NUMICRO_FLASH_ISPADR = faddr; */ + ldr r6, .L8 + str r7, [r6] + /* NUMICRO_FLASH_ISPDAT = *pLW; */ + ldmia r4!, {r7} + ldr r5, .L8+4 + str r7, [r5] + /* faddr += 4; */ + /* pLW++; */ + /* Trigger write action */ + /* NUMICRO_FLASH_ISPTRG = ISPTRG_ISPGO; */ + ldr r5, .L8+8 + mov r6, #1 + str r6, [r5] +.L3: + /* while((NUMICRO_FLASH_ISPTRG & ISPTRG_ISPGO) == ISPTRG_ISPGO){}; */ + ldr r7, [r5] + lsl r7, r7, #31 + bmi .L3 + + add r3, r3, #1 + b .L2 +.L7: + /* return (NUMICRO_FLASH_ISPCON & ISPCON_ISPFF); */ + ldr r3, .L8+12 + ldr r0, [r3] + mov r1, #64 + and r0, r1 +.L9: + bkpt #0 +.L8: + .word 0x4000C004 + .word 0x4000C008 + .word 0x4000C010 + .word 0x4000C000 diff --git a/contrib/loaders/flash/numicro_m4/numicro_m4.inc b/contrib/loaders/flash/numicro_m4/numicro_m4.inc new file mode 100644 index 0000000000..5fabd553b0 --- /dev/null +++ b/contrib/loaders/flash/numicro_m4/numicro_m4.inc @@ -0,0 +1,5 @@ +/* Autogenerated with ../../../../src/helper/bin2char.sh */ +0x04,0x1c,0x00,0x23,0x0d,0x1a,0xe7,0x19,0x93,0x42,0x0c,0xd0,0x08,0x4e,0x37,0x60, +0x80,0xcc,0x08,0x4d,0x2f,0x60,0x08,0x4d,0x01,0x26,0x2e,0x60,0x2f,0x68,0xff,0x07, +0xfc,0xd4,0x01,0x33,0xee,0xe7,0x05,0x4b,0x18,0x68,0x40,0x21,0x08,0x40,0x00,0xbe, +0x04,0xc0,0x00,0x40,0x08,0xc0,0x00,0x40,0x10,0xc0,0x00,0x40,0x00,0xc0,0x00,0x40, diff --git a/src/flash/nor/numicro.c b/src/flash/nor/numicro.c index 2bba7b7468..cbd2450b0e 100644 --- a/src/flash/nor/numicro.c +++ b/src/flash/nor/numicro.c @@ -740,62 +740,7 @@ static const uint8_t numicro_flash_write_code[] = { }; static const uint8_t numicro_m4_flash_write_code[] = { - /* Params: - * r0 - workarea buffer / result - * r1 - target address - * r2 - wordcount - * Clobbered: - * r4 - tmp - * r5 - tmp - * r6 - tmp - * r7 - tmp - */ - - /* .L1: */ - /* for(register uint32_t i=0;i<wcount;i++){ */ - 0x04, 0x1C, /* mov r4, r0 */ - 0x00, 0x23, /* mov r3, #0 */ - /* .L2: */ - 0x0D, 0x1A, /* sub r5, r1, r0 */ - 0x67, 0x19, /* add r7, r4, r7 */ - 0x93, 0x42, /* cmp r3, r2 */ - 0x0C, 0xD0, /* beq .L7 */ - /* .L4: */ - /* NUMICRO_FLASH_ISPADR = faddr; */ - 0x08, 0x4E, /* ldr r6, .L8 */ - 0x37, 0x60, /* str r7, [r6] */ - /* NUMICRO_FLASH_ISPDAT = *pLW; */ - 0x80, 0xCC, /* ldmia r4!, {r7} */ - 0x08, 0x4D, /* ldr r5, .L8+4 */ - 0x2F, 0x60, /* str r7, [r5] */ - /* faddr += 4; */ - /* pLW++; */ - /* Trigger write action */ - /* NUMICRO_FLASH_ISPTRG = ISPTRG_ISPGO; */ - 0x08, 0x4D, /* ldr r5, .L8+8 */ - 0x01, 0x26, /* mov r6, #1 */ - 0x2E, 0x60, /* str r6, [r5] */ - /* .L3: */ - /* while((NUMICRO_FLASH_ISPTRG & ISPTRG_ISPGO) == ISPTRG_ISPGO){}; */ - 0x2F, 0x68, /* ldr r7, [r5] */ - 0xFF, 0x07, /* lsl r7, r7, #31 */ - 0xFC, 0xD4, /* bmi .L3 */ - - 0x01, 0x33, /* add r3, r3, #1 */ - 0xEE, 0xE7, /* b .L2 */ - /* .L7: */ - /* return (NUMICRO_FLASH_ISPCON & ISPCON_ISPFF); */ - 0x05, 0x4B, /* ldr r3, .L8+12 */ - 0x18, 0x68, /* ldr r0, [r3] */ - 0x40, 0x21, /* mov r1, #64 */ - 0x08, 0x40, /* and r0, r1 */ - /* .L9: */ - 0x00, 0xBE, /* bkpt #0 */ - /* .L8: */ - 0x04, 0xC0, 0x00, 0x40,/* .word 0x4000C004 */ - 0x08, 0xC0, 0x00, 0x40,/* .word 0x4000C008 */ - 0x10, 0xC0, 0x00, 0x40,/* .word 0x4000C010 */ - 0x00, 0xC0, 0x00, 0x40 /* .word 0x4000C000 */ +#include "../../../contrib/loaders/flash/numicro_m4/numicro_m4.inc" }; /* Program LongWord Block Write */ --