diff options
-rw-r--r-- | apps/main.c | 14 | ||||
-rw-r--r-- | apps/tagcache.c | 2 | ||||
-rw-r--r-- | apps/tree.c | 10 | ||||
-rw-r--r-- | firmware/eeprom_settings.c | 18 | ||||
-rw-r--r-- | firmware/system.c | 10 |
5 files changed, 37 insertions, 17 deletions
diff --git a/apps/main.c b/apps/main.c index d590790a85..a3fe8ef64f 100644 --- a/apps/main.c +++ b/apps/main.c | |||
@@ -338,9 +338,17 @@ void init(void) | |||
338 | panicf("ata: %d", rc); | 338 | panicf("ata: %d", rc); |
339 | } | 339 | } |
340 | 340 | ||
341 | #ifdef HAVE_EEPROM | ||
342 | eeprom_settings_init(); | ||
343 | #endif | ||
344 | |||
341 | usb_start_monitoring(); | 345 | usb_start_monitoring(); |
342 | while (usb_detect()) | 346 | while (usb_detect()) |
343 | { /* enter USB mode early, before trying to mount */ | 347 | { |
348 | #ifdef HAVE_EEPROM | ||
349 | firmware_settings.disk_clean = false; | ||
350 | #endif | ||
351 | /* enter USB mode early, before trying to mount */ | ||
344 | if (button_get_w_tmo(HZ/10) == SYS_USB_CONNECTED) | 352 | if (button_get_w_tmo(HZ/10) == SYS_USB_CONNECTED) |
345 | #ifdef HAVE_MMC | 353 | #ifdef HAVE_MMC |
346 | if (!mmc_touched() || (mmc_remove_request() == SYS_MMC_EXTRACTED)) | 354 | if (!mmc_touched() || (mmc_remove_request() == SYS_MMC_EXTRACTED)) |
@@ -374,10 +382,6 @@ void init(void) | |||
374 | } | 382 | } |
375 | } | 383 | } |
376 | 384 | ||
377 | #ifdef HAVE_EEPROM | ||
378 | eeprom_settings_init(); | ||
379 | #endif | ||
380 | |||
381 | settings_calc_config_sector(); | 385 | settings_calc_config_sector(); |
382 | 386 | ||
383 | #if defined(SETTINGS_RESET) || (CONFIG_KEYPAD == IPOD_4G_PAD) | 387 | #if defined(SETTINGS_RESET) || (CONFIG_KEYPAD == IPOD_4G_PAD) |
diff --git a/apps/tagcache.c b/apps/tagcache.c index 4bcf25bad2..ec713e29a4 100644 --- a/apps/tagcache.c +++ b/apps/tagcache.c | |||
@@ -3300,7 +3300,7 @@ void tagcache_unload_ramcache(void) | |||
3300 | { | 3300 | { |
3301 | stat.ramcache = false; | 3301 | stat.ramcache = false; |
3302 | /* Just to make sure there is no statefile present. */ | 3302 | /* Just to make sure there is no statefile present. */ |
3303 | remove(TAGCACHE_STATEFILE); | 3303 | // remove(TAGCACHE_STATEFILE); |
3304 | } | 3304 | } |
3305 | #endif | 3305 | #endif |
3306 | 3306 | ||
diff --git a/apps/tree.c b/apps/tree.c index 1dbe9223b9..0dd03779a5 100644 --- a/apps/tree.c +++ b/apps/tree.c | |||
@@ -1368,16 +1368,14 @@ void tree_flush(void) | |||
1368 | #ifdef HAVE_TC_RAMCACHE | 1368 | #ifdef HAVE_TC_RAMCACHE |
1369 | tagcache_unload_ramcache(); | 1369 | tagcache_unload_ramcache(); |
1370 | #endif | 1370 | #endif |
1371 | 1371 | ||
1372 | #ifdef HAVE_DIRCACHE | 1372 | #ifdef HAVE_DIRCACHE |
1373 | if (global_settings.dircache) | 1373 | if (global_settings.dircache) |
1374 | { | 1374 | { |
1375 | global_settings.dircache_size = dircache_get_cache_size(); | ||
1375 | # ifdef HAVE_EEPROM | 1376 | # ifdef HAVE_EEPROM |
1376 | if (dircache_is_enabled() && firmware_settings.initialized) | 1377 | if (dircache_is_enabled() && firmware_settings.initialized) |
1377 | { | ||
1378 | global_settings.dircache_size = dircache_get_cache_size(); | ||
1379 | dircache_save(DIRCACHE_FILE); | 1378 | dircache_save(DIRCACHE_FILE); |
1380 | } | ||
1381 | # endif | 1379 | # endif |
1382 | dircache_disable(); | 1380 | dircache_disable(); |
1383 | } | 1381 | } |
@@ -1395,6 +1393,10 @@ void tree_restore(void) | |||
1395 | firmware_settings.disk_clean = false; | 1393 | firmware_settings.disk_clean = false; |
1396 | #endif | 1394 | #endif |
1397 | 1395 | ||
1396 | #ifdef HAVE_TC_RAMCACHE | ||
1397 | remove(TAGCACHE_STATEFILE); | ||
1398 | #endif | ||
1399 | |||
1398 | #ifdef HAVE_DIRCACHE | 1400 | #ifdef HAVE_DIRCACHE |
1399 | remove(DIRCACHE_FILE); | 1401 | remove(DIRCACHE_FILE); |
1400 | if (global_settings.dircache) | 1402 | if (global_settings.dircache) |
diff --git a/firmware/eeprom_settings.c b/firmware/eeprom_settings.c index 450eff9623..ad2c9c848f 100644 --- a/firmware/eeprom_settings.c +++ b/firmware/eeprom_settings.c | |||
@@ -27,13 +27,20 @@ | |||
27 | 27 | ||
28 | struct eeprom_settings firmware_settings; | 28 | struct eeprom_settings firmware_settings; |
29 | 29 | ||
30 | static void reset_config(void) | 30 | static bool reset_config(void) |
31 | { | 31 | { |
32 | memset(&firmware_settings, 0, sizeof(struct eeprom_settings)); | 32 | memset(&firmware_settings, 0, sizeof(struct eeprom_settings)); |
33 | #ifdef BOOTLOADER | ||
34 | /* Don't reset settings if we are inside bootloader. */ | ||
35 | firmware_settings.initialized = false; | ||
36 | #else | ||
33 | firmware_settings.version = EEPROM_SETTINGS_VERSION; | 37 | firmware_settings.version = EEPROM_SETTINGS_VERSION; |
34 | firmware_settings.initialized = true; | 38 | firmware_settings.initialized = true; |
35 | firmware_settings.boot_disk = false; | 39 | firmware_settings.boot_disk = false; |
36 | firmware_settings.bl_version = 0; | 40 | firmware_settings.bl_version = 0; |
41 | #endif | ||
42 | |||
43 | return firmware_settings.initialized; | ||
37 | } | 44 | } |
38 | 45 | ||
39 | bool eeprom_settings_init(void) | 46 | bool eeprom_settings_init(void) |
@@ -69,23 +76,20 @@ bool eeprom_settings_init(void) | |||
69 | if (firmware_settings.version != EEPROM_SETTINGS_VERSION) | 76 | if (firmware_settings.version != EEPROM_SETTINGS_VERSION) |
70 | { | 77 | { |
71 | logf("Version mismatch"); | 78 | logf("Version mismatch"); |
72 | reset_config(); | 79 | return reset_config(); |
73 | return true; | ||
74 | } | 80 | } |
75 | 81 | ||
76 | if (firmware_settings.checksum != sum) | 82 | if (firmware_settings.checksum != sum) |
77 | { | 83 | { |
78 | logf("Checksum mismatch"); | 84 | logf("Checksum mismatch"); |
79 | reset_config(); | 85 | return reset_config(); |
80 | return true; | ||
81 | } | 86 | } |
82 | 87 | ||
83 | #ifndef BOOTLOADER | 88 | #ifndef BOOTLOADER |
84 | if (firmware_settings.bl_version < EEPROM_SETTINGS_BL_MINVER) | 89 | if (firmware_settings.bl_version < EEPROM_SETTINGS_BL_MINVER) |
85 | { | 90 | { |
86 | logf("Too old bootloader: %d", firmware_settings.bl_version); | 91 | logf("Too old bootloader: %d", firmware_settings.bl_version); |
87 | reset_config(); | 92 | return reset_config(); |
88 | return true; | ||
89 | } | 93 | } |
90 | #endif | 94 | #endif |
91 | 95 | ||
diff --git a/firmware/system.c b/firmware/system.c index bb09dbcd59..c635254a8a 100644 --- a/firmware/system.c +++ b/firmware/system.c | |||
@@ -84,7 +84,17 @@ bool detect_flashed_rockbox(void) | |||
84 | struct flash_header hdr; | 84 | struct flash_header hdr; |
85 | uint8_t *src = (uint8_t *)FLASH_ENTRYPOINT; | 85 | uint8_t *src = (uint8_t *)FLASH_ENTRYPOINT; |
86 | 86 | ||
87 | # ifndef BOOTLOADER | ||
88 | int oldmode; | ||
89 | oldmode = system_memory_guard(MEMGUARD_NONE); | ||
90 | # endif | ||
91 | |||
87 | memcpy(&hdr, src, sizeof(struct flash_header)); | 92 | memcpy(&hdr, src, sizeof(struct flash_header)); |
93 | |||
94 | # ifndef BOOTLOADER | ||
95 | system_memory_guard(oldmode); | ||
96 | # endif | ||
97 | |||
88 | if (hdr.magic != FLASH_MAGIC) | 98 | if (hdr.magic != FLASH_MAGIC) |
89 | return false; | 99 | return false; |
90 | 100 | ||