lowrisc/registers/
kmac_regs.rs

1// Licensed under the Apache License, Version 2.0 or the MIT License.
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3// Copyright lowRISC contributors 2023.
4
5// Generated register constants for kmac.
6// Built for Earlgrey-M2.5.1-RC1-493-gedf5e35f5d
7// https://github.com/lowRISC/opentitan/tree/edf5e35f5d50a5377641c90a315109a351de7635
8// Tree status: clean
9// Build date: 2023-10-18T10:11:37
10
11// Original reference file: hw/ip/kmac/data/kmac.hjson
12use kernel::utilities::registers::ReadOnly;
13use kernel::utilities::registers::ReadWrite;
14use kernel::utilities::registers::WriteOnly;
15use kernel::utilities::registers::{register_bitfields, register_structs};
16/// Number of words for the secret key
17pub const KMAC_PARAM_NUM_WORDS_KEY: u32 = 16;
18/// Number of words for Encoded NsPrefix.
19pub const KMAC_PARAM_NUM_WORDS_PREFIX: u32 = 11;
20/// Number of entries in the message FIFO. Must match kmac_pkg::MsgFifoDepth.
21pub const KMAC_PARAM_NUM_ENTRIES_MSG_FIFO: u32 = 10;
22/// Number of bytes in a single entry of the message FIFO. Must match kmac_pkg::MsgWidth.
23pub const KMAC_PARAM_NUM_BYTES_MSG_FIFO_ENTRY: u32 = 8;
24/// Number of words for the LFSR seed used for entropy generation
25pub const KMAC_PARAM_NUM_SEEDS_ENTROPY_LFSR: u32 = 5;
26/// Number of alerts
27pub const KMAC_PARAM_NUM_ALERTS: u32 = 2;
28/// Register width
29pub const KMAC_PARAM_REG_WIDTH: u32 = 32;
30
31register_structs! {
32    pub KmacRegisters {
33        /// Interrupt State Register
34        (0x0000 => pub(crate) intr_state: ReadWrite<u32, INTR::Register>),
35        /// Interrupt Enable Register
36        (0x0004 => pub(crate) intr_enable: ReadWrite<u32, INTR::Register>),
37        /// Interrupt Test Register
38        (0x0008 => pub(crate) intr_test: ReadWrite<u32, INTR::Register>),
39        /// Alert Test Register
40        (0x000c => pub(crate) alert_test: ReadWrite<u32, ALERT_TEST::Register>),
41        /// Controls the configurability of !!CFG_SHADOWED register.
42        (0x0010 => pub(crate) cfg_regwen: ReadWrite<u32, CFG_REGWEN::Register>),
43        /// KMAC Configuration register.
44        (0x0014 => pub(crate) cfg_shadowed: ReadWrite<u32, CFG_SHADOWED::Register>),
45        /// KMAC/ SHA3 command register.
46        (0x0018 => pub(crate) cmd: ReadWrite<u32, CMD::Register>),
47        /// KMAC/SHA3 Status register.
48        (0x001c => pub(crate) status: ReadWrite<u32, STATUS::Register>),
49        /// Entropy Timer Periods.
50        (0x0020 => pub(crate) entropy_period: ReadWrite<u32, ENTROPY_PERIOD::Register>),
51        /// Entropy Refresh Counter
52        (0x0024 => pub(crate) entropy_refresh_hash_cnt: ReadWrite<u32, ENTROPY_REFRESH_HASH_CNT::Register>),
53        /// Entropy Refresh Threshold
54        (0x0028 => pub(crate) entropy_refresh_threshold_shadowed: ReadWrite<u32, ENTROPY_REFRESH_THRESHOLD_SHADOWED::Register>),
55        /// Entropy Seed
56        (0x002c => pub(crate) entropy_seed: [ReadWrite<u32, ENTROPY_SEED::Register>; 5]),
57        /// KMAC Secret Key
58        (0x0040 => pub(crate) key_share0: [ReadWrite<u32, KEY_SHARE0::Register>; 16]),
59        /// KMAC Secret Key, 2nd share.
60        (0x0080 => pub(crate) key_share1: [ReadWrite<u32, KEY_SHARE1::Register>; 16]),
61        /// Secret Key length in bit.
62        (0x00c0 => pub(crate) key_len: ReadWrite<u32, KEY_LEN::Register>),
63        /// cSHAKE Prefix register.
64        (0x00c4 => pub(crate) prefix: [ReadWrite<u32, PREFIX::Register>; 11]),
65        /// KMAC/SHA3 Error Code
66        (0x00f0 => pub(crate) err_code: ReadWrite<u32, ERR_CODE::Register>),
67        (0x00f4 => _reserved1),
68        /// Memory area: Keccak State (1600 bit) memory.
69        (0x0400 => pub(crate) state: [ReadOnly<u32>; 128]),
70        (0x0600 => _reserved2),
71        /// Memory area: Message FIFO.
72        (0x0800 => pub(crate) msg_fifo: [WriteOnly<u32>; 512]),
73        (0x1000 => @END),
74    }
75}
76
77register_bitfields![u32,
78    /// Common Interrupt Offsets
79    pub(crate) INTR [
80        KMAC_DONE OFFSET(0) NUMBITS(1) [],
81        FIFO_EMPTY OFFSET(1) NUMBITS(1) [],
82        KMAC_ERR OFFSET(2) NUMBITS(1) [],
83    ],
84    pub(crate) ALERT_TEST [
85        RECOV_OPERATION_ERR OFFSET(0) NUMBITS(1) [],
86        FATAL_FAULT_ERR OFFSET(1) NUMBITS(1) [],
87    ],
88    pub(crate) CFG_REGWEN [
89        EN OFFSET(0) NUMBITS(1) [],
90    ],
91    pub(crate) CFG_SHADOWED [
92        KMAC_EN OFFSET(0) NUMBITS(1) [],
93        KSTRENGTH OFFSET(1) NUMBITS(3) [
94            L128 = 0,
95            L224 = 1,
96            L256 = 2,
97            L384 = 3,
98            L512 = 4,
99        ],
100        MODE OFFSET(4) NUMBITS(2) [
101            SHA3 = 0,
102            SHAKE = 2,
103            CSHAKE = 3,
104        ],
105        MSG_ENDIANNESS OFFSET(8) NUMBITS(1) [],
106        STATE_ENDIANNESS OFFSET(9) NUMBITS(1) [],
107        SIDELOAD OFFSET(12) NUMBITS(1) [],
108        ENTROPY_MODE OFFSET(16) NUMBITS(2) [
109            IDLE_MODE = 0,
110            EDN_MODE = 1,
111            SW_MODE = 2,
112        ],
113        ENTROPY_FAST_PROCESS OFFSET(19) NUMBITS(1) [],
114        MSG_MASK OFFSET(20) NUMBITS(1) [],
115        ENTROPY_READY OFFSET(24) NUMBITS(1) [],
116        ERR_PROCESSED OFFSET(25) NUMBITS(1) [],
117        EN_UNSUPPORTED_MODESTRENGTH OFFSET(26) NUMBITS(1) [],
118    ],
119    pub(crate) CMD [
120        CMD OFFSET(0) NUMBITS(6) [
121            START = 29,
122            PROCESS = 46,
123            RUN = 49,
124            DONE = 22,
125        ],
126        ENTROPY_REQ OFFSET(8) NUMBITS(1) [],
127        HASH_CNT_CLR OFFSET(9) NUMBITS(1) [],
128    ],
129    pub(crate) STATUS [
130        SHA3_IDLE OFFSET(0) NUMBITS(1) [],
131        SHA3_ABSORB OFFSET(1) NUMBITS(1) [],
132        SHA3_SQUEEZE OFFSET(2) NUMBITS(1) [],
133        FIFO_DEPTH OFFSET(8) NUMBITS(5) [],
134        FIFO_EMPTY OFFSET(14) NUMBITS(1) [],
135        FIFO_FULL OFFSET(15) NUMBITS(1) [],
136        ALERT_FATAL_FAULT OFFSET(16) NUMBITS(1) [],
137        ALERT_RECOV_CTRL_UPDATE_ERR OFFSET(17) NUMBITS(1) [],
138    ],
139    pub(crate) ENTROPY_PERIOD [
140        PRESCALER OFFSET(0) NUMBITS(10) [],
141        WAIT_TIMER OFFSET(16) NUMBITS(16) [],
142    ],
143    pub(crate) ENTROPY_REFRESH_HASH_CNT [
144        HASH_CNT OFFSET(0) NUMBITS(10) [],
145    ],
146    pub(crate) ENTROPY_REFRESH_THRESHOLD_SHADOWED [
147        THRESHOLD OFFSET(0) NUMBITS(10) [],
148    ],
149    pub(crate) ENTROPY_SEED [
150        SEED_0 OFFSET(0) NUMBITS(32) [],
151    ],
152    pub(crate) KEY_SHARE0 [
153        KEY_0 OFFSET(0) NUMBITS(32) [],
154    ],
155    pub(crate) KEY_SHARE1 [
156        KEY_0 OFFSET(0) NUMBITS(32) [],
157    ],
158    pub(crate) KEY_LEN [
159        LEN OFFSET(0) NUMBITS(3) [
160            KEY128 = 0,
161            KEY192 = 1,
162            KEY256 = 2,
163            KEY384 = 3,
164            KEY512 = 4,
165        ],
166    ],
167    pub(crate) PREFIX [
168        PREFIX_0 OFFSET(0) NUMBITS(32) [],
169    ],
170    pub(crate) ERR_CODE [
171        ERR_CODE OFFSET(0) NUMBITS(32) [],
172    ],
173];
174
175// End generated register constants for kmac