flash/nor, contrib/loaders: move numicro M4 write assembly to contrib/loaders 43/7343/3
authorJian-Hong Pan <chienhung.pan@gmail.com>
Wed, 9 Nov 2022 16:14:10 +0000 (00:14 +0800)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sun, 15 Jan 2023 15:04:06 +0000 (15:04 +0000)
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.pan@gmail.com>
Change-Id: I22b8be0a245857335b11bd0b538db415fc34748d
Reviewed-on: https://review.openocd.org/c/openocd/+/7343
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
contrib/loaders/flash/numicro_m4/Makefile [new file with mode: 0644]
contrib/loaders/flash/numicro_m4/numicro_m4.S [new file with mode: 0644]
contrib/loaders/flash/numicro_m4/numicro_m4.inc [new file with mode: 0644]
src/flash/nor/numicro.c

diff --git a/contrib/loaders/flash/numicro_m4/Makefile b/contrib/loaders/flash/numicro_m4/Makefile
new file mode 100644 (file)
index 0000000..0f9c507
--- /dev/null
@@ -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 (file)
index 0000000..6c59cca
--- /dev/null
@@ -0,0 +1,70 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+/***************************************************************************
+ *   Copyright (C) 2017 Zale Yu                                            *
+ *   CYYU@nuvoton.com                                                      *
+ *                                                                         *
+ *   Copyright (C) 2022 Jian-Hong Pan                                      *
+ *   chienhung.pan@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, 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   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 (file)
index 0000000..c3e6052
--- /dev/null
@@ -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,0x40,0x08,0xc0,0x00,0x40,0x10,0xc0,0x00,0x40,0x00,0xc0,0x00,0x40,
index 2bba7b7468897e60215a93935471d7d5abd0f0da..cbd2450b0e5aca405d3f2301ac1f924fc4104142 100644 (file)
@@ -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 */

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)