httpd failsafe - add image check and flash access
authorRalph Hempel <ralph.hempel@lantiq.com>
Tue, 30 Mar 2010 16:17:38 +0000 (16:17 +0000)
committerRalph Hempel <ralph.hempel@lantiq.com>
Tue, 30 Mar 2010 16:17:38 +0000 (16:17 +0000)
SVN-Revision: 20610

package/uboot-lantiq/Makefile
package/uboot-lantiq/files/board/infineon/easy50712/danube.c
package/uboot-lantiq/files/board/infineon/easy50812/ar9.c
package/uboot-lantiq/patches/300-httpd.patch

index 48f46831613b7a362d8775b54af26e363028fe97..985f3638ae3da2f8ecfa6f0da396caf6c4821089 100644 (file)
@@ -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 \
index f9b2b7626ccc1fcf02d14c56edba75278876f567..0b33a3ad4c9b736443a5126ce814fbae059bb9ea 100644 (file)
@@ -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");
index dd6be9bdf184e9a2faa39c02970e853e435604d2..d4cd049afe38269a276ea21856a3192f77a8f2f6 100644 (file)
@@ -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");
index f9a81e90c67645b4ccc8beb211b107e0141e768f..25e84cde3e4d042d62b37a732635c5060ffb4708 100644 (file)
        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)));
  }
 +              NetArpWaitTxPacketSize = 0;
 +      }
 +
++restart:
++
 +      eth_halt();
 +#ifdef CONFIG_NET_MULTI
 +      eth_set_current();
 +              return(-1);
 +      }
 +
-+restart:
 +#ifdef CONFIG_NET_MULTI
 +      memcpy (NetOurEther, eth_get_dev()->enetaddr, 6);
 +#else