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