xref: /rkdeveloptool/boot_merger.h (revision 78884ef4bafbcdb297daf3d3da7adf84677908d7)
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