1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-04-27 23:22:37 +02:00

Use address mask in probe_jedec

This allows us to have one common probe_jedec function instead of half a
dozen wrappers. The trick here is to have FEATURE_ADDR_FULL==0 and thus
default to unmasked addresses. That way, we only have to annotate chips
which need small address masks.

Corresponding to flashrom svn r840.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Sean Nelson <audiohacked@gmail.com>
This commit is contained in:
Carl-Daniel Hailfinger 2010-01-09 03:15:50 +00:00
parent e9404668a1
commit 4bf4e79907
2 changed files with 21 additions and 3 deletions

View File

@ -149,8 +149,10 @@ enum chipbustype {
*/
#define NUM_ERASEFUNCTIONS 5
#define FEATURE_REGISTERMAP (1 << 0)
#define FEATURE_BYTEWRITES (1 << 1)
#define FEATURE_REGISTERMAP (1 << 0)
#define FEATURE_BYTEWRITES (1 << 1)
#define FEATURE_ADDR_FULL (0 << 2)
#define FEATURE_ADDR_MASK (3 << 2)
struct flashchip {
const char *vendor;

18
jedec.c
View File

@ -373,6 +373,19 @@ retry:
return failed;
}
int getaddrmask(struct flashchip *flash)
{
switch (flash->feature_bits & FEATURE_ADDR_MASK) {
case FEATURE_ADDR_FULL:
return MASK_FULL;
break;
default:
fprintf(stderr, "%s called with unknown mask\n", __func__);
return 0;
break;
}
}
int write_jedec(struct flashchip *flash, uint8_t *buf)
{
int i, failed = 0;
@ -438,7 +451,10 @@ int erase_chip_block_jedec(struct flashchip *flash, unsigned int addr,
int probe_jedec(struct flashchip *flash)
{
return probe_jedec_common(flash, MASK_FULL, 1);
int mask;
mask = getaddrmask(flash);
return probe_jedec_common(flash, mask, 1);
}
int erase_sector_jedec(struct flashchip *flash, unsigned int page, unsigned int size)