1 /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
3 * Copyright 2008-2016 Freescale Semiconductor Inc.
4 * Copyright 2016,2019 NXP
7 #ifndef __RTA_HEADER_CMD_H__
8 #define __RTA_HEADER_CMD_H__
10 extern enum rta_sec_era rta_sec_era;
12 /* Allowed job header flags for each SEC Era. */
13 static const uint32_t job_header_flags[] = {
14 DNR | TD | MTD | SHR | REO,
15 DNR | TD | MTD | SHR | REO | RSMS,
16 DNR | TD | MTD | SHR | REO | RSMS,
17 DNR | TD | MTD | SHR | REO | RSMS,
18 DNR | TD | MTD | SHR | REO | RSMS | EXT,
19 DNR | TD | MTD | SHR | REO | RSMS | EXT,
20 DNR | TD | MTD | SHR | REO | RSMS | EXT,
21 DNR | TD | MTD | SHR | REO | EXT,
22 DNR | TD | MTD | SHR | REO | EXT,
23 DNR | TD | MTD | SHR | REO | EXT
26 /* Allowed shared header flags for each SEC Era. */
27 static const uint32_t shr_header_flags[] = {
31 DNR | SC | PD | CIF | RIF,
32 DNR | SC | PD | CIF | RIF,
33 DNR | SC | PD | CIF | RIF,
34 DNR | SC | PD | CIF | RIF,
35 DNR | SC | PD | CIF | RIF,
36 DNR | SC | PD | CIF | RIF,
37 DNR | SC | PD | CIF | RIF
41 rta_shr_header(struct program *program,
42 enum rta_share_type share,
43 unsigned int start_idx,
46 uint32_t opcode = CMD_SHARED_DESC_HDR;
47 unsigned int start_pc = program->current_pc;
49 if (flags & ~shr_header_flags[rta_sec_era]) {
50 pr_err("SHR_DESC: Flag(s) not supported by SEC Era %d\n",
51 USER_SEC_ERA(rta_sec_era));
57 opcode |= HDR_SHARE_ALWAYS;
60 opcode |= HDR_SHARE_SERIAL;
64 * opcode |= HDR_SHARE_NEVER;
65 * HDR_SHARE_NEVER is 0
69 opcode |= HDR_SHARE_WAIT;
72 pr_err("SHR_DESC: SHARE VALUE is not supported. SEC Program Line: %d\n",
78 if (rta_sec_era >= RTA_SEC_ERA_10)
79 opcode |= (start_idx << HDR_START_IDX_SHIFT) &
80 HDR_START_IDX_MASK_ERA10;
82 opcode |= (start_idx << HDR_START_IDX_SHIFT) &
88 opcode |= HDR_CLEAR_IFIFO;
90 opcode |= HDR_SAVECTX;
92 opcode |= HDR_PROP_DNR;
96 __rta_out32(program, opcode);
97 program->current_instruction++;
99 if (program->current_instruction == 1)
100 program->shrhdr = program->buffer;
102 return (int)start_pc;
105 program->first_error_pc = start_pc;
106 program->current_instruction++;
111 rta_job_header(struct program *program,
112 enum rta_share_type share,
113 unsigned int start_idx,
114 uint64_t shr_desc, uint32_t flags,
117 uint32_t opcode = CMD_DESC_HDR;
118 uint32_t hdr_ext = 0;
119 unsigned int start_pc = program->current_pc;
121 if (flags & ~job_header_flags[rta_sec_era]) {
122 pr_err("JOB_DESC: Flag(s) not supported by SEC Era %d\n",
123 USER_SEC_ERA(rta_sec_era));
129 opcode |= HDR_SHARE_ALWAYS;
132 opcode |= HDR_SHARE_SERIAL;
136 * opcode |= HDR_SHARE_NEVER;
137 * HDR_SHARE_NEVER is 0
141 opcode |= HDR_SHARE_WAIT;
144 opcode |= HDR_SHARE_DEFER;
147 pr_err("JOB_DESC: SHARE VALUE is not supported. SEC Program Line: %d\n",
148 program->current_pc);
152 if ((flags & TD) && (flags & REO)) {
153 pr_err("JOB_DESC: REO flag not supported for trusted descriptors. SEC Program Line: %d\n",
154 program->current_pc);
158 if ((rta_sec_era < RTA_SEC_ERA_7) && (flags & MTD) && !(flags & TD)) {
159 pr_err("JOB_DESC: Trying to MTD a descriptor that is not a TD. SEC Program Line: %d\n",
160 program->current_pc);
164 if ((flags & EXT) && !(flags & SHR) && (start_idx < 2)) {
165 pr_err("JOB_DESC: Start index must be >= 2 in case of no SHR and EXT. SEC Program Line: %d\n",
166 program->current_pc);
171 if (rta_sec_era >= RTA_SEC_ERA_10)
172 opcode |= (start_idx << HDR_START_IDX_SHIFT) &
173 HDR_START_IDX_MASK_ERA10;
175 opcode |= (start_idx << HDR_START_IDX_SHIFT) &
181 if (ext_flags & DSV) {
182 hdr_ext |= HDR_EXT_DSEL_VALID;
183 hdr_ext |= ext_flags & DSEL_MASK;
186 if (ext_flags & FTD) {
187 if (rta_sec_era <= RTA_SEC_ERA_5) {
188 pr_err("JOB_DESC: Fake trusted descriptor not supported by SEC Era %d\n",
189 USER_SEC_ERA(rta_sec_era));
193 hdr_ext |= HDR_EXT_FTD;
201 opcode |= HDR_TRUSTED;
203 opcode |= HDR_MAKE_TRUSTED;
205 opcode |= HDR_REVERSE;
207 opcode |= HDR_SHARED;
209 __rta_out32(program, opcode);
210 program->current_instruction++;
212 if (program->current_instruction == 1) {
213 program->jobhdr = program->buffer;
215 if (opcode & HDR_SHARED)
216 __rta_out64(program, program->ps, shr_desc);
220 __rta_out32(program, hdr_ext);
222 /* Note: descriptor length is set in program_finalize routine */
223 return (int)start_pc;
226 program->first_error_pc = start_pc;
227 program->current_instruction++;
231 #endif /* __RTA_HEADER_CMD_H__ */