Commit f25c1755a715d0d1794bd0827549367c20182501
Committed by
Philipp Tomsich
1 parent
c29c1e611e
Exists in
smarc_8mq_lf_v2020.04
and in
11 other branches
rockchip: Fix rkimage format for SPL boot over USB
The 'rkimage' format used for booting rockchip boards over USB seems to have been broken since commit 7bf274b9caab ("rockchip: mkimage: use imagename to select spl hdr & spl size"). That commit adds an offset of RK_SPL_HDR_START(=2048) to the location the 'RKxx' header is written at. However the bootrom expects this header to be the first four bytes of the image, not at offset 2048. This appears to have been a copy paste error since the 'rksd' and 'rkspi' image types do require this offset. Furthermore commit 111bcc4fb6cb ("rockchip: mkimage: pad the header to 8-bytes (using a 'nop') for RK3399"), commit 3d54eabcafec9 ("rockchip: spl: RK3399: use boot0 hook to create space for SPL magic") and commit 308277569229 ("rockchip: mkimage: update rkimage to support pre-padded payloads") changed the way the space for the 'RKxx' header is allocated and written to the image without adjusting 'rkimage'. This commit fixes those mistakes and makes it possible to load u-boot SPL over USB once more. (Tested on RK3399) Signed-off-by: Daniel Gröber <daniel@dps.uibk.ac.at> Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Showing 1 changed file with 2 additions and 3 deletions Inline Diff
tools/rkimage.c
1 | // SPDX-License-Identifier: GPL-2.0+ | 1 | // SPDX-License-Identifier: GPL-2.0+ |
2 | /* | 2 | /* |
3 | * (C) Copyright 2015 Google, Inc | 3 | * (C) Copyright 2015 Google, Inc |
4 | * Written by Simon Glass <sjg@chromium.org> | 4 | * Written by Simon Glass <sjg@chromium.org> |
5 | * | 5 | * |
6 | * See README.rockchip for details of the rkimage format | 6 | * See README.rockchip for details of the rkimage format |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "imagetool.h" | 9 | #include "imagetool.h" |
10 | #include <image.h> | 10 | #include <image.h> |
11 | #include "rkcommon.h" | 11 | #include "rkcommon.h" |
12 | 12 | ||
13 | static uint32_t header; | 13 | static uint32_t header; |
14 | 14 | ||
15 | static void rkimage_set_header(void *buf, struct stat *sbuf, int ifd, | 15 | static void rkimage_set_header(void *buf, struct stat *sbuf, int ifd, |
16 | struct image_tool_params *params) | 16 | struct image_tool_params *params) |
17 | { | 17 | { |
18 | memcpy(buf + RK_SPL_HDR_START, rkcommon_get_spl_hdr(params), | 18 | memcpy(buf, rkcommon_get_spl_hdr(params), RK_SPL_HDR_SIZE); |
19 | RK_SPL_HDR_SIZE); | ||
20 | 19 | ||
21 | if (rkcommon_need_rc4_spl(params)) | 20 | if (rkcommon_need_rc4_spl(params)) |
22 | rkcommon_rc4_encode_spl(buf, 4, params->file_size); | 21 | rkcommon_rc4_encode_spl(buf, 4, params->file_size); |
23 | } | 22 | } |
24 | 23 | ||
25 | static int rkimage_check_image_type(uint8_t type) | 24 | static int rkimage_check_image_type(uint8_t type) |
26 | { | 25 | { |
27 | if (type == IH_TYPE_RKIMAGE) | 26 | if (type == IH_TYPE_RKIMAGE) |
28 | return EXIT_SUCCESS; | 27 | return EXIT_SUCCESS; |
29 | else | 28 | else |
30 | return EXIT_FAILURE; | 29 | return EXIT_FAILURE; |
31 | } | 30 | } |
32 | 31 | ||
33 | /* | 32 | /* |
34 | * rk_image parameters | 33 | * rk_image parameters |
35 | */ | 34 | */ |
36 | U_BOOT_IMAGE_TYPE( | 35 | U_BOOT_IMAGE_TYPE( |
37 | rkimage, | 36 | rkimage, |
38 | "Rockchip Boot Image support", | 37 | "Rockchip Boot Image support", |
39 | 4, | 38 | 0, |
40 | &header, | 39 | &header, |
41 | rkcommon_check_params, | 40 | rkcommon_check_params, |
42 | NULL, | 41 | NULL, |
43 | NULL, | 42 | NULL, |
44 | rkimage_set_header, | 43 | rkimage_set_header, |
45 | NULL, | 44 | NULL, |
46 | rkimage_check_image_type, | 45 | rkimage_check_image_type, |
47 | NULL, | 46 | NULL, |
48 | NULL | 47 | NULL |
49 | ); | 48 | ); |
50 | 49 |