mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 15:12:36 +02:00
Jedec.c was missing error handling in a few cases
Fix. jedec.c error handling used double negation in too many places for no good reason. Clean up. Corresponding to flashrom svn r779. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Sean Nelson <audiohacked@gmail.com>
This commit is contained in:
parent
411d7c1526
commit
2925d6f11d
40
jedec.c
40
jedec.c
@ -262,7 +262,7 @@ int erase_chip_jedec(struct flashchip *flash)
|
|||||||
int write_page_write_jedec(struct flashchip *flash, uint8_t *src,
|
int write_page_write_jedec(struct flashchip *flash, uint8_t *src,
|
||||||
int start, int page_size)
|
int start, int page_size)
|
||||||
{
|
{
|
||||||
int i, tried = 0, ok;
|
int i, tried = 0, failed;
|
||||||
uint8_t *s = src;
|
uint8_t *s = src;
|
||||||
chipaddr bios = flash->virtual_memory;
|
chipaddr bios = flash->virtual_memory;
|
||||||
chipaddr dst = bios + start;
|
chipaddr dst = bios + start;
|
||||||
@ -287,27 +287,27 @@ retry:
|
|||||||
|
|
||||||
dst = d;
|
dst = d;
|
||||||
src = s;
|
src = s;
|
||||||
ok = !verify_range(flash, src, start, page_size, NULL);
|
failed = verify_range(flash, src, start, page_size, NULL);
|
||||||
|
|
||||||
if (!ok && tried++ < MAX_REFLASH_TRIES) {
|
if (failed && tried++ < MAX_REFLASH_TRIES) {
|
||||||
fprintf(stderr, "retrying.\n");
|
fprintf(stderr, "retrying.\n");
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
if (!ok) {
|
if (failed) {
|
||||||
fprintf(stderr, " page 0x%lx failed!\n",
|
fprintf(stderr, " page 0x%lx failed!\n",
|
||||||
(d - bios) / page_size);
|
(d - bios) / page_size);
|
||||||
}
|
}
|
||||||
return !ok;
|
return failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
int write_byte_program_jedec(chipaddr bios, uint8_t *src,
|
int write_byte_program_jedec(chipaddr bios, uint8_t *src,
|
||||||
chipaddr dst)
|
chipaddr dst)
|
||||||
{
|
{
|
||||||
int tried = 0, ok = 1;
|
int tried = 0, failed = 0;
|
||||||
|
|
||||||
/* If the data is 0xFF, don't program it */
|
/* If the data is 0xFF, don't program it and don't complain. */
|
||||||
if (*src == 0xFF) {
|
if (*src == 0xFF) {
|
||||||
return -1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
@ -325,27 +325,32 @@ retry:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (tried >= MAX_REFLASH_TRIES)
|
if (tried >= MAX_REFLASH_TRIES)
|
||||||
ok = 0;
|
failed = 1;
|
||||||
|
|
||||||
return !ok;
|
return failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
int write_sector_jedec(chipaddr bios, uint8_t *src,
|
int write_sector_jedec(chipaddr bios, uint8_t *src,
|
||||||
chipaddr dst, unsigned int page_size)
|
chipaddr dst, unsigned int page_size)
|
||||||
{
|
{
|
||||||
int i;
|
int i, failed = 0;
|
||||||
|
chipaddr olddst;
|
||||||
|
|
||||||
|
olddst = dst;
|
||||||
for (i = 0; i < page_size; i++) {
|
for (i = 0; i < page_size; i++) {
|
||||||
write_byte_program_jedec(bios, src, dst);
|
if (write_byte_program_jedec(bios, src, dst))
|
||||||
|
failed = 1;
|
||||||
dst++, src++;
|
dst++, src++;
|
||||||
}
|
}
|
||||||
|
if (failed)
|
||||||
|
fprintf(stderr, " writing sector at 0x%lx failed!\n", olddst);
|
||||||
|
|
||||||
return 0;
|
return failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
int write_jedec(struct flashchip *flash, uint8_t *buf)
|
int write_jedec(struct flashchip *flash, uint8_t *buf)
|
||||||
{
|
{
|
||||||
int i;
|
int i, failed = 0;
|
||||||
int total_size = flash->total_size * 1024;
|
int total_size = flash->total_size * 1024;
|
||||||
int page_size = flash->page_size;
|
int page_size = flash->page_size;
|
||||||
chipaddr bios = flash->virtual_memory;
|
chipaddr bios = flash->virtual_memory;
|
||||||
@ -358,12 +363,13 @@ int write_jedec(struct flashchip *flash, uint8_t *buf)
|
|||||||
printf("Programming page: ");
|
printf("Programming page: ");
|
||||||
for (i = 0; i < total_size / page_size; i++) {
|
for (i = 0; i < total_size / page_size; i++) {
|
||||||
printf("%04d at address: 0x%08x", i, i * page_size);
|
printf("%04d at address: 0x%08x", i, i * page_size);
|
||||||
write_page_write_jedec(flash, buf + i * page_size,
|
if (write_page_write_jedec(flash, buf + i * page_size,
|
||||||
i * page_size, page_size);
|
i * page_size, page_size))
|
||||||
|
failed = 1;
|
||||||
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
|
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
protect_jedec(bios);
|
protect_jedec(bios);
|
||||||
|
|
||||||
return 0;
|
return failed;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user