1*78884ef4SEddie Cai /* 2*78884ef4SEddie Cai * (C) Copyright 2008-2015 Fuzhou Rockchip Electronics Co., Ltd 3*78884ef4SEddie Cai * 4*78884ef4SEddie Cai * SPDX-License-Identifier: GPL-2.0+ 5*78884ef4SEddie Cai */ 6*78884ef4SEddie Cai #ifndef BOOT_MERGER_H 7*78884ef4SEddie Cai #define BOOT_MERGER_H 8*78884ef4SEddie Cai 9*78884ef4SEddie Cai #include <stdint.h> 10*78884ef4SEddie Cai #include <stdio.h> 11*78884ef4SEddie Cai #include <stdlib.h> 12*78884ef4SEddie Cai #include <memory.h> 13*78884ef4SEddie Cai #include <stdbool.h> 14*78884ef4SEddie Cai 15*78884ef4SEddie Cai 16*78884ef4SEddie Cai 17*78884ef4SEddie Cai #define SCANF_EAT(in) fscanf(in, "%*[ \r\n\t/]")//, gEat) 18*78884ef4SEddie Cai #define MAX_LINE_LEN 256 19*78884ef4SEddie Cai 20*78884ef4SEddie Cai typedef char line_t[MAX_LINE_LEN]; 21*78884ef4SEddie Cai 22*78884ef4SEddie Cai 23*78884ef4SEddie Cai 24*78884ef4SEddie Cai #define DEF_CONFIG_FILE "config.ini" 25*78884ef4SEddie Cai 26*78884ef4SEddie Cai #define DEF_MAJOR 0 27*78884ef4SEddie Cai #define DEF_MINOR 3 28*78884ef4SEddie Cai #define DEF_CHIP "RK30" 29*78884ef4SEddie Cai #define DEF_CODE471_NUM 1 30*78884ef4SEddie Cai #define DEF_CODE472_NUM 1 31*78884ef4SEddie Cai #define DEF_CODE471_SLEEP 0 32*78884ef4SEddie Cai #define DEF_CODE472_SLEEP 0 33*78884ef4SEddie Cai #define DEF_CODE471_PATH "rk3288_ddr_400MHZ_v1.01.bin" 34*78884ef4SEddie Cai #define DEF_CODE472_PATH "rk3288_usbplug_v2.32.bin" 35*78884ef4SEddie Cai #define DEF_LOADER_NUM 2 36*78884ef4SEddie Cai #define DEF_LOADER0 "FlashData" 37*78884ef4SEddie Cai #define DEF_LOADER0_PATH "rk3288_ddr_400MHZ_v1.01.bin" 38*78884ef4SEddie Cai #define DEF_LOADER1 "FlashBoot" 39*78884ef4SEddie Cai #define DEF_LOADER1_PATH "u-boot.bin" 40*78884ef4SEddie Cai #define DEF_OUT_PATH "rk3288_bootloader_test.bin" 41*78884ef4SEddie Cai 42*78884ef4SEddie Cai #define OUT_SUBFIX ".bin" 43*78884ef4SEddie Cai 44*78884ef4SEddie Cai #define SEC_CHIP "[CHIP_NAME]" 45*78884ef4SEddie Cai #define SEC_VERSION "[VERSION]" 46*78884ef4SEddie Cai #define SEC_471 "[CODE471_OPTION]" 47*78884ef4SEddie Cai #define SEC_472 "[CODE472_OPTION]" 48*78884ef4SEddie Cai #define SEC_LOADER "[LOADER_OPTION]" 49*78884ef4SEddie Cai #define SEC_OUT "[OUTPUT]" 50*78884ef4SEddie Cai 51*78884ef4SEddie Cai #define OPT_NAME "NAME" 52*78884ef4SEddie Cai #define OPT_MAJOR "MAJOR" 53*78884ef4SEddie Cai #define OPT_MINOR "MINOR" 54*78884ef4SEddie Cai #define OPT_NUM "NUM" 55*78884ef4SEddie Cai #define OPT_LOADER_NUM "LOADERCOUNT" 56*78884ef4SEddie Cai #define OPT_PATH "Path" 57*78884ef4SEddie Cai #define OPT_SLEEP "Sleep" 58*78884ef4SEddie Cai #define OPT_LOADER_NAME "LOADER" 59*78884ef4SEddie Cai #define OPT_OUT_PATH "PATH" 60*78884ef4SEddie Cai 61*78884ef4SEddie Cai typedef struct { 62*78884ef4SEddie Cai char name[MAX_LINE_LEN]; 63*78884ef4SEddie Cai char path[MAX_LINE_LEN]; 64*78884ef4SEddie Cai } name_entry; 65*78884ef4SEddie Cai 66*78884ef4SEddie Cai typedef struct { 67*78884ef4SEddie Cai int major; 68*78884ef4SEddie Cai int minor; 69*78884ef4SEddie Cai char chip[MAX_LINE_LEN]; 70*78884ef4SEddie Cai int code471Sleep; 71*78884ef4SEddie Cai int code472Sleep; 72*78884ef4SEddie Cai int code471Num; 73*78884ef4SEddie Cai int code472Num; 74*78884ef4SEddie Cai line_t* code471Path; 75*78884ef4SEddie Cai line_t* code472Path; 76*78884ef4SEddie Cai int loaderNum; 77*78884ef4SEddie Cai name_entry* loader; 78*78884ef4SEddie Cai char outPath[MAX_LINE_LEN]; 79*78884ef4SEddie Cai } options; 80*78884ef4SEddie Cai 81*78884ef4SEddie Cai 82*78884ef4SEddie Cai #define TAG 0x544F4F42 83*78884ef4SEddie Cai #define MERGER_VERSION 0x01030000 84*78884ef4SEddie Cai #define SMALL_PACKET 512 85*78884ef4SEddie Cai 86*78884ef4SEddie Cai #define MAX_NAME_LEN 20 87*78884ef4SEddie Cai #define MAX_MERGE_SIZE (1024 << 10) 88*78884ef4SEddie Cai 89*78884ef4SEddie Cai #define SEC_CHIP_TYPES "[CHIP_TYPES]" 90*78884ef4SEddie Cai 91*78884ef4SEddie Cai #define CHIP_RK28 "RK28" 92*78884ef4SEddie Cai #define CHIP_RK281X "RK281X" 93*78884ef4SEddie Cai #define CHIP_RKPANDA "RKPANDA" 94*78884ef4SEddie Cai #define CHIP_RK27 "RK27" 95*78884ef4SEddie Cai #define CHIP_RKNANO "RKNANO" 96*78884ef4SEddie Cai #define CHIP_RKSMART "RKSMART" 97*78884ef4SEddie Cai #define CHIP_RKCROWN "RKCROWN" 98*78884ef4SEddie Cai #define CHIP_RKCAYMAN "RKCAYMAN" 99*78884ef4SEddie Cai #define CHIP_RK29 "RK29" 100*78884ef4SEddie Cai #define CHIP_RK292X "RK292X" 101*78884ef4SEddie Cai #define CHIP_RK30 "RK30" 102*78884ef4SEddie Cai #define CHIP_RK30B "RK30B" 103*78884ef4SEddie Cai #define CHIP_RK31 "RK31" 104*78884ef4SEddie Cai #define CHIP_RK32 "RK32" 105*78884ef4SEddie Cai 106*78884ef4SEddie Cai typedef enum { 107*78884ef4SEddie Cai ENTRY_471 =1, 108*78884ef4SEddie Cai ENTRY_472 =2, 109*78884ef4SEddie Cai ENTRY_LOADER =4, 110*78884ef4SEddie Cai } rk_entry_type; 111*78884ef4SEddie Cai 112*78884ef4SEddie Cai #pragma pack(1) 113*78884ef4SEddie Cai typedef struct { 114*78884ef4SEddie Cai uint16_t year; 115*78884ef4SEddie Cai uint8_t month; 116*78884ef4SEddie Cai uint8_t day; 117*78884ef4SEddie Cai uint8_t hour; 118*78884ef4SEddie Cai uint8_t minute; 119*78884ef4SEddie Cai uint8_t second; 120*78884ef4SEddie Cai } rk_time; 121*78884ef4SEddie Cai 122*78884ef4SEddie Cai #define BOOT_RESERVED_SIZE 57 123*78884ef4SEddie Cai typedef struct { 124*78884ef4SEddie Cai uint32_t tag; 125*78884ef4SEddie Cai uint16_t size; 126*78884ef4SEddie Cai uint32_t version; 127*78884ef4SEddie Cai uint32_t mergerVersion; 128*78884ef4SEddie Cai rk_time releaseTime; 129*78884ef4SEddie Cai uint32_t chipType; 130*78884ef4SEddie Cai uint8_t code471Num; 131*78884ef4SEddie Cai uint32_t code471Offset; 132*78884ef4SEddie Cai uint8_t code471Size; 133*78884ef4SEddie Cai uint8_t code472Num; 134*78884ef4SEddie Cai uint32_t code472Offset; 135*78884ef4SEddie Cai uint8_t code472Size; 136*78884ef4SEddie Cai uint8_t loaderNum; 137*78884ef4SEddie Cai uint32_t loaderOffset; 138*78884ef4SEddie Cai uint8_t loaderSize; 139*78884ef4SEddie Cai uint8_t signFlag; 140*78884ef4SEddie Cai uint8_t rc4Flag; 141*78884ef4SEddie Cai uint8_t reserved[BOOT_RESERVED_SIZE]; 142*78884ef4SEddie Cai } rk_boot_header; 143*78884ef4SEddie Cai 144*78884ef4SEddie Cai typedef struct { 145*78884ef4SEddie Cai uint8_t size; 146*78884ef4SEddie Cai rk_entry_type type; 147*78884ef4SEddie Cai uint16_t name[MAX_NAME_LEN]; 148*78884ef4SEddie Cai uint32_t dataOffset; 149*78884ef4SEddie Cai uint32_t dataSize; 150*78884ef4SEddie Cai uint32_t dataDelay; 151*78884ef4SEddie Cai } rk_boot_entry; 152*78884ef4SEddie Cai #pragma pack() 153*78884ef4SEddie Cai 154*78884ef4SEddie Cai #endif// BOOT_MERGER_H 155