1
2
3
4
5
6
7
8#ifndef __SECURE_MX6Q_H__
9#define __SECURE_MX6Q_H__
10
11#include <linux/types.h>
12
13
14
15
16
17enum hab_status {
18 HAB_STS_ANY = 0x00,
19 HAB_FAILURE = 0x33,
20 HAB_WARNING = 0x69,
21 HAB_SUCCESS = 0xf0
22};
23
24
25enum hab_config {
26 HAB_CFG_RETURN = 0x33,
27 HAB_CFG_OPEN = 0xf0,
28 HAB_CFG_CLOSED = 0xcc
29};
30
31
32enum hab_state {
33 HAB_STATE_INITIAL = 0x33,
34 HAB_STATE_CHECK = 0x55,
35 HAB_STATE_NONSECURE = 0x66,
36 HAB_STATE_TRUSTED = 0x99,
37 HAB_STATE_SECURE = 0xaa,
38 HAB_STATE_FAIL_SOFT = 0xcc,
39 HAB_STATE_FAIL_HARD = 0xff,
40 HAB_STATE_NONE = 0xf0,
41 HAB_STATE_MAX
42};
43
44enum hab_reason {
45 HAB_RSN_ANY = 0x00,
46 HAB_ENG_FAIL = 0x30,
47 HAB_INV_ADDRESS = 0x22,
48 HAB_INV_ASSERTION = 0x0c,
49 HAB_INV_CALL = 0x28,
50 HAB_INV_CERTIFICATE = 0x21,
51 HAB_INV_COMMAND = 0x06,
52 HAB_INV_CSF = 0x11,
53 HAB_INV_DCD = 0x27,
54 HAB_INV_INDEX = 0x0f,
55 HAB_INV_IVT = 0x05,
56 HAB_INV_KEY = 0x1d,
57 HAB_INV_RETURN = 0x1e,
58 HAB_INV_SIGNATURE = 0x18,
59 HAB_INV_SIZE = 0x17,
60 HAB_MEM_FAIL = 0x2e,
61 HAB_OVR_COUNT = 0x2b,
62 HAB_OVR_STORAGE = 0x2d,
63 HAB_UNS_ALGORITHM = 0x12,
64 HAB_UNS_COMMAND = 0x03,
65 HAB_UNS_ENGINE = 0x0a,
66 HAB_UNS_ITEM = 0x24,
67 HAB_UNS_KEY = 0x1b,
68 HAB_UNS_PROTOCOL = 0x14,
69 HAB_UNS_STATE = 0x09,
70 HAB_RSN_MAX
71};
72
73enum hab_context {
74 HAB_CTX_ANY = 0x00,
75 HAB_CTX_FAB = 0xff,
76 HAB_CTX_ENTRY = 0xe1,
77 HAB_CTX_TARGET = 0x33,
78 HAB_CTX_AUTHENTICATE = 0x0a,
79 HAB_CTX_DCD = 0xdd,
80 HAB_CTX_CSF = 0xcf,
81 HAB_CTX_COMMAND = 0xc0,
82 HAB_CTX_AUT_DAT = 0xdb,
83 HAB_CTX_ASSERT = 0xa0,
84 HAB_CTX_EXIT = 0xee,
85 HAB_CTX_MAX
86};
87
88struct imx_sec_config_fuse_t {
89 int bank;
90 int word;
91};
92
93#if defined(CONFIG_SECURE_BOOT)
94extern struct imx_sec_config_fuse_t const imx_sec_config_fuse;
95#endif
96
97
98typedef enum hab_status hab_rvt_report_event_t(enum hab_status, uint32_t,
99 uint8_t* , size_t*);
100typedef enum hab_status hab_rvt_report_status_t(enum hab_config *,
101 enum hab_state *);
102typedef enum hab_status hab_loader_callback_f_t(void**, size_t*, const void*);
103typedef enum hab_status hab_rvt_entry_t(void);
104typedef enum hab_status hab_rvt_exit_t(void);
105typedef void *hab_rvt_authenticate_image_t(uint8_t, ptrdiff_t,
106 void **, size_t *, hab_loader_callback_f_t);
107typedef void hapi_clock_init_t(void);
108
109#define HAB_ENG_ANY 0x00
110#define HAB_ENG_SCC 0x03
111#define HAB_ENG_RTIC 0x05
112#define HAB_ENG_SAHARA 0x06
113#define HAB_ENG_CSU 0x0a
114#define HAB_ENG_SRTC 0x0c
115#define HAB_ENG_DCP 0x1b
116#define HAB_ENG_CAAM 0x1d
117#define HAB_ENG_SNVS 0x1e
118#define HAB_ENG_OCOTP 0x21
119#define HAB_ENG_DTCP 0x22
120#define HAB_ENG_ROM 0x36
121#define HAB_ENG_HDCP 0x24
122#define HAB_ENG_RTL 0x77
123#define HAB_ENG_SW 0xff
124
125#ifdef CONFIG_ROM_UNIFIED_SECTIONS
126#define HAB_RVT_BASE 0x00000100
127#else
128#define HAB_RVT_BASE 0x00000094
129#endif
130
131#define HAB_RVT_ENTRY (*(uint32_t *)(HAB_RVT_BASE + 0x04))
132#define HAB_RVT_EXIT (*(uint32_t *)(HAB_RVT_BASE + 0x08))
133#define HAB_RVT_AUTHENTICATE_IMAGE (*(uint32_t *)(HAB_RVT_BASE + 0x10))
134#define HAB_RVT_REPORT_EVENT (*(uint32_t *)(HAB_RVT_BASE + 0x20))
135#define HAB_RVT_REPORT_STATUS (*(uint32_t *)(HAB_RVT_BASE + 0x24))
136
137#define HAB_RVT_REPORT_EVENT_NEW (*(uint32_t *)0x000000B8)
138#define HAB_RVT_REPORT_STATUS_NEW (*(uint32_t *)0x000000BC)
139#define HAB_RVT_AUTHENTICATE_IMAGE_NEW (*(uint32_t *)0x000000A8)
140#define HAB_RVT_ENTRY_NEW (*(uint32_t *)0x0000009C)
141#define HAB_RVT_EXIT_NEW (*(uint32_t *)0x000000A0)
142
143#define HAB_CID_ROM 0
144#define HAB_CID_UBOOT 1
145
146
147
148uint32_t authenticate_image(uint32_t ddr_start, uint32_t image_size);
149
150#endif
151