xref: /rkdeveloptool/boot_merger.h (revision 5823461aa3d4623e8b4a54102b6825e4b488544d)
178884ef4SEddie Cai /*
278884ef4SEddie Cai  * (C) Copyright 2008-2015 Fuzhou Rockchip Electronics Co., Ltd
378884ef4SEddie Cai  *
478884ef4SEddie Cai  * SPDX-License-Identifier:	GPL-2.0+
578884ef4SEddie Cai  */
678884ef4SEddie Cai #ifndef BOOT_MERGER_H
778884ef4SEddie Cai #define BOOT_MERGER_H
878884ef4SEddie Cai 
978884ef4SEddie Cai #include <stdint.h>
1078884ef4SEddie Cai #include <stdio.h>
1178884ef4SEddie Cai #include <stdlib.h>
1278884ef4SEddie Cai #include <memory.h>
1378884ef4SEddie Cai #include <stdbool.h>
1478884ef4SEddie Cai 
1578884ef4SEddie Cai 
1678884ef4SEddie Cai 
1778884ef4SEddie Cai #define SCANF_EAT(in)   fscanf(in, "%*[ \r\n\t/]")//, gEat)
1878884ef4SEddie Cai #define MAX_LINE_LEN        256
1978884ef4SEddie Cai 
2078884ef4SEddie Cai typedef char line_t[MAX_LINE_LEN];
2178884ef4SEddie Cai 
2278884ef4SEddie Cai 
2378884ef4SEddie Cai 
2478884ef4SEddie Cai #define DEF_CONFIG_FILE     "config.ini"
2578884ef4SEddie Cai 
26*5823461aSEddie Cai #define DEF_MAJOR           2
27*5823461aSEddie Cai #define DEF_MINOR           30
28*5823461aSEddie Cai #define DEF_CHIP            "RK320A"
2978884ef4SEddie Cai #define DEF_CODE471_NUM     1
3078884ef4SEddie Cai #define DEF_CODE472_NUM     1
3178884ef4SEddie Cai #define DEF_CODE471_SLEEP   0
3278884ef4SEddie Cai #define DEF_CODE472_SLEEP   0
3378884ef4SEddie Cai #define DEF_CODE471_PATH    "rk3288_ddr_400MHZ_v1.01.bin"
3478884ef4SEddie Cai #define DEF_CODE472_PATH    "rk3288_usbplug_v2.32.bin"
3578884ef4SEddie Cai #define DEF_LOADER_NUM      2
3678884ef4SEddie Cai #define DEF_LOADER0         "FlashData"
3778884ef4SEddie Cai #define DEF_LOADER0_PATH    "rk3288_ddr_400MHZ_v1.01.bin"
3878884ef4SEddie Cai #define DEF_LOADER1         "FlashBoot"
3978884ef4SEddie Cai #define DEF_LOADER1_PATH    "u-boot.bin"
4078884ef4SEddie Cai #define DEF_OUT_PATH        "rk3288_bootloader_test.bin"
4178884ef4SEddie Cai 
4278884ef4SEddie Cai #define OUT_SUBFIX          ".bin"
4378884ef4SEddie Cai 
4478884ef4SEddie Cai #define SEC_CHIP            "[CHIP_NAME]"
4578884ef4SEddie Cai #define SEC_VERSION         "[VERSION]"
4678884ef4SEddie Cai #define SEC_471             "[CODE471_OPTION]"
4778884ef4SEddie Cai #define SEC_472             "[CODE472_OPTION]"
4878884ef4SEddie Cai #define SEC_LOADER          "[LOADER_OPTION]"
4978884ef4SEddie Cai #define SEC_OUT             "[OUTPUT]"
5078884ef4SEddie Cai 
5178884ef4SEddie Cai #define OPT_NAME            "NAME"
5278884ef4SEddie Cai #define OPT_MAJOR           "MAJOR"
5378884ef4SEddie Cai #define OPT_MINOR           "MINOR"
5478884ef4SEddie Cai #define OPT_NUM             "NUM"
5578884ef4SEddie Cai #define OPT_LOADER_NUM      "LOADERCOUNT"
5678884ef4SEddie Cai #define OPT_PATH            "Path"
5778884ef4SEddie Cai #define OPT_SLEEP           "Sleep"
5878884ef4SEddie Cai #define OPT_LOADER_NAME     "LOADER"
5978884ef4SEddie Cai #define OPT_OUT_PATH        "PATH"
6078884ef4SEddie Cai 
6178884ef4SEddie Cai typedef struct {
6278884ef4SEddie Cai 	char       name[MAX_LINE_LEN];
6378884ef4SEddie Cai 	char       path[MAX_LINE_LEN];
6478884ef4SEddie Cai } name_entry;
6578884ef4SEddie Cai 
6678884ef4SEddie Cai typedef struct {
6778884ef4SEddie Cai 	int         major;
6878884ef4SEddie Cai 	int         minor;
6978884ef4SEddie Cai 	char        chip[MAX_LINE_LEN];
7078884ef4SEddie Cai 	int         code471Sleep;
7178884ef4SEddie Cai 	int         code472Sleep;
7278884ef4SEddie Cai 	int         code471Num;
7378884ef4SEddie Cai 	int         code472Num;
7478884ef4SEddie Cai 	line_t*     code471Path;
7578884ef4SEddie Cai 	line_t*     code472Path;
7678884ef4SEddie Cai 	int         loaderNum;
7778884ef4SEddie Cai 	name_entry* loader;
7878884ef4SEddie Cai 	char        outPath[MAX_LINE_LEN];
7978884ef4SEddie Cai } options;
8078884ef4SEddie Cai 
8178884ef4SEddie Cai 
8278884ef4SEddie Cai #define TAG						0x544F4F42
8378884ef4SEddie Cai #define MERGER_VERSION          0x01030000
8478884ef4SEddie Cai #define SMALL_PACKET			512
8578884ef4SEddie Cai 
8678884ef4SEddie Cai #define MAX_NAME_LEN            20
8778884ef4SEddie Cai #define MAX_MERGE_SIZE          (1024 << 10)
8878884ef4SEddie Cai 
8978884ef4SEddie Cai #define SEC_CHIP_TYPES          "[CHIP_TYPES]"
9078884ef4SEddie Cai 
9178884ef4SEddie Cai #define CHIP_RK28               "RK28"
9278884ef4SEddie Cai #define CHIP_RK281X             "RK281X"
9378884ef4SEddie Cai #define CHIP_RKPANDA            "RKPANDA"
9478884ef4SEddie Cai #define CHIP_RK27               "RK27"
9578884ef4SEddie Cai #define CHIP_RKNANO             "RKNANO"
9678884ef4SEddie Cai #define CHIP_RKSMART            "RKSMART"
9778884ef4SEddie Cai #define CHIP_RKCROWN            "RKCROWN"
9878884ef4SEddie Cai #define CHIP_RKCAYMAN           "RKCAYMAN"
9978884ef4SEddie Cai #define CHIP_RK29               "RK29"
10078884ef4SEddie Cai #define CHIP_RK292X             "RK292X"
10178884ef4SEddie Cai #define CHIP_RK30               "RK30"
10278884ef4SEddie Cai #define CHIP_RK30B              "RK30B"
10378884ef4SEddie Cai #define CHIP_RK31               "RK31"
10478884ef4SEddie Cai #define CHIP_RK32               "RK32"
10578884ef4SEddie Cai 
10678884ef4SEddie Cai typedef enum {
10778884ef4SEddie Cai 	ENTRY_471       =1,
10878884ef4SEddie Cai 	ENTRY_472       =2,
10978884ef4SEddie Cai 	ENTRY_LOADER    =4,
11078884ef4SEddie Cai } rk_entry_type;
11178884ef4SEddie Cai 
11278884ef4SEddie Cai #pragma pack(1)
11378884ef4SEddie Cai typedef struct {
11478884ef4SEddie Cai 	uint16_t  year;
11578884ef4SEddie Cai 	uint8_t   month;
11678884ef4SEddie Cai 	uint8_t   day;
11778884ef4SEddie Cai 	uint8_t   hour;
11878884ef4SEddie Cai 	uint8_t   minute;
11978884ef4SEddie Cai 	uint8_t   second;
12078884ef4SEddie Cai } rk_time;
12178884ef4SEddie Cai 
12278884ef4SEddie Cai #define  BOOT_RESERVED_SIZE 57
12378884ef4SEddie Cai typedef struct {
12478884ef4SEddie Cai 	uint32_t        tag;
12578884ef4SEddie Cai 	uint16_t        size;
12678884ef4SEddie Cai 	uint32_t        version;
12778884ef4SEddie Cai 	uint32_t        mergerVersion;
12878884ef4SEddie Cai 	rk_time         releaseTime;
12978884ef4SEddie Cai 	uint32_t        chipType;
13078884ef4SEddie Cai 	uint8_t         code471Num;
13178884ef4SEddie Cai 	uint32_t        code471Offset;
13278884ef4SEddie Cai 	uint8_t         code471Size;
13378884ef4SEddie Cai 	uint8_t         code472Num;
13478884ef4SEddie Cai 	uint32_t        code472Offset;
13578884ef4SEddie Cai 	uint8_t         code472Size;
13678884ef4SEddie Cai 	uint8_t         loaderNum;
13778884ef4SEddie Cai 	uint32_t        loaderOffset;
13878884ef4SEddie Cai 	uint8_t         loaderSize;
13978884ef4SEddie Cai 	uint8_t         signFlag;
14078884ef4SEddie Cai 	uint8_t         rc4Flag;
14178884ef4SEddie Cai 	uint8_t         reserved[BOOT_RESERVED_SIZE];
14278884ef4SEddie Cai } rk_boot_header;
14378884ef4SEddie Cai 
14478884ef4SEddie Cai typedef struct {
14578884ef4SEddie Cai 	uint8_t         size;
14678884ef4SEddie Cai 	rk_entry_type   type;
14778884ef4SEddie Cai 	uint16_t        name[MAX_NAME_LEN];
14878884ef4SEddie Cai 	uint32_t        dataOffset;
14978884ef4SEddie Cai 	uint32_t        dataSize;
15078884ef4SEddie Cai 	uint32_t        dataDelay;
15178884ef4SEddie Cai } rk_boot_entry;
15278884ef4SEddie Cai #pragma pack()
15378884ef4SEddie Cai 
15478884ef4SEddie Cai #endif// BOOT_MERGER_H
155