diff --git a/flashchips.c b/flashchips.c index 71a6bfbd6..33df792b3 100644 --- a/flashchips.c +++ b/flashchips.c @@ -5354,12 +5354,12 @@ const struct flashchip flashchips[] = { { .eraseblocks = { {4 * 1024, 512} }, .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {64 * 1024, 32} }, - .block_erase = spi_block_erase_52, }, { .eraseblocks = { {32 * 1024, 64} }, .block_erase = spi_block_erase_d8, + }, { + .eraseblocks = { {64 * 1024, 32} }, + .block_erase = spi_block_erase_52, }, { .eraseblocks = { {2048 * 1024, 1} }, .block_erase = spi_block_erase_60, @@ -9211,12 +9211,12 @@ const struct flashchip flashchips[] = { { .eraseblocks = { {4 * 1024, 2048} }, .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {64 * 1024, 128} }, - .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {32 * 1024, 256} }, .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 128} }, + .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {8 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_60, @@ -9289,12 +9289,12 @@ const struct flashchip flashchips[] = { { .eraseblocks = { {4 * 1024, 1024} }, .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {64 * 1024, 64} }, - .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {32 * 1024, 128} }, .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 64} }, + .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {4 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_60, @@ -9328,12 +9328,12 @@ const struct flashchip flashchips[] = { { .eraseblocks = { {4 * 1024, 2048} }, .block_erase = spi_block_erase_20, - }, { - .eraseblocks = { {64 * 1024, 128} }, - .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {32 * 1024, 256} }, .block_erase = spi_block_erase_52, + }, { + .eraseblocks = { {64 * 1024, 128} }, + .block_erase = spi_block_erase_d8, }, { .eraseblocks = { {8 * 1024 * 1024, 1} }, .block_erase = spi_block_erase_60, diff --git a/flashrom.c b/flashrom.c index 8d6b3db1d..8e4300167 100644 --- a/flashrom.c +++ b/flashrom.c @@ -1075,10 +1075,12 @@ static int selfcheck_eraseblocks(const struct flashchip *chip) { int i, j, k; int ret = 0; + unsigned int prev_eraseblock_count = chip->total_size * 1024; for (k = 0; k < NUM_ERASEFUNCTIONS; k++) { unsigned int done = 0; struct block_eraser eraser = chip->block_erasers[k]; + unsigned int curr_eraseblock_count = 0; for (i = 0; i < NUM_ERASEREGIONS; i++) { /* Blocks with zero size are bugs in flashchips.c. */ @@ -1101,6 +1103,7 @@ static int selfcheck_eraseblocks(const struct flashchip *chip) } done += eraser.eraseblocks[i].count * eraser.eraseblocks[i].size; + curr_eraseblock_count += eraser.eraseblocks[i].count; } /* Empty eraseblock definition with erase function. */ if (!done && eraser.block_erase) @@ -1132,6 +1135,14 @@ static int selfcheck_eraseblocks(const struct flashchip *chip) ret = 1; } } + if(curr_eraseblock_count > prev_eraseblock_count) + { + msg_gerr("ERROR: Flash chip %s erase function %i is not " + "in order. Please report a bug at flashrom@flashrom.org\n", + chip->name, k); + ret = 1; + } + prev_eraseblock_count = curr_eraseblock_count; } return ret; }