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