1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-07-01 22:21:16 +02:00

jedec.c: Consolidate op,operand sequencing into func

Change-Id: I9a1b211b49777f6d7f62a052975c1759e036c8df
Signed-off-by: Edward O'Callaghan <quasisec@google.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/72502
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Edward O'Callaghan
2023-01-29 12:19:47 +11:00
committed by Edward O'Callaghan
parent 03c36be3b6
commit 1ac468e663

81
jedec.c
View File

@ -280,30 +280,31 @@ int probe_jedec(struct flashctx *flash)
return 1;
}
int erase_sector_jedec(struct flashctx *flash, unsigned int page, unsigned int size)
static void issuecmd(const struct flashctx *flash, uint8_t op, unsigned int operand)
{
chipaddr bios = flash->virtual_memory;
const chipaddr bios = flash->virtual_memory;
bool shifted = (flash->chip->feature_bits & FEATURE_ADDR_SHIFTED);
const unsigned int mask = getaddrmask(flash->chip);
unsigned int delay_us = 0;
unsigned int delay_us = (flash->chip->probe_timing == TIMING_ZERO) ? 0 : 10;
if(flash->chip->probe_timing != TIMING_ZERO)
delay_us = 10;
if (!operand)
operand = (shifted ? 0x2AAA : 0x5555) & mask;
chip_writeb(flash, 0xAA, bios + ((shifted ? 0x2AAA : 0x5555) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0x55, bios + ((shifted ? 0x5555 : 0x2AAA) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, op, bios + operand);
programmer_delay(flash, delay_us);
}
int erase_sector_jedec(struct flashctx *flash, unsigned int page, unsigned int size)
{
const chipaddr bios = flash->virtual_memory;
/* Issue the Sector Erase command */
chip_writeb(flash, 0xAA, bios + ((shifted ? 0x2AAA : 0x5555) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0x55, bios + ((shifted ? 0x5555 : 0x2AAA) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0x80, bios + ((shifted ? 0x2AAA : 0x5555) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0xAA, bios + ((shifted ? 0x2AAA : 0x5555) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0x55, bios + ((shifted ? 0x5555 : 0x2AAA) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0x30, bios + page);
programmer_delay(flash, delay_us);
issuecmd(flash, 0x80, 0);
issuecmd(flash, 0x30, page);
/* wait for Toggle bit ready */
toggle_ready_jedec_slow(flash, bios);
@ -314,28 +315,11 @@ int erase_sector_jedec(struct flashctx *flash, unsigned int page, unsigned int s
int erase_block_jedec(struct flashctx *flash, unsigned int block, unsigned int size)
{
chipaddr bios = flash->virtual_memory;
bool shifted = (flash->chip->feature_bits & FEATURE_ADDR_SHIFTED);
const unsigned int mask = getaddrmask(flash->chip);
unsigned int delay_us = 0;
if(flash->chip->probe_timing != TIMING_ZERO)
delay_us = 10;
const chipaddr bios = flash->virtual_memory;
/* Issue the Sector Erase command */
chip_writeb(flash, 0xAA, bios + ((shifted ? 0x2AAA : 0x5555) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0x55, bios + ((shifted ? 0x5555 : 0x2AAA) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0x80, bios + ((shifted ? 0x2AAA : 0x5555) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0xAA, bios + ((shifted ? 0x2AAA : 0x5555) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0x55, bios + ((shifted ? 0x5555 : 0x2AAA) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0x50, bios + block);
programmer_delay(flash, delay_us);
issuecmd(flash, 0x80, 0);
issuecmd(flash, 0x50, block);
/* wait for Toggle bit ready */
toggle_ready_jedec_slow(flash, bios);
@ -347,10 +331,7 @@ int erase_block_jedec(struct flashctx *flash, unsigned int block, unsigned int s
/* erase chip with block_erase() prototype */
int erase_chip_block_jedec(struct flashctx *flash, unsigned int addr, unsigned int blocksize)
{
const unsigned int mask = getaddrmask(flash->chip);
const chipaddr bios = flash->virtual_memory;
const bool shifted = (flash->chip->feature_bits & FEATURE_ADDR_SHIFTED);
unsigned int delay_us = 0;
if ((addr != 0) || (blocksize != flash->chip->total_size * 1024)) {
msg_cerr("%s called with incorrect arguments\n",
@ -358,23 +339,9 @@ int erase_chip_block_jedec(struct flashctx *flash, unsigned int addr, unsigned i
return -1;
}
if(flash->chip->probe_timing != TIMING_ZERO)
delay_us = 10;
/* Issue the JEDEC Chip Erase command */
chip_writeb(flash, 0xAA, bios + ((shifted ? 0x2AAA : 0x5555) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0x55, bios + ((shifted ? 0x5555 : 0x2AAA) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0x80, bios + ((shifted ? 0x2AAA : 0x5555) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0xAA, bios + ((shifted ? 0x2AAA : 0x5555) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0x55, bios + ((shifted ? 0x5555 : 0x2AAA) & mask));
programmer_delay(flash, delay_us);
chip_writeb(flash, 0x10, bios + ((shifted ? 0x2AAA : 0x5555) & mask));
programmer_delay(flash, delay_us);
issuecmd(flash, 0x80, 0);
issuecmd(flash, 0x10, 0);
toggle_ready_jedec_slow(flash, bios);