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