mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 23:22:37 +02:00
Use the register mapping feature bit
All functions which just call probe_jedec and then map flash registers are replaced by probe_jedec. All functions which call probe_jedec, map flash registers and do something else can at least eliminate mapping flash registers. Fix logic inversion in probe_jedec to map flash registers on success instead of on failure. Change a few TIMING_IGNORED to TIMING_FIXME where probe_jedec is used. Total savings: One probe function simplified, three probe functions eliminated. Corresponding to flashrom svn r839. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de> Acked-by: Sean Nelson <audiohacked@gmail.com>
This commit is contained in:
parent
3646c8f31f
commit
e9404668a1
38
flashchips.c
38
flashchips.c
@ -827,7 +827,7 @@ struct flashchip flashchips[] = {
|
|||||||
.total_size = 64,
|
.total_size = 64,
|
||||||
.page_size = 128,
|
.page_size = 128,
|
||||||
.tested = TEST_OK_PRW,
|
.tested = TEST_OK_PRW,
|
||||||
.probe = probe_jedec,
|
.probe = probe_jedec,
|
||||||
.probe_timing = 10000, /* 10mS, Enter=Exec */
|
.probe_timing = 10000, /* 10mS, Enter=Exec */
|
||||||
.erase = NULL,
|
.erase = NULL,
|
||||||
.block_erasers =
|
.block_erasers =
|
||||||
@ -1252,8 +1252,9 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = AMIC_A49LF040A,
|
.model_id = AMIC_A49LF040A,
|
||||||
.total_size = 512,
|
.total_size = 512,
|
||||||
.page_size = 64 * 1024,
|
.page_size = 64 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_OK_PREW,
|
.tested = TEST_OK_PREW,
|
||||||
.probe = probe_49fl00x,
|
.probe = probe_jedec,
|
||||||
.probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
|
.probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
|
||||||
.erase = erase_49fl00x,
|
.erase = erase_49fl00x,
|
||||||
.write = write_49fl00x,
|
.write = write_49fl00x,
|
||||||
@ -2473,8 +2474,9 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = PMC_49FL002,
|
.model_id = PMC_49FL002,
|
||||||
.total_size = 256,
|
.total_size = 256,
|
||||||
.page_size = 16 * 1024,
|
.page_size = 16 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_OK_PREW,
|
.tested = TEST_OK_PREW,
|
||||||
.probe = probe_49fl00x,
|
.probe = probe_jedec,
|
||||||
.probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
|
.probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
|
||||||
.erase = erase_49fl00x,
|
.erase = erase_49fl00x,
|
||||||
.write = write_49fl00x,
|
.write = write_49fl00x,
|
||||||
@ -2489,8 +2491,9 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = PMC_49FL004,
|
.model_id = PMC_49FL004,
|
||||||
.total_size = 512,
|
.total_size = 512,
|
||||||
.page_size = 64 * 1024,
|
.page_size = 64 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_OK_PREW,
|
.tested = TEST_OK_PREW,
|
||||||
.probe = probe_49fl00x,
|
.probe = probe_jedec,
|
||||||
.probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
|
.probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
|
||||||
.erase = erase_49fl00x,
|
.erase = erase_49fl00x,
|
||||||
.write = write_49fl00x,
|
.write = write_49fl00x,
|
||||||
@ -2980,6 +2983,7 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = SST_49LF002A,
|
.model_id = SST_49LF002A,
|
||||||
.total_size = 256,
|
.total_size = 256,
|
||||||
.page_size = 16 * 1024,
|
.page_size = 16 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_OK_PREW,
|
.tested = TEST_OK_PREW,
|
||||||
.probe = probe_sst_fwhub,
|
.probe = probe_sst_fwhub,
|
||||||
.probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
|
.probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
|
||||||
@ -2996,6 +3000,7 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = SST_49LF003A,
|
.model_id = SST_49LF003A,
|
||||||
.total_size = 384,
|
.total_size = 384,
|
||||||
.page_size = 64 * 1024,
|
.page_size = 64 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_OK_PR,
|
.tested = TEST_OK_PR,
|
||||||
.probe = probe_sst_fwhub,
|
.probe = probe_sst_fwhub,
|
||||||
.probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
|
.probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
|
||||||
@ -3015,6 +3020,7 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = SST_49LF004A,
|
.model_id = SST_49LF004A,
|
||||||
.total_size = 512,
|
.total_size = 512,
|
||||||
.page_size = 64 * 1024,
|
.page_size = 64 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_OK_PREW,
|
.tested = TEST_OK_PREW,
|
||||||
.probe = probe_sst_fwhub,
|
.probe = probe_sst_fwhub,
|
||||||
.probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
|
.probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
|
||||||
@ -3060,6 +3066,7 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = SST_49LF008A,
|
.model_id = SST_49LF008A,
|
||||||
.total_size = 1024,
|
.total_size = 1024,
|
||||||
.page_size = 64 * 1024,
|
.page_size = 64 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_OK_PREW,
|
.tested = TEST_OK_PREW,
|
||||||
.probe = probe_sst_fwhub,
|
.probe = probe_sst_fwhub,
|
||||||
.probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
|
.probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
|
||||||
@ -3156,6 +3163,7 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = SST_49LF040B,
|
.model_id = SST_49LF040B,
|
||||||
.total_size = 512,
|
.total_size = 512,
|
||||||
.page_size = 64 * 1024,
|
.page_size = 64 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_OK_PREW,
|
.tested = TEST_OK_PREW,
|
||||||
.probe = probe_sst_fwhub,
|
.probe = probe_sst_fwhub,
|
||||||
.probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
|
.probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
|
||||||
@ -3498,8 +3506,9 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = ST_M50FLW040A,
|
.model_id = ST_M50FLW040A,
|
||||||
.total_size = 512,
|
.total_size = 512,
|
||||||
.page_size = 64 * 1024,
|
.page_size = 64 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_UNTESTED,
|
.tested = TEST_UNTESTED,
|
||||||
.probe = probe_stm50flw0x0x,
|
.probe = probe_jedec,
|
||||||
.probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
|
.probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
|
||||||
.erase = erase_stm50flw0x0x,
|
.erase = erase_stm50flw0x0x,
|
||||||
.write = write_stm50flw0x0x,
|
.write = write_stm50flw0x0x,
|
||||||
@ -3514,8 +3523,9 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = ST_M50FLW040B,
|
.model_id = ST_M50FLW040B,
|
||||||
.total_size = 512,
|
.total_size = 512,
|
||||||
.page_size = 64 * 1024,
|
.page_size = 64 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_UNTESTED,
|
.tested = TEST_UNTESTED,
|
||||||
.probe = probe_stm50flw0x0x,
|
.probe = probe_jedec,
|
||||||
.probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
|
.probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
|
||||||
.erase = erase_stm50flw0x0x,
|
.erase = erase_stm50flw0x0x,
|
||||||
.write = write_stm50flw0x0x,
|
.write = write_stm50flw0x0x,
|
||||||
@ -3530,8 +3540,9 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = ST_M50FLW080A,
|
.model_id = ST_M50FLW080A,
|
||||||
.total_size = 1024,
|
.total_size = 1024,
|
||||||
.page_size = 64 * 1024,
|
.page_size = 64 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_OK_PREW,
|
.tested = TEST_OK_PREW,
|
||||||
.probe = probe_stm50flw0x0x,
|
.probe = probe_jedec,
|
||||||
.probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
|
.probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
|
||||||
.erase = erase_stm50flw0x0x,
|
.erase = erase_stm50flw0x0x,
|
||||||
.write = write_stm50flw0x0x,
|
.write = write_stm50flw0x0x,
|
||||||
@ -3546,8 +3557,9 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = ST_M50FLW080B,
|
.model_id = ST_M50FLW080B,
|
||||||
.total_size = 1024,
|
.total_size = 1024,
|
||||||
.page_size = 64 * 1024,
|
.page_size = 64 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_UNTESTED,
|
.tested = TEST_UNTESTED,
|
||||||
.probe = probe_stm50flw0x0x,
|
.probe = probe_jedec,
|
||||||
.probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
|
.probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
|
||||||
.erase = erase_stm50flw0x0x,
|
.erase = erase_stm50flw0x0x,
|
||||||
.write = write_stm50flw0x0x,
|
.write = write_stm50flw0x0x,
|
||||||
@ -4042,9 +4054,10 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = W_39V080FA,
|
.model_id = W_39V080FA,
|
||||||
.total_size = 1024,
|
.total_size = 1024,
|
||||||
.page_size = 64 * 1024,
|
.page_size = 64 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_OK_PREW,
|
.tested = TEST_OK_PREW,
|
||||||
.probe = probe_winbond_fwhub,
|
.probe = probe_jedec,
|
||||||
.probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v080fa.c) */
|
.probe_timing = TIMING_FIXME,
|
||||||
.erase = erase_winbond_fwhub,
|
.erase = erase_winbond_fwhub,
|
||||||
.write = write_winbond_fwhub,
|
.write = write_winbond_fwhub,
|
||||||
.read = read_memmapped,
|
.read = read_memmapped,
|
||||||
@ -4058,9 +4071,10 @@ struct flashchip flashchips[] = {
|
|||||||
.model_id = W_39V080FA_DM,
|
.model_id = W_39V080FA_DM,
|
||||||
.total_size = 512,
|
.total_size = 512,
|
||||||
.page_size = 64 * 1024,
|
.page_size = 64 * 1024,
|
||||||
|
.feature_bits = FEATURE_REGISTERMAP,
|
||||||
.tested = TEST_UNTESTED,
|
.tested = TEST_UNTESTED,
|
||||||
.probe = probe_winbond_fwhub,
|
.probe = probe_jedec,
|
||||||
.probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v080fa.c) */
|
.probe_timing = TIMING_FIXME,
|
||||||
.erase = erase_winbond_fwhub,
|
.erase = erase_winbond_fwhub,
|
||||||
.write = write_winbond_fwhub,
|
.write = write_winbond_fwhub,
|
||||||
.read = read_memmapped,
|
.read = read_memmapped,
|
||||||
|
6
jedec.c
6
jedec.c
@ -189,13 +189,13 @@ int probe_jedec_common(struct flashchip *flash,
|
|||||||
printf_debug(", id2 is normal flash content");
|
printf_debug(", id2 is normal flash content");
|
||||||
|
|
||||||
printf_debug("\n");
|
printf_debug("\n");
|
||||||
if (largeid1 == flash->manufacture_id && largeid2 == flash->model_id)
|
if (largeid1 != flash->manufacture_id || largeid2 != flash->model_id)
|
||||||
return 1;
|
return 0;
|
||||||
|
|
||||||
if (flash->feature_bits & FEATURE_REGISTERMAP)
|
if (flash->feature_bits & FEATURE_REGISTERMAP)
|
||||||
map_flash_registers(flash);
|
map_flash_registers(flash);
|
||||||
|
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int erase_sector_jedec_common(struct flashchip *flash, unsigned int page,
|
int erase_sector_jedec_common(struct flashchip *flash, unsigned int page,
|
||||||
|
10
pm49fl00x.c
10
pm49fl00x.c
@ -36,16 +36,6 @@ void write_lockbits_49fl00x(chipaddr bios, int size,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int probe_49fl00x(struct flashchip *flash)
|
|
||||||
{
|
|
||||||
int ret = probe_jedec(flash);
|
|
||||||
|
|
||||||
if (ret == 1)
|
|
||||||
map_flash_registers(flash);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int erase_49fl00x(struct flashchip *flash)
|
int erase_49fl00x(struct flashchip *flash)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -89,8 +89,6 @@ int probe_sst_fwhub(struct flashchip *flash)
|
|||||||
if (probe_jedec(flash) == 0)
|
if (probe_jedec(flash) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
map_flash_registers(flash);
|
|
||||||
|
|
||||||
for (i = 0; i < flash->total_size * 1024; i += flash->page_size)
|
for (i = 0; i < flash->total_size * 1024; i += flash->page_size)
|
||||||
check_sst_fwhub_block_lock(flash, i);
|
check_sst_fwhub_block_lock(flash, i);
|
||||||
|
|
||||||
|
@ -31,18 +31,6 @@
|
|||||||
#include "flash.h"
|
#include "flash.h"
|
||||||
#include "flashchips.h"
|
#include "flashchips.h"
|
||||||
|
|
||||||
int probe_stm50flw0x0x(struct flashchip *flash)
|
|
||||||
{
|
|
||||||
int result = probe_jedec(flash);
|
|
||||||
|
|
||||||
if (!result)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
map_flash_registers(flash);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void wait_stm50flw0x0x(chipaddr bios)
|
static void wait_stm50flw0x0x(chipaddr bios)
|
||||||
{
|
{
|
||||||
chip_writeb(0x70, bios);
|
chip_writeb(0x70, bios);
|
||||||
|
12
w39v080fa.c
12
w39v080fa.c
@ -20,18 +20,6 @@
|
|||||||
|
|
||||||
#include "flash.h"
|
#include "flash.h"
|
||||||
|
|
||||||
int probe_winbond_fwhub(struct flashchip *flash)
|
|
||||||
{
|
|
||||||
int result = probe_jedec(flash);
|
|
||||||
|
|
||||||
if (!result)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
map_flash_registers(flash);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int unlock_block_winbond_fwhub(struct flashchip *flash, int offset)
|
static int unlock_block_winbond_fwhub(struct flashchip *flash, int offset)
|
||||||
{
|
{
|
||||||
chipaddr wrprotect = flash->virtual_registers + offset + 2;
|
chipaddr wrprotect = flash->virtual_registers + offset + 2;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user