Index: flashrom-ich5-sst49lf004a/jedec.c =================================================================== --- flashrom-ich5-sst49lf004a/jedec.c (revision 3332) +++ flashrom-ich5-sst49lf004a/jedec.c (working copy) @@ -42,7 +42,8 @@ tmp1 = *dst & 0x40; - while (i++ < 0xFFFFFFF) { + //while (i++ < 0xFFFFFFF) { + while (i++ < 0x07ffffff) { tmp2 = *dst & 0x40; if (tmp1 == tmp2) { break; @@ -58,7 +59,8 @@ data &= 0x80; - while (i++ < 0xFFFFFFF) { + //while (i++ < 0xFFFFFFF) { + while (i++ < 0x07ffffff) { tmp = *dst & 0x80; if (tmp == data) { break; @@ -95,15 +97,16 @@ /* Issue JEDEC Product ID Entry command */ *(volatile uint8_t *)(bios + 0x5555) = 0xAA; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x2AAA) = 0x55; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x5555) = 0x90; /* Older chips may need up to 100 us to respond. The ATMEL 29C020 * needs 10 ms according to the data sheet, but it has been tested * to work reliably with 20 us. Allow a factor of 2 safety margin. */ - myusec_delay(40); + //myusec_delay(40); + myusec_delay(150); /* 150 nanoseconds delay */ /* Read product ID */ id1 = *(volatile uint8_t *)bios; @@ -125,11 +128,12 @@ /* Issue JEDEC Product ID Exit command */ *(volatile uint8_t *)(bios + 0x5555) = 0xAA; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x2AAA) = 0x55; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x5555) = 0xF0; - myusec_delay(40); + //myusec_delay(40); + myusec_delay(150); /* 150 nanoseconds delay */ printf_debug("%s: id1 0x%x, id2 0x%x", __FUNCTION__, largeid1, largeid2); if (!oddparity(id1)) @@ -145,18 +149,18 @@ { /* Issue the Sector Erase command */ *(volatile uint8_t *)(bios + 0x5555) = 0xAA; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x2AAA) = 0x55; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x5555) = 0x80; - myusec_delay(10); - + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x5555) = 0xAA; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x2AAA) = 0x55; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + page) = 0x30; - myusec_delay(10); + //myusec_delay(10); + usleep(25); /* 25 milliseconds delay */ /* wait for Toggle bit ready */ toggle_ready_jedec(bios); @@ -168,18 +172,19 @@ { /* Issue the Sector Erase command */ *(volatile uint8_t *)(bios + 0x5555) = 0xAA; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x2AAA) = 0x55; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x5555) = 0x80; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x5555) = 0xAA; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x2AAA) = 0x55; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + block) = 0x50; - myusec_delay(10); + //myusec_delay(10); + usleep(25); /* 25 milliseconds delay */ /* wait for Toggle bit ready */ toggle_ready_jedec(bios); @@ -193,18 +198,19 @@ /* Issue the JEDEC Chip Erase command */ *(volatile uint8_t *)(bios + 0x5555) = 0xAA; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x2AAA) = 0x55; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x5555) = 0x80; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x5555) = 0xAA; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x2AAA) = 0x55; - myusec_delay(10); + //myusec_delay(10); *(volatile uint8_t *)(bios + 0x5555) = 0x10; - myusec_delay(10); + //myusec_delay(10); + usleep(100); /* 100 milliseconds delay */ toggle_ready_jedec(bios); Index: flashrom-ich5-sst49lf004a/flashchips.c =================================================================== --- flashrom-ich5-sst49lf004a/flashchips.c (revision 3332) +++ flashrom-ich5-sst49lf004a/flashchips.c (working copy) @@ -85,7 +85,7 @@ // assume similar to 004B, ignoring data sheet {"SST", "SST49LF002A/B", SST_ID, SST_49LF002A, 256, 16 * 1024, TEST_UNTESTED, probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub}, {"SST", "SST49LF003A/B", SST_ID, SST_49LF003A, 384, 64 * 1024, TEST_UNTESTED, probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub}, - {"SST", "SST49LF004A/B", SST_ID, SST_49LF004A, 512, 64 * 1024, TEST_UNTESTED, probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub}, + {"SST", "SST49LF004A/B", SST_ID, SST_49LF004A, 512, 4096, TEST_UNTESTED, probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub}, {"SST", "SST49LF004C", SST_ID, SST_49LF004C, 512, 4 * 1024, TEST_UNTESTED, probe_49lfxxxc, erase_49lfxxxc, write_49lfxxxc}, {"SST", "SST49LF008A", SST_ID, SST_49LF008A, 1024, 64 * 1024, TEST_UNTESTED, probe_sst_fwhub, erase_sst_fwhub, write_sst_fwhub}, {"SST", "SST49LF008C", SST_ID, SST_49LF008C, 1024, 4 * 1024, TEST_UNTESTED, probe_49lfxxxc, erase_49lfxxxc, write_49lfxxxc},