diff options
Diffstat (limited to 'recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch')
-rw-r--r-- | recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch | 99 |
1 files changed, 0 insertions, 99 deletions
diff --git a/recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch b/recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch deleted file mode 100644 index 5d78703..0000000 --- a/recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch +++ /dev/null @@ -1,99 +0,0 @@ -# Print out the CRC's if debugging. -# Prevent the erasure of the environment. -# Allow the deliberate erasure of the environment with the -# clearenv command. -diff --git a/src/u_boot.c b/src/u_boot.c -index e240475..94f18ed 100644 ---- a/src/u_boot.c -+++ b/src/u_boot.c -@@ -64,6 +64,8 @@ static int write_uboot_env(const char *device, struct environment *env) - error("mtd_erase_all %s failed", device); - return -1; - } -+ if(env == NULL) -+ return 0; - - fd = open(device, O_WRONLY); - if (fd < 0) { -@@ -213,7 +215,7 @@ static int cmd_setenv(struct environment *env, int argc, char **argv) - } - - env->crc = crc32(0, (uint8_t *) env->data, sizeof(env->data)); -- dbg("crc: 0x%08X", env->crc); -+ dbg("Calculated crc: 0x%08X", env->crc); - env->flags = 0; - - tmp = write_uboot_env(MTD_ENV1, env); -@@ -252,6 +254,7 @@ int main(int argc, char *argv[]) { - struct environment *env2; - uint32_t crc1_ok; - uint32_t crc2_ok; -+ uint32_t mycrc; - - if (argc <= 1) { - usage(stderr); -@@ -301,12 +304,18 @@ int main(int argc, char *argv[]) { - error("read_uboot_env failed"); - return 1; - } -- dbg("env1 crc: 0x%08X", env1->crc); -+ dbg("env1 stored crc: 0x%08X", env1->crc); - dbg("env1 flags: %d", env1->flags); -- if (crc32(0, (uint8_t *) env1->data, sizeof(env1->data)) == env1->crc) { -+ mycrc = crc32(0, (uint8_t *) env1->data, sizeof(env1->data)); -+ if (mycrc == env1->crc) { - crc1_ok = 1; - } else { -- error("crc does not match on primary env"); -+ dbg("env1 stored crc 0x%x, calculated crc 0x%x",env1->crc,mycrc); -+ if(env1->flags != 255) -+ error("crc does not match on env1"); -+ else -+ dbg("uninitialized env1"); -+ - crc1_ok = 0; - } - -@@ -315,20 +324,27 @@ int main(int argc, char *argv[]) { - error("read_uboot_env failed"); - return 1; - } -- dbg("env2 crc: 0x%08X", env2->crc); -+ dbg("env2 stored crc: 0x%08X", env2->crc); - dbg("env2 flags: %d", env2->flags); -- if (crc32(0, (uint8_t *) env2->data, sizeof(env2->data)) == env2->crc) { -+ mycrc = crc32(0, (uint8_t *) env2->data, sizeof(env2->data)); -+ if (mycrc == env2->crc) { - crc2_ok = 1; - } else { -- error("crc does not match on redundant env"); -+ dbg("env2 stored crc 0x%x, calculated crc 0x%x",env2->crc,mycrc); -+ if(env2->flags != 255) -+ error("crc does not match on env2"); -+ else -+ dbg("uninitialized env2"); - crc2_ok = 0; - } - -- if (!crc1_ok && !crc2_ok) { -- error("both environments are bad: loading DEFAULT_ENV"); -+ if (!crc1_ok && !crc2_ok && env1->crc == 0xffffffff && -+ (env1->flags == 0xff) && (env2->flags == 0xff) && (env2->crc == 0xffffffff)) { -+ error("both environments are bad: not loading DEFAULT_ENV"); - env = env1; - env->flags = 0; - memcpy(env->data, DEFAULT_ENV, sizeof(DEFAULT_ENV)); -+ exit(1); - } else if (crc1_ok && !crc2_ok) { - env = env1; - } else if (!crc1_ok && crc2_ok) { -@@ -353,6 +369,9 @@ int main(int argc, char *argv[]) { - err = cmd_printenv(env, argc, argv); - } else if (!tokcmp(cmd, "setenv")) { - err = cmd_setenv(env, argc, argv); -+ } else if (!tokcmp(cmd, "clearenv")) { -+ (void)write_uboot_env(MTD_ENV1, NULL); -+ (void)write_uboot_env(MTD_ENV2, NULL); - } else { - usage(stderr); - exit(1); |