openocd: fix SPDX tag format for files .c
[fw/openocd] / contrib / loaders / flash / gd32vf103 / gd32vf103.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2
3 #include <stdint.h>
4
5 #define FLASH_BSY       (1 << 0)
6 #define FLASH_PGERR     (1 << 2)
7 #define FLASH_WRPRTERR  (1 << 4)
8
9 void flash_write(volatile uint32_t *flash_sr,
10                 uint32_t hwords_count,
11                 uint16_t *buffer,
12                 uint16_t *target_addr) __attribute__((naked));
13
14 void flash_write(volatile uint32_t *flash_sr,
15                 uint32_t hwords_count,
16                 uint16_t *buffer,
17                 uint16_t *target_addr)
18 {
19         do {
20                 *target_addr = *buffer++;
21
22                 register uint32_t sr;
23                 do {
24                         sr = *flash_sr;
25                 } while (sr & FLASH_BSY);
26
27                 if (sr & (FLASH_PGERR | FLASH_WRPRTERR))
28                         break;
29
30                 target_addr++;
31         } while (--hwords_count);
32         asm("ebreak");
33 }