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

Make struct flashchip a field in struct flashctx instead of a complete copy

All the driver conversion work and cleanup has been done by Stefan.
flashrom.c and cli_classic.c are a joint work of Stefan and Carl-Daniel.

Corresponding to flashrom svn r1579.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
This commit is contained in:
Carl-Daniel Hailfinger
2012-08-25 01:17:58 +00:00
parent dd73d830f7
commit 5a7cb847f0
23 changed files with 263 additions and 277 deletions

32
sfdp.c
View File

@ -81,10 +81,10 @@ struct sfdp_tbl_hdr {
uint32_t ptp; /* 24b pointer */
};
static int sfdp_add_uniform_eraser(struct flashctx *flash, uint8_t opcode, uint32_t block_size)
static int sfdp_add_uniform_eraser(struct flashchip *chip, uint8_t opcode, uint32_t block_size)
{
int i;
uint32_t total_size = flash->total_size * 1024;
uint32_t total_size = chip->total_size * 1024;
erasefunc_t *erasefn = spi_get_erasefn_from_opcode(opcode);
if (erasefn == NULL || total_size == 0 || block_size == 0 ||
@ -95,7 +95,7 @@ static int sfdp_add_uniform_eraser(struct flashctx *flash, uint8_t opcode, uint3
}
for (i = 0; i < NUM_ERASEFUNCTIONS; i++) {
struct block_eraser *eraser = &flash->block_erasers[i];
struct block_eraser *eraser = &chip->block_erasers[i];
/* Check for duplicates (including (some) non-uniform ones). */
if (eraser->eraseblocks[0].size == block_size &&
eraser->block_erase == erasefn) {
@ -125,7 +125,7 @@ static int sfdp_add_uniform_eraser(struct flashctx *flash, uint8_t opcode, uint3
return 1;
}
static int sfdp_fill_flash(struct flashctx *flash, uint8_t *buf, uint16_t len)
static int sfdp_fill_flash(struct flashchip *chip, uint8_t *buf, uint16_t len)
{
uint8_t opcode_4k_erase = 0xFF;
uint32_t tmp32;
@ -170,28 +170,28 @@ static int sfdp_fill_flash(struct flashctx *flash, uint8_t *buf, uint16_t len)
msg_cdbg2("volatile and writes to the status register have to "
"be enabled with ");
if (tmp32 & (1 << 4)) {
flash->feature_bits = FEATURE_WRSR_WREN;
chip->feature_bits = FEATURE_WRSR_WREN;
msg_cdbg2("WREN (0x06).\n");
} else {
flash->feature_bits = FEATURE_WRSR_EWSR;
chip->feature_bits = FEATURE_WRSR_EWSR;
msg_cdbg2("EWSR (0x50).\n");
}
} else {
msg_cdbg2("non-volatile and the standard does not allow "
"vendors to tell us whether EWSR/WREN is needed for "
"status register writes - assuming EWSR.\n");
flash->feature_bits = FEATURE_WRSR_EWSR;
chip->feature_bits = FEATURE_WRSR_EWSR;
}
msg_cdbg2(" Write chunk size is ");
if (tmp32 & (1 << 2)) {
msg_cdbg2("at least 64 B.\n");
flash->page_size = 64;
flash->write = spi_chip_write_256;
chip->page_size = 64;
chip->write = spi_chip_write_256;
} else {
msg_cdbg2("1 B only.\n");
flash->page_size = 256;
flash->write = spi_chip_write_1;
chip->page_size = 256;
chip->write = spi_chip_write_1;
}
if ((tmp32 & 0x3) == 0x1) {
@ -212,8 +212,8 @@ static int sfdp_fill_flash(struct flashctx *flash, uint8_t *buf, uint16_t len)
return 1;
}
total_size = ((tmp32 & 0x7FFFFFFF) + 1) / 8;
flash->total_size = total_size / 1024;
msg_cdbg2(" Flash chip size is %d kB.\n", flash->total_size);
chip->total_size = total_size / 1024;
msg_cdbg2(" Flash chip size is %d kB.\n", chip->total_size);
if (total_size > (1 << 24)) {
msg_cdbg("Flash chip size is bigger than what 3-Byte addressing "
"can access.\n");
@ -221,7 +221,7 @@ static int sfdp_fill_flash(struct flashctx *flash, uint8_t *buf, uint16_t len)
}
if (opcode_4k_erase != 0xFF)
sfdp_add_uniform_eraser(flash, opcode_4k_erase, 4 * 1024);
sfdp_add_uniform_eraser(chip, opcode_4k_erase, 4 * 1024);
/* FIXME: double words 3-7 contain unused fast read information */
@ -252,7 +252,7 @@ static int sfdp_fill_flash(struct flashctx *flash, uint8_t *buf, uint16_t len)
tmp8 = buf[(4 * 7) + (j * 2) + 1];
msg_cspew(" Erase Sector Type %d Opcode: 0x%02x\n", j + 1,
tmp8);
sfdp_add_uniform_eraser(flash, tmp8, block_size);
sfdp_add_uniform_eraser(chip, tmp8, block_size);
}
done:
@ -381,7 +381,7 @@ int probe_spi_sfdp(struct flashctx *flash)
msg_cdbg("Length of the mandatory JEDEC SFDP "
"parameter table is wrong (%d B), "
"skipping it.\n", len);
} else if (sfdp_fill_flash(flash, tbuf, len) == 0)
} else if (sfdp_fill_flash(flash->chip, tbuf, len) == 0)
ret = 1;
}
free(tbuf);