1 /*
2 * K3 System Firmware Board Configuration Data Structures
3 *
4 * Copyright (C) 2018-2019 Texas Instruments Incorporated - http://www.ti.com/
5 * Andreas Dannenberg <dannenberg@ti.com>
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the
17 * distribution.
18 *
19 * Neither the name of Texas Instruments Incorporated nor the names of
20 * its contributors may be used to endorse or promote products derived
21 * from this software without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 */
36 #ifndef COMMON_H
37 #define COMMON_H
39 #include <sysfw_img_cfg.h>
40 #include <devices.h>
41 #include <hosts.h>
42 #include <resasg_types.h>
44 /**
45 * Standard Linux Kernel integer types
46 */
47 typedef signed char s8;
48 typedef unsigned char u8;
50 typedef signed short s16;
51 typedef unsigned short u16;
53 typedef signed int s32;
54 typedef unsigned int u32;
56 typedef signed long long s64;
57 typedef unsigned long long u64;
59 /**
60 * Fault tolerant boolean type (specific to SYSFW)
61 */
62 typedef u8 ftbool;
64 /**
65 * Basic bit operations
66 */
67 #define BIT(n) (1UL << (n))
69 /**
70 * Various definitions as expected by the 'struct' declarations below
71 */
72 #define BOARDCFG_RM_HOST_CFG_MAGIC_NUM 0x4C41
73 #define BOARDCFG_RM_RESASG_MAGIC_NUM 0x7B25
74 #define BOARDCFG_CONTROL_MAGIC_NUM 0xC1D3
75 #define BOARDCFG_SECPROXY_MAGIC_NUM 0x1207
76 #define BOARDCFG_MSMC_MAGIC_NUM 0xA5C3
77 #define BOARDCFG_PROC_ACL_MAGIC_NUM 0xF1EA
78 #define BOARDCFG_HOST_HIERARCHY_MAGIC_NUM 0x8D27
79 #define BOARDCFG_RESASG_MAGIC_NUM 0x4C41
80 #define BOARDCFG_DBG_CFG_MAGIC_NUM 0x020C
81 #define BOARDCFG_PMIC_CFG_MAGIC_NUM 0x3172
83 struct boardcfg_substructure_header {
84 u16 magic;
85 u16 size;
86 } __attribute__((__packed__));
88 struct boardcfg_abi_rev {
89 u8 boardcfg_abi_maj;
90 u8 boardcfg_abi_min;
91 } __attribute__((__packed__));
93 /**
94 * Definitions, types, etc. as used for general board configuration
95 */
96 struct boardcfg_control {
97 struct boardcfg_substructure_header subhdr;
98 ftbool main_isolation_enable;
99 u16 main_isolation_hostid;
100 } __attribute__((__packed__));
102 struct boardcfg_secproxy {
103 struct boardcfg_substructure_header subhdr;
104 u8 scaling_factor;
105 u8 scaling_profile;
106 u8 disable_main_nav_secure_proxy;
107 } __attribute__((__packed__));
109 struct boardcfg_msmc {
110 struct boardcfg_substructure_header subhdr;
111 u8 msmc_cache_size;
112 } __attribute__((__packed__));
115 #define BOARDCFG_TRACE_DST_UART0 BIT(0)
116 #define BOARDCFG_TRACE_DST_ITM BIT(2)
117 #define BOARDCFG_TRACE_DST_MEM BIT(3)
119 #define BOARDCFG_TRACE_SRC_PM BIT(0)
120 #define BOARDCFG_TRACE_SRC_RM BIT(1)
121 #define BOARDCFG_TRACE_SRC_SEC BIT(2)
122 #define BOARDCFG_TRACE_SRC_BASE BIT(3)
123 #define BOARDCFG_TRACE_SRC_USER BIT(4)
124 #define BOARDCFG_TRACE_SRC_SUPR BIT(5)
126 struct boardcfg_dbg_cfg {
127 struct boardcfg_substructure_header subhdr;
128 u16 trace_dst_enables;
129 u16 trace_src_enables;
130 } __attribute__((__packed__));
132 struct boardcfg {
133 struct boardcfg_abi_rev rev;
134 struct boardcfg_control control;
135 struct boardcfg_secproxy secproxy;
136 struct boardcfg_msmc msmc;
137 struct boardcfg_dbg_cfg debug_cfg;
138 } __attribute__((__packed__));
140 struct boardcfg_rm_host_cfg_entry {
141 u8 host_id;
142 u8 allowed_atype;
143 u16 allowed_qos;
144 u32 allowed_orderid;
145 u16 allowed_priority;
146 u8 allowed_sched_priority;
147 } __attribute__((__packed__));
149 #define BOARDCFG_RM_HOST_CFG_ENTRIES (32U)
151 struct boardcfg_rm_host_cfg {
152 struct boardcfg_substructure_header subhdr;
153 struct boardcfg_rm_host_cfg_entry
154 host_cfg_entries[BOARDCFG_RM_HOST_CFG_ENTRIES];
155 };
157 struct boardcfg_rm_resasg_entry {
158 u16 start_resource;
159 u16 num_resource;
160 u16 type;
161 u8 host_id;
162 u8 reserved;
163 };
165 struct boardcfg_rm_resasg {
166 struct boardcfg_substructure_header subhdr;
167 u16 resasg_entries_size;
168 u16 reserved;
169 struct boardcfg_rm_resasg_entry resasg_entries[];
170 } __attribute__((__packed__));
172 struct boardcfg_rm {
173 struct boardcfg_abi_rev rev;
174 struct boardcfg_rm_host_cfg host_cfg;
175 struct boardcfg_rm_resasg resasg;
176 } __attribute__((__packed__));
178 /*
179 * This is essentially 'struct boardcfg_rm', but modified to pull
180 * .resasg_entries which is a member of 'struct boardcfg_rm_resasg' into
181 * the outer structure for easier explicit initialization.
182 */
183 struct boardcfg_rm_local {
184 struct boardcfg_rm rm_boardcfg;
185 struct boardcfg_rm_resasg_entry
186 resasg_entries[BOARDCFG_RM_RESASG_ENTRIES];
187 } __attribute__((__packed__));
189 /**
190 * Definitions, types, etc. as used for the security configuration
191 */
192 #define PROCESSOR_ACL_SECONDARY_MASTERS_MAX 3
194 struct boardcfg_proc_acl_entry {
195 u8 processor_id;
196 u8 proc_access_master;
197 u8 proc_access_secondary[PROCESSOR_ACL_SECONDARY_MASTERS_MAX];
198 } __attribute__((__packed__));
200 #define PROCESSOR_ACL_ENTRIES 32
202 struct boardcfg_proc_acl {
203 struct boardcfg_substructure_header subhdr;
204 struct boardcfg_proc_acl_entry proc_acl_entries[PROCESSOR_ACL_ENTRIES];
205 } __attribute__((__packed__));
207 struct boardcfg_host_hierarchy_entry {
208 u8 host_id;
209 u8 supervisor_host_id;
210 } __attribute__((__packed__));
212 #define HOST_HIERARCHY_ENTRIES 32
214 struct boardcfg_host_hierarchy {
215 struct boardcfg_substructure_header subhdr;
216 struct boardcfg_host_hierarchy_entry
217 host_hierarchy_entries[HOST_HIERARCHY_ENTRIES];
218 } __attribute__((__packed__));
220 struct boardcfg_security {
221 struct boardcfg_abi_rev rev;
222 struct boardcfg_proc_acl processor_acl_list;
223 struct boardcfg_host_hierarchy host_hierarchy;
224 } __attribute__((__packed__));
226 /**
227 * Definitions, types, etc. as used for PM configuration
228 */
229 struct boardcfg_pm {
230 struct boardcfg_abi_rev rev;
231 } __attribute__((__packed__));
233 #endif /* COMMON_H */