mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 15:12:36 +02:00
Complete the addition of Feature Bits for all Jedec based chips
Add FEATURE_SHORT_RESET, FEATURE_LONG_RESET, and FEATURE_EITHER_RESET rewrite jedec functions to use getaddrmask convert write_49f002 to write_jedec_1 convert write_w39v040c to write_jedec_1 convert probe_w39v040c to probe_jedec convert write_49lf040 to write_jedec_1 convert write_pm29f002 to write_jedec convert write_29f040b to write_jedec_1 convert probe_29f040b to probe_jedec convert erase_chip_29f040b to erase_chip_block_jedec convert erase_sector_29f040b to erase_sector_jedec convert write_m29f002b to write_jedec convert write_m29f002t to write_jedec convert *_29f002 to *_jedec decouple unused files from Makefile: am29f040b.c en29f002a.c m29f002.c mx29f002.c pm29f002.c sst49lf040.c w39v040c.c w49f002u.c Corresponding to flashrom svn r886. Signed-off-by: Sean Nelson <audiohacked@gmail.com> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Anders Juel Jensen <andersjjensen@gmail.com>
This commit is contained in:
parent
b1bd3e85ba
commit
35727f7618
3
Makefile
3
Makefile
@ -42,8 +42,7 @@ LDFLAGS += -L/usr/local/lib
|
||||
endif
|
||||
|
||||
CHIP_OBJS = jedec.o stm50flw0x0x.o w39v080fa.o sharplhf00l04.o w29ee011.o \
|
||||
sst28sf040.o am29f040b.o mx29f002.o m29f400bt.o pm29f002.o w39v040c.o \
|
||||
w49f002u.o 82802ab.o pm49fl00x.o sst49lf040.o en29f002a.o m29f002.o \
|
||||
sst28sf040.o m29f400bt.o 82802ab.o pm49fl00x.o \
|
||||
sst49lfxxxc.o sst_fwhub.o flashchips.o spi.o
|
||||
|
||||
LIB_OBJS = layout.o
|
||||
|
6
flash.h
6
flash.h
@ -154,8 +154,14 @@ enum chipbustype {
|
||||
|
||||
#define FEATURE_REGISTERMAP (1 << 0)
|
||||
#define FEATURE_BYTEWRITES (1 << 1)
|
||||
#define FEATURE_LONG_RESET (0 << 4)
|
||||
#define FEATURE_SHORT_RESET (1 << 4)
|
||||
#define FEATURE_EITHER_RESET FEATURE_LONG_RESET
|
||||
#define FEATURE_ADDR_FULL (0 << 2)
|
||||
#define FEATURE_ADDR_MASK (3 << 2)
|
||||
#define FEATURE_ADDR_2AA (1 << 2)
|
||||
#define FEATURE_ADDR_AAA (2 << 2)
|
||||
#define FEATURE_ADDR_SHIFTED 0
|
||||
|
||||
struct flashchip {
|
||||
const char *vendor;
|
||||
|
458
flashchips.c
458
flashchips.c
File diff suppressed because it is too large
Load Diff
44
jedec.c
44
jedec.c
@ -27,6 +27,7 @@
|
||||
#define MAX_REFLASH_TRIES 0x10
|
||||
#define MASK_FULL 0xffff
|
||||
#define MASK_2AA 0x7ff
|
||||
#define MASK_AAA 0xfff
|
||||
|
||||
/* Check one byte for odd parity */
|
||||
uint8_t oddparity(uint8_t val)
|
||||
@ -98,8 +99,7 @@ void start_program_jedec_common(struct flashchip *flash, unsigned int mask)
|
||||
chip_writeb(0xA0, bios + (0x5555 & mask));
|
||||
}
|
||||
|
||||
int probe_jedec_common(struct flashchip *flash,
|
||||
unsigned int mask, int long_reset)
|
||||
int probe_jedec_common(struct flashchip *flash, unsigned int mask)
|
||||
{
|
||||
chipaddr bios = flash->virtual_memory;
|
||||
uint8_t id1, id2;
|
||||
@ -152,7 +152,7 @@ int probe_jedec_common(struct flashchip *flash,
|
||||
}
|
||||
|
||||
/* Issue JEDEC Product ID Exit command */
|
||||
if (long_reset)
|
||||
if ((flash->feature_bits & FEATURE_SHORT_RESET) == FEATURE_LONG_RESET)
|
||||
{
|
||||
chip_writeb(0xAA, bios + (0x5555 & mask));
|
||||
if (probe_timing_exit)
|
||||
@ -379,6 +379,12 @@ int getaddrmask(struct flashchip *flash)
|
||||
case FEATURE_ADDR_FULL:
|
||||
return MASK_FULL;
|
||||
break;
|
||||
case FEATURE_ADDR_2AA:
|
||||
return MASK_2AA;
|
||||
break;
|
||||
case FEATURE_ADDR_AAA:
|
||||
return MASK_AAA;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "%s called with unknown mask\n", __func__);
|
||||
return 0;
|
||||
@ -388,10 +394,13 @@ int getaddrmask(struct flashchip *flash)
|
||||
|
||||
int write_jedec(struct flashchip *flash, uint8_t *buf)
|
||||
{
|
||||
int mask;
|
||||
int i, failed = 0;
|
||||
int total_size = flash->total_size * 1024;
|
||||
int page_size = flash->page_size;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
|
||||
if (erase_chip_jedec(flash)) {
|
||||
fprintf(stderr,"ERASE FAILED!\n");
|
||||
return -1;
|
||||
@ -401,7 +410,7 @@ int write_jedec(struct flashchip *flash, uint8_t *buf)
|
||||
for (i = 0; i < total_size / page_size; i++) {
|
||||
printf("%04d at address: 0x%08x", i, i * page_size);
|
||||
if (write_page_write_jedec_common(flash, buf + i * page_size,
|
||||
i * page_size, page_size, MASK_FULL))
|
||||
i * page_size, page_size, mask))
|
||||
failed = 1;
|
||||
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
|
||||
}
|
||||
@ -415,6 +424,9 @@ int write_jedec_1(struct flashchip *flash, uint8_t * buf)
|
||||
int i;
|
||||
chipaddr bios = flash->virtual_memory;
|
||||
chipaddr dst = bios;
|
||||
int mask;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
|
||||
programmer_delay(10);
|
||||
if (erase_flash(flash)) {
|
||||
@ -427,7 +439,7 @@ int write_jedec_1(struct flashchip *flash, uint8_t * buf)
|
||||
if ((i & 0x3) == 0)
|
||||
printf("address: 0x%08lx", (unsigned long)i * 1024);
|
||||
|
||||
write_sector_jedec_common(flash, buf + i * 1024, dst + i * 1024, 1024, MASK_FULL);
|
||||
write_sector_jedec_common(flash, buf + i * 1024, dst + i * 1024, 1024, mask);
|
||||
|
||||
if ((i & 0x3) == 0)
|
||||
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
|
||||
@ -441,12 +453,15 @@ int write_jedec_1(struct flashchip *flash, uint8_t * buf)
|
||||
int erase_chip_block_jedec(struct flashchip *flash, unsigned int addr,
|
||||
unsigned int blocksize)
|
||||
{
|
||||
int mask;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
if ((addr != 0) || (blocksize != flash->total_size * 1024)) {
|
||||
fprintf(stderr, "%s called with incorrect arguments\n",
|
||||
__func__);
|
||||
return -1;
|
||||
}
|
||||
return erase_chip_jedec_common(flash, MASK_FULL);
|
||||
return erase_chip_jedec_common(flash, mask);
|
||||
}
|
||||
|
||||
int probe_jedec(struct flashchip *flash)
|
||||
@ -454,20 +469,29 @@ int probe_jedec(struct flashchip *flash)
|
||||
int mask;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
return probe_jedec_common(flash, mask, 1);
|
||||
return probe_jedec_common(flash, mask);
|
||||
}
|
||||
|
||||
int erase_sector_jedec(struct flashchip *flash, unsigned int page, unsigned int size)
|
||||
{
|
||||
return erase_sector_jedec_common(flash, page, size, MASK_FULL);
|
||||
int mask;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
return erase_sector_jedec_common(flash, page, size, mask);
|
||||
}
|
||||
|
||||
int erase_block_jedec(struct flashchip *flash, unsigned int page, unsigned int size)
|
||||
{
|
||||
return erase_block_jedec_common(flash, page, size, MASK_FULL);
|
||||
int mask;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
return erase_block_jedec_common(flash, page, size, mask);
|
||||
}
|
||||
|
||||
int erase_chip_jedec(struct flashchip *flash)
|
||||
{
|
||||
return erase_chip_jedec_common(flash, MASK_FULL);
|
||||
int mask;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
return erase_chip_jedec_common(flash, mask);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user