diff options
author | Jeffy Chen <jeffy.chen@rock-chips.com> | 2015-11-17 14:20:30 +0800 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2015-12-01 08:07:22 -0700 |
commit | 3641339eff7d45342a5d3443ed7c057c5c62ae29 (patch) | |
tree | e6f2b5f2a2de0de5e9192e6bbe8b3eebfcb99ba2 | |
parent | 6ae5860942f4eb053e9b8c7e2673eaa7d648082d (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.c | 24 | ||||
-rw-r--r-- | tools/rkcommon.h | 3 | ||||
-rw-r--r-- | tools/rksd.c | 2 | ||||
-rw-r--r-- | tools/rkspi.c | 2 |
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, |