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.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Index: flashrom-sst49lf004b_eraseblocks/flash.h =================================================================== --- flashrom-sst49lf004b_eraseblocks/flash.h (Revision 727) +++ flashrom-sst49lf004b_eraseblocks/flash.h (Arbeitskopie) @@ -225,6 +225,7 @@ #define TEST_OK_WRITE (1 << 3) #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_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_MASK 0x0f
@@ -596,8 +597,8 @@ int probe_jedec(struct flashchip *flash); int erase_chip_jedec(struct flashchip *flash); int write_jedec(struct flashchip *flash, uint8_t *buf); -int erase_sector_jedec(struct flashchip *flash, unsigned int page, int pagesize); -int erase_block_jedec(struct flashchip *flash, unsigned int page, int blocksize); +int erase_sector_jedec(struct flashchip *flash, unsigned int page, unsigned int pagesize); +int erase_block_jedec(struct flashchip *flash, unsigned int page, unsigned int blocksize); int write_sector_jedec(chipaddr bios, uint8_t *src, chipaddr dst, unsigned int page_size);
@@ -657,6 +658,7 @@ /* sst_fwhub.c */ int probe_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);
/* w39v040c.c */ Index: flashrom-sst49lf004b_eraseblocks/jedec.c =================================================================== --- flashrom-sst49lf004b_eraseblocks/jedec.c (Revision 727) +++ flashrom-sst49lf004b_eraseblocks/jedec.c (Arbeitskopie) @@ -175,7 +175,7 @@ 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;
@@ -204,7 +204,7 @@ 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;
Index: flashrom-sst49lf004b_eraseblocks/flashchips.c =================================================================== --- flashrom-sst49lf004b_eraseblocks/flashchips.c (Revision 727) +++ flashrom-sst49lf004b_eraseblocks/flashchips.c (Arbeitskopie) @@ -2141,6 +2141,9 @@ },
{ + /* 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", .name = "SST49LF004A/B", .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */ @@ -2148,10 +2151,23 @@ .model_id = SST_49LF004A, .total_size = 512, .page_size = 64 * 1024, - .tested = TEST_OK_PREW, + .tested = TEST_OK_PRW, .probe = probe_sst_fwhub, .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, .read = read_memmapped, }, Index: flashrom-sst49lf004b_eraseblocks/sst_fwhub.c =================================================================== --- flashrom-sst49lf004b_eraseblocks/sst_fwhub.c (Revision 727) +++ flashrom-sst49lf004b_eraseblocks/sst_fwhub.c (Arbeitskopie) @@ -94,7 +94,7 @@ 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);
On Wed, Sep 23, 2009 at 03:51:29AM +0200, Carl-Daniel Hailfinger wrote:
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.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
/* 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", .name = "SST49LF004A/B", .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */*/
@@ -2148,10 +2151,23 @@ .model_id = SST_49LF004A, .total_size = 512, .page_size = 64 * 1024,
.tested = TEST_OK_PREW,
.tested = TEST_OK_PRW,
Can we not consider E as tested here? I believe you got ulf to test both, and with the board enable, even the 64k block erase succeeded.
Luc Verhaegen.
On 23.09.2009 13:44, Luc Verhaegen wrote:
On Wed, Sep 23, 2009 at 03:51:29AM +0200, Carl-Daniel Hailfinger wrote:
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.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
@@ -2148,10 +2151,23 @@ .model_id = SST_49LF004A, .total_size = 512, .page_size = 64 * 1024,
.tested = TEST_OK_PREW,
.tested = TEST_OK_PRW,
Can we not consider E as tested here? I believe you got ulf to test both, and with the board enable, even the 64k block erase succeeded.
Well, I didn't have him test the erase functions inside the new eraseblock framework, I only used the old framework. The effect (comands executed) should be identical, though. If you think that is good enough, I'll resend without the PRW change for this chip, but with the added definition of PRW (I need that one for a boatload of other eraseblock changes).
Regards, Carl-Daniel
On Wed, Sep 23, 2009 at 02:11:27PM +0200, Carl-Daniel Hailfinger wrote:
On 23.09.2009 13:44, Luc Verhaegen wrote:
Can we not consider E as tested here? I believe you got ulf to test both, and with the board enable, even the 64k block erase succeeded.
Well, I didn't have him test the erase functions inside the new eraseblock framework, I only used the old framework. The effect (comands executed) should be identical, though. If you think that is good enough, I'll resend without the PRW change for this chip, but with the added definition of PRW (I need that one for a boatload of other eraseblock changes).
Ok, with just that one change: Acked-by: Luc Verhaegen libv@skynet.be
Also, we might want to have Ulf test this if you are still not entirely sure about this code.
Luc Verhaegen.
On 23.09.2009 15:28, Luc Verhaegen wrote:
On Wed, Sep 23, 2009 at 02:11:27PM +0200, Carl-Daniel Hailfinger wrote:
On 23.09.2009 13:44, Luc Verhaegen wrote:
Can we not consider E as tested here? I believe you got ulf to test both, and with the board enable, even the 64k block erase succeeded.
Well, I didn't have him test the erase functions inside the new eraseblock framework, I only used the old framework. The effect (comands executed) should be identical, though. If you think that is good enough, I'll resend without the PRW change for this chip, but with the added definition of PRW (I need that one for a boatload of other eraseblock changes).
Ok, with just that one change: Acked-by: Luc Verhaegen libv@skynet.be
Thanks, changed and committed in r731.
Also, we might want to have Ulf test this if you are still not entirely sure about this code.
I'm sure about the code. The additional test was just in case we want paranoid checks.
Regards, Carl-Daniel