rockchip: Add support for rk's second level loader
authorJeffy Chen <jeffy.chen@rock-chips.com>
Tue, 17 Nov 2015 06:20:30 +0000 (14:20 +0800)
committerSimon Glass <sjg@chromium.org>
Tue, 1 Dec 2015 15:07:22 +0000 (08:07 -0700)
The Rockchip boot ROM could load & run an initial spl loader,
and continue to load a second level boot-loader(which stored
right after the initial loader) when it returns.
Modify idblock generation code to support it.

Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Acked-by: Simon Glass <sjg@chromium.org>
tools/rkcommon.c
tools/rkcommon.h
tools/rksd.c
tools/rkspi.c

index 18778aae3e5b936f2f2b44a6a46a5b663a8b09e1..249c86262df86d63d9b5a9cfa7cf7006af031516 100644 (file)
@@ -25,7 +25,7 @@ enum {
  *
  * @signature:         Signature (must be RKSD_SIGNATURE)
  * @disable_rc4:       0 to use rc4 for boot image,  1 to use plain binary
- * @code1_offset:      Offset in blocks of the SPL code from this header
+ * @init_offset:       Offset in blocks of the SPL code from this header
  *                     block. E.g. 4 means 2KB after the start of this header.
  * Other fields are not used by U-Boot
  */
@@ -33,11 +33,10 @@ struct header0_info {
        uint32_t signature;
        uint8_t reserved[4];
        uint32_t disable_rc4;
-       uint16_t code1_offset;
-       uint16_t code2_offset;
-       uint8_t reserved1[490];
-       uint16_t usflashdatasize;
-       uint16_t ucflashbootsize;
+       uint16_t init_offset;
+       uint8_t reserved1[492];
+       uint16_t init_size;
+       uint16_t init_boot_size;
        uint8_t reserved2[2];
 };
 
@@ -53,18 +52,15 @@ int rkcommon_set_header(void *buf, uint file_size)
        if (file_size > CONFIG_ROCKCHIP_MAX_SPL_SIZE)
                return -ENOSPC;
 
-       memset(buf,  '\0', RK_CODE1_OFFSET * RK_BLK_SIZE);
+       memset(buf,  '\0', RK_INIT_OFFSET * RK_BLK_SIZE);
        hdr = (struct header0_info *)buf;
        hdr->signature = RK_SIGNATURE;
        hdr->disable_rc4 = 1;
-       hdr->code1_offset = RK_CODE1_OFFSET;
-       hdr->code2_offset = 8;
+       hdr->init_offset = RK_INIT_OFFSET;
 
-       hdr->usflashdatasize = (file_size + RK_BLK_SIZE - 1) / RK_BLK_SIZE;
-       hdr->usflashdatasize = (hdr->usflashdatasize + 3) & ~3;
-       hdr->ucflashbootsize = hdr->usflashdatasize;
-
-       debug("size=%x, %x\n", params->file_size, hdr->usflashdatasize);
+       hdr->init_size = (file_size + RK_BLK_SIZE - 1) / RK_BLK_SIZE;
+       hdr->init_size = (hdr->init_size + 3) & ~3;
+       hdr->init_boot_size = hdr->init_size + RK_MAX_BOOT_SIZE / RK_BLK_SIZE;
 
        rc4_encode(buf, RK_BLK_SIZE, rc4_key);
 
index 39b1d521efea1b975d82443f324455962054e96a..0fc1e96409b8ee630664554f81a236861793f722 100644 (file)
@@ -10,7 +10,8 @@
 
 enum {
        RK_BLK_SIZE             = 512,
-       RK_CODE1_OFFSET         = 4,
+       RK_INIT_OFFSET          = 4,
+       RK_MAX_BOOT_SIZE        = 512 << 10,
 };
 
 /**
index 30b149dd7b01b1107251937018d315ab902581a4..f660d562a8ee5e466cc2fd3808c5a61eeebe0d8b 100644 (file)
@@ -14,7 +14,7 @@
 #include "rkcommon.h"
 
 enum {
-       RKSD_SPL_HDR_START      = RK_CODE1_OFFSET * RK_BLK_SIZE,
+       RKSD_SPL_HDR_START      = RK_INIT_OFFSET * RK_BLK_SIZE,
        RKSD_SPL_START          = RKSD_SPL_HDR_START + 4,
        RKSD_HEADER_LEN         = RKSD_SPL_START,
 };
index 13cc5932795e6304efc6deb4d1086088070495e2..69a12f02e29a3448e886cb78c07deb87fb41df0f 100644 (file)
@@ -14,7 +14,7 @@
 #include "rkcommon.h"
 
 enum {
-       RKSPI_SPL_HDR_START     = RK_CODE1_OFFSET * RK_BLK_SIZE,
+       RKSPI_SPL_HDR_START     = RK_INIT_OFFSET * RK_BLK_SIZE,
        RKSPI_SPL_START         = RKSPI_SPL_HDR_START + 4,
        RKSPI_HEADER_LEN        = RKSPI_SPL_START,
        RKSPI_SECT_LEN          = RK_BLK_SIZE * 4,