diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/eeprom_settings.c | 18 | ||||
-rw-r--r-- | firmware/system.c | 10 |
2 files changed, 21 insertions, 7 deletions
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 | ||