2 * Spansion FM4 flash sector erase algorithm
4 * Copyright (c) 2015 Andreas Färber
6 * Based on S6E2CC_MN709-00007 for S6E2CC/C5/C4/C3/C2/C1 series
13 #define RESULT_TIMEOUT 2
15 .macro busy_wait, res, addr, tmp1, tmp2, tmp3
17 ldrb \tmp1, [\addr] /* ignore */
22 and \tmp3, \tmp1, #FLASH_TOGG
23 and \tmp2, \tmp2, #FLASH_TOGG
27 and \tmp2, \tmp1, #FLASH_TLOV
34 and \tmp3, \tmp1, #FLASH_TOGG
35 and \tmp2, \tmp2, #FLASH_TOGG
39 mov \res, #RESULT_TIMEOUT
42 mov \res, #RESULT_OKAY
47 .macro erase, cmdseqaddr1, cmdseqaddr2, sa, res, tmp1, tmp2, tmp3
49 mov \res, #RESULT_NONE
52 strh \tmp1, [\cmdseqaddr1]
54 strh \tmp2, [\cmdseqaddr2]
56 strh \tmp3, [\cmdseqaddr1]
57 strh \tmp1, [\cmdseqaddr1]
58 strh \tmp2, [\cmdseqaddr2]
62 busy_wait \res, \sa, \tmp1, \tmp2, \tmp3
73 erase r0, r1, r2, r3, r4, r5, r6