aboutsummaryrefslogtreecommitdiff
path: root/platforms
diff options
context:
space:
mode:
authorMichael Stapelberg <stapelberg@users.noreply.github.com>2022-01-09 22:17:15 +0100
committerGitHub <noreply@github.com>2022-01-10 08:17:15 +1100
commit7c186ebb974b4bbadbb74a7610bab5d2f66d030e (patch)
treec91b9635f5494180acbf19cc6e205a18eb598470 /platforms
parent1ed5c48d939ce711977e345bd127ec10415ae6af (diff)
downloadqmk_firmware-7c186ebb974b4bbadbb74a7610bab5d2f66d030e.tar.gz
qmk_firmware-7c186ebb974b4bbadbb74a7610bab5d2f66d030e.zip
Revert "core: make the full 4096 bytes of EEPROM work on Teensy 3.6 (#12947)" (#15695)
This reverts commit 7f8faa429e0c0662cec34a7d60e33ca58333d6d7. related to https://github.com/qmk/qmk_firmware/issues/15521
Diffstat (limited to 'platforms')
-rw-r--r--platforms/chibios/eeprom_teensy.c213
1 files changed, 14 insertions, 199 deletions
diff --git a/platforms/chibios/eeprom_teensy.c b/platforms/chibios/eeprom_teensy.c
index 97da6f9e1..4aaf66526 100644
--- a/platforms/chibios/eeprom_teensy.c
+++ b/platforms/chibios/eeprom_teensy.c
@@ -39,126 +39,7 @@
39 * SOFTWARE. 39 * SOFTWARE.
40 */ 40 */
41 41
42#define SMC_PMSTAT_RUN ((uint8_t)0x01) 42#if defined(K20x) /* chip selection */
43#define SMC_PMSTAT_HSRUN ((uint8_t)0x80)
44
45#define F_CPU KINETIS_SYSCLK_FREQUENCY
46
47static inline int kinetis_hsrun_disable(void) {
48#if defined(MK66F18)
49 if (SMC->PMSTAT == SMC_PMSTAT_HSRUN) {
50// First, reduce the CPU clock speed, but do not change
51// the peripheral speed (F_BUS). Serial1 & Serial2 baud
52// rates will be impacted, but most other peripherals
53// will continue functioning at the same speed.
54# if F_CPU == 256000000 && F_BUS == 64000000
55 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 3, 1, 7); // TODO: TEST
56# elif F_CPU == 256000000 && F_BUS == 128000000
57 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 1, 1, 7); // TODO: TEST
58# elif F_CPU == 240000000 && F_BUS == 60000000
59 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 3, 1, 7); // ok
60# elif F_CPU == 240000000 && F_BUS == 80000000
61 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(2, 2, 2, 8); // ok
62# elif F_CPU == 240000000 && F_BUS == 120000000
63 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 1, 1, 7); // ok
64# elif F_CPU == 216000000 && F_BUS == 54000000
65 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 3, 1, 7); // ok
66# elif F_CPU == 216000000 && F_BUS == 72000000
67 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(2, 2, 2, 8); // ok
68# elif F_CPU == 216000000 && F_BUS == 108000000
69 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 1, 1, 7); // ok
70# elif F_CPU == 192000000 && F_BUS == 48000000
71 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 3, 1, 7); // ok
72# elif F_CPU == 192000000 && F_BUS == 64000000
73 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(2, 2, 2, 8); // ok
74# elif F_CPU == 192000000 && F_BUS == 96000000
75 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 1, 1, 7); // ok
76# elif F_CPU == 180000000 && F_BUS == 60000000
77 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(2, 2, 2, 8); // ok
78# elif F_CPU == 180000000 && F_BUS == 90000000
79 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 1, 1, 7); // ok
80# elif F_CPU == 168000000 && F_BUS == 56000000
81 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(2, 2, 2, 5); // ok
82# elif F_CPU == 144000000 && F_BUS == 48000000
83 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(2, 2, 2, 5); // ok
84# elif F_CPU == 144000000 && F_BUS == 72000000
85 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 1, 1, 5); // ok
86# elif F_CPU == 120000000 && F_BUS == 60000000
87 SIM->CLKDIV1 = SIM_CLKDIV1_OUTDIV1(KINETIS_CLKDIV1_OUTDIV1 - 1) | SIM_CLKDIV1_OUTDIV2(KINETIS_CLKDIV1_OUTDIV2 - 1) |
88# if defined(MK66F18)
89 SIM_CLKDIV1_OUTDIV3(KINETIS_CLKDIV1_OUTDIV3 - 1) |
90# endif
91 SIM_CLKDIV1_OUTDIV4(KINETIS_CLKDIV1_OUTDIV4 - 1);
92# else
93 return 0;
94# endif
95 // Then turn off HSRUN mode
96 SMC->PMCTRL = SMC_PMCTRL_RUNM_SET(0);
97 while (SMC->PMSTAT == SMC_PMSTAT_HSRUN)
98 ; // wait
99 return 1;
100 }
101#endif
102 return 0;
103}
104
105static inline int kinetis_hsrun_enable(void) {
106#if defined(MK66F18)
107 if (SMC->PMSTAT == SMC_PMSTAT_RUN) {
108 // Turn HSRUN mode on
109 SMC->PMCTRL = SMC_PMCTRL_RUNM_SET(3);
110 while (SMC->PMSTAT != SMC_PMSTAT_HSRUN) {
111 ;
112 } // wait
113// Then configure clock for full speed
114# if F_CPU == 256000000 && F_BUS == 64000000
115 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 3, 0, 7);
116# elif F_CPU == 256000000 && F_BUS == 128000000
117 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 1, 0, 7);
118# elif F_CPU == 240000000 && F_BUS == 60000000
119 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 3, 0, 7);
120# elif F_CPU == 240000000 && F_BUS == 80000000
121 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 2, 0, 7);
122# elif F_CPU == 240000000 && F_BUS == 120000000
123 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 1, 0, 7);
124# elif F_CPU == 216000000 && F_BUS == 54000000
125 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 3, 0, 7);
126# elif F_CPU == 216000000 && F_BUS == 72000000
127 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 2, 0, 7);
128# elif F_CPU == 216000000 && F_BUS == 108000000
129 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 1, 0, 7);
130# elif F_CPU == 192000000 && F_BUS == 48000000
131 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 3, 0, 6);
132# elif F_CPU == 192000000 && F_BUS == 64000000
133 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 2, 0, 6);
134# elif F_CPU == 192000000 && F_BUS == 96000000
135 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 1, 0, 6);
136# elif F_CPU == 180000000 && F_BUS == 60000000
137 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 2, 0, 6);
138# elif F_CPU == 180000000 && F_BUS == 90000000
139 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 1, 0, 6);
140# elif F_CPU == 168000000 && F_BUS == 56000000
141 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 2, 0, 5);
142# elif F_CPU == 144000000 && F_BUS == 48000000
143 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 2, 0, 4);
144# elif F_CPU == 144000000 && F_BUS == 72000000
145 SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 1, 0, 4);
146# elif F_CPU == 120000000 && F_BUS == 60000000
147 SIM->CLKDIV1 = SIM_CLKDIV1_OUTDIV1(KINETIS_CLKDIV1_OUTDIV1 - 1) | SIM_CLKDIV1_OUTDIV2(KINETIS_CLKDIV1_OUTDIV2 - 1) |
148# if defined(MK66F18)
149 SIM_CLKDIV1_OUTDIV3(KINETIS_CLKDIV1_OUTDIV3 - 1) |
150# endif
151 SIM_CLKDIV1_OUTDIV4(KINETIS_CLKDIV1_OUTDIV4 - 1);
152# else
153 return 0;
154# endif
155 return 1;
156 }
157#endif
158 return 0;
159}
160
161#if defined(K20x) || defined(MK66F18) /* chip selection */
162/* Teensy 3.0, 3.1, 3.2; mchck; infinity keyboard */ 43/* Teensy 3.0, 3.1, 3.2; mchck; infinity keyboard */
163 44
164// The EEPROM is really RAM with a hardware-based backup system to 45// The EEPROM is really RAM with a hardware-based backup system to
@@ -188,34 +69,22 @@ static inline int kinetis_hsrun_enable(void) {
188// 69//
189# define HANDLE_UNALIGNED_WRITES 70# define HANDLE_UNALIGNED_WRITES
190 71
191# if defined(K20x)
192# define EEPROM_MAX 2048
193# define EEPARTITION 0x03 // all 32K dataflash for EEPROM, none for Data
194# define EEESPLIT 0x30 // must be 0x30 on these chips
195# elif defined(MK66F18)
196# define EEPROM_MAX 4096
197# define EEPARTITION 0x05 // 128K dataflash for EEPROM, 128K for Data
198# define EEESPLIT 0x10 // best endurance: 0x00 = first 12%, 0x10 = first 25%, 0x30 = all equal
199# endif
200
201// Minimum EEPROM Endurance 72// Minimum EEPROM Endurance
202// ------------------------ 73// ------------------------
203# if (EEPROM_SIZE == 4096) 74# if (EEPROM_SIZE == 2048) // 35000 writes/byte or 70000 writes/word
204# define EEESIZE 0x02 75# define EEESIZE 0x33
205# elif (EEPROM_SIZE == 2048) // 35000 writes/byte or 70000 writes/word
206# define EEESIZE 0x03
207# elif (EEPROM_SIZE == 1024) // 75000 writes/byte or 150000 writes/word 76# elif (EEPROM_SIZE == 1024) // 75000 writes/byte or 150000 writes/word
208# define EEESIZE 0x04 77# define EEESIZE 0x34
209# elif (EEPROM_SIZE == 512) // 155000 writes/byte or 310000 writes/word 78# elif (EEPROM_SIZE == 512) // 155000 writes/byte or 310000 writes/word
210# define EEESIZE 0x05 79# define EEESIZE 0x35
211# elif (EEPROM_SIZE == 256) // 315000 writes/byte or 630000 writes/word 80# elif (EEPROM_SIZE == 256) // 315000 writes/byte or 630000 writes/word
212# define EEESIZE 0x06 81# define EEESIZE 0x36
213# elif (EEPROM_SIZE == 128) // 635000 writes/byte or 1270000 writes/word 82# elif (EEPROM_SIZE == 128) // 635000 writes/byte or 1270000 writes/word
214# define EEESIZE 0x07 83# define EEESIZE 0x37
215# elif (EEPROM_SIZE == 64) // 1275000 writes/byte or 2550000 writes/word 84# elif (EEPROM_SIZE == 64) // 1275000 writes/byte or 2550000 writes/word
216# define EEESIZE 0x08 85# define EEESIZE 0x38
217# elif (EEPROM_SIZE == 32) // 2555000 writes/byte or 5110000 writes/word 86# elif (EEPROM_SIZE == 32) // 2555000 writes/byte or 5110000 writes/word
218# define EEESIZE 0x09 87# define EEESIZE 0x39
219# endif 88# endif
220 89
221/** \brief eeprom initialization 90/** \brief eeprom initialization
@@ -228,21 +97,15 @@ void eeprom_initialize(void) {
228 uint8_t status; 97 uint8_t status;
229 98
230 if (FTFL->FCNFG & FTFL_FCNFG_RAMRDY) { 99 if (FTFL->FCNFG & FTFL_FCNFG_RAMRDY) {
231 uint8_t stat = FTFL->FSTAT & 0x70;
232 if (stat) FTFL->FSTAT = stat;
233
234 // FlexRAM is configured as traditional RAM 100 // FlexRAM is configured as traditional RAM
235 // We need to reconfigure for EEPROM usage 101 // We need to reconfigure for EEPROM usage
236 kinetis_hsrun_disable(); 102 FTFL->FCCOB0 = 0x80; // PGMPART = Program Partition Command
237 FTFL->FCCOB0 = 0x80; // PGMPART = Program Partition Command 103 FTFL->FCCOB4 = EEESIZE; // EEPROM Size
238 FTFL->FCCOB3 = 0; 104 FTFL->FCCOB5 = 0x03; // 0K for Dataflash, 32K for EEPROM backup
239 FTFL->FCCOB4 = EEESPLIT | EEESIZE;
240 FTFL->FCCOB5 = EEPARTITION;
241 __disable_irq(); 105 __disable_irq();
242 // do_flash_cmd() must execute from RAM. Luckily the C syntax is simple... 106 // do_flash_cmd() must execute from RAM. Luckily the C syntax is simple...
243 (*((void (*)(volatile uint8_t *))((uint32_t)do_flash_cmd | 1)))(&(FTFL->FSTAT)); 107 (*((void (*)(volatile uint8_t *))((uint32_t)do_flash_cmd | 1)))(&(FTFL->FSTAT));
244 __enable_irq(); 108 __enable_irq();
245 kinetis_hsrun_enable();
246 status = FTFL->FSTAT; 109 status = FTFL->FSTAT;
247 if (status & (FTFL_FSTAT_RDCOLERR | FTFL_FSTAT_ACCERR | FTFL_FSTAT_FPVIOL)) { 110 if (status & (FTFL_FSTAT_RDCOLERR | FTFL_FSTAT_ACCERR | FTFL_FSTAT_FPVIOL)) {
248 FTFL->FSTAT = (status & (FTFL_FSTAT_RDCOLERR | FTFL_FSTAT_ACCERR | FTFL_FSTAT_FPVIOL)); 111 FTFL->FSTAT = (status & (FTFL_FSTAT_RDCOLERR | FTFL_FSTAT_ACCERR | FTFL_FSTAT_FPVIOL));
@@ -251,11 +114,11 @@ void eeprom_initialize(void) {
251 } 114 }
252 // wait for eeprom to become ready (is this really necessary?) 115 // wait for eeprom to become ready (is this really necessary?)
253 while (!(FTFL->FCNFG & FTFL_FCNFG_EEERDY)) { 116 while (!(FTFL->FCNFG & FTFL_FCNFG_EEERDY)) {
254 if (++count > 200000) break; 117 if (++count > 20000) break;
255 } 118 }
256} 119}
257 120
258# define FlexRAM ((volatile uint8_t *)0x14000000) 121# define FlexRAM ((uint8_t *)0x14000000)
259 122
260/** \brief eeprom read byte 123/** \brief eeprom read byte
261 * 124 *
@@ -332,12 +195,8 @@ void eeprom_write_byte(uint8_t *addr, uint8_t value) {
332 if (offset >= EEPROM_SIZE) return; 195 if (offset >= EEPROM_SIZE) return;
333 if (!(FTFL->FCNFG & FTFL_FCNFG_EEERDY)) eeprom_initialize(); 196 if (!(FTFL->FCNFG & FTFL_FCNFG_EEERDY)) eeprom_initialize();
334 if (FlexRAM[offset] != value) { 197 if (FlexRAM[offset] != value) {
335 kinetis_hsrun_disable();
336 uint8_t stat = FTFL->FSTAT & 0x70;
337 if (stat) FTFL->FSTAT = stat;
338 FlexRAM[offset] = value; 198 FlexRAM[offset] = value;
339 flexram_wait(); 199 flexram_wait();
340 kinetis_hsrun_enable();
341 } 200 }
342} 201}
343 202
@@ -354,30 +213,18 @@ void eeprom_write_word(uint16_t *addr, uint16_t value) {
354 if ((offset & 1) == 0) { 213 if ((offset & 1) == 0) {
355# endif 214# endif
356 if (*(uint16_t *)(&FlexRAM[offset]) != value) { 215 if (*(uint16_t *)(&FlexRAM[offset]) != value) {
357 kinetis_hsrun_disable();
358 uint8_t stat = FTFL->FSTAT & 0x70;
359 if (stat) FTFL->FSTAT = stat;
360 *(uint16_t *)(&FlexRAM[offset]) = value; 216 *(uint16_t *)(&FlexRAM[offset]) = value;
361 flexram_wait(); 217 flexram_wait();
362 kinetis_hsrun_enable();
363 } 218 }
364# ifdef HANDLE_UNALIGNED_WRITES 219# ifdef HANDLE_UNALIGNED_WRITES
365 } else { 220 } else {
366 if (FlexRAM[offset] != value) { 221 if (FlexRAM[offset] != value) {
367 kinetis_hsrun_disable();
368 uint8_t stat = FTFL->FSTAT & 0x70;
369 if (stat) FTFL->FSTAT = stat;
370 FlexRAM[offset] = value; 222 FlexRAM[offset] = value;
371 flexram_wait(); 223 flexram_wait();
372 kinetis_hsrun_enable();
373 } 224 }
374 if (FlexRAM[offset + 1] != (value >> 8)) { 225 if (FlexRAM[offset + 1] != (value >> 8)) {
375 kinetis_hsrun_disable();
376 uint8_t stat = FTFL->FSTAT & 0x70;
377 if (stat) FTFL->FSTAT = stat;
378 FlexRAM[offset + 1] = value >> 8; 226 FlexRAM[offset + 1] = value >> 8;
379 flexram_wait(); 227 flexram_wait();
380 kinetis_hsrun_enable();
381 } 228 }
382 } 229 }
383# endif 230# endif
@@ -397,57 +244,33 @@ void eeprom_write_dword(uint32_t *addr, uint32_t value) {
397 case 0: 244 case 0:
398# endif 245# endif
399 if (*(uint32_t *)(&FlexRAM[offset]) != value) { 246 if (*(uint32_t *)(&FlexRAM[offset]) != value) {
400 kinetis_hsrun_disable();
401 uint8_t stat = FTFL->FSTAT & 0x70;
402 if (stat) FTFL->FSTAT = stat;
403 *(uint32_t *)(&FlexRAM[offset]) = value; 247 *(uint32_t *)(&FlexRAM[offset]) = value;
404 flexram_wait(); 248 flexram_wait();
405 kinetis_hsrun_enable();
406 } 249 }
407 return; 250 return;
408# ifdef HANDLE_UNALIGNED_WRITES 251# ifdef HANDLE_UNALIGNED_WRITES
409 case 2: 252 case 2:
410 if (*(uint16_t *)(&FlexRAM[offset]) != value) { 253 if (*(uint16_t *)(&FlexRAM[offset]) != value) {
411 kinetis_hsrun_disable();
412 uint8_t stat = FTFL->FSTAT & 0x70;
413 if (stat) FTFL->FSTAT = stat;
414 *(uint16_t *)(&FlexRAM[offset]) = value; 254 *(uint16_t *)(&FlexRAM[offset]) = value;
415 flexram_wait(); 255 flexram_wait();
416 kinetis_hsrun_enable();
417 } 256 }
418 if (*(uint16_t *)(&FlexRAM[offset + 2]) != (value >> 16)) { 257 if (*(uint16_t *)(&FlexRAM[offset + 2]) != (value >> 16)) {
419 kinetis_hsrun_disable();
420 uint8_t stat = FTFL->FSTAT & 0x70;
421 if (stat) FTFL->FSTAT = stat;
422 *(uint16_t *)(&FlexRAM[offset + 2]) = value >> 16; 258 *(uint16_t *)(&FlexRAM[offset + 2]) = value >> 16;
423 flexram_wait(); 259 flexram_wait();
424 kinetis_hsrun_enable();
425 } 260 }
426 return; 261 return;
427 default: 262 default:
428 if (FlexRAM[offset] != value) { 263 if (FlexRAM[offset] != value) {
429 kinetis_hsrun_disable();
430 uint8_t stat = FTFL->FSTAT & 0x70;
431 if (stat) FTFL->FSTAT = stat;
432 FlexRAM[offset] = value; 264 FlexRAM[offset] = value;
433 flexram_wait(); 265 flexram_wait();
434 kinetis_hsrun_enable();
435 } 266 }
436 if (*(uint16_t *)(&FlexRAM[offset + 1]) != (value >> 8)) { 267 if (*(uint16_t *)(&FlexRAM[offset + 1]) != (value >> 8)) {
437 kinetis_hsrun_disable();
438 uint8_t stat = FTFL->FSTAT & 0x70;
439 if (stat) FTFL->FSTAT = stat;
440 *(uint16_t *)(&FlexRAM[offset + 1]) = value >> 8; 268 *(uint16_t *)(&FlexRAM[offset + 1]) = value >> 8;
441 flexram_wait(); 269 flexram_wait();
442 kinetis_hsrun_enable();
443 } 270 }
444 if (FlexRAM[offset + 3] != (value >> 24)) { 271 if (FlexRAM[offset + 3] != (value >> 24)) {
445 kinetis_hsrun_disable();
446 uint8_t stat = FTFL->FSTAT & 0x70;
447 if (stat) FTFL->FSTAT = stat;
448 FlexRAM[offset + 3] = value >> 24; 272 FlexRAM[offset + 3] = value >> 24;
449 flexram_wait(); 273 flexram_wait();
450 kinetis_hsrun_enable();
451 } 274 }
452 } 275 }
453# endif 276# endif
@@ -465,7 +288,6 @@ void eeprom_write_block(const void *buf, void *addr, uint32_t len) {
465 if (!(FTFL->FCNFG & FTFL_FCNFG_EEERDY)) eeprom_initialize(); 288 if (!(FTFL->FCNFG & FTFL_FCNFG_EEERDY)) eeprom_initialize();
466 if (len >= EEPROM_SIZE) len = EEPROM_SIZE; 289 if (len >= EEPROM_SIZE) len = EEPROM_SIZE;
467 if (offset + len >= EEPROM_SIZE) len = EEPROM_SIZE - offset; 290 if (offset + len >= EEPROM_SIZE) len = EEPROM_SIZE - offset;
468 kinetis_hsrun_disable();
469 while (len > 0) { 291 while (len > 0) {
470 uint32_t lsb = offset & 3; 292 uint32_t lsb = offset & 3;
471 if (lsb == 0 && len >= 4) { 293 if (lsb == 0 && len >= 4) {
@@ -476,8 +298,6 @@ void eeprom_write_block(const void *buf, void *addr, uint32_t len) {
476 val32 |= (*src++ << 16); 298 val32 |= (*src++ << 16);
477 val32 |= (*src++ << 24); 299 val32 |= (*src++ << 24);
478 if (*(uint32_t *)(&FlexRAM[offset]) != val32) { 300 if (*(uint32_t *)(&FlexRAM[offset]) != val32) {
479 uint8_t stat = FTFL->FSTAT & 0x70;
480 if (stat) FTFL->FSTAT = stat;
481 *(uint32_t *)(&FlexRAM[offset]) = val32; 301 *(uint32_t *)(&FlexRAM[offset]) = val32;
482 flexram_wait(); 302 flexram_wait();
483 } 303 }
@@ -489,8 +309,6 @@ void eeprom_write_block(const void *buf, void *addr, uint32_t len) {
489 val16 = *src++; 309 val16 = *src++;
490 val16 |= (*src++ << 8); 310 val16 |= (*src++ << 8);
491 if (*(uint16_t *)(&FlexRAM[offset]) != val16) { 311 if (*(uint16_t *)(&FlexRAM[offset]) != val16) {
492 uint8_t stat = FTFL->FSTAT & 0x70;
493 if (stat) FTFL->FSTAT = stat;
494 *(uint16_t *)(&FlexRAM[offset]) = val16; 312 *(uint16_t *)(&FlexRAM[offset]) = val16;
495 flexram_wait(); 313 flexram_wait();
496 } 314 }
@@ -500,8 +318,6 @@ void eeprom_write_block(const void *buf, void *addr, uint32_t len) {
500 // write 8 bits 318 // write 8 bits
501 uint8_t val8 = *src++; 319 uint8_t val8 = *src++;
502 if (FlexRAM[offset] != val8) { 320 if (FlexRAM[offset] != val8) {
503 uint8_t stat = FTFL->FSTAT & 0x70;
504 if (stat) FTFL->FSTAT = stat;
505 FlexRAM[offset] = val8; 321 FlexRAM[offset] = val8;
506 flexram_wait(); 322 flexram_wait();
507 } 323 }
@@ -509,7 +325,6 @@ void eeprom_write_block(const void *buf, void *addr, uint32_t len) {
509 len--; 325 len--;
510 } 326 }
511 } 327 }
512 kinetis_hsrun_enable();
513} 328}
514 329
515/* 330/*