hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/* SPDX-License-Identifier:     GPL-2.0+ */
/*
 * (C) Copyright 2019 Rockchip Electronics Co., Ltd
 */
 
#ifndef _SPL_RKFW_H_
#define _SPL_RKFW_H_
 
#include <spl.h>
 
#define LOADER_HARD_STR            "LOADER"
#ifdef CONFIG_SPL_ATF
#define TBOOT_HEAD_TAG            0x58334c42 /* 'B', 'L', '3', 'X' */
#else
#define TBOOT_HEAD_TAG            "TOS   "
#endif
 
#define BL30_IMAGE_NAME            "bl30.bin" /* SCP Firmware BL3-0 */
#define BL31_IMAGE_NAME            "bl31.bin" /* EL3 Runtime Firmware BL31 */
#define BL32_IMAGE_NAME            "bl32.bin" /* Secure Payload BL32 (Trusted OS) */
 
#define UUID_SCP_FIRMWARE_BL30        0x30334c42 /* "BL30" */
#define UUID_EL3_RUNTIME_FIRMWARE_BL31    0x31334c42 /* "BL31" */
#define UUID_SECURE_PAYLOAD_BL32    0x32334c42 /* "BL32" */
 
/* Signature size, unit is byte */
#define SIGNATURE_SIZE            256
#define MAX_BL_CODE_NUM            6
#define LOADER_MAGIC_SIZE        8
#define LOADER_HASH_SIZE        32
 
/* Special value used to verify platform parameters from BL2 to BL3-1 */
#define RK_BL31_PLAT_PARAM_VAL        0x0f1e2d3c4b5a6978ULL
 
#ifdef CONFIG_MTD_NAND_CORE
#define RKFW_RETRY_SECTOR_SIZE        256
#define RKFW_RETRY_SECTOR_TIMES        32
#else
#define RKFW_RETRY_SECTOR_SIZE        1024
#define RKFW_RETRY_SECTOR_TIMES        8
#endif
 
struct s_fip_name_id {
   const char *name;
   const u32 id;
};
 
typedef struct tag_tboot_header_2k {
   u32 tag;
   u32 version;
   u32 flags;
   u32 size;
   u32 reserved1[4];
   u32 rsa_n[64];
   u32 rsa_e[64];
   u32 rsa_c[64];
   u32 reserved2[312];
} tboot_header_2k, *ptboot_header_2k;
 
typedef struct tag_tboot_header {
   u32 tag;
   u32 version;
   u32 flags;
   u32 size;
   u32 reserved[4];
   u32 rsa_n[64];
   u32 rsa_e[64];
   u32 rsa_c[64];
} tboot_header, *ptboot_header;
 
typedef struct tag_boot_component {
   u32 component_id;
   u32 storage_addr;
   u32 image_size;
   u32 reserved;
} boot_component, *pboot_component;
 
typedef struct tag_component_data {
   u32 hash_data[8];
   u32 load_addr;
   u32 reserved[3];
} component_data, *pcomponent_data;
 
typedef struct tag_tboot_entry {
   boot_component component;
   component_data compdata;
} tboot_entry, *ptboot_entry;
 
typedef struct tag_second_loader_hdr {
   unsigned char magic[LOADER_MAGIC_SIZE];
   unsigned int version;
   unsigned int reserved0;
   unsigned int loader_load_addr;        /* physical load addr ,default is 0x60000000 */
   unsigned int loader_load_size;        /* size in bytes */
   unsigned int crc32;            /* crc32 */
   unsigned int hash_len;            /* 20 or 32 , 0 is no hash */
   unsigned char hash[LOADER_HASH_SIZE];    /* sha */
   unsigned int js_hash;            /* js hsah */
   unsigned char reserved[1024-32-32-4];
   unsigned int sign_tag;            /* 0x4E474953, 'N' 'G' 'I' 'S' */
   unsigned int sign_len;            /* 256 */
   unsigned char rsa_hash[256];
   unsigned char reserved2[2048-1024-256-8];
} second_loader_hdr;                /* Size:2K */
 
/**
 * spl_load_rkfw_image - Load rockchip image(trust and U-Boot) and jump to bl31.
 */
int spl_load_rkfw_image(struct spl_image_info *spl_image,
           struct spl_load_info *info);
#endif