Commit f5a30f65 authored by David Borg's avatar David Borg Committed by Uwe Hermann
Browse files

Add support for for the Atmel AT49F040 chip


Chip features an optional permanent boot block write protection.

Corresponding to flashrom svn r1522.
Signed-off-by: default avatarDavid Borg <borg.db@gmail.com>
Signed-off-by: default avatarStefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: default avatarUwe Hermann <uwe@hermann-uwe.de>
parent 47eff6b5
......@@ -149,6 +149,7 @@ int printlock_w39v080fa(struct flashctx *flash);
int printlock_w39v080fa_dual(struct flashctx *flash);
int unlock_w39v040fb(struct flashctx *flash);
int unlock_w39v080fa(struct flashctx *flash);
int printlock_at49f(struct flashctx *flash);
/* w29ee011.c */
int probe_w29ee011(struct flashctx *flash);
......
......@@ -2226,19 +2226,27 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
.name = "AT49F020",
.name = "AT49F002(N)",
.bustype = BUS_PARALLEL,
.manufacture_id = ATMEL_ID,
.model_id = ATMEL_AT49F020,
.model_id = ATMEL_AT49F002N,
.total_size = 256,
.page_size = 256,
.feature_bits = FEATURE_EITHER_RESET,
.tested = TEST_OK_PRE,
.tested = TEST_UNTESTED,
.probe = probe_jedec,
.probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
.eraseblocks = {
{16 * 1024, 1},
{8 * 1024, 2},
{96 * 1024, 1},
{128 * 1024, 1},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {256 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
}
......@@ -2250,24 +2258,24 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
.name = "AT49F002(N)",
.name = "AT49F002(N)T",
.bustype = BUS_PARALLEL,
.manufacture_id = ATMEL_ID,
.model_id = ATMEL_AT49F002N,
.model_id = ATMEL_AT49F002NT,
.total_size = 256,
.page_size = 256,
.feature_bits = FEATURE_EITHER_RESET,
.tested = TEST_UNTESTED,
.tested = TEST_OK_PR,
.probe = probe_jedec,
.probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
.eraseblocks = {
{16 * 1024, 1},
{8 * 1024, 2},
{96 * 1024, 1},
{128 * 1024, 1},
{96 * 1024, 1},
{8 * 1024, 2},
{16 * 1024, 1},
},
.block_erase = erase_sector_jedec,
}, {
......@@ -2282,31 +2290,61 @@ const struct flashchip flashchips[] = {
{
.vendor = "Atmel",
.name = "AT49F002(N)T",
.name = "AT49F020",
.bustype = BUS_PARALLEL,
.manufacture_id = ATMEL_ID,
.model_id = ATMEL_AT49F002NT,
.model_id = ATMEL_AT49F020,
.total_size = 256,
.page_size = 256,
.feature_bits = FEATURE_EITHER_RESET,
.tested = TEST_OK_PR,
.tested = TEST_OK_PRE,
.probe = probe_jedec,
.probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
.eraseblocks = {
{128 * 1024, 1},
{96 * 1024, 1},
{8 * 1024, 2},
{16 * 1024, 1},
},
.block_erase = erase_sector_jedec,
}, {
.eraseblocks = { {256 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
}
/* Chip features an optional permanent write protection
* of the first 8 kB. The erase function is the same as
* above, but 00000H to 01FFFH will not be erased.
* FIXME: add another eraser when partial erasers are
* supported.
*/
},
.printlock = printlock_at49f,
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {4500, 5500},
},
{
.vendor = "Atmel",
.name = "AT49F040",
.bustype = BUS_PARALLEL,
.manufacture_id = ATMEL_ID,
.model_id = ATMEL_AT49F040,
.total_size = 512,
.page_size = 512,
.feature_bits = FEATURE_EITHER_RESET,
.tested = TEST_UNTESTED,
.probe = probe_jedec,
.probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
{
.eraseblocks = { {512 * 1024, 1} },
.block_erase = erase_chip_block_jedec,
}
/* Chip features an optional permanent write protection
* of the first 16 kB. The erase function is the same as
* above, but 00000H to 03FFFH will not be erased.
* FIXME: add another eraser when partial erasers are
* supported.
*/
},
.printlock = printlock_at49f,
.write = write_jedec_1,
.read = read_memmapped,
.voltage = {4500, 5500},
......
......@@ -184,10 +184,11 @@
#define ATMEL_AT45DB642 /* No ID available */
#define ATMEL_AT45DB642D 0x2800
#define ATMEL_AT49BV512 0x03
#define ATMEL_AT49F020 0x0B
#define ATMEL_AT49F002N 0x07 /* for AT49F002(N) */
#define ATMEL_AT49F002NT 0x08 /* for AT49F002(N)T */
#define ATMEL_AT49LH002 0xE9
#define ATMEL_AT49F002NT 0x08 /* for AT49F002(N)T */
#define ATMEL_AT49F020 0x0B
#define ATMEL_AT49F040 0x13
/* Bright Microelectronics has the same manufacturer ID as Hyundai... */
#define BRIGHT_ID 0xAD /* Bright Microelectronics */
......
......@@ -278,3 +278,11 @@ int unlock_w39v080fa(struct flashctx *flash)
return 0;
}
int printlock_at49f(struct flashctx *flash)
{
uint8_t lock = w39_idmode_readb(flash, 0x00002);
msg_cdbg("Hardware bootblock lockout is %sactive.\n",
(lock & 0x01) ? "" : "not ");
return 0;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment