mirror of
https://review.coreboot.org/flashrom.git
synced 2025-07-02 14:33:18 +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:
45
jedec.c
45
jedec.c
@ -93,9 +93,9 @@ void data_polling_jedec(const struct flashctx *flash, chipaddr dst,
|
||||
msg_cdbg("%s: excessive loops, i=0x%x\n", __func__, i);
|
||||
}
|
||||
|
||||
static unsigned int getaddrmask(struct flashctx *flash)
|
||||
static unsigned int getaddrmask(const struct flashchip *chip)
|
||||
{
|
||||
switch (flash->feature_bits & FEATURE_ADDR_MASK) {
|
||||
switch (chip->feature_bits & FEATURE_ADDR_MASK) {
|
||||
case FEATURE_ADDR_FULL:
|
||||
return MASK_FULL;
|
||||
break;
|
||||
@ -124,16 +124,17 @@ static void start_program_jedec_common(struct flashctx *flash,
|
||||
static int probe_jedec_common(struct flashctx *flash, unsigned int mask)
|
||||
{
|
||||
chipaddr bios = flash->virtual_memory;
|
||||
const struct flashchip *chip = flash->chip;
|
||||
uint8_t id1, id2;
|
||||
uint32_t largeid1, largeid2;
|
||||
uint32_t flashcontent1, flashcontent2;
|
||||
int probe_timing_enter, probe_timing_exit;
|
||||
|
||||
if (flash->probe_timing > 0)
|
||||
probe_timing_enter = probe_timing_exit = flash->probe_timing;
|
||||
else if (flash->probe_timing == TIMING_ZERO) { /* No delay. */
|
||||
if (chip->probe_timing > 0)
|
||||
probe_timing_enter = probe_timing_exit = chip->probe_timing;
|
||||
else if (chip->probe_timing == TIMING_ZERO) { /* No delay. */
|
||||
probe_timing_enter = probe_timing_exit = 0;
|
||||
} else if (flash->probe_timing == TIMING_FIXME) { /* == _IGNORED */
|
||||
} else if (chip->probe_timing == TIMING_FIXME) { /* == _IGNORED */
|
||||
msg_cdbg("Chip lacks correct probe timing information, "
|
||||
"using default 10mS/40uS. ");
|
||||
probe_timing_enter = 10000;
|
||||
@ -151,7 +152,7 @@ static int probe_jedec_common(struct flashctx *flash, unsigned int mask)
|
||||
if (probe_timing_enter)
|
||||
programmer_delay(probe_timing_enter);
|
||||
/* Reset chip to a clean slate */
|
||||
if ((flash->feature_bits & FEATURE_RESET_MASK) == FEATURE_LONG_RESET)
|
||||
if ((chip->feature_bits & FEATURE_RESET_MASK) == FEATURE_LONG_RESET)
|
||||
{
|
||||
chip_writeb(flash, 0xAA, bios + (0x5555 & mask));
|
||||
if (probe_timing_exit)
|
||||
@ -194,7 +195,7 @@ static int probe_jedec_common(struct flashctx *flash, unsigned int mask)
|
||||
}
|
||||
|
||||
/* Issue JEDEC Product ID Exit command */
|
||||
if ((flash->feature_bits & FEATURE_RESET_MASK) == FEATURE_LONG_RESET)
|
||||
if ((chip->feature_bits & FEATURE_RESET_MASK) == FEATURE_LONG_RESET)
|
||||
{
|
||||
chip_writeb(flash, 0xAA, bios + (0x5555 & mask));
|
||||
if (probe_timing_exit)
|
||||
@ -231,10 +232,10 @@ static int probe_jedec_common(struct flashctx *flash, unsigned int mask)
|
||||
msg_cdbg(", id2 is normal flash content");
|
||||
|
||||
msg_cdbg("\n");
|
||||
if (largeid1 != flash->manufacture_id || largeid2 != flash->model_id)
|
||||
if (largeid1 != chip->manufacture_id || largeid2 != chip->model_id)
|
||||
return 0;
|
||||
|
||||
if (flash->feature_bits & FEATURE_REGISTERMAP)
|
||||
if (chip->feature_bits & FEATURE_REGISTERMAP)
|
||||
map_flash_registers(flash);
|
||||
|
||||
return 1;
|
||||
@ -245,7 +246,7 @@ static int erase_sector_jedec_common(struct flashctx *flash, unsigned int page,
|
||||
{
|
||||
chipaddr bios = flash->virtual_memory;
|
||||
int delay_us = 0;
|
||||
if(flash->probe_timing != TIMING_ZERO)
|
||||
if(flash->chip->probe_timing != TIMING_ZERO)
|
||||
delay_us = 10;
|
||||
|
||||
/* Issue the Sector Erase command */
|
||||
@ -275,7 +276,7 @@ static int erase_block_jedec_common(struct flashctx *flash, unsigned int block,
|
||||
{
|
||||
chipaddr bios = flash->virtual_memory;
|
||||
int delay_us = 0;
|
||||
if(flash->probe_timing != TIMING_ZERO)
|
||||
if(flash->chip->probe_timing != TIMING_ZERO)
|
||||
delay_us = 10;
|
||||
|
||||
/* Issue the Sector Erase command */
|
||||
@ -304,7 +305,7 @@ static int erase_chip_jedec_common(struct flashctx *flash, unsigned int mask)
|
||||
{
|
||||
chipaddr bios = flash->virtual_memory;
|
||||
int delay_us = 0;
|
||||
if(flash->probe_timing != TIMING_ZERO)
|
||||
if(flash->chip->probe_timing != TIMING_ZERO)
|
||||
delay_us = 10;
|
||||
|
||||
/* Issue the JEDEC Chip Erase command */
|
||||
@ -366,7 +367,7 @@ int write_jedec_1(struct flashctx *flash, uint8_t *src, unsigned int start,
|
||||
chipaddr olddst;
|
||||
unsigned int mask;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
mask = getaddrmask(flash->chip);
|
||||
|
||||
olddst = dst;
|
||||
for (i = 0; i < len; i++) {
|
||||
@ -390,7 +391,7 @@ int write_page_write_jedec_common(struct flashctx *flash, uint8_t *src,
|
||||
chipaddr d = dst;
|
||||
unsigned int mask;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
mask = getaddrmask(flash->chip);
|
||||
|
||||
retry:
|
||||
/* Issue JEDEC Start Program command */
|
||||
@ -438,7 +439,7 @@ int write_jedec(struct flashctx *flash, uint8_t *buf, unsigned int start,
|
||||
* write_jedec have page_size set to max_writechunk_size, so
|
||||
* we're OK for now.
|
||||
*/
|
||||
unsigned int page_size = flash->page_size;
|
||||
unsigned int page_size = flash->chip->page_size;
|
||||
|
||||
/* Warning: This loop has a very unusual condition and body.
|
||||
* The loop needs to go through each page with at least one affected
|
||||
@ -469,8 +470,8 @@ int erase_chip_block_jedec(struct flashctx *flash, unsigned int addr,
|
||||
{
|
||||
unsigned int mask;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
if ((addr != 0) || (blocksize != flash->total_size * 1024)) {
|
||||
mask = getaddrmask(flash->chip);
|
||||
if ((addr != 0) || (blocksize != flash->chip->total_size * 1024)) {
|
||||
msg_cerr("%s called with incorrect arguments\n",
|
||||
__func__);
|
||||
return -1;
|
||||
@ -482,7 +483,7 @@ int probe_jedec(struct flashctx *flash)
|
||||
{
|
||||
unsigned int mask;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
mask = getaddrmask(flash->chip);
|
||||
return probe_jedec_common(flash, mask);
|
||||
}
|
||||
|
||||
@ -491,7 +492,7 @@ int erase_sector_jedec(struct flashctx *flash, unsigned int page,
|
||||
{
|
||||
unsigned int mask;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
mask = getaddrmask(flash->chip);
|
||||
return erase_sector_jedec_common(flash, page, size, mask);
|
||||
}
|
||||
|
||||
@ -500,7 +501,7 @@ int erase_block_jedec(struct flashctx *flash, unsigned int page,
|
||||
{
|
||||
unsigned int mask;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
mask = getaddrmask(flash->chip);
|
||||
return erase_block_jedec_common(flash, page, size, mask);
|
||||
}
|
||||
|
||||
@ -508,6 +509,6 @@ int erase_chip_jedec(struct flashctx *flash)
|
||||
{
|
||||
unsigned int mask;
|
||||
|
||||
mask = getaddrmask(flash);
|
||||
mask = getaddrmask(flash->chip);
|
||||
return erase_chip_jedec_common(flash, mask);
|
||||
}
|
||||
|
Reference in New Issue
Block a user