123ba6841SJoseph Chen /* 223ba6841SJoseph Chen * (C) Copyright 2008-2015 Fuzhou Rockchip Electronics Co., Ltd 323ba6841SJoseph Chen * 423ba6841SJoseph Chen * SPDX-License-Identifier: GPL-2.0+ 523ba6841SJoseph Chen */ 623ba6841SJoseph Chen #ifndef BOOT_MERGER_H 723ba6841SJoseph Chen #define BOOT_MERGER_H 823ba6841SJoseph Chen 923ba6841SJoseph Chen #include <stdint.h> 1023ba6841SJoseph Chen #include <stdio.h> 1123ba6841SJoseph Chen #include <stdlib.h> 1223ba6841SJoseph Chen #include <memory.h> 1323ba6841SJoseph Chen #include <stdbool.h> 1423ba6841SJoseph Chen 1523ba6841SJoseph Chen /* #define DEBUG */ 1623ba6841SJoseph Chen 1723ba6841SJoseph Chen extern bool gDebug; 1823ba6841SJoseph Chen 1923ba6841SJoseph Chen #define LOGE(fmt, args...) fprintf(stderr, "E: [%s] "fmt, __func__, ##args) 2023ba6841SJoseph Chen #define LOGD(fmt, args...) do {\ 2123ba6841SJoseph Chen if (gDebug) \ 2223ba6841SJoseph Chen fprintf(stderr, "W: [%s] "fmt, __func__, ##args); \ 2323ba6841SJoseph Chen } while (0) 2423ba6841SJoseph Chen 2523ba6841SJoseph Chen 2623ba6841SJoseph Chen #define SCANF_EAT(in) fscanf(in, "%*[ \r\n\t/]")//, gEat) 2723ba6841SJoseph Chen #define MAX_LINE_LEN 256 2823ba6841SJoseph Chen extern char gEat[MAX_LINE_LEN]; 2923ba6841SJoseph Chen 3023ba6841SJoseph Chen typedef char line_t[MAX_LINE_LEN]; 3123ba6841SJoseph Chen 3223ba6841SJoseph Chen 3323ba6841SJoseph Chen 3423ba6841SJoseph Chen #define DEF_CONFIG_FILE "CONFIG.ini" 3523ba6841SJoseph Chen 3623ba6841SJoseph Chen #define DEF_MAJOR 0 3723ba6841SJoseph Chen #define DEF_MINOR 3 3823ba6841SJoseph Chen #define DEF_CHIP "RK30" 3923ba6841SJoseph Chen #define DEF_CODE471_NUM 1 4023ba6841SJoseph Chen #define DEF_CODE472_NUM 1 4123ba6841SJoseph Chen #define DEF_CODE471_SLEEP 0 4223ba6841SJoseph Chen #define DEF_CODE472_SLEEP 0 4323ba6841SJoseph Chen #define DEF_CODE471_PATH "30_LPDDR2_300MHz_DDR3_300MHz.bin" 4423ba6841SJoseph Chen #define DEF_CODE472_PATH "rk30usbplug.bin" 4523ba6841SJoseph Chen #define DEF_LOADER_NUM 2 4623ba6841SJoseph Chen #define DEF_LOADER0 "FlashData" 4723ba6841SJoseph Chen #define DEF_LOADER0_PATH "30_LPDDR2_300MHz_DDR3_300MHz.bin" 4823ba6841SJoseph Chen #define DEF_LOADER1 "FlashBoot" 4923ba6841SJoseph Chen #define DEF_LOADER1_PATH "../../u-boot.bin" 5023ba6841SJoseph Chen #define DEF_OUT_PATH "../../RK30xxLoader_uboot.bin" 5123ba6841SJoseph Chen 5223ba6841SJoseph Chen #define OUT_SUBFIX ".bin" 5323ba6841SJoseph Chen 5423ba6841SJoseph Chen #define SEC_CHIP "[CHIP_NAME]" 5523ba6841SJoseph Chen #define SEC_VERSION "[VERSION]" 5623ba6841SJoseph Chen #define SEC_471 "[CODE471_OPTION]" 5723ba6841SJoseph Chen #define SEC_472 "[CODE472_OPTION]" 5823ba6841SJoseph Chen #define SEC_LOADER "[LOADER_OPTION]" 5923ba6841SJoseph Chen #define SEC_OUT "[OUTPUT]" 6023ba6841SJoseph Chen 6123ba6841SJoseph Chen #define OPT_NAME "NAME" 6223ba6841SJoseph Chen #define OPT_MAJOR "MAJOR" 6323ba6841SJoseph Chen #define OPT_MINOR "MINOR" 6423ba6841SJoseph Chen #define OPT_NUM "NUM" 6523ba6841SJoseph Chen #define OPT_LOADER_NUM "LOADERCOUNT" 6623ba6841SJoseph Chen #define OPT_PATH "Path" 6723ba6841SJoseph Chen #define OPT_SLEEP "Sleep" 6823ba6841SJoseph Chen #define OPT_LOADER_NAME "LOADER" 6923ba6841SJoseph Chen #define OPT_OUT_PATH "PATH" 7023ba6841SJoseph Chen 7123ba6841SJoseph Chen typedef struct { 7223ba6841SJoseph Chen char name[MAX_LINE_LEN]; 7323ba6841SJoseph Chen char path[MAX_LINE_LEN]; 7423ba6841SJoseph Chen } name_entry; 7523ba6841SJoseph Chen 7623ba6841SJoseph Chen typedef struct { 7723ba6841SJoseph Chen int major; 7823ba6841SJoseph Chen int minor; 7923ba6841SJoseph Chen char chip[MAX_LINE_LEN]; 8023ba6841SJoseph Chen int code471Sleep; 8123ba6841SJoseph Chen int code472Sleep; 8223ba6841SJoseph Chen int code471Num; 8323ba6841SJoseph Chen int code472Num; 8423ba6841SJoseph Chen line_t* code471Path; 8523ba6841SJoseph Chen line_t* code472Path; 8623ba6841SJoseph Chen int loaderNum; 8723ba6841SJoseph Chen name_entry* loader; 88*5b69ab5aSYifeng Zhao char outPath[MAX_LINE_LEN * 2]; 8923ba6841SJoseph Chen } options; 9023ba6841SJoseph Chen 9123ba6841SJoseph Chen 9223ba6841SJoseph Chen #define TAG 0x544F4F42 9323ba6841SJoseph Chen #define MERGER_VERSION 0x01030000 9423ba6841SJoseph Chen #define SMALL_PACKET 512 9523ba6841SJoseph Chen 9623ba6841SJoseph Chen #define MAX_NAME_LEN 20 9723ba6841SJoseph Chen #define MAX_MERGE_SIZE (512 << 10) 9823ba6841SJoseph Chen 9923ba6841SJoseph Chen #define SEC_CHIP_TYPES "[CHIP_TYPES]" 10023ba6841SJoseph Chen 10123ba6841SJoseph Chen #define CHIP_RK28 "RK28" 10223ba6841SJoseph Chen #define CHIP_RK281X "RK281X" 10323ba6841SJoseph Chen #define CHIP_RKPANDA "RKPANDA" 10423ba6841SJoseph Chen #define CHIP_RK27 "RK27" 10523ba6841SJoseph Chen #define CHIP_RKNANO "RKNANO" 10623ba6841SJoseph Chen #define CHIP_RKSMART "RKSMART" 10723ba6841SJoseph Chen #define CHIP_RKCROWN "RKCROWN" 10823ba6841SJoseph Chen #define CHIP_RKCAYMAN "RKCAYMAN" 10923ba6841SJoseph Chen #define CHIP_RK29 "RK29" 11023ba6841SJoseph Chen #define CHIP_RK292X "RK292X" 11123ba6841SJoseph Chen #define CHIP_RK30 "RK30" 11223ba6841SJoseph Chen #define CHIP_RK30B "RK30B" 11323ba6841SJoseph Chen #define CHIP_RK31 "RK31" 11423ba6841SJoseph Chen #define CHIP_RK32 "RK32" 11523ba6841SJoseph Chen 11623ba6841SJoseph Chen typedef enum { 11723ba6841SJoseph Chen RKNONE_DEVICE =0, 11823ba6841SJoseph Chen RK27_DEVICE =0x10, 11923ba6841SJoseph Chen RKCAYMAN_DEVICE =0x11, 12023ba6841SJoseph Chen RK28_DEVICE =0x20, 12123ba6841SJoseph Chen RK281X_DEVICE =0x21, 12223ba6841SJoseph Chen RKPANDA_DEVICE =0x22, 12323ba6841SJoseph Chen RKNANO_DEVICE =0x30, 12423ba6841SJoseph Chen RKSMART_DEVICE =0x31, 12523ba6841SJoseph Chen RKCROWN_DEVICE =0x40, 12623ba6841SJoseph Chen RK29_DEVICE =0x50, 12723ba6841SJoseph Chen RK292X_DEVICE =0x51, 12823ba6841SJoseph Chen RK30_DEVICE =0x60, 12923ba6841SJoseph Chen RK30B_DEVICE =0x61, 13023ba6841SJoseph Chen RK31_DEVICE =0x70, 13123ba6841SJoseph Chen RK32_DEVICE =0x80 13223ba6841SJoseph Chen } rk_chip_type; 13323ba6841SJoseph Chen 13423ba6841SJoseph Chen typedef enum { 13523ba6841SJoseph Chen ENTRY_471 =1, 13623ba6841SJoseph Chen ENTRY_472 =2, 13723ba6841SJoseph Chen ENTRY_LOADER =4, 13823ba6841SJoseph Chen } rk_entry_type; 13923ba6841SJoseph Chen 14023ba6841SJoseph Chen #pragma pack(1) 14123ba6841SJoseph Chen typedef struct { 14223ba6841SJoseph Chen uint16_t year; 14323ba6841SJoseph Chen uint8_t month; 14423ba6841SJoseph Chen uint8_t day; 14523ba6841SJoseph Chen uint8_t hour; 14623ba6841SJoseph Chen uint8_t minute; 14723ba6841SJoseph Chen uint8_t second; 14823ba6841SJoseph Chen } rk_time; 14923ba6841SJoseph Chen 15023ba6841SJoseph Chen #define BOOT_RESERVED_SIZE 57 15123ba6841SJoseph Chen typedef struct { 15223ba6841SJoseph Chen uint32_t tag; 15323ba6841SJoseph Chen uint16_t size; 15423ba6841SJoseph Chen uint32_t version; 15523ba6841SJoseph Chen uint32_t mergerVersion; 15623ba6841SJoseph Chen rk_time releaseTime; 15723ba6841SJoseph Chen uint32_t chipType; 15823ba6841SJoseph Chen uint8_t code471Num; 15923ba6841SJoseph Chen uint32_t code471Offset; 16023ba6841SJoseph Chen uint8_t code471Size; 16123ba6841SJoseph Chen uint8_t code472Num; 16223ba6841SJoseph Chen uint32_t code472Offset; 16323ba6841SJoseph Chen uint8_t code472Size; 16423ba6841SJoseph Chen uint8_t loaderNum; 16523ba6841SJoseph Chen uint32_t loaderOffset; 16623ba6841SJoseph Chen uint8_t loaderSize; 16723ba6841SJoseph Chen uint8_t signFlag; 16823ba6841SJoseph Chen uint8_t rc4Flag; 16923ba6841SJoseph Chen uint8_t reserved[BOOT_RESERVED_SIZE]; 17023ba6841SJoseph Chen } rk_boot_header; 17123ba6841SJoseph Chen 17223ba6841SJoseph Chen typedef struct { 17323ba6841SJoseph Chen uint8_t size; 17423ba6841SJoseph Chen rk_entry_type type; 17523ba6841SJoseph Chen uint16_t name[MAX_NAME_LEN]; 17623ba6841SJoseph Chen uint32_t dataOffset; 17723ba6841SJoseph Chen uint32_t dataSize; 17823ba6841SJoseph Chen uint32_t dataDelay; 17923ba6841SJoseph Chen } rk_boot_entry; 18023ba6841SJoseph Chen #pragma pack() 18123ba6841SJoseph Chen 18223ba6841SJoseph Chen #define OPT_VERBOSE "--verbose" 18323ba6841SJoseph Chen #define OPT_HELP "--help" 18423ba6841SJoseph Chen #define OPT_VERSION "--version" 18523ba6841SJoseph Chen #define OPT_MERGE "--pack" 18623ba6841SJoseph Chen #define OPT_UNPACK "--unpack" 18723ba6841SJoseph Chen #define OPT_SUBFIX "--subfix" 18823ba6841SJoseph Chen #define OPT_REPLACE "--replace" 189e311da24SJoseph Chen #define OPT_PREPATH "--prepath" 19023ba6841SJoseph Chen #define OPT_SIZE "--size" 19124f9e652SJoseph Chen #define OPT_RC4 "--rc4" 19223ba6841SJoseph Chen 19323ba6841SJoseph Chen #define OPT_CHIP "-c" 19423ba6841SJoseph Chen #define OPT_471 "-1" 19523ba6841SJoseph Chen #define OPT_472 "-2" 19623ba6841SJoseph Chen #define OPT_DATA "-d" 19723ba6841SJoseph Chen #define OPT_BOOT "-b" 19823ba6841SJoseph Chen #define OPT_OUT "-o" 19923ba6841SJoseph Chen 20023ba6841SJoseph Chen 20123ba6841SJoseph Chen #define VERSION "2013-8-12 14:27:23" 20223ba6841SJoseph Chen 20323ba6841SJoseph Chen #endif/* BOOT_MERGER_H */ 204