mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-19 08:39:43 +02:00
[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
This commit is contained in:
parent
05c930e80a
commit
ced0222eb7
@ -84,7 +84,7 @@ define Package/uboot-lantiq/install
|
|||||||
of=$(1)/$(UBOOT_CONFIG)/u-boot.bin \
|
of=$(1)/$(UBOOT_CONFIG)/u-boot.bin \
|
||||||
bs=64k conv=sync
|
bs=64k conv=sync
|
||||||
ifeq ($(CONFIG_UBOOT_RAMBOOT),y)
|
ifeq ($(CONFIG_UBOOT_RAMBOOT),y)
|
||||||
if [ -e $(UBOOT_CONFIG).conf ]; then \
|
if [ -e $(UBOOT_DDR_CONFIG) ]; then \
|
||||||
perl ./gct \
|
perl ./gct \
|
||||||
$(UBOOT_DDR_CONFIG) \
|
$(UBOOT_DDR_CONFIG) \
|
||||||
$(PKG_BUILD_DIR)/$(UBOOT_CONFIG)_ramboot/u-boot.srec \
|
$(PKG_BUILD_DIR)/$(UBOOT_CONFIG)_ramboot/u-boot.srec \
|
||||||
|
@ -340,69 +340,22 @@ int board_eth_init(bd_t *bis)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_HTTPD)
|
#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)
|
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 */
|
/* check the image */
|
||||||
if(image_info(data)) {
|
if(run_command("imi ${ram_addr}", 0) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* write the image to the flash */
|
/* write the image to the flash */
|
||||||
puts("http ugrade ...\n");
|
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)
|
int do_http_progress(const int state)
|
||||||
@ -413,6 +366,7 @@ int do_http_progress(const int state)
|
|||||||
puts("http start\n");
|
puts("http start\n");
|
||||||
break;
|
break;
|
||||||
case HTTP_PROGRESS_TIMEOUT:
|
case HTTP_PROGRESS_TIMEOUT:
|
||||||
|
puts(".");
|
||||||
break;
|
break;
|
||||||
case HTTP_PROGRESS_UPLOAD_READY:
|
case HTTP_PROGRESS_UPLOAD_READY:
|
||||||
puts("http upload ready\n");
|
puts("http upload ready\n");
|
||||||
|
@ -48,10 +48,10 @@ extern ulong ifx_get_cpuclk(void);
|
|||||||
#define ID_SAMURAI_1 0x0007
|
#define ID_SAMURAI_1 0x0007
|
||||||
#define SAMURAI_ID_REG0 0xA0
|
#define SAMURAI_ID_REG0 0xA0
|
||||||
#define SAMURAI_ID_REG1 0xA1
|
#define SAMURAI_ID_REG1 0xA1
|
||||||
#define ID_TANTOS 0x2599
|
#define ID_TANTOS 0x2599
|
||||||
|
|
||||||
#define RGMII_MODE 0
|
#define RGMII_MODE 0
|
||||||
#define MII_MODE 1
|
#define MII_MODE 1
|
||||||
#define REV_MII_MODE 2
|
#define REV_MII_MODE 2
|
||||||
#define RED_MII_MODE_IC 3 /*Input clock */
|
#define RED_MII_MODE_IC 3 /*Input clock */
|
||||||
#define RGMII_MODE_100MB 4
|
#define RGMII_MODE_100MB 4
|
||||||
@ -565,70 +565,22 @@ static int external_switch_init(void)
|
|||||||
#endif /* CONFIG_EXTRA_SWITCH */
|
#endif /* CONFIG_EXTRA_SWITCH */
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_HTTPD)
|
#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)
|
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 */
|
/* check the image */
|
||||||
if(image_info(data)) {
|
if(run_command("imi ${ram_addr}", 0) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* write the image to the flash */
|
/* write the image to the flash */
|
||||||
puts("http ugrade ...\n");
|
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)
|
int do_http_progress(const int state)
|
||||||
@ -639,6 +591,7 @@ int do_http_progress(const int state)
|
|||||||
puts("http start\n");
|
puts("http start\n");
|
||||||
break;
|
break;
|
||||||
case HTTP_PROGRESS_TIMEOUT:
|
case HTTP_PROGRESS_TIMEOUT:
|
||||||
|
puts(".");
|
||||||
break;
|
break;
|
||||||
case HTTP_PROGRESS_UPLOAD_READY:
|
case HTTP_PROGRESS_UPLOAD_READY:
|
||||||
puts("http upload ready\n");
|
puts("http upload ready\n");
|
||||||
|
@ -165,7 +165,7 @@
|
|||||||
NetRxPacket = inpkt;
|
NetRxPacket = inpkt;
|
||||||
NetRxPacketLen = len;
|
NetRxPacketLen = len;
|
||||||
et = (Ethernet_t *)inpkt;
|
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)));
|
return (string_to_VLAN(getenv(var)));
|
||||||
}
|
}
|
||||||
@ -249,6 +249,8 @@
|
|||||||
+ NetArpWaitTxPacketSize = 0;
|
+ NetArpWaitTxPacketSize = 0;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
|
+restart:
|
||||||
|
+
|
||||||
+ eth_halt();
|
+ eth_halt();
|
||||||
+#ifdef CONFIG_NET_MULTI
|
+#ifdef CONFIG_NET_MULTI
|
||||||
+ eth_set_current();
|
+ eth_set_current();
|
||||||
@ -258,7 +260,6 @@
|
|||||||
+ return(-1);
|
+ return(-1);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+restart:
|
|
||||||
+#ifdef CONFIG_NET_MULTI
|
+#ifdef CONFIG_NET_MULTI
|
||||||
+ memcpy (NetOurEther, eth_get_dev()->enetaddr, 6);
|
+ memcpy (NetOurEther, eth_get_dev()->enetaddr, 6);
|
||||||
+#else
|
+#else
|
||||||
|
Loading…
Reference in New Issue
Block a user