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/+/7346
-- gerrit commit dc1e6d4d463d59c60a1b41fbde8b0de00a14ee76 Author: Jian-Hong Pan <chienhung....@gmail.com> Date: Sun Nov 13 12:43:14 2022 +0800 flash/nor, contrib/loaders: move numicro M0 write assembly to contrib/loaders Simply move numicro M0 flash write assembly to contrib/loaders. Also, modify corresponding Makefile and generated numicro_m0.inc. To make the path more general, this patch rename the path "contrib/loaders/flash/numicro_m4" to "contrib/loaders/flash/numicro" as well. Signed-off-by: Jian-Hong Pan <chienhung....@gmail.com> Change-Id: I9adea24c2b3c97319a9b015cf50257f3d131dc26 diff --git a/contrib/loaders/flash/numicro_m4/Makefile b/contrib/loaders/flash/numicro/Makefile similarity index 82% rename from contrib/loaders/flash/numicro_m4/Makefile rename to contrib/loaders/flash/numicro/Makefile index 0f9c507cd5..e4f44417c1 100644 --- a/contrib/loaders/flash/numicro_m4/Makefile +++ b/contrib/loaders/flash/numicro/Makefile @@ -9,9 +9,9 @@ OBJCOPY=$(CROSS_COMPILE)objcopy OBJDUMP=$(CROSS_COMPILE)objdump -AFLAGS = -static -nostartfiles -mlittle-endian -mcpu=cortex-m4 -Wa,-EL +AFLAGS = -static -nostartfiles -mlittle-endian -Wa,-EL -all: numicro_m4.inc +all: numicro_m0.inc numicro_m4.inc .PHONY: clean diff --git a/contrib/loaders/flash/numicro/numicro_m0.S b/contrib/loaders/flash/numicro/numicro_m0.S new file mode 100644 index 0000000000..3f6034c087 --- /dev/null +++ b/contrib/loaders/flash/numicro/numicro_m0.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-m0 + .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, r5 + 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 0x5000C004 + .word 0x5000C008 + .word 0x5000C010 + .word 0x5000C000 diff --git a/contrib/loaders/flash/numicro/numicro_m0.inc b/contrib/loaders/flash/numicro/numicro_m0.inc new file mode 100644 index 0000000000..db9c7742f3 --- /dev/null +++ b/contrib/loaders/flash/numicro/numicro_m0.inc @@ -0,0 +1,5 @@ +/* Autogenerated with ../../../../src/helper/bin2char.sh */ +0x04,0x1c,0x00,0x23,0x0d,0x1a,0x67,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,0x50,0x08,0xc0,0x00,0x50,0x10,0xc0,0x00,0x50,0x00,0xc0,0x00,0x50, diff --git a/contrib/loaders/flash/numicro_m4/numicro_m4.S b/contrib/loaders/flash/numicro/numicro_m4.S similarity index 100% rename from contrib/loaders/flash/numicro_m4/numicro_m4.S rename to contrib/loaders/flash/numicro/numicro_m4.S diff --git a/contrib/loaders/flash/numicro_m4/numicro_m4.inc b/contrib/loaders/flash/numicro/numicro_m4.inc similarity index 100% rename from contrib/loaders/flash/numicro_m4/numicro_m4.inc rename to contrib/loaders/flash/numicro/numicro_m4.inc diff --git a/src/flash/nor/numicro.c b/src/flash/nor/numicro.c index cbd2450b0e..0b04ce4b79 100644 --- a/src/flash/nor/numicro.c +++ b/src/flash/nor/numicro.c @@ -681,66 +681,11 @@ static uint32_t numicro_fmc_cmd(struct target *target, uint32_t cmd, uint32_t ad /* NuMicro Program-LongWord Microcodes */ static const uint8_t numicro_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, 0x50,/* .word 1342226436 */ - 0x08, 0xC0, 0x00, 0x50,/* .word 1342226440 */ - 0x10, 0xC0, 0x00, 0x50,/* .word 1342226448 */ - 0x00, 0xC0, 0x00, 0x50 /* .word 1342226432 */ +#include "../../../contrib/loaders/flash/numicro/numicro_m0.inc" }; static const uint8_t numicro_m4_flash_write_code[] = { -#include "../../../contrib/loaders/flash/numicro_m4/numicro_m4.inc" +#include "../../../contrib/loaders/flash/numicro/numicro_m4.inc" }; /* Program LongWord Block Write */ --