summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffy Chen <jeffy.chen@rock-chips.com>2015-11-17 14:20:30 +0800
committerSimon Glass <sjg@chromium.org>2015-12-01 08:07:22 -0700
commit3641339eff7d45342a5d3443ed7c057c5c62ae29 (patch)
treee6f2b5f2a2de0de5e9192e6bbe8b3eebfcb99ba2
parent6ae5860942f4eb053e9b8c7e2673eaa7d648082d (diff)
rockchip: Add support for rk's second level loader
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>
-rw-r--r--tools/rkcommon.c24
-rw-r--r--tools/rkcommon.h3
-rw-r--r--tools/rksd.c2
-rw-r--r--tools/rkspi.c2
4 files changed, 14 insertions, 17 deletions
diff --git a/tools/rkcommon.c b/tools/rkcommon.c
index 18778aae3e5..249c86262df 100644
--- a/tools/rkcommon.c
+++ b/tools/rkcommon.c
@@ -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);
diff --git a/tools/rkcommon.h b/tools/rkcommon.h
index 39b1d521efe..0fc1e96409b 100644
--- a/tools/rkcommon.h
+++ b/tools/rkcommon.h
@@ -10,7 +10,8 @@
enum {
RK_BLK_SIZE = 512,
- RK_CODE1_OFFSET = 4,
+ RK_INIT_OFFSET = 4,
+ RK_MAX_BOOT_SIZE = 512 << 10,
};
/**
diff --git a/tools/rksd.c b/tools/rksd.c
index 30b149dd7b0..f660d562a8e 100644
--- a/tools/rksd.c
+++ b/tools/rksd.c
@@ -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,
};
diff --git a/tools/rkspi.c b/tools/rkspi.c
index 13cc5932795..69a12f02e29 100644
--- a/tools/rkspi.c
+++ b/tools/rkspi.c
@@ -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,