Edward O'Callaghan has uploaded this change for review.
jedec.c: Rewrite control flow procedurally
Drop goto usage in fav of loop constructs.
Change-Id: I0927ed40e54cc7e114a57dc40e3614f4825a0ca9
Signed-off-by: Edward O'Callaghan <quasisec@google.com>
---
M jedec.c
1 file changed, 44 insertions(+), 34 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/08/72608/1
diff --git a/jedec.c b/jedec.c
index 123a397..3df9cf2 100644
--- a/jedec.c
+++ b/jedec.c
@@ -352,30 +352,27 @@
static int write_byte_program_jedec_common(const struct flashctx *flash, const uint8_t *src,
chipaddr dst, unsigned int mask)
{
- int tried = 0, failed = 0;
- chipaddr bios = flash->virtual_memory;
+ int tries = 0;
/* If the data is 0xFF, don't program it and don't complain. */
if (*src == 0xFF) {
return 0;
}
-retry:
- /* Issue JEDEC Byte Program command */
- start_program_jedec_common(flash, mask);
+ for (; tries < MAX_REFLASH_TRIES; tries++) {
+ const chipaddr bios = flash->virtual_memory;
+ /* Issue JEDEC Byte Program command */
+ start_program_jedec_common(flash, mask);
- /* transfer data from source to destination */
- chip_writeb(flash, *src, dst);
- toggle_ready_jedec(flash, bios);
+ /* transfer data from source to destination */
+ chip_writeb(flash, *src, dst);
+ toggle_ready_jedec(flash, bios);
- if (chip_readb(flash, dst) != *src && tried++ < MAX_REFLASH_TRIES) {
- goto retry;
+ if (chip_readb(flash, dst) == *src)
+ break;
}
- if (tried >= MAX_REFLASH_TRIES)
- failed = 1;
-
- return failed;
+ return (tries >= MAX_REFLASH_TRIES) ? 1 : 0;
}
/* chunksize is 1 */
@@ -404,40 +401,41 @@
static int write_page_write_jedec_common(struct flashctx *flash, const uint8_t *src,
unsigned int start, unsigned int page_size)
{
- unsigned int i;
- int tried = 0, failed;
+ int tries = 0, failed;
const uint8_t *s = src;
- chipaddr bios = flash->virtual_memory;
+ const chipaddr bios = flash->virtual_memory;
chipaddr dst = bios + start;
chipaddr d = dst;
const unsigned int mask = getaddrmask(flash->chip);
-retry:
- /* Issue JEDEC Start Program command */
- start_program_jedec_common(flash, mask);
+ for (; tries < MAX_REFLASH_TRIES; tries++) {
+ /* Issue JEDEC Start Program command */
+ start_program_jedec_common(flash, mask);
- /* transfer data from source to destination */
- for (i = 0; i < page_size; i++) {
- /* If the data is 0xFF, don't program it */
- if (*src != 0xFF)
- chip_writeb(flash, *src, dst);
- dst++;
- src++;
- }
+ /* transfer data from source to destination */
+ for (unsigned int i = 0; i < page_size; i++) {
+ /* If the data is 0xFF, don't program it */
+ if (*src != 0xFF)
+ chip_writeb(flash, *src, dst);
+ dst++;
+ src++;
+ }
- toggle_ready_jedec(flash, dst - 1);
+ toggle_ready_jedec(flash, dst - 1);
- dst = d;
- src = s;
- failed = verify_range(flash, src, start, page_size);
+ dst = d;
+ src = s;
+ failed = verify_range(flash, src, start, page_size);
+ if (!failed)
+ break;
- if (failed && tried++ < MAX_REFLASH_TRIES) {
msg_cerr("retrying.\n");
- goto retry;
}
+
if (failed) {
msg_cerr(" page 0x%" PRIxPTR " failed!\n", (d - bios) / page_size);
}
+
return failed;
}
To view, visit change 72608. To unsubscribe, or for help writing mail filters, visit settings.