1 /*
2 * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include "hw_sce_ra_private.h"
8
HW_SCE_Aes192OutputKeyForDotfSub(uint32_t InData_KeyIndex[],uint32_t InData_DOTFSEED[])9 fsp_err_t HW_SCE_Aes192OutputKeyForDotfSub (uint32_t InData_KeyIndex[], uint32_t InData_DOTFSEED[])
10 {
11 if (RD1_MASK(REG_14BCH, 0x0000001fU) != 0)
12 {
13 return FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT;
14 }
15 else
16 {
17 ;
18 }
19
20 WR1_PROG(REG_1B00H, 0x002d0001U);
21 WR1_PROG(REG_144CH, 0x00000000U);
22
23 WR1_PROG(REG_1444H, 0x000000c7U);
24 WR1_PROG(REG_1608H, 0x80010000U);
25 WAIT_STS(REG_1444H, 31, 1);
26 WR1_PROG(REG_1420H, 0);
27 WR1_PROG(REG_1458H, 0x00000000U);
28
29 WR1_PROG(REG_1600H, 0x38000c00U);
30 WR1_PROG(REG_1608H, 0x00000080U);
31 WR1_PROG(REG_143CH, 0x00260000U);
32
33 HW_SCE_p_func100(0xc3f8aba5U, 0x5f16d2ebU, 0xee41afadU, 0xabafce35U);
34 WR1_PROG(REG_143CH, 0x00400000U);
35
36 if (CHCK_STS(REG_143CH, 22, 1))
37 {
38 WR1_PROG(REG_1444H, 0x000000c7U);
39 WR1_PROG(REG_1608H, 0x800100e0U);
40 WAIT_STS(REG_1444H, 31, 1);
41 WR1_PROG(REG_1420H, InData_KeyIndex[0]);
42 WR1_PROG(REG_1458H, 0x00000000U);
43
44 WR1_PROG(REG_1444H, 0x000000a7U);
45 WR1_PROG(REG_1608H, 0x800103a0U);
46 WAIT_STS(REG_1444H, 31, 1);
47 WR1_PROG(REG_1420H, change_endian_long(0x0000002dU));
48 WR1_PROG(REG_1458H, 0x00000000U);
49
50 HW_SCE_p_func101(0xac8beeafU, 0x90ce0bb4U, 0x7e2f468cU, 0x049ba83dU);
51 HW_SCE_p_func043_r1();
52
53 WR1_PROG(REG_1600H, 0x0000b4e0U);
54 WR1_PROG(REG_1600H, 0x00000006U);
55
56 WR1_PROG(REG_1444H, 0x000000a7U);
57 WR1_PROG(REG_1608H, 0x800103a0U);
58 WAIT_STS(REG_1444H, 31, 1);
59 WR1_PROG(REG_1420H, change_endian_long(0x0000002dU));
60 WR1_PROG(REG_1458H, 0x00000000U);
61
62 HW_SCE_p_func101(0x1d6947caU, 0xa8767707U, 0x1aefd2f1U, 0x3a6ae15dU);
63 HW_SCE_p_func044_r1();
64
65 WR1_PROG(REG_1444H, 0x000007c2U);
66 WR1_PROG(REG_1A2CH, 0x40000100U);
67 WR1_PROG(REG_1A24H, 0xf7009d07U);
68 WAIT_STS(REG_1444H, 31, 1);
69 WR4_ADDR(REG_1420H, &InData_KeyIndex[1]);
70 WAIT_STS(REG_1444H, 31, 1);
71 WR4_ADDR(REG_1420H, &InData_KeyIndex[5]);
72
73 WR1_PROG(REG_1600H, 0x00000821U);
74 WR1_PROG(REG_1608H, 0x80880001U);
75 WR1_PROG(REG_1400H, 0x03420021U);
76 WAIT_STS(REG_1404H, 30, 0);
77 WR1_PROG(REG_143CH, 0x00001800U);
78
79 WR1_PROG(REG_1444H, 0x000003c2U);
80 WR1_PROG(REG_1A2CH, 0x40000000U);
81 WR1_PROG(REG_1A24H, 0x07008d05U);
82 WAIT_STS(REG_1444H, 31, 1);
83 WR4_ADDR(REG_1420H, &InData_KeyIndex[9]);
84
85 WR1_PROG(REG_1A24H, 0x9c100005U);
86 WR1_PROG(REG_1400H, 0x00820011U);
87 WAIT_STS(REG_1404H, 30, 0);
88 WR1_PROG(REG_143CH, 0x00001800U);
89
90 HW_SCE_p_func101(0x42665561U, 0xf2a05f6fU, 0xc02bf570U, 0xaa6dd8f1U);
91 }
92
93 HW_SCE_p_func100(0xeb9a8865U, 0x747d265dU, 0x13c133f5U, 0x42e196ebU);
94 WR1_PROG(REG_143CH, 0x00400000U);
95
96 if (CHCK_STS(REG_143CH, 22, 1))
97 {
98 HW_SCE_p_func102(0xac2efcf2U, 0xf2caabf0U, 0x2e2cfefdU, 0x163d5955U);
99 WR1_PROG(REG_14BCH, 0x00000040U);
100 WAIT_STS(REG_142CH, 12, 0);
101
102 return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL;
103 }
104 else
105 {
106 HW_SCE_p_func100(0x326cf88fU, 0x110c2ca0U, 0x5f2278c2U, 0x80aed16cU);
107 WR1_PROG(REG_1438H, 0x40000100U);
108
109 WR1_PROG(REG_1600H, 0x0000b400U);
110 WR1_PROG(REG_1600H, 0x00000001U);
111
112 WR1_PROG(REG_1608H, 0x81010000U);
113 WR1_PROG(REG_1400H, 0x02090005U);
114 WAIT_STS(REG_1404H, 30, 0);
115 WR1_PROG(REG_143CH, 0x00001800U);
116
117 HW_SCE_p_func100(0xd852480aU, 0xca956af3U, 0xc8cc3d1fU, 0xb6289b8fU);
118 WR1_PROG(REG_1438H, 0x40000110U);
119
120 WR1_PROG(REG_1400H, 0x02000009U);
121 WAIT_STS(REG_1404H, 30, 0);
122 WR1_PROG(REG_143CH, 0x00001800U);
123
124 HW_SCE_p_func100(0xeba2f11cU, 0x5b60edd4U, 0xd3cca0f2U, 0xa169fa76U);
125 WR1_PROG(REG_1600H, 0x00000821U);
126 WR1_PROG(REG_1608H, 0x81860001U);
127 WR1_PROG(REG_1400H, 0x02090019U);
128 WAIT_STS(REG_1404H, 30, 0);
129 WR1_PROG(REG_143CH, 0x00001800U);
130
131 WR1_PROG(REG_1444H, 0x000001c7U);
132 WR1_PROG(REG_1608H, 0x80020000U);
133 WAIT_STS(REG_1444H, 31, 1);
134 WR1_PROG(REG_1420H, InData_DOTFSEED[0]);
135 WAIT_STS(REG_1444H, 31, 1);
136 WR1_PROG(REG_1420H, InData_DOTFSEED[1]);
137 WR1_PROG(REG_1458H, 0x00000000U);
138
139 HW_SCE_p_func100(0xc4d9a145U, 0x220542ccU, 0x62d6cd1aU, 0x7f479897U);
140 WR1_PROG(REG_1438H, 0x40000140U);
141
142 WR1_PROG(REG_1608H, 0x81020000U);
143 WR1_PROG(REG_1400H, 0x02090009U);
144 WAIT_STS(REG_1404H, 30, 0);
145 WR1_PROG(REG_143CH, 0x00001800U);
146
147 HW_SCE_p_func102(0xe95c770dU, 0xc27b8eecU, 0x6556f195U, 0x0c00d495U);
148 WR1_PROG(REG_14BCH, 0x00000040U);
149 WAIT_STS(REG_142CH, 12, 0);
150
151 return FSP_SUCCESS;
152 }
153 }
154
155