From 52c5d88da9e06edcb5d1b2cc3bef42b09e6988dd Mon Sep 17 00:00:00 2001 From: Ralph Hempel Date: Tue, 30 Mar 2010 16:17:38 +0000 Subject: [uboot-lantiq] httpd failsafe - add image check and flash access git-svn-id: svn://svn.openwrt.org/openwrt/trunk@20610 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../files/board/infineon/easy50712/danube.c | 66 +++---------------- .../files/board/infineon/easy50812/ar9.c | 73 ++++------------------ 2 files changed, 23 insertions(+), 116 deletions(-) (limited to 'package/uboot-lantiq/files') diff --git a/package/uboot-lantiq/files/board/infineon/easy50712/danube.c b/package/uboot-lantiq/files/board/infineon/easy50712/danube.c index f9b2b7626c..0b33a3ad4c 100644 --- a/package/uboot-lantiq/files/board/infineon/easy50712/danube.c +++ b/package/uboot-lantiq/files/board/infineon/easy50712/danube.c @@ -340,69 +340,22 @@ int board_eth_init(bd_t *bis) } #if defined(CONFIG_CMD_HTTPD) -static int image_info (ulong addr) -{ - void *hdr = (void *)addr; - - printf ("\n## Checking Image at %08lx ...\n", addr); - - switch (genimg_get_format (hdr)) { - case IMAGE_FORMAT_LEGACY: - puts (" Legacy image found\n"); - if (!image_check_magic (hdr)) { - puts (" Bad Magic Number\n"); - return 1; - } - - if (!image_check_hcrc (hdr)) { - puts (" Bad Header Checksum\n"); - return 1; - } - - image_print_contents (hdr); - - puts (" Verifying Checksum ... "); - if (!image_check_dcrc (hdr)) { - puts (" Bad Data CRC\n"); - return 1; - } - puts ("OK\n"); - return 0; -#if defined(CONFIG_FIT) - case IMAGE_FORMAT_FIT: - puts (" FIT image found\n"); - - if (!fit_check_format (hdr)) { - puts ("Bad FIT image format!\n"); - return 1; - } - - fit_print_contents (hdr); - - if (!fit_all_image_check_hashes (hdr)) { - puts ("Bad hash in FIT image!\n"); - return 1; - } - - return 0; -#endif - default: - puts ("Unknown image format!\n"); - break; - } - - return 1; -} - int do_http_upgrade(const unsigned char *data, const ulong size) { + char buf[128]; + + if(getenv ("ram_addr") == NULL) + return -1; + if(getenv ("kernel_addr") == NULL) + return -1; /* check the image */ - if(image_info(data)) { + if(run_command("imi ${ram_addr}", 0) < 0) { return -1; } /* write the image to the flash */ puts("http ugrade ...\n"); - return 0; + sprintf(buf, "era ${kernel_addr} +0x%x; cp.b ${ram_addr} ${kernel_addr} 0x%x", size, size); + return run_command(buf, 0); } int do_http_progress(const int state) @@ -413,6 +366,7 @@ int do_http_progress(const int state) puts("http start\n"); break; case HTTP_PROGRESS_TIMEOUT: + puts("."); break; case HTTP_PROGRESS_UPLOAD_READY: puts("http upload ready\n"); diff --git a/package/uboot-lantiq/files/board/infineon/easy50812/ar9.c b/package/uboot-lantiq/files/board/infineon/easy50812/ar9.c index dd6be9bdf1..d4cd049afe 100644 --- a/package/uboot-lantiq/files/board/infineon/easy50812/ar9.c +++ b/package/uboot-lantiq/files/board/infineon/easy50812/ar9.c @@ -48,10 +48,10 @@ extern ulong ifx_get_cpuclk(void); #define ID_SAMURAI_1 0x0007 #define SAMURAI_ID_REG0 0xA0 #define SAMURAI_ID_REG1 0xA1 -#define ID_TANTOS 0x2599 +#define ID_TANTOS 0x2599 -#define RGMII_MODE 0 -#define MII_MODE 1 +#define RGMII_MODE 0 +#define MII_MODE 1 #define REV_MII_MODE 2 #define RED_MII_MODE_IC 3 /*Input clock */ #define RGMII_MODE_100MB 4 @@ -565,70 +565,22 @@ static int external_switch_init(void) #endif /* CONFIG_EXTRA_SWITCH */ #if defined(CONFIG_CMD_HTTPD) - -static int image_info (ulong addr) -{ - void *hdr = (void *)addr; - - printf ("\n## Checking Image at %08lx ...\n", addr); - - switch (genimg_get_format (hdr)) { - case IMAGE_FORMAT_LEGACY: - puts (" Legacy image found\n"); - if (!image_check_magic (hdr)) { - puts (" Bad Magic Number\n"); - return 1; - } - - if (!image_check_hcrc (hdr)) { - puts (" Bad Header Checksum\n"); - return 1; - } - - image_print_contents (hdr); - - puts (" Verifying Checksum ... "); - if (!image_check_dcrc (hdr)) { - puts (" Bad Data CRC\n"); - return 1; - } - puts ("OK\n"); - return 0; -#if defined(CONFIG_FIT) - case IMAGE_FORMAT_FIT: - puts (" FIT image found\n"); - - if (!fit_check_format (hdr)) { - puts ("Bad FIT image format!\n"); - return 1; - } - - fit_print_contents (hdr); - - if (!fit_all_image_check_hashes (hdr)) { - puts ("Bad hash in FIT image!\n"); - return 1; - } - - return 0; -#endif - default: - puts ("Unknown image format!\n"); - break; - } - - return 1; -} - int do_http_upgrade(const unsigned char *data, const ulong size) { + char buf[128]; + + if(getenv ("ram_addr") == NULL) + return -1; + if(getenv ("kernel_addr") == NULL) + return -1; /* check the image */ - if(image_info(data)) { + if(run_command("imi ${ram_addr}", 0) < 0) { return -1; } /* write the image to the flash */ puts("http ugrade ...\n"); - return 0; + sprintf(buf, "era ${kernel_addr} +0x%x; cp.b ${ram_addr} ${kernel_addr} 0x%x", size, size); + return run_command(buf, 0); } int do_http_progress(const int state) @@ -639,6 +591,7 @@ int do_http_progress(const int state) puts("http start\n"); break; case HTTP_PROGRESS_TIMEOUT: + puts("."); break; case HTTP_PROGRESS_UPLOAD_READY: puts("http upload ready\n"); -- cgit v1.2.3