mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 15:12:36 +02:00
Switch SST49LF004A/B to block erase, remove the hack which simulated (unsupported) chip erase
Annotate SST49LF004B quirks for TBL#. Add TEST_OK_PRW which is useful when a PREW chip gets a new erase routine. Change a few erase function prototypes to use unsigned int instead of int. Corresponding to flashrom svn r731. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Luc Verhaegen <libv@skynet.be>
This commit is contained in:
parent
c025268340
commit
a06287c9a0
6
flash.h
6
flash.h
@ -225,6 +225,7 @@ struct flashchip {
|
|||||||
#define TEST_OK_WRITE (1 << 3)
|
#define TEST_OK_WRITE (1 << 3)
|
||||||
#define TEST_OK_PR (TEST_OK_PROBE | TEST_OK_READ)
|
#define TEST_OK_PR (TEST_OK_PROBE | TEST_OK_READ)
|
||||||
#define TEST_OK_PRE (TEST_OK_PROBE | TEST_OK_READ | TEST_OK_ERASE)
|
#define TEST_OK_PRE (TEST_OK_PROBE | TEST_OK_READ | TEST_OK_ERASE)
|
||||||
|
#define TEST_OK_PRW (TEST_OK_PROBE | TEST_OK_READ | TEST_OK_WRITE)
|
||||||
#define TEST_OK_PREW (TEST_OK_PROBE | TEST_OK_READ | TEST_OK_ERASE | TEST_OK_WRITE)
|
#define TEST_OK_PREW (TEST_OK_PROBE | TEST_OK_READ | TEST_OK_ERASE | TEST_OK_WRITE)
|
||||||
#define TEST_OK_MASK 0x0f
|
#define TEST_OK_MASK 0x0f
|
||||||
|
|
||||||
@ -596,8 +597,8 @@ int write_byte_program_jedec(chipaddr bios, uint8_t *src,
|
|||||||
int probe_jedec(struct flashchip *flash);
|
int probe_jedec(struct flashchip *flash);
|
||||||
int erase_chip_jedec(struct flashchip *flash);
|
int erase_chip_jedec(struct flashchip *flash);
|
||||||
int write_jedec(struct flashchip *flash, uint8_t *buf);
|
int write_jedec(struct flashchip *flash, uint8_t *buf);
|
||||||
int erase_sector_jedec(struct flashchip *flash, unsigned int page, int pagesize);
|
int erase_sector_jedec(struct flashchip *flash, unsigned int page, unsigned int pagesize);
|
||||||
int erase_block_jedec(struct flashchip *flash, unsigned int page, int blocksize);
|
int erase_block_jedec(struct flashchip *flash, unsigned int page, unsigned int blocksize);
|
||||||
int write_sector_jedec(chipaddr bios, uint8_t *src,
|
int write_sector_jedec(chipaddr bios, uint8_t *src,
|
||||||
chipaddr dst, unsigned int page_size);
|
chipaddr dst, unsigned int page_size);
|
||||||
|
|
||||||
@ -657,6 +658,7 @@ int write_49lfxxxc(struct flashchip *flash, uint8_t *buf);
|
|||||||
/* sst_fwhub.c */
|
/* sst_fwhub.c */
|
||||||
int probe_sst_fwhub(struct flashchip *flash);
|
int probe_sst_fwhub(struct flashchip *flash);
|
||||||
int erase_sst_fwhub(struct flashchip *flash);
|
int erase_sst_fwhub(struct flashchip *flash);
|
||||||
|
int erase_sst_fwhub_block(struct flashchip *flash, unsigned int offset, unsigned int page_size);
|
||||||
int write_sst_fwhub(struct flashchip *flash, uint8_t *buf);
|
int write_sst_fwhub(struct flashchip *flash, uint8_t *buf);
|
||||||
|
|
||||||
/* w39v040c.c */
|
/* w39v040c.c */
|
||||||
|
18
flashchips.c
18
flashchips.c
@ -2141,6 +2141,9 @@ struct flashchip flashchips[] = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
/* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
|
||||||
|
* and is only honored for 64k block erase, but not 4k sector erase.
|
||||||
|
*/
|
||||||
.vendor = "SST",
|
.vendor = "SST",
|
||||||
.name = "SST49LF004A/B",
|
.name = "SST49LF004A/B",
|
||||||
.bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
|
.bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
|
||||||
@ -2151,7 +2154,20 @@ struct flashchip flashchips[] = {
|
|||||||
.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) */
|
||||||
.erase = erase_sst_fwhub,
|
.erase = NULL,
|
||||||
|
.block_erasers =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
.eraseblocks = { {4 * 1024, 128} },
|
||||||
|
.block_erase = erase_sector_jedec, /* missing unlock */
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {64 * 1024, 8} },
|
||||||
|
.block_erase = erase_sst_fwhub_block, /* same as erase_sector_block, but with unlock */
|
||||||
|
}, {
|
||||||
|
.eraseblocks = { {512 * 1024, 1} },
|
||||||
|
.block_erase = NULL, /* AA 55 80 AA 55 10, only in PP mode */
|
||||||
|
},
|
||||||
|
},
|
||||||
.write = write_sst_fwhub,
|
.write = write_sst_fwhub,
|
||||||
.read = read_memmapped,
|
.read = read_memmapped,
|
||||||
},
|
},
|
||||||
|
4
jedec.c
4
jedec.c
@ -175,7 +175,7 @@ int probe_jedec(struct flashchip *flash)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int erase_sector_jedec(struct flashchip *flash, unsigned int page, int pagesize)
|
int erase_sector_jedec(struct flashchip *flash, unsigned int page, unsigned int pagesize)
|
||||||
{
|
{
|
||||||
chipaddr bios = flash->virtual_memory;
|
chipaddr bios = flash->virtual_memory;
|
||||||
|
|
||||||
@ -204,7 +204,7 @@ int erase_sector_jedec(struct flashchip *flash, unsigned int page, int pagesize)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int erase_block_jedec(struct flashchip *flash, unsigned int block, int blocksize)
|
int erase_block_jedec(struct flashchip *flash, unsigned int block, unsigned int blocksize)
|
||||||
{
|
{
|
||||||
chipaddr bios = flash->virtual_memory;
|
chipaddr bios = flash->virtual_memory;
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ int probe_sst_fwhub(struct flashchip *flash)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int erase_sst_fwhub_block(struct flashchip *flash, int offset, int page_size)
|
int erase_sst_fwhub_block(struct flashchip *flash, unsigned int offset, unsigned int page_size)
|
||||||
{
|
{
|
||||||
uint8_t blockstatus = clear_sst_fwhub_block_lock(flash, offset);
|
uint8_t blockstatus = clear_sst_fwhub_block_lock(flash, offset);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user