1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 /***************************************************************************
4 * Copyright (C) 2014 by Ladislav Bábel *
5 * ladababel@seznam.cz *
6 ***************************************************************************/
8 #define INITIAL_UNLOCK 0x5A
9 #define MULTIPLE_UNLOCK 0xF2
11 #define FLASHCTRL_KEY 0x4002E0C0
12 #define FLASHCTRL_CONFIG 0x4002E000
13 #define FLASHCTRL_WRADDR 0x4002E0A0
14 #define FLASHCTRL_WRDATA 0x4002E0B0
15 #define BUSYF 0x00100000
18 /* Write the initial unlock value to KEY (0xA5) */
19 movs r6, #INITIAL_UNLOCK
20 str r6, [r0, #FLASHCTRL_KEY]
22 /* Write the multiple unlock value to KEY (0xF2) */
23 movs r6, #MULTIPLE_UNLOCK
24 str r6, [r0, #FLASHCTRL_KEY]
34 /* wait for BUSYF flag */
36 ldr r6, [r0, #FLASHCTRL_CONFIG]
40 /* Write the destination address to WRADDR */
41 str r4, [r0, #FLASHCTRL_WRADDR]
43 /* Write the data half-word to WRDATA in right-justified format */
45 str r6, [r0, #FLASHCTRL_WRDATA]
50 /* wrap rp at end of buffer */
64 movs r6, #MULTIPLE_LOCK
65 str r6, [r0, #FLASHCTRL_KEY]
67 /* wait for BUSYF flag */
69 ldr r6, [r0, #FLASHCTRL_CONFIG]