mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-27 11:31:13 +00:00
Merge d0002d3f24
into 36c3f4deba
This commit is contained in:
commit
6095e701d5
@ -84,13 +84,23 @@ bool backing_store_init(void) {
|
|||||||
#else // defined(WEAR_LEVELING_EFL_FIRST_SECTOR)
|
#else // defined(WEAR_LEVELING_EFL_FIRST_SECTOR)
|
||||||
|
|
||||||
// Work out how many sectors we want to use, working backwards from the end of the flash
|
// Work out how many sectors we want to use, working backwards from the end of the flash
|
||||||
flash_sector_t last_sector = desc->sectors_count - WEAR_LEVELING_EFL_OMIT_LAST_SECTOR_COUNT;
|
flash_sector_t last_sector = desc->sectors_count;
|
||||||
|
|
||||||
|
// skip sectors that are past the actual flash size
|
||||||
|
while (flashGetSectorOffset(flash, last_sector - 1) >= flash_size) {
|
||||||
|
if (--last_sector == 0) {
|
||||||
|
chSysHalt("No sector in available flash range");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (WEAR_LEVELING_EFL_OMIT_LAST_SECTOR_COUNT >= last_sector) {
|
||||||
|
chSysHalt("Last sector intended to be used with wear_leveling is beyond available flash descriptor range");
|
||||||
|
}
|
||||||
|
|
||||||
|
last_sector -= WEAR_LEVELING_EFL_OMIT_LAST_SECTOR_COUNT;
|
||||||
|
|
||||||
for (flash_sector_t i = 0; i < last_sector; ++i) {
|
for (flash_sector_t i = 0; i < last_sector; ++i) {
|
||||||
first_sector = last_sector - i - 1;
|
first_sector = last_sector - i - 1;
|
||||||
if (flashGetSectorOffset(flash, first_sector) >= flash_size) {
|
|
||||||
last_sector = first_sector;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
counter += flashGetSectorSize(flash, first_sector);
|
counter += flashGetSectorSize(flash, first_sector);
|
||||||
if (counter >= (WEAR_LEVELING_BACKING_SIZE)) {
|
if (counter >= (WEAR_LEVELING_BACKING_SIZE)) {
|
||||||
sector_count = last_sector - first_sector;
|
sector_count = last_sector - first_sector;
|
||||||
@ -99,6 +109,10 @@ bool backing_store_init(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (counter < WEAR_LEVELING_BACKING_SIZE) {
|
||||||
|
chSysHalt("Not enough flash is available for the requested wear_leveling size");
|
||||||
|
}
|
||||||
|
|
||||||
#endif // defined(WEAR_LEVELING_EFL_FIRST_SECTOR)
|
#endif // defined(WEAR_LEVELING_EFL_FIRST_SECTOR)
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user