From: Ralph Hempel Date: Tue, 30 Mar 2010 16:17:38 +0000 (+0000) Subject: [uboot-lantiq] httpd failsafe - add image check and flash access X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=commitdiff_plain;hb=bb709534dab8ca30a7e258b0a98bf24c019871d1 [uboot-lantiq] httpd failsafe - add image check and flash access SVN-Revision: 20610 --- diff --git a/package/uboot-lantiq/Makefile b/package/uboot-lantiq/Makefile index 48f4683161..985f3638ae 100644 --- a/package/uboot-lantiq/Makefile +++ b/package/uboot-lantiq/Makefile @@ -84,7 +84,7 @@ define Package/uboot-lantiq/install of=$(1)/$(UBOOT_CONFIG)/u-boot.bin \ bs=64k conv=sync ifeq ($(CONFIG_UBOOT_RAMBOOT),y) - if [ -e $(UBOOT_CONFIG).conf ]; then \ + if [ -e $(UBOOT_DDR_CONFIG) ]; then \ perl ./gct \ $(UBOOT_DDR_CONFIG) \ $(PKG_BUILD_DIR)/$(UBOOT_CONFIG)_ramboot/u-boot.srec \ 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"); diff --git a/package/uboot-lantiq/patches/300-httpd.patch b/package/uboot-lantiq/patches/300-httpd.patch index f9a81e90c6..25e84cde3e 100644 --- a/package/uboot-lantiq/patches/300-httpd.patch +++ b/package/uboot-lantiq/patches/300-httpd.patch @@ -165,7 +165,7 @@ NetRxPacket = inpkt; NetRxPacketLen = len; et = (Ethernet_t *)inpkt; -@@ -1952,3 +1972,161 @@ ushort getenv_VLAN(char *var) +@@ -1952,3 +1972,162 @@ ushort getenv_VLAN(char *var) { return (string_to_VLAN(getenv(var))); } @@ -249,6 +249,8 @@ + NetArpWaitTxPacketSize = 0; + } + ++restart: ++ + eth_halt(); +#ifdef CONFIG_NET_MULTI + eth_set_current(); @@ -258,7 +260,6 @@ + return(-1); + } + -+restart: +#ifdef CONFIG_NET_MULTI + memcpy (NetOurEther, eth_get_dev()->enetaddr, 6); +#else