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_Aes256OutputKeyForDotfSub(uint32_t InData_KeyIndex[],uint32_t InData_DOTFSEED[])9 fsp_err_t HW_SCE_Aes256OutputKeyForDotfSub (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, 0x002e0001U);
21 WR1_PROG(REG_144CH, 0x00000000U);
22
23 WR1_PROG(REG_1444H, 0x000000c7U);
24 WR1_PROG(REG_1608H, 0x800100e0U);
25 WAIT_STS(REG_1444H, 31, 1);
26 WR1_PROG(REG_1420H, InData_KeyIndex[0]);
27 WR1_PROG(REG_1458H, 0x00000000U);
28
29 WR1_PROG(REG_1444H, 0x000000a7U);
30 WR1_PROG(REG_1608H, 0x800103a0U);
31 WAIT_STS(REG_1444H, 31, 1);
32 WR1_PROG(REG_1420H, change_endian_long(0x0000002eU));
33 WR1_PROG(REG_1458H, 0x00000000U);
34
35 HW_SCE_p_func101(0xdabe7961U, 0x10213b18U, 0x12e3c09bU, 0xd572139eU);
36 HW_SCE_p_func043_r1();
37
38 WR1_PROG(REG_1600H, 0x0000b4e0U);
39 WR1_PROG(REG_1600H, 0x00000007U);
40
41 WR1_PROG(REG_1444H, 0x000000a7U);
42 WR1_PROG(REG_1608H, 0x800103a0U);
43 WAIT_STS(REG_1444H, 31, 1);
44 WR1_PROG(REG_1420H, change_endian_long(0x0000002eU));
45 WR1_PROG(REG_1458H, 0x00000000U);
46
47 HW_SCE_p_func101(0x71c0a329U, 0x307eb17cU, 0xbd2374e0U, 0xf33819c1U);
48 HW_SCE_p_func044_r1();
49
50 WR1_PROG(REG_1444H, 0x000007c2U);
51 WR1_PROG(REG_1A2CH, 0x40000100U);
52 WR1_PROG(REG_1A24H, 0xf7009d07U);
53 WAIT_STS(REG_1444H, 31, 1);
54 WR4_ADDR(REG_1420H, &InData_KeyIndex[1]);
55 WAIT_STS(REG_1444H, 31, 1);
56 WR4_ADDR(REG_1420H, &InData_KeyIndex[5]);
57
58 WR1_PROG(REG_1600H, 0x00000821U);
59 WR1_PROG(REG_1608H, 0x80880001U);
60 WR1_PROG(REG_1400H, 0x03420021U);
61 WAIT_STS(REG_1404H, 30, 0);
62 WR1_PROG(REG_143CH, 0x00001800U);
63
64 WR1_PROG(REG_1444H, 0x000003c2U);
65 WR1_PROG(REG_1A2CH, 0x40000000U);
66 WR1_PROG(REG_1A24H, 0x07008d05U);
67 WAIT_STS(REG_1444H, 31, 1);
68 WR4_ADDR(REG_1420H, &InData_KeyIndex[9]);
69
70 WR1_PROG(REG_1A24H, 0x9c100005U);
71 WR1_PROG(REG_1400H, 0x00820011U);
72 WAIT_STS(REG_1404H, 30, 0);
73 WR1_PROG(REG_143CH, 0x00001800U);
74
75 HW_SCE_p_func100(0x99882654U, 0xe58ef7fbU, 0x207784ddU, 0x35683c33U);
76 WR1_PROG(REG_143CH, 0x00400000U);
77
78 if (CHCK_STS(REG_143CH, 22, 1))
79 {
80 HW_SCE_p_func102(0x5d99896eU, 0xcb8525bdU, 0x2d3298fcU, 0x1a109d4dU);
81 WR1_PROG(REG_14BCH, 0x00000040U);
82 WAIT_STS(REG_142CH, 12, 0);
83
84 return FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL;
85 }
86 else
87 {
88 HW_SCE_p_func100(0x45c13811U, 0x156931d0U, 0xbc5d78afU, 0x5c7526fcU);
89 WR1_PROG(REG_1438H, 0x40000100U);
90
91 WR1_PROG(REG_1600H, 0x0000b400U);
92 WR1_PROG(REG_1600H, 0x00000002U);
93
94 WR1_PROG(REG_1608H, 0x81010000U);
95 WR1_PROG(REG_1400H, 0x02090005U);
96 WAIT_STS(REG_1404H, 30, 0);
97 WR1_PROG(REG_143CH, 0x00001800U);
98
99 HW_SCE_p_func100(0x71f34935U, 0x2c921c45U, 0x6d63bd19U, 0x0592b902U);
100 WR1_PROG(REG_1438H, 0x40000110U);
101
102 WR1_PROG(REG_1600H, 0x00000821U);
103 WR1_PROG(REG_1608H, 0x81880001U);
104 WR1_PROG(REG_1400H, 0x02090021U);
105 WAIT_STS(REG_1404H, 30, 0);
106 WR1_PROG(REG_143CH, 0x00001800U);
107
108 WR1_PROG(REG_1444H, 0x000001c7U);
109 WR1_PROG(REG_1608H, 0x80020000U);
110 WAIT_STS(REG_1444H, 31, 1);
111 WR1_PROG(REG_1420H, InData_DOTFSEED[0]);
112 WAIT_STS(REG_1444H, 31, 1);
113 WR1_PROG(REG_1420H, InData_DOTFSEED[1]);
114 WR1_PROG(REG_1458H, 0x00000000U);
115
116 HW_SCE_p_func100(0x73b828ddU, 0x05174a1dU, 0x6b79b6e3U, 0xcd54b55cU);
117 WR1_PROG(REG_1438H, 0x40000140U);
118
119 WR1_PROG(REG_1608H, 0x81020000U);
120 WR1_PROG(REG_1400H, 0x02090009U);
121 WAIT_STS(REG_1404H, 30, 0);
122 WR1_PROG(REG_143CH, 0x00001800U);
123
124 HW_SCE_p_func102(0xf4405c9aU, 0x80f98b59U, 0x30fdb0fbU, 0x82587f25U);
125 WR1_PROG(REG_14BCH, 0x00000040U);
126 WAIT_STS(REG_142CH, 12, 0);
127
128 return FSP_SUCCESS;
129 }
130 }
131