1 /* 2 * (C) Copyright 2015 Google, Inc 3 * Written by Simon Glass <sjg@chromium.org> 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 * 7 * See README.rockchip for details of the rksd format 8 */ 9 10 #include "imagetool.h" 11 #include <image.h> 12 #include <rc4.h> 13 #include "mkimage.h" 14 #include "rkcommon.h" 15 16 static void rksd_set_header(void *buf, struct stat *sbuf, int ifd, 17 struct image_tool_params *params) 18 { 19 unsigned int size; 20 int ret; 21 22 /* 23 * We need to calculate this using 'RK_SPL_HDR_START' and not using 24 * 'tparams->header_size', as the additional byte inserted when 25 * 'is_boot0' is true counts towards the payload (and not towards the 26 * header). 27 */ 28 size = params->file_size - RK_SPL_HDR_START; 29 ret = rkcommon_set_header(buf, size, params); 30 if (ret) { 31 /* TODO(sjg@chromium.org): This method should return an error */ 32 printf("Warning: SPL image is too large (size %#x) and will " 33 "not boot\n", size); 34 } 35 } 36 37 static int rksd_check_image_type(uint8_t type) 38 { 39 if (type == IH_TYPE_RKSD) 40 return EXIT_SUCCESS; 41 else 42 return EXIT_FAILURE; 43 } 44 45 static int rksd_vrec_header(struct image_tool_params *params, 46 struct image_type_params *tparams) 47 { 48 /* 49 * Pad to a 2KB alignment, as required for init_size by the ROM 50 * (see https://lists.denx.de/pipermail/u-boot/2017-May/293268.html) 51 */ 52 return rkcommon_vrec_header(params, tparams, RK_INIT_SIZE_ALIGN); 53 } 54 55 /* 56 * rk_sd parameters 57 */ 58 U_BOOT_IMAGE_TYPE( 59 rksd, 60 "Rockchip SD Boot Image support", 61 0, 62 NULL, 63 rkcommon_check_params, 64 rkcommon_verify_header, 65 rkcommon_print_header, 66 rksd_set_header, 67 NULL, 68 rksd_check_image_type, 69 NULL, 70 rksd_vrec_header 71 ); 72