Key Manager (KM)

The Key Manager provides isolated key storage, random key generation, explicit revocation, and delivery to the cryptographic accelerators. The following sections describe its hardware architecture and firmware interface.

The immutable ROM firmware first initializes the Key Manager, then remains active to process SEP mailbox commands and service interrupts. It is both startup firmware and the resident runtime; "boot ROM" names the memory, not its only function. On an explicit firmware-load/execute command, ROM can hand control to mutable firmware in SRAM. The Key Manager Application ROM appendix of the Programmer’s Guide defines the implemented services, command protocol and handover rules.

1. Architecture

The Key Manager (KM) uses a PicoRV32 CPU, private memories and a Key and Policy Vault (KPV) to separate key management from SEP host execution. The host submits commands and supplied key material through a mailbox; KM firmware validates requests, accesses the vault and writes accelerator sideload registers. The host has no direct bus access to KM key storage.

The ROM is the resident command processor as well as the startup firmware. Its mailbox commands report the hardware, ROM and SRAM firmware versions and the recoverable-error status, generate keys from the DRBG, load SEP-supplied keys, revoke keys, transfer keys to the accelerators, shred accelerator sideload keys, capture the Adams Bridge ML-KEM shared key into the vault, set cold-domain OTP read-locks, and either load and execute mutable firmware in SRAM or keep the ROM running (the command summary in the Programmer’s Guide).

A single KM-mastered AXI4-Lite crossbar connects KMCSR, KPV, the DRBG sampler and mailbox to the private accelerator key interfaces and the SEP OTP/eFuse access path. The accelerator interfaces serve AES, HMAC, KMAC, OTBN and Adams Bridge. Address decoding separates their windows; command and key policy checks belong to KM firmware.

The Memory Map and Register Reference at the end of the chapter defines the address windows and all generated fields. The Key Manager Application ROM appendix of the Programmer’s Guide defines commands, validation and responses. ROM/SRAM parity detects errors but does not correct them; the ROM fault handler can report an unrecoverable fault and halt the CPU.

Figure 1 shows the Key Manager CPU, vault, mailbox, and accelerator interfaces.

Key Manager architecture: the CPU, its ROM and SRAM interfaces, the AXI4-Lite crossbar, the internal peripherals, and the crypto-engine key and eFuse ports
Figure 1. Key Manager architecture

White boxes are key_manager instances, cream boxes are interconnect or glue logic, and grey boxes lie outside key_manager. M and S mark the manager and subordinate side of each AXI4-Lite or AXI-Stream connection.

The CPU reaches the ROM and SRAM through direct memory ports rather than the crossbar. The ROM and SRAM hard macros are instantiated at integration level, so key_manager exposes rom_mem_* and sram_mem_* ports to them. Every other CPU access leaves the PicoRV32 AXI4-Lite master and is decoded by u_xbar.

The five engine ports reach only the key CSRs of each engine wrapper. In SEP each passes through its own isolation stage and carries no host traffic; the SEP host reaches the engines' data registers through the crypto interconnect, a path the KM does not see. For offsets in the MAP, CTRL and MMR register maps, the OTP/eFuse port replaces address bits [31:12] with OTP_EFUSE_REMAP_BASE[31:12] before driving efuse_req_o; it answers every other offset in the window with SLVERR.

A rising edge on wipe_state_i, or a CPU trap, zeroes the KPV and sets IRQ_STATUS.WIPE_STATE in KMCSR. The CPU trap also drives unrecoverable_err_o. u_kmcsr drives soft_rst_n into u_reset_conditioner (Figure 2). test_en_i selects the scan reset in u_reset_conditioner and drives the test inputs of u_xbar and u_mailbox.

1.1. Parameters

The Key Manager is configured through its ROM and SRAM sizes, the mailbox FIFO depth, the read-data behaviour of its memories, and the address of the eFuse controller. The main KM SRAM is 32 KB (8192 × 32-bit words), implemented with the scrambler macro scrambler_8192x32. The SRAM macro must return read data (rvalid) at least one cycle after the cycle in which it grants the read, because the SRAM interface descrambles and parity-checks each response with the address and byte strobes it captures at the grant.

The parameters of key_manager are listed in key_manager.

1.2. Reset Conditioning

Figure 2 shows how cold and warm reset requests are conditioned for the Key Manager.

Key Manager cold and warm reset conditioning
Figure 2. Key Manager cold and warm reset conditioning

Each reset net keeps its own colour. The cold and warm outputs of u_reset_conditioner run in two spines beside the instances, with the port name at each instance edge. A solid warm line drives a reset pin; a dashed warm line is a synchronous clear, which the instance samples on clk_i rather than using as a reset. Junction dots mark fan-out, and a gap in a line marks a crossing without connection. In test mode, test_en_i selects scan_rst_ni in both scan multiplexers.

Cold and warm resets have different scopes. Warm reset restarts the CPU and its control interfaces while retaining cold-domain state and memory contents. Retention across warm reset does not make SRAM or registers non-volatile, and reset must not be treated as a key-data wipe.

Table 1 identifies the two external reset inputs and their SEP connections.

Table 1. Key Manager reset inputs
Input port Polarity Synchronicity Integration tie-off (SEP)

cold_rst_ni

Active-low

Asynchronous

SEP system cold reset (sep_reset_n).

warm_rst_ni

Active-low

Synchronous to clk_i

SEP KM sub-component software-reset CSR bit (km_sw_rst_ni).

SEP isolates the Key Manager’s AXI paths before asserting the warm reset; see Resetting the Key Manager.

km_reset_conditioner produces two active-low outputs:

  • rst_cold_aasd_no: cold_rst_ni passes through prim_rst_sync for asynchronous assertion and synchronous release. There is no cold-path hold counter. Cold reset also asserts the warm path.

  • rst_warm_sync_no: either synchronous input, warm_rst_ni or KMCSR soft_rst_ni, triggers a hold counter. Reset remains asserted for at least MIN_RESET_CYCLES clocks (default 10) after the trigger releases. The cold output asynchronously resets this counter; cold reset is not sampled as a synchronous trigger.

scanmode_i selects scan_rst_ni to override both paths for DFT. Table 2 identifies resettable state; it does not imply that key-data flops or memory arrays have reset values.

Table 2. Key Manager reset-domain assignment
Reset domain Components

Cold only (rst_cold_aasd_no)

ROM/SRAM memory interfaces and parity logic; SRAM scrambler lock state (SCRAMBLER_CTRL.lock, SCRAMBLER_KEY); the SEP-facing mailbox FIFOs and state machines; shared mailbox separator/status bits; the BOOT_STATUS.COLD_BOOT_DONE flag; the OTP_READ_LOCK_COLD register; KPV scrambler enable/lock state.

Warm + cold (rst_warm_sync_no)

PicoRV32 CPU core; the KM-internal AXI4-Lite crossbar/fabric transaction state; the KMCSR warm subset (IRQ_STATUS/IRQ_ENABLE/IRQ_SET, SOFT_RST_CODE, RECOVERABLE_ERR, SRAM_LOCK write-lock bits, SRAM_LOCK violation bits, SRAM_EXEC_MODE, the ROM lockout latch, IRQ_ENTRY_ADDR/IRQ_ENTRY_LOCK, OTP_READ_LOCK, OTP_CHANGE_STATUS, and the firmware test-bench registers); DRBG sampler configuration/status controls and request state (datapath storage has no reset value); the KPV per-slot lock bits (lock_write, lock_use, seal); and the KM-side mailbox write/read state machines, IRQ, control, and status fields.

The internal AXI4-Lite fabric and generated register CPU interfaces reset on warm reset, discarding their in-flight transaction state. This is an internal reset boundary, not a completion or cancellation guarantee for an external accelerator transaction. Mailbox FIFO contents survive warm reset; ROM flushes the mailbox during boot before accepting new commands.

Writing 0x53525354 (ASCII "SRST") to KMCSR SOFT_RST_CODE triggers the warm path. BOOT_STATUS.COLD_BOOT_DONE survives it: ROM sets this flag after cold-boot initialization and reads it on subsequent boots to distinguish warm restart from cold initialization.

1.3. Mailbox Transport

The mailbox is a raw 32-bit word transport with two FIFOs: inbound SEP-to-KM and outbound KM-to-SEP, each at least 16 words deep. Hardware does not parse commands, validate CRCs or enforce key policy. Firmware defines the framing in Table 3 and Table 4; use the firmware reference for command legality, sequencing and error responses.

Table 3. Key Manager message with payload
header_crc8[31:24] message_length[23:16] function_id[15:8] sequence_number[7:0]

Data_1[31:0]

Data_2[31:0]

…

Data_N[31:0]

CRC32[31:0] - checksum

Command/response messages without a data payload (message_length = 0x00) drop the payload CRC32 and only contain the header (Table 4).

Table 4. Key Manager header-only message
header_crc8[31:24] 0x00 function_id[15:8] sequence_number[7:0]

Each FIFO word carries a separator bit that the sender sets on the last word of a message. The receiver uses it with the header length to check framing. Reads pop words; writes push words. Status reports fill level and empty/full conditions.

A write to a full FIFO drops the incoming word without changing queued data. An empty read has no data to consume. Both return SLVERR by default, with configuration allowing OKAY, and set the corresponding sticky overflow or underflow status. Each side has write-one-to-trigger flush control: either side flushes both FIFOs and sets the peer’s flushed-by-other status.

Each side independently enables its interrupt sources. Receive-data-available and transmit-space-available are level conditions; overflow, underflow and peer-flush are sticky conditions. Their enabled OR drives one interrupt to each side: directly to the KM CPU for the KM side, and to the SEP interrupt controller for the SEP side. KM firmware validates received words before executing a command and uses the outbound FIFO for responses and fault notifications. Error handling and resynchronization are firmware operations, not hardware command filtering.

Figure 3 shows the mailbox paths used for SEP commands and Key Manager responses.

Key Manager mailbox: KM-side and SEP-side AXI4-Lite ports, the inbound and outbound FIFOs, and the two register blocks
Figure 3. Key Manager mailbox transport

The KM CPU enters at the top and the SEP host at the bottom. Each side’s decode sends its WRITE_DATA address to a FIFO push and its READ_DATA address to a FIFO pop, and every other address to its own register block. Words therefore travel upwards through u_inbound_fifo and downwards through u_outbound_fifo. Each register block reads the status of both FIFOs, and a FLUSH from either block clears both of them. MAILBOX_DEPTH sets the depth of each FIFO; SEP instantiates the KM with 16 words.

1.4. Key Delivery

Keys reside in the KPV and reach accelerator sideload registers through the KM-mastered key path. Host-supplied material enters through mailbox commands; generated secret material is not returned through a direct host read path. The generated Section 3.1 defines the KM’s allocated windows.

Figure 4 separates the key-delivery path on the top row from the host-accessible data path on the bottom row. This separation does not establish resistance to physical fault injection or side-channel attacks. Firmware’s key-data CRC detects corruption; it is not a substitute for access control or a physical-attack guarantee.

Key path from the Key Manager through key isolation to an engine’s key registers and sideload port, beside the SEP host path to the engine’s control registers
Figure 4. Key Manager accelerator key path

The figure shows one engine wrapper; <eng> stands for otbn, aes, kmac or hmac. The KM port for that engine (otbn_req_o, aes_req_o, kmac_req_o or hmac_req_o) is a point-to-point 32-bit AXI4-Lite path. It passes only through u_<eng>_key_isolate in sep_crypto_axi_interconnect, which drains the path when sep_reset_ctrl requests isolation, and ends on the wrapper’s generated <eng>_wrapper_key_reg block. The KEY_SHARE0 and KEY_SHARE1 words are write-only, and reads return zero. The two shares and KEY_CTRL.KEY_VALID drive the engine’s keymgr_key_i sideload port; the XOR of the two shares is the key. The shares are 8 words each, or 12 words for OTBN.

The SEP host reaches the engine’s own registers on a separate path: the crypto interconnect demultiplexes the 64-bit AXI4 host bus in u_axi_demux, converts it to 32 bits in u_<eng>_axi_dw_converter and to AXI4-Lite in u_<eng>_axi_to_axi_lite, and passes it through u_<eng>_host_isolate, and the wrapper bridges it to the engine’s TL-UL port. isolate_req_i from sep_reset_ctrl drives both isolation stages. The host path does not reach the key registers, and the KM path does not reach the engine’s control registers. Adams Bridge follows the same pattern through u_abr_key_isolate and abr_wrapper_key_reg, where sep_abr_kv_shim turns the registers into Adams Bridge key-vault reads (see Section 1.5).

1.5. Adams Bridge Key Sideload Interfaces

The KM provides dedicated sideload interfaces to the Adams Bridge (ABR) post-quantum engine, exposed as a single AXI4-Lite register block mapped at 0x0001_C000–0x0001_C7FF. The block has two directions: four seed inputs the KM drives into ABR, and one shared-key output ABR drives back into the KM.

Seed sideload inputs (KM → ABR). The four seed inputs carry key material the KM side-loads into ABR (Table 5).

Table 5. Adams Bridge seed sideload inputs
Interface Width Description

ML-DSA seed

256-bit

Seed for ML-DSA key generation.

ML-KEM seed D

256-bit

ML-KEM seed D.

ML-KEM seed Z

256-bit

ML-KEM seed Z.

ML-KEM message

256-bit

ML-KEM message input.

Each seed uses the two-share masked layout (two key-share register banks whose XOR is the real value, plus a key_valid bit) and is write-only to KM firmware. The seeds are valid dest_valid destinations (bits 4–7), so they are targets of CMD_KEY_TRANSFER and CMD_ENGINE_SHRED, and ROM shreds them during the mutable-firmware handover. Word order matches the other engines: share word i is word i of the seed the engine consumes, as stated in ABR seed word order.

ML-KEM shared-key output (ABR → KM). ABR computes an ML-KEM shared key and presents it to the KM. The interface comprises a 256-bit (8-word) key register array, a KEY_CTRL register holding key_valid, and an IRQ_STATUS / IRQ_ENABLE interrupt pair.

  • The key words and KEY_CTRL.key_valid are read-only to KM firmware: hardware sets key_valid and loads the key words when ABR delivers a new shared key. Firmware consumes the key by writing KEY_CTRL = 0, which clears key_valid and hardware-zeroizes (hwclr) the key words. Software can clear key_valid but cannot set it.

  • IRQ_STATUS.key_valid is a sticky, write-one-to-clear bit (hwset
    stickybit + onwrite=woclr). Hardware sets it on the key-ready event; firmware clears it by writing 1. The masked interrupt to the KM CPU is IRQ_STATUS & IRQ_ENABLE, on a dedicated PicoRV32 interrupt (bit 5).

The KM firmware ISR acknowledges the IRQ by clearing IRQ_STATUS and flags the main loop; it does not consume the key. The shared key is later captured into a KPV slot in response to a SEP CMD_ABR_SK_TRANSFER command (see the firmware documentation).

1.6. Key Manager CPU Interrupt Processing

The PicoRV32 receives three separate external interrupt groups:

Table 6. KM CPU interrupt routing
CPU IRQ bit Source Service boundary

3

KMCSR

Sticky hardware events, masked by IRQ_ENABLE; see Table 9.

4

Mailbox

Enabled level and sticky FIFO conditions; independent of KMCSR IRQ_STATUS.

5

Adams Bridge shared key

Shared-key-ready status; see Section 1.5.

KMCSR IRQ_SET injects its corresponding status events for ISR testing. Mailbox and Adams Bridge interrupts retain their own status/enable controls. The CPU’s interrupt mask is an additional level of control. A reported event, an enabled interrupt and a CPU trap are distinct; see Unrecoverable Faults.

1.7. Host Coordination

The SEP host submits key-load and key-transfer commands through the mailbox. The Key Manager validates the request and policy before accessing the vault or delivering key material to a cryptographic engine.

Figure 5 shows the command, validation, vault-access, and key-delivery sequence.

SEP host and Key Manager key-load and key-transfer sequence
Figure 5. SEP host and Key Manager key-load and key-transfer sequence

Time runs downwards. Each arrow is a mailbox word push or pop, a register write or read, or an interrupt, and each white box is a check or action the KM firmware performs without leaving the CPU. The figure shows the success path. A failed check ends the command with a RESP_CMD error code and leaves the KPV and the key registry unchanged.

On a key load, the firmware registers the handle before it writes the KPV, and destroys the handle again if a KPV write fails. On a key transfer, the firmware reads the key slots twice: once to check their CRC-32C against the key registry, and again to write the key. Each requested engine receives the key as two key shares whose XOR is the key, the first a DRBG mask, before its key-valid bit is set. The engines are written in the order of their DEST_ENGINE bits, and the first failed write ends the transfer.

1.8. Key and Policy Vault (KPV)

The KPV exposes 64 slots through one KM-only AXI4-Lite interface. Each slot contains 512 bits (16 words) of key data and a 32-bit CTRL register. Multi-slot keys, such as RSA3K material, require consecutive slots; the firmware registry tracks the span and the used words in the final slot. Hardware has no span field.

Table 7. KPV per-slot controls
Field Behavior

lock_write[0]

Write-one-to-set. Blocks key-data writes with SLVERR; does not block CTRL writes or erase. Hardware holds it set while seal is set.

lock_use[1]

Write-one-to-set. Key-data reads return zero with SLVERR. Also set when an erase completes on a sealed slot.

erase[2]

Write one to overwrite all 16 words with pseudorandom data. No lock blocks erase. Poll until hardware clears the bit. If the slot is unsealed at completion, all CTRL bits clear and the slot is reusable. If sealed at completion, it is retired: lock_write, lock_use and seal remain set.

seal[3]

Write-one-to-set. Implies a write lock. Erase destroys the contents without making the slot reusable; taking a seal during an erase also causes retirement.

[31:4]

Reserved.

The lock/seal bits clear on warm or cold reset. Erase uses the shared scrambler and key-data write port, so key-data accesses during an erase are not defined. The KPV driver in the Key Manager Application ROM appendix of the Programmer’s Guide gives the erase sequence.

Sealed and retired slots. A slot with seal set is sealed: readable, but not writable, because hardware holds lock_write set alongside the seal. That surviving lock_write is evidence that the slot holds what it held when the seal was taken, which is what lets firmware that inherits the vault after a handover trust material provisioned before it. A write lock on its own would prove nothing, since an erase clears it and frees the slot to be rewritten with chosen material and re-locked.

Erasing a sealed slot is still permitted, and leaves it retired: lock_write held, lock_use set, seal still set, and the data destroyed. A retired slot can be neither read, rewritten nor reused until the next warm reset, and repeating the erase changes nothing. Revocation and reuse are therefore separate: firmware can destroy a sealed key it no longer trusts without handing the slot to whoever asked for the destruction.

An emergency wipe also releases sealed and retired slots by clearing key data and all CTRL bits. The safety of that release depends on CPU containment: a trap already halts the CPU, whereas an externally requested wipe requires firmware or host coordination (Section 1.10). Do not assume that asserting wipe_state_i directly halts CPU execution.

CTRL resets to zero. Key-entry data flops have no reset value and power up undefined; cold or warm reset alone does not overwrite their contents.

1.9. KPV Scrambling

The KPV supports address and data scrambling during normal operation for all key entry data reads and writes, using the same PRESENT-based approach as SRAM scrambling. When enabled, the stored representation of key data is scrambled; the KM port sees the logical (unscrambled) data on the bus, with scrambling/descrambling performed transparently by the KPV.

The KPV has a scrambler key register (32-bit) and a scrambler control register with an enable bit and a lock bit. These registers are accessible only via the KM port. The lock bit is write-one-only (0→1): software sets lock by writing 1; writing 0 has no effect; lock cannot be cleared until the next cold KM reset. The KPV scrambler enable and lock are state in the cold reset domain — they are preserved across a warm reset and cleared only by a cold reset. Scrambling is disabled by default after a cold reset.

When scrambling is enabled, the KPV uses the same scrambler algorithm as SRAM but sized for 1024×32 words (64 slots × 16 words). The scrambler address input is the linear register index (0..1023): slot_index × 16
word_index. Address scrambling maps the logical index to a scrambled physical storage index. Data is scrambled before storage and descrambled after retrieval. Only key entry data words are scrambled; CTRL registers are not scrambled.

The KPV scrambler key register has no reset value (powers up random/undefined for security). The scrambler control register (enable and lock) resets to 0. On an emergency wipe (rising edge of wipe_state), the entire KPV is reset to zero including key data, control registers, and the KPV scrambler key and control registers.

1.10. Wipe State

Hardware forms a wipe event from wipe_state_i | cpu_trap and detects its rising edge. The resulting pulse clears all 1024 KPV data words, all 64 slot CTRL registers, and KPV scrambler key/enable/lock state on the clock edge. It also records the KMCSR wipe event. This hardware action covers the KPV; it does not itself scrub SRAM, mailbox data or accelerator sideload registers.

In SEP, sep_cpu_ctrl.KM_WIPE_CTRL.wipe_state drives the external input. Hold it high for at least one complete KM clock period. Return it to zero before requesting another rising edge; the software-controlled registered level provides the required hold. SEP does not connect a hardware tamper or alarm source to this input. A CPU trap independently triggers the same KPV wipe and asserts unrecoverable_err_o while the CPU is halted.

An external wipe does not force a CPU trap in hardware. The ROM enables the wipe interrupt and treats it as an unrecoverable fault, but that response depends on interrupt delivery and execution of its handler. Software that masks the event or replaces ROM must not assume the CPU has stopped. The host/integrator must prevent continued use of the released vault after an external wipe until recovery resets the CPU. Warm reset clears the trap and re-enters ROM; it is not itself the KPV data erase mechanism.

1.11. Scan and Scan-Dump Protection

The complete KM is Class 2 under SEP’s scan-chain protection policy: processor, vault, KMCSR, mailbox, entropy sampler, scramblers, internal fabric, reset logic and register blocks. Including non-secret control state avoids relying on a per-register classification.

  • Test scanning is permitted only in secure test mode. The dedicated-chain DFT controller admits test commands only with secure_tm = 1. At the eFuse shadow boundary, this mode replaces the four Class 1 sources (*_UID and CLASS_KEY) with valid zero values before KM captures them. Those source assets remain outside every scan chain. Public identities, lifecycle and demotion policy remain available.

  • Scan dump is never permitted. No lifecycle state, owner or combination of *_DBG feature enables may turn a test command into a dump. Feature controls determine whether the chain is reachable; the command-class restriction enforces the no-dump policy. General-logic debug enablement does not grant access to the KM secret-bearing chain.

KM-local copies of the UIDs, class key and public identities clear on cold and warm reset (including firmware soft reset) and reload from the shadow bus after release. Lifecycle/demotion captures persist across warm reset. Firmware access locks are independent of scan protection.

Writable KM SRAM is a Class 2 companion memory because it can retain key, message and firmware working state. Its memory-test policy must also forbid dump. Immutable ROM cannot retain runtime secrets and is excluded. These requirements define the integration boundary; the local KM RTL alone does not establish implementation of the external DFT controller.

1.12. Key Manager Control and Status Registers (KMCSR)

KMCSR manages interrupts, reset requests, execution permissions, memory protection and OTP shadow readout. It is separate from the KPV and DRBG sampler banks. km_csr supplies the behavior around generated km_csr_reg; Section 3.2.2 supplies every offset and field definition. The operating contracts below supplement that generated map.

The VERSION register (offset 0x000) is a read-only register that reports the Key Manager hardware revision using semantic versioning. It uses the following canonical 32-bit layout, mandated so all software and testbenches decode the version identically (Table 8).

Table 8. Key Manager VERSION fields
Bits Field Description

[7:0]

PATCH

Patch version component.

[15:8]

MINOR

Minor version component.

[23:16]

MAJOR

Major version component.

[31:24]

RESERVED

Reserved; reads as 0.

The current hardware revision reads as version 1.0.0 (MAJOR=1, MINOR=0, PATCH=0) after reset with no software initialization. The register is read-only: a write completes with an AXI SLVERR response and does not change the value.

The interrupt aggregation logic collects twelve hardware event sources into a single CPU interrupt. Each source has a sticky status bit in IRQ_STATUS (write-one-to-clear), a mask bit in IRQ_ENABLE, and a software-trigger bit in IRQ_SET for ISR testing. The aggregated interrupt output is the logical OR of the masked status bits (IRQ_STATUS & IRQ_ENABLE).

Table 9 maps hardware events to the sticky interrupt-status bits.

Table 9. Key Manager interrupt sources
Bit Source Description

0

ROM Parity Error

Parity mismatch detected on a ROM read.

1

SRAM Parity Error

Parity mismatch detected on an SRAM read.

2

ROM Write Error

A write was attempted to the read-only ROM region.

3

SRAM Write-Lock Violation

A write targeted a locked 1 KB SRAM region.

4

AXI SLVERR

An AXI4-Lite slave returned SLVERR.

5

AXI DECERR

An AXI4-Lite slave returned DECERR.

6

DRBG Error

The DRBG sampler reported a timeout or stream error.

7

Wipe State

Rising edge detected on the wipe_state_i input or a CPU trap.

8

OTP Change

A monitored OTP readout field’s decoded value changed (see OTP_CHANGE_STATUS).

9

OTP Integrity Violation

OTP dual-rail integrity violation (value and complement not complementary).

10

Execute Violation

Instruction fetch from a non-whitelisted (non-executable) memory region, excluding the ROM.

11

ROM Access Violation

ROM instruction fetch or data read attempted after the ROM lockout engaged.

Bits [31:12] of IRQ_STATUS are reserved. Two interrupt sources are not part of the KMCSR IRQ_STATUS aggregation and are serviced separately: the mailbox sources (FIFO data-available/space-available and overflow/underflow/flush conditions), and the Adams Bridge ML-KEM shared-key interrupt on its own PicoRV32 interrupt (bit 5, see Section 1.5).

The CPU IRQ entry vector is programmable through two registers. IRQ_ENTRY_ADDR holds the effective IRQ entry address and resets to the built-in default 0x0000_0010; firmware may write any 32-bit value (the hardware performs no alignment or validity checking) and the register is always readable, returning the current effective entry address. IRQ_ENTRY_LOCK is a write-one-only lock bit that can only transition from 0 to 1: while it is 0 firmware may reprogram IRQ_ENTRY_ADDR freely; once it is 1, writes to IRQ_ENTRY_ADDR are ignored (the value remains readable and unchanged) and further writes to IRQ_ENTRY_LOCK have no effect. Both registers are in the warm reset domain: every reset that re-enters ROM (cold, external warm, and KM soft reset) restores IRQ_ENTRY_ADDR to 0x0000_0010 and clears IRQ_ENTRY_LOCK.

SRAM_LOCK controls writes to 32 SRAM regions of 1 KB each; see Section 1.18 for reset and handover policy. SRAM scrambling key/enable/lock state is cold-domain state and survives warm reset. The soft-reset code and cold-boot flag are described under Reset Conditioning.

Execute-Permission Whitelist (NX)

The PicoRV32 enforces a whitelist of executable memory regions on every committed instruction fetch (mem_valid && mem_instr). Any fetch from outside the whitelist immediately pulses KMCSR.IRQ_STATUS.EXEC_VIOLATION, which (if unmasked) routes to the ISR and triggers the unrecoverable fault ROM_KM_UFAULT_EXEC. A ROM fetch refused by the ROM lockout described below is reported on ROM_ACCESS_VIOLATION instead, so the two bits are disjoint.

The whitelist mode is controlled by the KMCSR.SRAM_EXEC_MODE.enable bit (write-1-only, warm-reset domain) (Table 10).

Table 10. Key Manager executable regions
enable Executable regions Forbidden regions

0 (ROM mode)

ROM (0x0000–0x3FFF) and VROM*

All SRAM; Peripheral/AXI

1 (SRAM mode)

Write-locked 1 KB SRAM regions (SRAM_LOCK.lock_bits), VROM*, and the ROM until the lockout engages

Unlocked SRAM; Peripheral/AXI; the ROM once the lockout engages

The fetch-region index is a plain slice of the byte address, which works only because the SRAM base (0x0000_8000) is aligned to the SRAM size; it is the same slice km_sram_interface uses to check data writes, so the two views of a region can never disagree.

  • VROM is the virtual ROM window, 0x1000_0000–0x1000_FFFF. Only a simulation build that defines OCAH_KM_VROM decodes it; there it is executable in both modes and exempt from the ROM lockout, and it carries no security requirement. Without the define the window is an unmapped address: a load or store answers DECERR, and a fetch pulses EXEC_VIOLATION.

For the define and the builds it is rejected in, see Key manager defines in the Integrator Guide.

SRAM_EXEC_MODE.enable is set by the stack-less handover assembly (rom_handover_jump.S) immediately before the jalr to mutable firmware, after SRAM write-lock regions have already been committed. This minimises the window between enabling SRAM execution and the first fetch from SRAM. The bit is write-1-only and cleared by warm reset, so the ROM-only whitelist is re-applied on every boot cycle.

ROM Lockout

Setting SRAM_EXEC_MODE.enable exchanges the ROM for write-locked SRAM rather than adding to the whitelist. Were it purely additive, mutable firmware would inherit read and fetch access to the ROM that handed control to it, leaving the ROM’s key-management routines and its rom_persist structure reachable by code the ROM does not trust.

The exchange is staged so that the handover can complete. Writing the bit only arms the lockout; the lockout engages on the first committed instruction fetch from a write-locked SRAM address, which is the point at which mutable firmware actually begins executing. Everything the handover assembly runs after its arming store — the store itself, the register clears, the jalr — is ROM code, and remains legal precisely because the lockout has not engaged yet. Engaging on a fetch rather than on any ROM access also keeps the rule independent of incidental data traffic: ROM code reads rom_persist, which itself lives in a write-locked SRAM region.

Once engaged, the lockout blocks ROM instruction fetches and ROM data reads until the next warm or cold reset. The latch is in the warm reset domain, the same domain as SRAM_EXEC_MODE.enable, so the transition is one-way within a boot and every reset that re-enters ROM restores ROM access. ROM writes are unaffected and continue to raise ROM_WRITE_ERR.

Blocked access behaviour. A blocked access returns zeros; ROM content is never delivered. What follows depends on the access type:

  • A blocked data read raises ROM_ACCESS_VIOLATION and nothing else. Zero is a legitimate data value, so no decode and no trap occur.

  • A blocked instruction fetch raises ROM_ACCESS_VIOLATION and additionally feeds an all-zeros instruction stream, which the PicoRV32 CATCH_ILLINSN logic traps as an illegal instruction.

The two reports are ordered by causality rather than by arbitration. The violation is combinational in the cycle of the blocked access, whereas the illegal instruction cannot be detected until the zero word has been returned and decoded, which is strictly later. Since IRQ_STATUS is sticky, the violation bit is always recorded first.

Which mechanism acts depends on the interrupt mask, and after handover only one does. Handover leaves all CPU interrupts masked, so the illegal instruction takes the PicoRV32 trap state rather than an interrupt: the core halts, unrecoverable_err_o asserts, and the KPV is wiped. The ROM_ACCESS_VIOLATION interrupt is inert in that state — it sets its sticky bit but has nowhere to vector, because the ROM ISR it would have vectored to is itself in the ROM the lockout has just revoked. A real post-handover breach therefore halts the KM without emitting a mailbox fault code; ROM_KM_UFAULT_ROM_ACCESS is reportable only while the ROM is still live (via IRQ_SET) or through a vector that mutable firmware installed itself.

Both mechanisms are retained because they do different jobs. The violation bit is the diagnostic that distinguishes a lockout breach from any other illegal-instruction halt; the trap is the containment, and it requires no firmware cooperation, no enabled interrupt, and no reachable handler.

Error Events

Unrecoverable Faults

These events cause the CPU to halt when the corresponding interrupt is unmasked and the ISR determines recovery is not possible. They include, but are not limited to, the following conditions:

  • CPU trap events

  • ROM or SRAM parity errors

  • Invalid writes to ROM or SRAM

  • AXI bus faults (SLVERR or DECERR)

  • Instruction fetch from a non-whitelisted (non-executable) memory region

  • ROM instruction fetch or data read after the ROM lockout engaged

  • Any other unhandled exception or fault

The PicoRV32 includes a trap state that asserts a trap signal. When the CPU enters this state execution halts. The CPU will enter this state under the following conditions:

  • An EBREAK or other illegal instruction is encountered and the associated interrupt is masked.

  • The CPU encounters a misaligned access and the associated interrupt is masked.

  • An EBREAK or other illegal instruction is encountered within an ISR.

If an ISR determines that an error event is not recoverable, it will call the EBREAK instruction to trap and halt the core. The CPU trap signal is passed out of KM to indicate an unrecoverable fault. This signal indicates the KM has encountered an unrecoverable fault and is no longer executing (it will not respond to further commands). The signal remains asserted for as long as the KM remains in the trap state. The trap is cleared by resetting the KM CPU — either a cold reset or a warm reset (the PicoRV32 core is in the warm reset domain) restarts the core and clears this signal.

Recoverable Faults

These events do not cause the CPU to halt. They include:

  • Receiving corrupt or malformed command messages.

  • Detection of possible tampering or attack conditions that are not immediately terminal.

  • Any one of the previously listed error interrupts from which the corresponding ISR is able to gracefully recover.

The KM provides an output signal that indicates when a recoverable fault has been successfully handled. This signal is driven by a dedicated register bit in the KMCSR. When an ISR recovers gracefully from an error, it sets this register bit. The bit remains set until the SEP sends a firmware command to the KM to clear it (KM firmware clears the register bit in response to that command).

1.13. DRBG Sampler

The sampler bridges a CPU DATA read to the selected 32-bit entropy stream. It is an AXI4-Stream sink: TREADY is an output, and TVALID, TDATA[31:0] and TSTRB[3:0] are inputs. Availability is not guaranteed; a pending read waits for a word or an enabled timeout.

1.13.1. Reads, prefetch and register access

A DATA read consumes a prefetched word if one is available. Otherwise the sampler asserts TREADY and assembles four valid bytes before completing the AXI read. TSTRB selects bytes to pack in beat order, walking lanes 0 through 3; partial beats require further handshakes. Bytes beyond the four needed for the current word are not carried into the next word.

CFG.PREFETCH enables a single prefetched word. Consuming it through DATA invalidates it; prefetch alone does not increment the direct-read success counter. Disabling prefetch clears its data/valid state. The read-only PREFETCH_DATA register exposes the stored word for debugging and does not consume it, so repeated debug reads are not fresh random samples.

Table 11. DRBG sampler register behavior
Register or field Access and meaning

DATA

Read obtains a sample; writes return SLVERR.

CFG.PREFETCH[0]

Read/write; reset 0 (disabled).

CFG.TIMEOUT[31:16]

Read/write active-read wait budget in clocks; reset 256. The counter loads TIMEOUT - 1 and times out after exactly TIMEOUT active cycles. Zero disables timeout. Background prefetch has no timeout.

STATUS.DRBG_READY[0]

Read-only indication of input TVALID.

STATUS.PREFETCHED[1]

Read-only indication that a prefetched word is available.

STATUS.TIMEOUT_ERR[2]

Sticky timeout indication; write one to clear.

STATUS.STREAM_ERR[3]

Sticky stream-protocol error; write one to clear.

STATUS.COUNT_BAD[15:8]

Timeout/stream-error count, saturating at 0xFF. Write nonzero to clear; zero has no effect.

STATUS.COUNT_GOOD[31:16]

Counts only reads completed through ST_RESPOND, excluding prefetched words, saturating at 0xFFFF. Write nonzero to clear; zero has no effect.

PREFETCH_DATA

Read-only debug view; writes return SLVERR.

Because prefetched reads bypass ST_RESPOND, COUNT_GOOD is not a total of all DATA reads when prefetch is enabled.

1.13.2. Errors and reset

Timeout completes an active read with SLVERR and zero data. The protocol monitor detects a different event: previous-cycle TVALID=1, TREADY=0, followed by TVALID=0 (withdrawal before handshake). It sets STREAM_ERR, increments COUNT_BAD and pulses the KMCSR DRBG error source even when no read is active. If the active FSM is requesting or assembling a word, it also returns SLVERR with zero data. A prefetch in progress is discarded. A TVALID drop after a completed handshake is not this violation.

The sampler is in the KM warm-reset domain, not the TRNG reset domain. Quiesce KM before resetting the TRNG. Resetting the producer alone can withdraw an unaccepted beat or interrupt byte assembly; it does not clear partial bytes held by the sampler. Holding KM in software reset clears sampler control/assembly state before the source restarts.

Warm or cold KM reset restores configuration defaults, counters, error bits, valid flags and request/assembly control. Data registers (prefetch data, assembly storage and the response slot) have no reset value; invalidating their control state is not a guaranteed data scrub.

Table 12. Key Manager DRBG sampler states
State Active DATA-read behavior

ST_IDLE

Returns an available prefetch without entering ST_RESPOND; otherwise enters ST_REQUEST for a pending read.

ST_REQUEST

Asserts TREADY. A full word advances to ST_RESPOND; partial data advances to ST_BYTE_ASSEMBLY.

ST_BYTE_ASSEMBLY

Keeps TREADY asserted and packs valid bytes until four are available.

ST_RESPOND

Completes the assembled read with OKAY and increments COUNT_GOOD; returns to idle.

ST_TIMEOUT

Completes with SLVERR and zero data after the active wait budget expires; returns to idle.

ST_STREAM_ERR

Completes with SLVERR and zero data after a detected withdrawal during request/assembly; returns to idle.

A separate prefetch FSM uses the request/assembly states. It accepts beats only when there is no active CPU DATA read. In the active request/assembly states, a stream error takes priority over timeout, and timeout takes priority over accepting a completing beat.

1.14. OTP Inputs and Readout

The KM consumes OTP-derived material over a private hardwired bundle so the values cannot be spoofed by software. SEP dual-rail-encodes each 256-bit field at the SEP-to-KM boundary ({~value, value}) from the sensed eFuse shadow:

  • the fuse-provisioned secrets — CHIPLET_UID, SIP_UID, SYS_UID, CLASS_KEY;

  • the three 256-bit public identities — SEP_CHIPLET_ID, SEP_SIP_ID, SEP_SYS_ID — one per owner;

  • the life-cycle state.

UID delivery and protection. The UIDs are held in a KM-local copy. The KM’s own warm-domain read-lock protects that copy at mutable-firmware handover (see UID provisioning and access) so mutable firmware cannot read it. This KM-local lock is separate from, and additional to, the eFuse controller’s own locks.

Public identity delivery. The three public identity fuses take the same dual-rail encode as the secrets. They remain on the KM port in secure test mode: the eFuse controller blanks only the four secrets on the hardware shadow output. The eFuse per-field read-lock bits (LOCKS[59], [61], [63]) hide software and JTAG shadow reads; they do not blank the hardwired KM port. The KM’s own OTP_READ_LOCK and OTP_READ_LOCK_COLD bits zero the KMCSR readout words only.

Life-cycle state. The life-cycle state is hardwired into the KM as authoritative, software-readable status. Being non-secret it is neither locked nor wiped. The key registry does not bind keys to it.

eFuse access path. The KM also has a programmatic (AXI-Lite) path to the eFuse controller — for example to request a read or a program operation. That path is treated exactly like a system-host access: same access filtering, and it honors the eFuse controller’s native per-field read/write locks, so the KM gains no read privilege over the fuse array beyond the SEP host’s.

Demotion and PCR. The owner demotion state is hardwired from the Life Cycle Controller (LCC). A PCR Vault (PCRV) and PCR-change interrupt are not present in this integration.

KMCSR readout registers. The OTP-derived fields above are exposed to KM firmware in the KMCSR region as hardware-driven, read-only registers. Each field is delivered to the KMCSR as dual-rail complementary values ({~value, value}) and decoded within the KMCSR, which continuously verifies the complement relationship.

Table 13 lists the OTP-derived fields exposed to Key Manager firmware.

Table 13. Key Manager OTP readout registers
Register Width Contents

OTP_LIFE_CYCLE

8-bit

Differential-encoded life-cycle state {~lc[3:0], lc[3:0]}.

OTP_DEMOTION_STATE

4-bit

Two 1-bit demotion flags, each differentially encoded into 2 bits: {demote_2[1:0], demote_1[1:0]}.

OTP_CHIPLET_UID_VAL/CPL_0..7

8 × 32-bit

256-bit CHIPLET_UID dual-rail words.

OTP_SIP_UID_VAL/CPL_0..7

8 × 32-bit

256-bit SIP_UID dual-rail words.

OTP_SYS_UID_VAL/CPL_0..7

8 × 32-bit

256-bit SYS_UID dual-rail words.

OTP_CLASS_KEY_VAL/CPL_0..7

8 × 32-bit

256-bit CLASS_KEY dual-rail words.

OTP_SEP_CHIPLET_ID_VAL/CPL_0..7

8 × 32-bit

256-bit SEP_CHIPLET_ID dual-rail words.

OTP_SEP_SIP_ID_VAL/CPL_0..7

8 × 32-bit

256-bit SEP_SIP_ID dual-rail words.

OTP_SEP_SYS_ID_VAL/CPL_0..7

8 × 32-bit

256-bit SEP_SYS_ID dual-rail words.

OTP_READ_LOCK

9-bit

Write-one-to-set read-lock bits (warm reset domain), one per field. Cleared by warm or cold reset.

OTP_READ_LOCK_COLD

9-bit

Write-one-to-set read-lock bits (cold reset domain), one per field. Survives warm reset; cleared only by cold reset. Effective lock = OTP_READ_LOCK | OTP_READ_LOCK_COLD.

OTP_CHANGE_STATUS

9-bit

Sticky write-1-to-clear flags: set when a monitored field’s decoded value changes.

Dual-rail integrity. The hardware continuously checks that each value word is the bitwise inverse of its complement word. Any violation raises the OTP_SIGINT interrupt, which ROM firmware treats as an unrecoverable fault. This applies to the public identity fields as much as to the secrets.

Change detection. When a monitored field’s decoded value changes, the hardware sets the corresponding OTP_CHANGE_STATUS bit and raises the OTP_CHANGE interrupt. ROM firmware reads the status, invokes an overridable change hook, and clears the flag. Spurious change events are suppressed until the capture history is valid after cold or warm reset.

Unique Identifiers (UID) — provisioning and access

The KM receives three fuse-provisioned Unique Identifiers — CHIPLET_UID, SIP_UID, and SYS_UID (256 bits each) — provisioned respectively by the chiplet creator, the SiP owner, and the system owner. ROM does not derive keys from them.

The CPU services mailbox commands from ROM and supports loading and executing SRAM firmware. Before handing control to that firmware, ROM applies the OTP read locks and wipes secrets from the shared execution environment. A warm reset returns the CPU to ROM, where the handover protections are re-established.

Concretely, this safeguard is the OTP_READ_LOCK register: one write-one-to-set bit per OTP readout field (life-cycle, demotion, the four 256-bit secrets, and the three 256-bit public identities). Setting a bit causes the hardware to return zero for that field’s value and complement words. ROM applies the lock using a triple-write convention (three consecutive writes) so it commits even under a single-bit glitch. OTP_CHANGE_STATUS shares the same warm reset domain for the same reasons.

ROM does not lock the public identity fields at handover, since concealing them buys nothing. Their lock bits suppress KMCSR readback like those of the secret fields.

A parallel cold-reset-domain register, OTP_READ_LOCK_COLD, provides the same write-one-to-set, per-field locking semantics but survives warm reset (including soft reset) and is cleared only by cold reset. The effective read-lock for each field is the OR of the corresponding bits in OTP_READ_LOCK and OTP_READ_LOCK_COLD; either register alone is sufficient to suppress CSR readback. The SEP host can set cold-domain lock bits at any time by issuing CMD_OTP_READ_LOCK_COLD (0x28) over the KM mailbox. This allows the SEP host to establish read-locks that persist across warm resets for the entire duration of a power cycle, independently of the warm-reset lock applied by ROM firmware.

1.15. CRC Accelerator

The KM CPU is fitted with a CRC accelerator attached through the PicoRV32 PCPI (Pico Co-Processor Interface). It provides hardware versions of the CRC functions the firmware uses on its high-value integrity paths — message header CRC-8/ROHC, message payload CRC-32C, and key-data integrity CRC-32C — so these computations consume far less CPU time than a software loop. The accelerator is always present in the KM build; firmware invokes it unconditionally and does not retain a software fallback path.

The accelerator exposes three R-type custom instructions on the PicoRV32 custom0 opcode. Each instruction takes two operands — the current CRC chaining state (rs1) and the next input unit (rs2) — and writes the updated chaining state to rd.

Table 14 lists the instruction encodings and input units for the hardware CRC updates.

Table 14. CRC Accelerator Instructions
Instruction funct7 funct3 opcode Input unit

CRC-32C word update

7’b0101100

3’b000

custom0

rs2[31:0], four bytes little-endian

CRC-32C byte update

7’b0101100

3’b001

custom0

rs2[7:0] (rs2[31:8] ignored)

CRC-8/ROHC byte update

7’b0101100

3’b010

custom0

rs2[7:0] (rs2[31:8] ignored)

Behavioral properties:

  • The CRC-32C word-update instruction consumes its 32-bit operand as four bytes in little-endian order ([7:0], [15:8], [23:16], [31:24]).

  • The CRC-32C instructions expose the internal running remainder before the final XOR. Firmware seeds the chaining state with 0xFFFF_FFFF and applies the final XOR only when it needs the externally visible CRC value, so word updates, byte updates, and intermediate states chain freely.

  • For non-word-sized buffers, firmware processes whole words with the word-update instruction and any remaining 1–3 tail bytes with the byte-update instruction; no software tail path is used.

  • The CRC-8/ROHC instruction carries its 8-bit state in rd[7:0] and zero-extends rd[31:8].

  • Empty-input results are identical to the software definitions: with no input units consumed, the seeded state (after the firmware’s final XOR for CRC-32C) is the empty-input CRC.

The three instructions share a single byte-update datapath. CRC-32C word mode runs four byte-update cycles per operation; the two byte modes run one cycle each. The datapath uses reflected CRC update behavior with the reflected polynomial 0x82F6_3B78 for CRC-32C and 0x0000_00E0 for CRC-8/ROHC (the reflection of the 0x07 CRC-8/ROHC polynomial), and never applies the CRC-32C final XOR. The CRC parameter definitions (init, reflection, and final XOR) are given in the firmware CRC function library documentation.

Any other encoding in the custom0 CRC instruction family is not recognized by the accelerator: it does not assert the PCPI ready/wait/write handshakes, so PicoRV32’s normal illegal-instruction handling is preserved. The feature introduces no new top-level KM ports or CSRs, and the PicoRV32 built-in multiply/divide support remains enabled and unchanged.

1.16. ROM and SRAM Error Detection

ROM and SRAM use one odd-parity bit per byte: four parity bits accompany each 32-bit data word. Checking cannot be disabled and performs no correction. Interrupt enables control reporting to the CPU; masking an event does not repair the affected data or make it safe to use.

1.17. Parity Error Protection

Parity bits are stored out-of-band, outside the scrambled data word. This keeps parity storage separate from the scramble/descramble data path.

1.18. SRAM Write Locking

The SRAM interface incorporates a write-locking mechanism to designate specific 1 KB memory regions as read-only; 32 regions cover the whole 32 KB SRAM, one per SRAM_LOCK bit. This feature is primarily designed to protect dynamically loaded KM firmware from unauthorized modification.

Control of this functionality resides within the Key Manager Control and Status Registers (KMCSR). Once a memory region is locked, it cannot be unlocked within the current boot session. It will remain in the read-only state until the next warm or cold reset of the KM. The write-lock state is in the warm reset domain and is cleared on every warm or cold reset.

Protection across warm resets is maintained by the ROM, which is responsible for re-applying the full write-lock policy on every boot (both cold and warm) before handing control to mutable firmware. Because the KM CPU always re-enters ROM after a warm reset, mutable firmware never executes against an unlocked SRAM region.

1.19. ROM Warm-Persistent SRAM Region

The highest 1 KB of KM SRAM (region 31, 0x0000_FC00–0x0000_FFFF) are reserved as a ROM-managed warm-persistent data structure (rom_persist). The mutable-firmware load area, stack, and BSS/data occupy the SRAM below it.

This region is owned exclusively by ROM firmware: it holds ROM state that must survive warm reset and is not general-purpose scratch for mutable (SRAM-loaded) firmware. Mutable firmware must not place its own data here, and once ROM write-locks the region it cannot write it at all (see Write-lock policy below).

SRAM contents survive warm or soft reset. Reset of the memory interface does not itself specify an array erase. ROM carries state across warm resets and initializes this structure on cold boot; this is volatile SRAM retention, not non-volatile storage.

Cold initialization. On every cold boot, rom_boot_init() detects a cold boot via the COLD_BOOT_DONE flag (reads 0 before it is set at the end of boot) and calls rom_persist_cold_init(), which writes known-zero values to all fields. On a warm or soft reset, COLD_BOOT_DONE already reads 1 and rom_persist_cold_init() is skipped, preserving the contents of the region.

Contents. The rom_persist_t structure currently contains one field (Table 15).

Table 15. Key Manager warm-persistent SRAM contents
Field Type Description

sram_fw_size

uint32_t

Byte count of the mutable firmware image currently loaded in SRAM (FW_WORDS × 4). Zero means no mutable firmware is present. Written by CMD_SRAM_LOAD_EXEC on a successful load and verified by CMD_SRAM_EXEC before jumping.

Write-lock policy. Before handing control to mutable (SRAM-loaded) firmware, ROM must call rom_persist_lock(), which sets SRAM_LOCK bit 31 via a triple write for glitch resistance. After locking, any write into 0xFC00–0xFFFF is silently dropped and a SRAM_WRITE_LOCK_VIOLATION IRQ is raised. The lock is cleared on the next warm or cold reset; ROM re-establishes it before transferring control to mutable code.

1.20. Mutable Firmware Model

The KM ROM can load a mutable image into SRAM and hand control to it, through the CMD_SRAM_LOAD_EXEC and CMD_SRAM_EXEC mailbox commands. The image is loaded at 0x8000, which is also its entry point, and must fit below a static load ceiling aligned to a 1 KB write-lock region, so the image never shares a region with the ROM stack or data. The load bounds, the key shred, the KPV read-lock, the image write-lock, the mailbox flush, the SRAM scramble and the jump are ROM behaviour, defined in the SRAM Firmware Handover sequence of the Key Manager Application ROM appendix in the Programmer’s Guide.

The handover relies on the following hardware behaviour:

  • SRAM_LOCK is in the warm-reset domain. A warm reset clears the image write-lock, and ROM re-applies it before every handover, including a CMD_SRAM_EXEC restart.

  • IRQ_ENTRY_ADDR and IRQ_ENTRY_LOCK are warm-reset-domain registers. Every reset that re-enters ROM (cold, external warm, and KM soft reset) restores the vector to the ROM default (0x10) and clears the lock, so ROM never executes with a vector chosen by mutable firmware.

  • KPV key data has no warm reset and is descrambled on KM-port reads. lock_use is independent of lock_write and makes KM-port key reads return zero.

  • The crypto-engine sideload key registers lie outside the SRAM address space, so scrambling SRAM does not reach them.

  • Writes to a write-locked SRAM region are dropped and raise SRAM_WRITE_LOCK_VIOLATION, which is sticky until cleared.

2. Firmware

The KM ROM and any mutable firmware it hands over to run on the PicoRV32. The Key Manager Application ROM appendix of the Programmer’s Guide is the firmware reference: initialization, the mailbox command and response protocol, interrupt handling, key management and the SRAM handover rules.

3. Memory Map and Register Reference

3.1. Memory Map

The KM CPU addresses its internal peripherals through a flat 32-bit address space. The AXI4-Lite crossbar decodes the address and routes transactions to the corresponding slave port.

Every window except OTP/eFuse spans exactly the address bits its register block decodes, so no register is reachable from a second address. The last two columns of the map state how the crossbar and the register blocks answer an access that no register or memory backs, and Decode Response Codes defines them and their codes. The KM CPU does not see these responses: an error sets AXI_SLVERR or AXI_DECERR in the KMCSR IRQ_STATUS register.

The OTP/eFuse window is the exception: hardware preserves its lower 12 address bits and replaces the upper bits with the integration parameter OTP_EFUSE_REMAP_BASE before forwarding the transaction to SEP. Only the MAP, CTRL and MMR register maps are forwarded. The Key Manager answers any other offset in the window with SLVERR, so the KM CPU cannot reach the eFuse shim control registers.

Table 16. Key Manager CPU Memory Map
Base Address End Address Size Decoded Extent Unit Description Hole in Extent (R / W) Past Extent (R / W)

0x00000000

0x00003FFF

16 KiB

16 KiB

Key Manager ROM

Key Manager boot ROM

-[1]

-

0x00004000

0x00007FFF

16 KiB

16 KiB

Reserved

Reserved

DECERR, 0xBADCAB1E / DECERR

-

0x00008000

0x0000FFFF

32 KiB

32 KiB

Key Manager SRAM

Key Manager data and executable SRAM

-

-

0x00010000

0x0001001F

32 B

28 B

Key Manager Mailbox KM Side

Register interface for KM CPU to access mailbox (write to outbound FIFO, read from inbound FIFO)

-

SLVERR, 0x0 / SLVERR

0x00010020

0x00010FFF

4064 B

4064 B

Reserved

Reserved

DECERR, 0xBADCAB1E / DECERR

-

0x00011000

0x000113FF

1 KiB

1 KiB

SEP eFuse Map Address Map

SEP eFuse shadow-register pass-through.

Forwarded

-

0x00011400

0x000114FF

256 B

28 B

eFuse Interface Control Address Map

SEP eFuse command and status pass-through.

Forwarded

SLVERR, 0xBADCAB1E / SLVERR

0x00011500

0x000115FF

256 B

116 B

eFuse Token Registers Address Map

SEP eFuse security-token pass-through.

Forwarded

SLVERR, 0xBADCAB1E / SLVERR

0x00011600

0x00011FFF

2560 B

2560 B

Reserved

Reserved

DECERR, 0xBADCAB1E / DECERR[2]

-

0x00012000

0x00013FFF

8 KiB

4360 B

Key and Policy Vault (KM Port)

Key entry storage and KM control registers. Access conditioned by lock_write/lock_use.

-

SLVERR, 0x0 / SLVERR

0x00014000

0x000147FF

2 KiB

1216 B

Key Manager Control and Status Registers

Control and status registers for the Key Manager subsystem

SLVERR, 0x0 / SLVERR

SLVERR, 0x0 / SLVERR

0x00014800

0x00014FFF

2 KiB

2 KiB

Reserved

Reserved

DECERR, 0xBADCAB1E / DECERR

-

0x00015000

0x0001500F

16 B

16 B

DRBG Sampler

DRBG random data interface and configuration/status registers

-

-

0x00015010

0x00017FFF

12272 B

12272 B

Reserved

Reserved

DECERR, 0xBADCAB1E / DECERR

-

0x00018000

0x0001807F

128 B

100 B

OTBN Wrapper Key Registers

Key storage registers for the OTBN sideload interface. Written by Key Manager CPU, drives keymgr_key_i on the OT OTBN core.

-

SLVERR, 0x0 / SLVERR

0x00018080

0x00018FFF

3968 B

3968 B

Reserved

Reserved

DECERR, 0xBADCAB1E / DECERR

-

0x00019000

0x0001907F

128 B

68 B

AES Wrapper Key Registers

Key storage registers for the AES sideload interface. Written by Key Manager CPU, drives keymgr_key_i on the OT AES core.

-

SLVERR, 0x0 / SLVERR

0x00019080

0x00019FFF

3968 B

3968 B

Reserved

Reserved

DECERR, 0xBADCAB1E / DECERR

-

0x0001A000

0x0001A07F

128 B

68 B

KMAC Wrapper Key Registers

Key storage registers for the KMAC sideload interface. Written by Key Manager CPU, drives keymgr_key_i on the OT KMAC core.

-

SLVERR, 0x0 / SLVERR

0x0001A080

0x0001AFFF

3968 B

3968 B

Reserved

Reserved

DECERR, 0xBADCAB1E / DECERR

-

0x0001B000

0x0001B07F

128 B

68 B

HMAC Wrapper Key Registers

Key storage registers for the HMAC sideload interface. Written by Key Manager CPU, drives keymgr_key_i on the OT HMAC core.

-

SLVERR, 0x0 / SLVERR

0x0001B080

0x0001BFFF

3968 B

3968 B

Reserved

Reserved

DECERR, 0xBADCAB1E / DECERR

-

0x0001C000

0x0001C7FF

2 KiB

1068 B

Adams Bridge Key Sideload Registers

Single AXI4-Lite window for all KM sideload interfaces to Adams Bridge. Contains four dual-share secret-seed inputs and one shared-key output.

SLVERR, 0x0 / SLVERR

SLVERR, 0x0 / SLVERR

0x0001C800

0x0001CFFF

2 KiB

2 KiB

Reserved

Reserved

DECERR, 0xBADCAB1E / DECERR

-

Notes

[1] A write completes without an error response, is dropped, and sets IRQ_STATUS.ROM_WRITE_ERR.
[2] This range is inside the OTP/eFuse window, which answers every offset outside its register maps with SLVERR and read data 0xBADCAB1E rather than DECERR.

3.2. Detailed Register Map

3.2.1. Address Summary Registers

Key Manager Top-Level Address Map

Complete memory map for the Key Manager subsystem, including ROM, SRAM,
control/status registers, mailbox, and external crypto engine ports.
This address map is from the perspective of the KM CPU (PicoRV32).

Register Arrays:

  • RMA_SIP_TOKEN_I[8]: 8 registers, base 0x11500, stride 0x4
  • RMA_CHIPLET_TOKEN_I[8]: 8 registers, base 0x11520, stride 0x4
  • SEC_DISABLE_TOKEN_I[8]: 8 registers, base 0x11540, stride 0x4
  • KEY_ENTRY[64].WORD[16]: 1024 registers, base 0x12000 (KEY_ENTRY x64 stride 0x40, WORD x16 stride 0x4)
  • CTRL[64]: 64 registers, base 0x13000, stride 0x4
  • KEY_SHARE0[12]: 12 registers, base 0x18000, stride 0x4
  • KEY_SHARE1[12]: 12 registers, base 0x18030, stride 0x4
  • aes_wrapper_key.KEY_SHARE0[8]: 8 registers, base 0x19000, stride 0x4
  • aes_wrapper_key.KEY_SHARE1[8]: 8 registers, base 0x19020, stride 0x4
  • kmac_wrapper_key.KEY_SHARE0[8]: 8 registers, base 0x1A000, stride 0x4
  • kmac_wrapper_key.KEY_SHARE1[8]: 8 registers, base 0x1A020, stride 0x4
  • hmac_wrapper_key.KEY_SHARE0[8]: 8 registers, base 0x1B000, stride 0x4
  • hmac_wrapper_key.KEY_SHARE1[8]: 8 registers, base 0x1B020, stride 0x4
  • abr_wrapper_key.MLDSA_SEED.KEY_SHARE0[8]: 8 registers, base 0x1C000, stride 0x4
  • abr_wrapper_key.MLDSA_SEED.KEY_SHARE1[8]: 8 registers, base 0x1C020, stride 0x4
  • abr_wrapper_key.MLKEM_SEED_D.KEY_SHARE0[8]: 8 registers, base 0x1C100, stride 0x4
  • abr_wrapper_key.MLKEM_SEED_D.KEY_SHARE1[8]: 8 registers, base 0x1C120, stride 0x4
  • abr_wrapper_key.MLKEM_SEED_Z.KEY_SHARE0[8]: 8 registers, base 0x1C200, stride 0x4
  • abr_wrapper_key.MLKEM_SEED_Z.KEY_SHARE1[8]: 8 registers, base 0x1C220, stride 0x4
  • abr_wrapper_key.MLKEM_MSG.KEY_SHARE0[8]: 8 registers, base 0x1C300, stride 0x4
  • abr_wrapper_key.MLKEM_MSG.KEY_SHARE1[8]: 8 registers, base 0x1C320, stride 0x4
  • KEY[8]: 8 registers, base 0x1C400, stride 0x4

Register List:

Table 17. Key Manager Top-Level Address Map register list
AddressNameAccessDescription
0x10000KM_WRITE_DATAWWrite data to outbound FIFO (KM→SEP messages)
0x10004KM_WRITE_SEPARATORRWWrite 1 to set message separator on next outbound (KM→SEP) write. Cleared by hardware when that write completes.
0x10008KM_READ_DATARRead data from inbound FIFO (SEP→KM messages)
0x1000CKM_STATUSRWFIFO status information
0x10010KM_IRQ_STATUSRWInterrupt status register
0x10014KM_IRQ_ENABLERWInterrupt enable register for KM CPU
0x10018KM_CTRLRWControl register for mailbox behavior configuration
0x11000LOCKSRW-
0x11008LOCKS_SPARERW-
0x1100CLC_STATER-
0x11010SBOOT_DISR-
0x11014TRANSIENT_RMA_ENR-
0x11018SIP_DISRWAn owner's feature control vector. When set (1'b1), the corresponding feature is disabled. Layout: see the Disable Vector Format section of lifecycle_controller.adoc.
0x11020SYS_DISRWAn owner's feature control vector. When set (1'b1), the corresponding feature is disabled. Layout: see the Disable Vector Format section of lifecycle_controller.adoc.
0x11028RMA_SIP_TOKEN_DIGESTR-
0x11048RMA_CHIPLET_TOKEN_DIGESTR-
0x11068CLASS_KEYR-
0x11088CHIPLET_PUBK_REVOKER-
0x1108CBL1_VERSIONR-
0x110ACBL2_VERSIONR-
0x110CCCHIPLET_UIDR-
0x110ECSIP_PUBK_HASH0R-
0x1110CSIP_UIDR-
0x1112CSYS_PUBK_HASHR-
0x1114CSYS_UIDR-
0x1116CSTATUS_RPTR-
0x11170ROM_CTLR-
0x11174SYSCLK_FREQ_MHZR-
0x11178CHIPLET_PUBK_HASH0R-
0x11198CHIPLET_PUBK_HASH1R-
0x111B8REQUIRED_SIGNERSRW-
0x111BCREQUIRED_ALGSRW-
0x111C0CHIPLET_PUBK_PQC_HASH0R-
0x111E0CHIPLET_PUBK_PQC_HASH1R-
0x11200SIP_PUBK_PQC_HASH0R-
0x11220SYS_PUBK_PQC_HASHR-
0x11240SIP_PUBK_HASH1R-
0x11260SIP_PUBK_PQC_HASH1R-
0x11280SEP_CHIPLET_IDR-
0x112A0SEP_SIP_IDR-
0x112C0SEP_SYS_IDR-
0x112E0spare0R-
0x11300spare1R-
0x11320spare2R-
0x11340spare3R-
0x11360spare4R-
0x11380spare5R-
0x113A0spare6R-
0x113C0spare7R-
0x113E0spare8R-
0x11400EFUSE_INTERFACE_CTRL_STATUSRWeFuse interface status and error-clear register. Reports the sense-done flag and request/address error conditions, and provides write-1 strobes to clear those errors.
0x11404EFUSE_PROGRAM_CTRLRWeFuse program control and status. Configures the program address and data, triggers a program (optionally with read-back), and reports program progress and completion status.
0x11408EFUSE_READ_CTRLRWeFuse read control and status. Configures the read address, triggers a read, and reports read progress and completion status.
0x1140CEFUSE_PROGRAM_INTERFACE_READ_DATARRead data captured through the program interface. Hardware debug only; valid only while the program interface state machine is in its capture-data state.
0x11410EFUSE_READ_INTERFACE_READ_DATARRead data returned through the eFuse read interface.
0x11414EFUSE_READ_REQ_TIMEOUTRWRead interface timeout configuration. Sets the number of cycles the read interface waits for a SHIM response and enables the read timeout.
0x11418EFUSE_PROGRAM_REQ_TIMEOUTRWProgram interface timeout configuration. Sets the number of cycles the program interface waits for a SHIM response and enables the program timeout.
0x11500 - 0x1151CRMA_SIP_TOKEN_I[8]RWSoftware-writeable RMA token word. The assembled token is hashed and compared against the fused value to authorize lifecycle (LC) state transitions.
0x11520 - 0x1153CRMA_CHIPLET_TOKEN_I[8]RWSoftware-writeable RMA token word. The assembled token is hashed and compared against the fused value to authorize lifecycle (LC) state transitions.
0x11540 - 0x1155CSEC_DISABLE_TOKEN_I[8]RWSoftware-writeable security-disable token word. The assembled token is hashed and compared against the post-silicon injected value to authorize security_disable.
0x11560TOKEN_EOPWToken end-of-packet control. Writing the per-token go bit signals that all token words have been written and triggers a pulse to begin token hashing.
0x11564RMA_SIP_TOKEN_MATCHRToken match status. Reports the result of the token hash comparison (match, mismatch, or error).
0x11568RMA_CHIPLET_TOKEN_MATCHRToken match status. Reports the result of the token hash comparison (match, mismatch, or error).
0x1156CSEC_DISABLE_TOKEN_MATCHRToken match status. Reports the result of the token hash comparison (match, mismatch, or error).
0x11570TOKEN_MATCH_FAULTRToken comparator redundancy fault status. The token match logic is triple redundant and is not a majority vote: all three comparators must agree and each must drive a legal differential pair. A bit sets when the comparators for that token disagree, which may indicate a fault injection or FIB attack. The corresponding token_match_status then reads the error code 6'b111111 and an interrupt is raised to the SEP CPU. Bits are sticky until reset.
0x12000 - 0x12FFCKEY_ENTRY[64].WORD[16]RWOne 32-bit word of a key entry (512-bit key = 16 words). No reset; powers up random.
0x13000 - 0x130FCCTRL[64]RWPer-slot control: lock bits (W1S) and the erase trigger
0x13100KPV_SCRAMBLER_KEYRW32-bit key for KPV key entry scrambling. No reset; powers up random. Locked when KPV_SCRAMBLER_CTRL.LOCK=1.
0x13104KPV_SCRAMBLER_CTRLRWKPV scrambler enable and lock. Reset to 0 on KM reset. LOCK is write-one-only.
0x14000VERSIONRHardware version register (semantic versioning: major.minor.patch)
0x14004CTRLRControl register (reserved for future use)
0x14008SOFT_RST_CODERWSoftware reset code register. Write 0x53525354 ('SRST') to trigger soft reset. Any other value has no effect.
0x1400Ckmcsr.IRQ_STATUSRWInterrupt status register. Sticky bits cleared by writing 1.
0x14010kmcsr.IRQ_ENABLERWInterrupt enable/mask register
0x14014SCRAMBLER_KEYRW32-bit scrambler key for SRAM address/data scrambling. When locked: writes ignored, reads return 0. No reset; powers up random.
0x14018SCRAMBLER_CTRLRWScrambler control register
0x1401CSRAM_LOCKRWSRAM write-lock bits. Bit[i]=1 locks region i (1 KB each, 32 regions). Write-1-only: writing 1 sets the bit, writing 0 has no effect. Cleared by warm or cold reset (warm reset domain); ROM re-applies the lock policy on every boot before handover to mutable firmware.
0x14020IRQ_SETWInterrupt set register. Write 1 to trigger corresponding interrupt (for ISR testing). Write-only, reads return 0.
0x14024SRAM_WRITE_LOCK_VIOLATIONRWWhich SRAM region(s) had write attempts while locked. Bit[i]=region i. Sticky, write 1 to clear each bit.
0x14028RECOVERABLE_ERRRWRecoverable error status. Firmware writes 1 to set (after recovering in ISR), writes 0 to clear (e.g. when SEP requests clear). Drives recoverable error event output.
0x1402CBOOT_STATUSRWBoot status. Firmware writes 1 to COLD_BOOT_DONE after cold-boot init completes; bit remains set until next cold reset.
0x14030OTP_LIFE_CYCLERLife cycle state. 8-bit (4-bit value differentially encoded). Read-through from OTP port; no reset.
0x14034OTP_DEMOTION_STATERDemotion state. 2-bit, differentially encoded. Read-through from OTP port; no reset.
0x14038SRAM_EXEC_MODERWExecute-permission whitelist mode. Write-1-only (woset); cleared by warm or cold reset. 0=ROM executable; 1=write-locked SRAM regions executable, and the ROM lockout is armed. Set by ROM stack-less handover immediately before jumping to mutable firmware.
0x140B8IRQ_ENTRY_ADDRRWEffective IRQ entry address for subsequent interrupts. Writable while unlocked; any 32-bit value accepted.
0x140BCIRQ_ENTRY_LOCKRWWrite-one-only lock for IRQ_ENTRY_ADDR. Separate readable register; cleared only on KM reset.
0x14100VUART_TXRWVirtual UART transmit register. Write a byte to send to testbench. DATA_VALID is set on write and self-clears.
0x14104VUART_RXRVirtual UART receive register. Testbench writes bytes here for firmware to read.
0x14108VUART_STATUSRVirtual UART status register for flow control
0x14110TB_RESULTRWTest result register. Firmware writes 0=fail, 1=pass.
0x14114TB_SIGNATURERWTest completion signature. Firmware writes 0x600D600D (pass) or 0xBADBADBA (fail).
0x14118TB_ERRCODERWTest error code register. Firmware writes optional error code for debugging.
0x1411CTB_SUBTESTRWCurrent subtest number register. Firmware increments for each subtest.
0x14120TB_CMDRWTestbench command register. Firmware writes command, testbench reads and clears.
0x14124TB_CMD_ARGRWTestbench command argument register. Firmware writes optional argument.
0x14128TB_CMD_STATUSRWTestbench command status register. Testbench writes status, firmware reads.
0x1412CTB_CMD_RESULTRTestbench command result register. Testbench writes result value.
0x141FCDEBUGRDebug register with known constant value for verification
0x14200OTP_CHIPLET_UID_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14204OTP_CHIPLET_UID_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14208OTP_CHIPLET_UID_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1420COTP_CHIPLET_UID_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14210OTP_CHIPLET_UID_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14214OTP_CHIPLET_UID_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14218OTP_CHIPLET_UID_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1421COTP_CHIPLET_UID_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14220OTP_CHIPLET_UID_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14224OTP_CHIPLET_UID_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14228OTP_CHIPLET_UID_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1422COTP_CHIPLET_UID_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14230OTP_CHIPLET_UID_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14234OTP_CHIPLET_UID_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14238OTP_CHIPLET_UID_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1423COTP_CHIPLET_UID_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14240OTP_SIP_UID_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14244OTP_SIP_UID_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14248OTP_SIP_UID_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1424COTP_SIP_UID_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14250OTP_SIP_UID_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14254OTP_SIP_UID_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14258OTP_SIP_UID_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1425COTP_SIP_UID_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14260OTP_SIP_UID_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14264OTP_SIP_UID_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14268OTP_SIP_UID_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1426COTP_SIP_UID_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14270OTP_SIP_UID_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14274OTP_SIP_UID_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14278OTP_SIP_UID_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1427COTP_SIP_UID_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14280OTP_SYS_UID_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14284OTP_SYS_UID_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14288OTP_SYS_UID_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1428COTP_SYS_UID_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14290OTP_SYS_UID_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14294OTP_SYS_UID_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14298OTP_SYS_UID_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1429COTP_SYS_UID_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142A0OTP_SYS_UID_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142A4OTP_SYS_UID_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142A8OTP_SYS_UID_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142ACOTP_SYS_UID_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142B0OTP_SYS_UID_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142B4OTP_SYS_UID_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142B8OTP_SYS_UID_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142BCOTP_SYS_UID_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142C0OTP_CLASS_KEY_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142C4OTP_CLASS_KEY_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142C8OTP_CLASS_KEY_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142CCOTP_CLASS_KEY_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142D0OTP_CLASS_KEY_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142D4OTP_CLASS_KEY_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142D8OTP_CLASS_KEY_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142DCOTP_CLASS_KEY_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142E0OTP_CLASS_KEY_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142E4OTP_CLASS_KEY_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142E8OTP_CLASS_KEY_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142ECOTP_CLASS_KEY_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142F0OTP_CLASS_KEY_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142F4OTP_CLASS_KEY_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142F8OTP_CLASS_KEY_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x142FCOTP_CLASS_KEY_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14300OTP_READ_LOCKRWOTP field warm-reset-domain read-lock bits. Write 1 to set; writing 0 has no effect. Locked reads of the corresponding OTP field return zero (effective lock = OTP_READ_LOCK | OTP_READ_LOCK_COLD). Warm-reset domain: cleared by warm or cold reset.
0x14304OTP_CHANGE_STATUSRWOTP field change status. A bit is set when the corresponding field's decoded value changes. Sticky, write 1 to clear. Valid after IRQ_STATUS.OTP_CHANGE fires.
0x14308OTP_READ_LOCK_COLDRWOTP field cold-reset-domain read-lock bits. Write 1 to set; writing 0 has no effect. Locked reads of the corresponding OTP field return zero (effective lock = OTP_READ_LOCK | OTP_READ_LOCK_COLD). Cold-reset domain: survives warm reset.
0x14400OTP_SEP_CHIPLET_ID_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14404OTP_SEP_CHIPLET_ID_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14408OTP_SEP_CHIPLET_ID_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1440COTP_SEP_CHIPLET_ID_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14410OTP_SEP_CHIPLET_ID_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14414OTP_SEP_CHIPLET_ID_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14418OTP_SEP_CHIPLET_ID_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1441COTP_SEP_CHIPLET_ID_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14420OTP_SEP_CHIPLET_ID_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14424OTP_SEP_CHIPLET_ID_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14428OTP_SEP_CHIPLET_ID_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1442COTP_SEP_CHIPLET_ID_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14430OTP_SEP_CHIPLET_ID_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14434OTP_SEP_CHIPLET_ID_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14438OTP_SEP_CHIPLET_ID_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1443COTP_SEP_CHIPLET_ID_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14440OTP_SEP_SIP_ID_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14444OTP_SEP_SIP_ID_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14448OTP_SEP_SIP_ID_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1444COTP_SEP_SIP_ID_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14450OTP_SEP_SIP_ID_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14454OTP_SEP_SIP_ID_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14458OTP_SEP_SIP_ID_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1445COTP_SEP_SIP_ID_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14460OTP_SEP_SIP_ID_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14464OTP_SEP_SIP_ID_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14468OTP_SEP_SIP_ID_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1446COTP_SEP_SIP_ID_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14470OTP_SEP_SIP_ID_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14474OTP_SEP_SIP_ID_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14478OTP_SEP_SIP_ID_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1447COTP_SEP_SIP_ID_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14480OTP_SEP_SYS_ID_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14484OTP_SEP_SYS_ID_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14488OTP_SEP_SYS_ID_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1448COTP_SEP_SYS_ID_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14490OTP_SEP_SYS_ID_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14494OTP_SEP_SYS_ID_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x14498OTP_SEP_SYS_ID_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x1449COTP_SEP_SYS_ID_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x144A0OTP_SEP_SYS_ID_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x144A4OTP_SEP_SYS_ID_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x144A8OTP_SEP_SYS_ID_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x144ACOTP_SEP_SYS_ID_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x144B0OTP_SEP_SYS_ID_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x144B4OTP_SEP_SYS_ID_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x144B8OTP_SEP_SYS_ID_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x144BCOTP_SEP_SYS_ID_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x15000DATAROne word of random data. Read triggers request or returns prefetch. Writes return SLVERR. No reset.
0x15004CFGRWConfiguration: PREFETCH enable, TIMEOUT cycles for active CPU read.
0x15008STATUSRWStatus: DRBG_READY, PREFETCHED, TIMEOUT_ERR (W1C), STREAM_ERR (W1C), COUNT_BAD, COUNT_GOOD.
0x1500CPREFETCH_DATARPrefetched word (read-only, for debugging). Cleared when PREFETCH=0. No reset; power-up undefined.
0x18000 - 0x1802CKEY_SHARE0[12]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x18030 - 0x1805CKEY_SHARE1[12]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x18060otbn_wrapper_key.KEY_CTRLRWKey control register. Writing KEY_VALID=1 asserts the sideload
valid signal to the OTBN core.
0x19000 - 0x1901Caes_wrapper_key.KEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x19020 - 0x1903Caes_wrapper_key.KEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x19040aes_wrapper_key.KEY_CTRLRWKey control register. Writing KEY_VALID=1 asserts the sideload
valid signal to the AES core.
0x1A000 - 0x1A01Ckmac_wrapper_key.KEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x1A020 - 0x1A03Ckmac_wrapper_key.KEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x1A040kmac_wrapper_key.KEY_CTRLRWKey control register. Writing KEY_VALID=1 asserts the sideload
valid signal to the KMAC core.
0x1B000 - 0x1B01Chmac_wrapper_key.KEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x1B020 - 0x1B03Chmac_wrapper_key.KEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x1B040hmac_wrapper_key.KEY_CTRLRWKey control register. Writing KEY_VALID=1 asserts the sideload
valid signal to the HMAC core.
0x1C000 - 0x1C01Cabr_wrapper_key.MLDSA_SEED.KEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x1C020 - 0x1C03Cabr_wrapper_key.MLDSA_SEED.KEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x1C040abr_wrapper_key.MLDSA_SEED.KEY_CTRLRWSeed control register. Writing KEY_VALID=1 marks the seed as loaded.
Write 0 to invalidate. The KV shim gates the AB kv_read response
on this bit.
0x1C100 - 0x1C11Cabr_wrapper_key.MLKEM_SEED_D.KEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x1C120 - 0x1C13Cabr_wrapper_key.MLKEM_SEED_D.KEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x1C140abr_wrapper_key.MLKEM_SEED_D.KEY_CTRLRWSeed control register. Writing KEY_VALID=1 marks the seed as loaded.
Write 0 to invalidate. The KV shim gates the AB kv_read response
on this bit.
0x1C200 - 0x1C21Cabr_wrapper_key.MLKEM_SEED_Z.KEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x1C220 - 0x1C23Cabr_wrapper_key.MLKEM_SEED_Z.KEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x1C240abr_wrapper_key.MLKEM_SEED_Z.KEY_CTRLRWSeed control register. Writing KEY_VALID=1 marks the seed as loaded.
Write 0 to invalidate. The KV shim gates the AB kv_read response
on this bit.
0x1C300 - 0x1C31Cabr_wrapper_key.MLKEM_MSG.KEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x1C320 - 0x1C33Cabr_wrapper_key.MLKEM_MSG.KEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x1C340abr_wrapper_key.MLKEM_MSG.KEY_CTRLRWSeed control register. Writing KEY_VALID=1 marks the seed as loaded.
Write 0 to invalidate. The KV shim gates the AB kv_read response
on this bit.
0x1C400 - 0x1C41CKEY[8]ROne 32-bit word of ML-KEM shared key output. Written by hardware
when key is ready; read by KM firmware to consume. Hardware clears
all words to 0 when KEY_CTRL.KEY_VALID is cleared (via hwclr).
0x1C420abr_wrapper_key.MLKEM_SHARED_KEY.KEY_CTRLRWShared-key control. HW sets KEY_VALID when a new key is ready.
Firmware writes 0 to clear (consume and zeroize).
0x1C424abr_wrapper_key.MLKEM_SHARED_KEY.IRQ_STATUSRWInterrupt status for ML-KEM shared key. Sticky bit set by
hardware when a new shared key becomes valid; cleared by writing 1.
0x1C428abr_wrapper_key.MLKEM_SHARED_KEY.IRQ_ENABLERWInterrupt enable for ML-KEM shared key. Mask for the
PicoRV32 IRQ vector bit driven by the shared-key-valid event.

Register Details:

KM_WRITE_DATA

Table 18. key_manager.KM_WRITE_DATA fields
BitsFieldAccessResetDescription
31:0dataW0x032-bit data word to write to outbound FIFO

KM_WRITE_SEPARATOR

Table 19. key_manager.KM_WRITE_SEPARATOR fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0setRW0x0Write 1 to set message separator on next outbound write. Cleared by hardware when that write completes.

KM_READ_DATA

Table 20. key_manager.KM_READ_DATA fields
BitsFieldAccessResetDescription
31:0dataR0x032-bit data word read from inbound FIFO

KM_STATUS

Table 21. key_manager.KM_STATUS fields
BitsFieldAccessResetDescription
31:26rsvdR0x0Reserved
25outbound_separatorR0x0Message separator: 1 if the last word read from outbound FIFO had the separator bit set (last word of message). Read-only, not sticky.
24inbound_separatorR0x0Message separator: 1 if the last word read from inbound FIFO had the separator bit set (last word of message). Read-only, not sticky.
23outbound_underflowRW1C0x0Outbound FIFO underflow detected (read attempted when empty). Sticky, write 1 to clear.
22inbound_underflowRW1C0x0Inbound FIFO underflow detected (read attempted when empty). Sticky, write 1 to clear.
21outbound_overflowRW1C0x0Outbound FIFO overflow detected (write attempted when full). Sticky, write 1 to clear.
20inbound_overflowRW1C0x0Inbound FIFO overflow detected (write attempted when full). Sticky, write 1 to clear.
19:12outbound_depthR0x0Outbound FIFO fill level (number of words in FIFO)
11:4inbound_depthR0x0Inbound FIFO fill level (number of words in FIFO)
3outbound_fullR0x0Outbound FIFO is full (cannot write more data)
2outbound_emptyR0x1Outbound FIFO is empty (no data available for SEP to read)
1inbound_fullR0x0Inbound FIFO is full
0inbound_emptyR0x1Inbound FIFO is empty (no data available for KM to read)

KM_IRQ_STATUS

Table 22. key_manager.KM_IRQ_STATUS fields
BitsFieldAccessResetDescription
31:5rsvdR0x0Reserved
4flushed_by_sepRW1C0x0SEP performed a mailbox flush. Sticky, write 1 to clear.
3inbound_underflowRW1C0x0Inbound FIFO underflow detected. Sticky, write 1 to clear.
2outbound_overflowRW1C0x0Outbound FIFO overflow detected. Sticky, write 1 to clear.
1outbound_write_space_availR0x0Outbound FIFO has space available for KM to write (level-sensitive). 1 = space available, 0 = full.
0inbound_read_data_availR0x0Inbound FIFO has data available for KM to read (level-sensitive). 1 = data available, 0 = empty.

KM_IRQ_ENABLE

Table 23. key_manager.KM_IRQ_ENABLE fields
BitsFieldAccessResetDescription
31:5rsvdR0x0Reserved
4flushed_by_sep_enRW0x0Enable interrupt to KM when SEP performs a mailbox flush
3inbound_underflow_enRW0x0Enable interrupt to KM when inbound FIFO underflow is detected
2outbound_overflow_enRW0x0Enable interrupt to KM when outbound FIFO overflow is detected
1outbound_write_space_avail_enRW0x0Enable interrupt to KM when outbound FIFO has space available (KM->SEP messages)
0inbound_read_data_avail_enRW0x0Enable interrupt to KM when inbound FIFO has data available (SEP->KM messages)

KM_CTRL

Table 24. key_manager.KM_CTRL fields
BitsFieldAccessResetDescription
31:3rsvdR0x0Reserved
2flushRW0x0Write 1 to flush all mailbox FIFOs (inbound and outbound). Cleared by hardware when flush completes.
1inbound_underflow_respRW0x0Response type for inbound FIFO underflow: 0=SLVERR (default), 1=OKAY
0outbound_overflow_respRW0x0Response type for outbound FIFO overflow: 0=SLVERR (default), 1=OKAY

LOCKS

Table 25. key_manager.LOCKS fields
BitsFieldAccessResetDescription
63SEP_SYS_ID_READ_LOCKRW1S0x0sep_sys_id_read_lock (slot 31): when set, SEP_SYS_ID is not read-able.
62SEP_SYS_ID_WRITE_LOCKRW1S0x0sep_sys_id_write_lock (slot 31): when set, SEP_SYS_ID is not write-able.
61SEP_SIP_ID_READ_LOCKRW1S0x0sep_sip_id_read_lock (slot 30): when set, SEP_SIP_ID is not read-able.
60SEP_SIP_ID_WRITE_LOCKRW1S0x0sep_sip_id_write_lock (slot 30): when set, SEP_SIP_ID is not write-able.
59SEP_CHIPLET_ID_READ_LOCKRW1S0x0sep_chiplet_id_read_lock (slot 29): when set, SEP_CHIPLET_ID is not read-able.
58SEP_CHIPLET_ID_WRITE_LOCKRW1S0x0sep_chiplet_id_write_lock (slot 29): when set, SEP_CHIPLET_ID is not write-able.
57SIP_PUBK_PQC_HASH1_READ_LOCKRW1S0x0sip_pubk_pqc_hash1_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
56SIP_PUBK_PQC_HASH1_WRITE_LOCKRW1S0x0sip_pubk_pqc_hash1_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
55SIP_PUBK_HASH1_READ_LOCKRW1S0x0sip_pubk_hash1_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
54SIP_PUBK_HASH1_WRITE_LOCKRW1S0x0sip_pubk_hash1_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
53SYS_PUBK_PQC_HASH_READ_LOCKRW1S0x0sys_pubk_pqc_hash_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
52SYS_PUBK_PQC_HASH_WRITE_LOCKRW1S0x0sys_pubk_pqc_hash_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
51SIP_PUBK_PQC_HASH0_READ_LOCKRW1S0x0sip_pubk_pqc_hash0_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
50SIP_PUBK_PQC_HASH0_WRITE_LOCKRW1S0x0sip_pubk_pqc_hash0_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
49CHIPLET_PUBK_PQC_HASH1_READ_LOCKRW1S0x0chiplet_pubk_pqc_hash1_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
48CHIPLET_PUBK_PQC_HASH1_WRITE_LOCKRW1S0x0chiplet_pubk_pqc_hash1_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
47CHIPLET_PUBK_PQC_HASH0_READ_LOCKRW1S0x0chiplet_pubk_pqc_hash0_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
46CHIPLET_PUBK_PQC_HASH0_WRITE_LOCKRW1S0x0chiplet_pubk_pqc_hash0_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
45REQUIRED_ALGS_READ_LOCKRW1S0x0required_algs_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
44REQUIRED_ALGS_WRITE_LOCKRW1S0x0required_algs_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
43REQUIRED_SIGNERS_READ_LOCKRW1S0x0required_signers_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
42REQUIRED_SIGNERS_WRITE_LOCKRW1S0x0required_signers_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
41CHIPLET_PUBK_HASH1_READ_LOCKRW1S0x0chiplet_pubk_hash1_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
40CHIPLET_PUBK_HASH1_WRITE_LOCKRW1S0x0chiplet_pubk_hash1_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
39CHIPLET_PUBK_HASH0_READ_LOCKRW1S0x0chiplet_pubk_hash0_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
38CHIPLET_PUBK_HASH0_WRITE_LOCKRW1S0x0chiplet_pubk_hash0_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
37SYSCLK_FREQ_MHZ_READ_LOCKRW1S0x0sysclk_freq_mhz_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
36SYSCLK_FREQ_MHZ_WRITE_LOCKRW1S0x0sysclk_freq_mhz_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
35ROM_CTL_READ_LOCKRW1S0x0rom_ctl_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
34ROM_CTL_WRITE_LOCKRW1S0x0rom_ctl_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
33STATUS_RPT_READ_LOCKRW1S0x0status_rpt_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
32STATUS_RPT_WRITE_LOCKRW1S0x0status_rpt_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
31SYS_UID_READ_LOCKRW1S0x0sys_uid_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
30SYS_UID_WRITE_LOCKRW1S0x0sys_uid_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
29SYS_PUBK_HASH_READ_LOCKRW1S0x0sys_pubk_hash_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
28SYS_PUBK_HASH_WRITE_LOCKRW1S0x0sys_pubk_hash_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
27SIP_UID_READ_LOCKRW1S0x0sip_uid_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
26SIP_UID_WRITE_LOCKRW1S0x0sip_uid_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
25SIP_PUBK_HASH0_READ_LOCKRW1S0x0sip_pubk_hash0_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
24SIP_PUBK_HASH0_WRITE_LOCKRW1S0x0sip_pubk_hash0_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
23CHIPLET_UID_READ_LOCKRW1S0x0chiplet_uid_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
22CHIPLET_UID_WRITE_LOCKRW1S0x0chiplet_uid_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
21BL2_VERSION_READ_LOCKRW1S0x0bl2_version_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
20BL2_VERSION_WRITE_LOCKRW1S0x0bl2_version_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
19BL1_VERSION_READ_LOCKRW1S0x0bl1_version_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
18BL1_VERSION_WRITE_LOCKRW1S0x0bl1_version_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
17CHIPLET_PUBK_REVOKE_READ_LOCKRW1S0x0chiplet_pubk_revoke_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
16CHIPLET_PUBK_REVOKE_WRITE_LOCKRW1S0x0chiplet_pubk_revoke_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
15CLASS_KEY_READ_LOCKRW1S0x0class_key_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
14CLASS_KEY_WRITE_LOCKRW1S0x0class_key_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
13RMA_CHIPLET_TOKEN_DIGEST_READ_LOCKRW1S0x0rma_chiplet_token_digest_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
12RMA_CHIPLET_TOKEN_DIGEST_WRITE_LOCKRW1S0x0rma_chiplet_token_digest_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
11RMA_SIP_TOKEN_DIGEST_READ_LOCKRW1S0x0rma_sip_token_digest_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
10RMA_SIP_TOKEN_DIGEST_WRITE_LOCKRW1S0x0rma_sip_token_digest_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
9SYS_DIS_READ_LOCKRW1S0x0sys_dis_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
8SYS_DIS_WRITE_LOCKRW1S0x0sys_dis_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
7SIP_DIS_READ_LOCKRW1S0x0sip_dis_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
6SIP_DIS_WRITE_LOCKRW1S0x0sip_dis_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
5TRANSIENT_RMA_EN_READ_LOCKRW1S0x0TRANSIENT_RMA_EN_READ_LOCK, when set, this field is not read-able (neither the eFuse nor the shadow register)
4TRANSIENT_RMA_EN_WRITE_LOCKRW1S0x0TRANSIENT_RMA_EN_WRITE_LOCK, when set, this field is not write-able (neither the eFuse nor the shadow register)
3SBOOT_DIS_READ_LOCKRW1S0x0sboot_dis_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
2SBOOT_DIS_WRITE_LOCKRW1S0x0sboot_dis_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)
1LC_STATE_READ_LOCKRW1S0x0lc_state_read_lock, when set, this field is not read-able (neither the eFuse nor the shadow register)
0LC_STATE_WRITE_LOCKRW1S0x0lc_state_write_lock, when set, this field is not write-able (neither the eFuse nor the shadow register)

LOCKS_SPARE

Table 26. key_manager.LOCKS_SPARE fields
BitsFieldAccessResetDescription
31:18SPARE_LOCK_RSVDRW1S0x0Unassigned lock slots 41-47. Reserved for future field lock assignments.
17SPARE8_READ_LOCKRW1S0x0spare8_read_lock (slot 40): when set, spare8 is not read-able.
16SPARE8_WRITE_LOCKRW1S0x0spare8_write_lock (slot 40): when set, spare8 is not write-able.
15SPARE7_READ_LOCKRW1S0x0spare7_read_lock (slot 39): when set, spare7 is not read-able.
14SPARE7_WRITE_LOCKRW1S0x0spare7_write_lock (slot 39): when set, spare7 is not write-able.
13SPARE6_READ_LOCKRW1S0x0spare6_read_lock (slot 38): when set, spare6 is not read-able.
12SPARE6_WRITE_LOCKRW1S0x0spare6_write_lock (slot 38): when set, spare6 is not write-able.
11SPARE5_READ_LOCKRW1S0x0spare5_read_lock (slot 37): when set, spare5 is not read-able.
10SPARE5_WRITE_LOCKRW1S0x0spare5_write_lock (slot 37): when set, spare5 is not write-able.
9SPARE4_READ_LOCKRW1S0x0spare4_read_lock (slot 36): when set, spare4 is not read-able.
8SPARE4_WRITE_LOCKRW1S0x0spare4_write_lock (slot 36): when set, spare4 is not write-able.
7SPARE3_READ_LOCKRW1S0x0spare3_read_lock (slot 35): when set, spare3 is not read-able.
6SPARE3_WRITE_LOCKRW1S0x0spare3_write_lock (slot 35): when set, spare3 is not write-able.
5SPARE2_READ_LOCKRW1S0x0spare2_read_lock (slot 34): when set, spare2 is not read-able.
4SPARE2_WRITE_LOCKRW1S0x0spare2_write_lock (slot 34): when set, spare2 is not write-able.
3SPARE1_READ_LOCKRW1S0x0spare1_read_lock (slot 33): when set, spare1 is not read-able.
2SPARE1_WRITE_LOCKRW1S0x0spare1_write_lock (slot 33): when set, spare1 is not write-able.
1SPARE0_READ_LOCKRW1S0x0spare0_read_lock (slot 32): when set, spare0 is not read-able.
0SPARE0_WRITE_LOCKRW1S0x0spare0_write_lock (slot 32): when set, spare0 is not write-able.

LC_STATE

Table 27. key_manager.LC_STATE fields
BitsFieldAccessResetDescription
31:8rsvdR0x0Unused
7:0lc_stateR0xF0Life cycle manufacturing state, differentially encoded: {~raw[3:0], raw[3:0]}

SBOOT_DIS

Table 28. key_manager.SBOOT_DIS fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Unused
0disable_secure_bootR0x0Chicken bit to disable secure boot in SEP ROM.

TRANSIENT_RMA_EN

Table 29. key_manager.TRANSIENT_RMA_EN fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Unused
0transient_rma_enR0x0When Transient RMA EN is 1, matching on corresponding *_Tokens will automatically transfer the chip to the corresponding RMA state by setting the LC_STATE reg

SIP_DIS

Table 30. key_manager.SIP_DIS fields
BitsFieldAccessResetDescription
63:48func_reservedRW1S0x0Reserved for adopter-defined functional feature gating (bits 63:48).
47:25debug_reserved_dbg2RW1S0x0Reserved for adopter-defined inter-chiplet-bypass (DBG_2) debug scan chains (bits 47:25).
24sip_debugRW1S0x0SIP_DBG (bit 24): Coarse-grained debug enable for the SiP scope: the inter-chiplet debug-bypass gate that admits external (PTAP) debug traffic into this chiplet and forwards it onward to the next chiplet via the outbound JTAG PTAP. 1'b1: disabled. 1'b0: enabled.
23:4debug_reserved_dbg1RW1S0x0Reserved for adopter-defined local (DBG_1) debug scan chains (bits 23:4).
3smc_fuse_dbgRW1S0x0SMC_FUSE_DBG (bit 3): 1'b1: the DFT-inserted access path into the SMC OTP is disabled. 1'b0: enabled. Produced by SEP-LCC feat_ctrl_o, exported on the SEP boundary, and consumed by SMC to gate its own inserted fuse path.
2sep_fuse_dbgRW1S0x0SEP_FUSE_DBG (bit 2): 1'b1: the DFT-inserted access path into the SEP OTP is disabled. 1'b0: enabled. Also covers the OTP IP-vendor test and calibration interface, which is reachable only over that inserted path. The functional JTAG2AXIL path to the OTP is always available and is not gated by this bit.
1chiplet_dbgRW1S0x0CHIPLET_DBG (bit 1): Coarse-grained debug enable for the chiplet scope. 1'b1: chiplet-scope debug/scan-dump access disabled. 1'b0: enabled. Never acts alone: an external debugger reaches chiplet-internal resources only when SIP_DBG is open as well. Contributes to the reachability of the crypto/KM secure chain but never authorizes a dump from it.
0sep_debugRW1S0x0SEP_DBG (bit 0): Coarse-grained debug enable for the SEP scope. 1'b1: SEP-scope debug/scan-dump access disabled and external inbound traffic is filtered. 1'b0: enabled. A local gate only: reaching SEP internal state from an external debugger additionally requires SIP_DBG and CHIPLET_DBG.

SYS_DIS

Table 31. key_manager.SYS_DIS fields
BitsFieldAccessResetDescription
63:48func_reservedRW1S0x0Reserved for adopter-defined functional feature gating (bits 63:48).
47:25debug_reserved_dbg2RW1S0x0Reserved for adopter-defined inter-chiplet-bypass (DBG_2) debug scan chains (bits 47:25).
24sip_debugRW1S0x0SIP_DBG (bit 24): Coarse-grained debug enable for the SiP scope: the inter-chiplet debug-bypass gate that admits external (PTAP) debug traffic into this chiplet and forwards it onward to the next chiplet via the outbound JTAG PTAP. 1'b1: disabled. 1'b0: enabled.
23:4debug_reserved_dbg1RW1S0x0Reserved for adopter-defined local (DBG_1) debug scan chains (bits 23:4).
3smc_fuse_dbgRW1S0x0SMC_FUSE_DBG (bit 3): 1'b1: the DFT-inserted access path into the SMC OTP is disabled. 1'b0: enabled. Produced by SEP-LCC feat_ctrl_o, exported on the SEP boundary, and consumed by SMC to gate its own inserted fuse path.
2sep_fuse_dbgRW1S0x0SEP_FUSE_DBG (bit 2): 1'b1: the DFT-inserted access path into the SEP OTP is disabled. 1'b0: enabled. Also covers the OTP IP-vendor test and calibration interface, which is reachable only over that inserted path. The functional JTAG2AXIL path to the OTP is always available and is not gated by this bit.
1chiplet_dbgRW1S0x0CHIPLET_DBG (bit 1): Coarse-grained debug enable for the chiplet scope. 1'b1: chiplet-scope debug/scan-dump access disabled. 1'b0: enabled. Never acts alone: an external debugger reaches chiplet-internal resources only when SIP_DBG is open as well. Contributes to the reachability of the crypto/KM secure chain but never authorizes a dump from it.
0sep_debugRW1S0x0SEP_DBG (bit 0): Coarse-grained debug enable for the SEP scope. 1'b1: SEP-scope debug/scan-dump access disabled and external inbound traffic is filtered. 1'b0: enabled. A local gate only: reaching SEP internal state from an external debugger additionally requires SIP_DBG and CHIPLET_DBG.

RMA_SIP_TOKEN_DIGEST

Table 32. key_manager.RMA_SIP_TOKEN_DIGEST fields
BitsFieldAccessResetDescription
255:0token_digestR0x0Hash digest of life cycle secret that allows entering RMA_SIP state / Note this is a 256 bit field

RMA_CHIPLET_TOKEN_DIGEST

Table 33. key_manager.RMA_CHIPLET_TOKEN_DIGEST fields
BitsFieldAccessResetDescription
255:0token_digestR0x0Hash digest of life cycle secret that allows entering RMA_CHIPLET state/ Note this is a 256 bit field

CLASS_KEY

Table 34. key_manager.CLASS_KEY fields
BitsFieldAccessResetDescription
255:0keyR0x0Class key that could be used for FW encryption/decryption

CHIPLET_PUBK_REVOKE

Table 35. key_manager.CHIPLET_PUBK_REVOKE fields
BitsFieldAccessResetDescription
31:0selectR0x0Global public-key revocation vector covering every boot-verification key of every owner (classical and PQC). SEP ROM embeds a set of public-key hash digests and accesses additional fused key hashes; each key entry maps to one bit here. Once set, SEP ROM rejects the corresponding key. Bit map: [7:0] ROM chiplet-creator classical keys (bits 0,1 are development keys); [15:8] ROM chiplet-creator PQC keys; [16]/[17] CHIPLET_PUBK_HASH0/1; [18]/[19] CHIPLET_PUBK_PQC_HASH0/1; [20]/[21] SIP_PUBK_HASH0 / SIP_PUBK_PQC_HASH0; [22]/[23] SYS_PUBK_HASH / SYS_PUBK_PQC_HASH; [24]/[25] SIP_PUBK_HASH1 / SIP_PUBK_PQC_HASH1; [31:26] reserved. Before the chiplet owner transfers a part to the customer, the development-key bits shall be set (revoked).

BL1_VERSION

Table 36. key_manager.BL1_VERSION fields
BitsFieldAccessResetDescription
255:0versionR0x0Minimum BL1 version that can be loaded by SEPROM

BL2_VERSION

Table 37. key_manager.BL2_VERSION fields
BitsFieldAccessResetDescription
255:0versionR0x0Minimum BL2 version that can be loaded by BL1. If more boot stages exist, rollback protection can be implemented by BL2.

CHIPLET_UID

Table 38. key_manager.CHIPLET_UID fields
BitsFieldAccessResetDescription
255:0uidR0x0Silicon creator's secret device unique ID (also referred to as UDS - Unique Device Secret). The chiplet creator is responsible for CHIPLET_UID provisioning and public identity enrollment. When read-locked, both writability and software visibility are disabled.

SIP_PUBK_HASH0

Table 39. key_manager.SIP_PUBK_HASH0 fields
BitsFieldAccessResetDescription
255:0key_hashR0x0Hash digest of SiP owner's root public key for secure boot. The chiplet creator's actual root public key is embedded in the SEPROM; this digest is used to validate that public key.

SIP_UID

Table 40. key_manager.SIP_UID fields
BitsFieldAccessResetDescription
255:0uidR0x0SiP owner's secret device unique ID. The SiP owner is responsible for SIP_UID provisioning and public identity enrollment. When read-locked, both writability and software visibility are disabled.

SYS_PUBK_HASH

Table 41. key_manager.SYS_PUBK_HASH fields
BitsFieldAccessResetDescription
255:0key_hashR0x0Hash digest of system owner's root public key for secure boot.

SYS_UID

Table 42. key_manager.SYS_UID fields
BitsFieldAccessResetDescription
255:0uidR0x0System owner's secret device unique ID. The system owner is responsible for SYS_UID provisioning and public identity enrollment. When read-locked, both writability and software visibility are disabled.

STATUS_RPT

Table 43. key_manager.STATUS_RPT fields
BitsFieldAccessResetDescription
31:2reservedR0x0reserved
1:0rptR0x0BOOTROM report status based on the bit. 2'b00-> bootrom report status based on GPIO; 2'b01->bootrom report status;otherwise, bootrom does not report status

ROM_CTL

Table 44. key_manager.ROM_CTL fields
BitsFieldAccessResetDescription
31:6reservedR0x0reserved
5:1rom_swap_ctrlR0x0controls how the rom slices are swapped
0rom_endianness_ctrlR0x0controls the endianness of the rom data out. 0->little endian; 1->big endian

SYSCLK_FREQ_MHZ

Table 45. key_manager.SYSCLK_FREQ_MHZ fields
BitsFieldAccessResetDescription
31:11rsvdR0x0Reserved
10:0sysclk_freq_mhzR0x0Configured sysclk PLL frequency in MHz; ignored if 0. Consumed by boot ROM clock math.

CHIPLET_PUBK_HASH0

Table 46. key_manager.CHIPLET_PUBK_HASH0 fields
BitsFieldAccessResetDescription
255:0key_hashR0x0Chiplet owner authentication key hash digest, fused. These chiplet owner fused key hashes can be used in addition to the hashes in the ROM itself to authenticate manifests.

CHIPLET_PUBK_HASH1

Table 47. key_manager.CHIPLET_PUBK_HASH1 fields
BitsFieldAccessResetDescription
255:0key_hashR0x0Chiplet owner authentication key hash digest, fused. These chiplet owner fused key hashes can be used in addition to the hashes in the ROM itself to authenticate manifests.

REQUIRED_SIGNERS

Table 48. key_manager.REQUIRED_SIGNERS fields
BitsFieldAccessResetDescription
31:2reservedR0x0Reserved
1:0required_signersRW1S0x0Owners whose signature is required to authenticate any image loadable by SEP ROM. Per owner, 1 = required, 0 = not-required; the default all-zero value requires no additional owner. [0] SiP owner, [1] system owner. The chiplet creator is the root of trust and always authenticates BL1, so it has no bit here.

REQUIRED_ALGS

Table 49. key_manager.REQUIRED_ALGS fields
BitsFieldAccessResetDescription
31:12reservedR0x0Reserved
11:8sys_algsRW1S0x0Per-owner required signature algorithms for system owner. bit 0 = classical, bit 1 = post-quantum (ML-DSA), bits 3:2 reserved.
7:4sip_algsRW1S0x0Per-owner required signature algorithms for SiP owner. bit 0 = classical, bit 1 = post-quantum (ML-DSA), bits 3:2 reserved.
3:0chiplet_algsRW1S0x0Per-owner required signature algorithms for chiplet. Each nibble: bit 0 = classical (ECDSA P-384 or RSA), bit 1 = post-quantum (ML-DSA), bits 3:2 reserved.

CHIPLET_PUBK_PQC_HASH0

Table 50. key_manager.CHIPLET_PUBK_PQC_HASH0 fields
BitsFieldAccessResetDescription
255:0key_hashR0x0Chiplet owner ML-DSA PQC authentication key hash digest, fused. PQC counterpart of the corresponding CHIPLET_PUBK_HASH.

CHIPLET_PUBK_PQC_HASH1

Table 51. key_manager.CHIPLET_PUBK_PQC_HASH1 fields
BitsFieldAccessResetDescription
255:0key_hashR0x0Chiplet owner ML-DSA PQC authentication key hash digest, fused. PQC counterpart of the corresponding CHIPLET_PUBK_HASH.

SIP_PUBK_PQC_HASH0

Table 52. key_manager.SIP_PUBK_PQC_HASH0 fields
BitsFieldAccessResetDescription
255:0key_hashR0x0Hash digest of the SiP owner's ML-DSA PQC root public key for secure boot. PQC counterpart of SIP_PUBK_HASH.

SYS_PUBK_PQC_HASH

Table 53. key_manager.SYS_PUBK_PQC_HASH fields
BitsFieldAccessResetDescription
255:0key_hashR0x0Hash digest of the system owner's ML-DSA PQC root public key for secure boot. PQC counterpart of SYS_PUBK_HASH.

SIP_PUBK_HASH1

Table 54. key_manager.SIP_PUBK_HASH1 fields
BitsFieldAccessResetDescription
255:0key_hashR0x0Hash digest of SiP owner's root public key for secure boot. The chiplet creator's actual root public key is embedded in the SEPROM; this digest is used to validate that public key.

SIP_PUBK_PQC_HASH1

Table 55. key_manager.SIP_PUBK_PQC_HASH1 fields
BitsFieldAccessResetDescription
255:0key_hashR0x0Hash digest of the SiP owner's ML-DSA PQC root public key for secure boot. PQC counterpart of SIP_PUBK_HASH.

SEP_CHIPLET_ID

Table 56. key_manager.SEP_CHIPLET_ID fields
BitsFieldAccessResetDescription
255:0idR0x0Per-owner public identity fuse. Personalization input for the Key Manager identity root. Being public, no read protection is required. Individually lockable via LOCKS[58:63] (slots 29-31).

SEP_SIP_ID

Table 57. key_manager.SEP_SIP_ID fields
BitsFieldAccessResetDescription
255:0idR0x0Per-owner public identity fuse. Personalization input for the Key Manager identity root. Being public, no read protection is required. Individually lockable via LOCKS[58:63] (slots 29-31).

SEP_SYS_ID

Table 58. key_manager.SEP_SYS_ID fields
BitsFieldAccessResetDescription
255:0idR0x0Per-owner public identity fuse. Personalization input for the Key Manager identity root. Being public, no read protection is required. Individually lockable via LOCKS[58:63] (slots 29-31).

spare0

Table 59. key_manager.spare0 fields
BitsFieldAccessResetDescription
255:0rsvdR0x0Spare region for future use. Individually lockable via LOCKS_SPARE (slots 32-40).

spare1

Table 60. key_manager.spare1 fields
BitsFieldAccessResetDescription
255:0rsvdR0x0Spare region for future use. Individually lockable via LOCKS_SPARE (slots 32-40).

spare2

Table 61. key_manager.spare2 fields
BitsFieldAccessResetDescription
255:0rsvdR0x0Spare region for future use. Individually lockable via LOCKS_SPARE (slots 32-40).

spare3

Table 62. key_manager.spare3 fields
BitsFieldAccessResetDescription
255:0rsvdR0x0Spare region for future use. Individually lockable via LOCKS_SPARE (slots 32-40).

spare4

Table 63. key_manager.spare4 fields
BitsFieldAccessResetDescription
255:0rsvdR0x0Spare region for future use. Individually lockable via LOCKS_SPARE (slots 32-40).

spare5

Table 64. key_manager.spare5 fields
BitsFieldAccessResetDescription
255:0rsvdR0x0Spare region for future use. Individually lockable via LOCKS_SPARE (slots 32-40).

spare6

Table 65. key_manager.spare6 fields
BitsFieldAccessResetDescription
255:0rsvdR0x0Spare region for future use. Individually lockable via LOCKS_SPARE (slots 32-40).

spare7

Table 66. key_manager.spare7 fields
BitsFieldAccessResetDescription
255:0rsvdR0x0Spare region for future use. Individually lockable via LOCKS_SPARE (slots 32-40).

spare8

Table 67. key_manager.spare8 fields
BitsFieldAccessResetDescription
255:0rsvdR0x0Spare region for future use. Individually lockable via LOCKS_SPARE (slots 32-40).

EFUSE_INTERFACE_CTRL_STATUS

Table 68. key_manager.EFUSE_INTERFACE_CTRL_STATUS fields
BitsFieldAccessResetDescription
31:11Reserved--Reserved
10efuse_read_addr_error_clearW 1P0x0Clears the read out of bounds error bit (efuse_read_addr_error) in efuse_ctrl_status
9efuse_program_addr_error_clearW 1P0x0Clears the program out of bounds error bit (efuse_program_addr_error) in efuse_ctrl_status
8efuse_req_error_clearW 1P0x0Clears the blocked request error bit in efuse_ctrl_status
7Reserved--Reserved
6efuse_read_addr_errorR0x0Indicates that an invalid eFuse read address was used (address exceeds the implemented eFuse size). The error must be cleared by writing 1 to efuse_read_addr_error_clear.
5efuse_program_addr_errorR0x0Indicates that an invalid eFuse program address was used (address exceeds the implemented eFuse size). The error must be cleared by writing 1 to efuse_program_addr_error_clear.
4efuse_req_errorR0x0Indicates that the eFuse was blocked because of either read or a program lock. The error must be cleared by writing 1 to efuse_req_error_clear to this register
3:1Reserved--Reserved
0efuse_sense_doneR-Indicates if the eFuse state machine has completed

EFUSE_PROGRAM_CTRL

Table 69. key_manager.EFUSE_PROGRAM_CTRL fields
BitsFieldAccessResetDescription
31:28Reserved--Reserved
27program_enableRW0x0When set, enables the program request
26program_statusR0x00: No Error. 1: Error
25program_doneR0x0When set, the program has completed, the status of which is in program_status
24program_busyR0x0When set, the program is in progress
23:19Reserved--Reserved
18efuse_program_read_backRW0x0When set, trigger a read back after a program
17efuse_program_goRW 1P0x0When set, triggers a program to the eFuse. This will be ignored if the lock bit is set
16efuse_dataRW0x0Data to program to eFuse. If this bit is 0, the program request will be ignored
15:0efuse_addrRW0x0Bit address to program

EFUSE_READ_CTRL

Table 70. key_manager.EFUSE_READ_CTRL fields
BitsFieldAccessResetDescription
31:29Reserved--Reserved
28read_enableRW0x0When set, enables the read request
27Reserved--Reserved
26read_statusR0x00: No Error. 1: Error. Set when read_go is asserted while read is not enabled, the address is out of bounds, or the read request times out.
25read_doneR0x0When set, the read has completed, the status of which is in read_status
24read_busyR0x0When set, the read is in progress
23:17Reserved--Reserved
16efuse_read_goRW 1P0x0When set, triggers a read to efuse.
15:0efuse_addrRW0x0Bit address to read

EFUSE_PROGRAM_INTERFACE_READ_DATA

Table 71. key_manager.EFUSE_PROGRAM_INTERFACE_READ_DATA fields
BitsFieldAccessResetDescription
31:0doutR0x0Read Data from eFuse through program interface. This field is only valid when the efuse programming interface is utilized to burn the efuse IP and only when the state machine is during ST_CAPTUER_DATA state. Hardware debug only

EFUSE_READ_INTERFACE_READ_DATA

Table 72. key_manager.EFUSE_READ_INTERFACE_READ_DATA fields
BitsFieldAccessResetDescription
31:0doutR0x0Read Data from eFuse through READ interface.

EFUSE_READ_REQ_TIMEOUT

Table 73. key_manager.EFUSE_READ_REQ_TIMEOUT fields
BitsFieldAccessResetDescription
31:29Reserved--Reserved
28read_req_timout_enableRW0x0Enable timeout on read interface
27:0read_req_timeout_cyclesRW0x800000Number of cycles the read interface will wait for a response from the shim. At 100MHz this can count ~= 2.5 seconds.

EFUSE_PROGRAM_REQ_TIMEOUT

Table 74. key_manager.EFUSE_PROGRAM_REQ_TIMEOUT fields
BitsFieldAccessResetDescription
31:29Reserved--Reserved
28program_req_timeout_enableRW0x0Enable timeout on program interface.
27:0program_req_timeout_cyclesRW0x800000Number of cycles the program interface will wait for a response from the shim. At 100MHz this can count ~= 2.5 seconds.

RMA_SIP_TOKEN_I[8]

Table 75. key_manager.RMA_SIP_TOKEN_I[8] fields
BitsFieldAccessResetDescription
31:0tokenRW-Portion of writeable version of RMA_*_TOKEN, hashed, and compared with fused value to allow LC to change states.

RMA_CHIPLET_TOKEN_I[8]

Table 76. key_manager.RMA_CHIPLET_TOKEN_I[8] fields
BitsFieldAccessResetDescription
31:0tokenRW-Portion of writeable version of RMA_*_TOKEN, hashed, and compared with fused value to allow LC to change states.

SEC_DISABLE_TOKEN_I[8]

Table 77. key_manager.SEC_DISABLE_TOKEN_I[8] fields
BitsFieldAccessResetDescription
31:0tokenRW-Portion of writeable version of SEC_DISABLE_TOKEN, hashed, and compared with the post silicon injected values to allow security_disable.

TOKEN_EOP

Table 78. key_manager.TOKEN_EOP fields
BitsFieldAccessResetDescription
31:17Reserved--Reserved
16secure_disable_token_goW 1P0x0Write 1 to indicate that all token data has been written; this generates a pulse to begin token hashing.
15:9Reserved--Reserved
8rma_chiplet_token_goW 1P0x0Write 1 to indicate that all token data has been written; this generates a pulse to begin token hashing.
7:1Reserved--Reserved
0rma_sip_token_goW 1P0x0Write 1 to indicate that all token data has been written; this generates a pulse to begin token hashing.

RMA_SIP_TOKEN_MATCH

Table 79. key_manager.RMA_SIP_TOKEN_MATCH fields
BitsFieldAccessResetDescription
31:6Reserved--Reserved
5:0token_match_statusR0x0Store the status of the token match. Match = 6'b010101, Mismatch = 6'b101010, Error = 6'b111111

RMA_CHIPLET_TOKEN_MATCH

Table 80. key_manager.RMA_CHIPLET_TOKEN_MATCH fields
BitsFieldAccessResetDescription
31:6Reserved--Reserved
5:0token_match_statusR0x0Store the status of the token match. Match = 6'b010101, Mismatch = 6'b101010, Error = 6'b111111

SEC_DISABLE_TOKEN_MATCH

Table 81. key_manager.SEC_DISABLE_TOKEN_MATCH fields
BitsFieldAccessResetDescription
31:6Reserved--Reserved
5:0token_match_statusR0x0Store the status of the token match. Match = 6'b010101, Mismatch = 6'b101010, Error = 6'b111111

TOKEN_MATCH_FAULT

Table 82. key_manager.TOKEN_MATCH_FAULT fields
BitsFieldAccessResetDescription
31:17Reserved--Reserved
16secure_disable_token_faultR0x0A redundancy fault was detected in the SEC_DISABLE_TOKEN comparators.
15:9Reserved--Reserved
8rma_chiplet_token_faultR0x0A redundancy fault was detected in the RMA_CHIPLET_TOKEN comparators.
7:1Reserved--Reserved
0rma_sip_token_faultR0x0A redundancy fault was detected in the RMA_SIP_TOKEN comparators.

KEY_ENTRY[64].WORD[16]

Table 83. key_manager.KEY_ENTRY[64].WORD[16] fields
BitsFieldAccessResetDescription
31:0dataRW-32-bit key data word. No reset for security; power-up value undefined.
Actual storage is in km_kpv_regfile; CSR field is a protocol placeholder.

CTRL[64]

Table 84. key_manager.CTRL[64] fields
BitsFieldAccessResetDescription
31:4rsvd_31_4R0x0Reserved
3sealRW1S0x0Seals this key entry until warm reset. Read-any, write-1-only. Setting this
bit also sets lock_write in hardware, so a single write seals the slot: its
data can be read but not overwritten. Erase remains available, and erasing
a sealed slot retires it rather than freeing it (see ERASE), so a sealed
slot's material can be destroyed but its slot never reused.
2eraseRW1S0x0Write-1 to start hardware erase of this slot: an LFSR fills all 16 key
words (through the KPV scrambler). Hardware self-clears this bit when the
erase completes. Never blocked: neither lock_write, lock_use nor seal
prevents an erase. The slot's seal state when the erase completes decides
the outcome. Unsealed, the slot CTRL register is cleared and the slot is
reusable. Sealed, lock_write stays set and lock_use is set, retiring the
slot: its data is destroyed and it can be neither read, rewritten nor
reused until warm reset. A seal taken while an erase is already in flight
therefore still retires the slot.
1lock_useRW1S0x0Prevents KM read of this key entry data until reset. Read-any, write-1-only.
Hardware sets this bit when an erase of a sealed slot completes, retiring
the slot: its destroyed contents cannot be read back.
0lock_writeRW1S0x0Prevents KM write to this key entry data until reset; this register stays
writable so that a locked slot can still be read-locked and erased.
Read-any, write-1-only. Hardware holds this bit set for as long as SEAL is
set, so sealing a slot write-locks it without a separate write here.

KPV_SCRAMBLER_KEY

Table 85. key_manager.KPV_SCRAMBLER_KEY fields
BitsFieldAccessResetDescription
31:0keyRW-Scrambler key. No reset for security. HW clears to 0 on wipe via hwclr.

KPV_SCRAMBLER_CTRL

Table 86. key_manager.KPV_SCRAMBLER_CTRL fields
BitsFieldAccessResetDescription
31:2rsvdR0x0Reserved
1lockRW1S0x0Write-one-only. When 1, key and ENABLE cannot be modified until KM reset.
0enableRW0x01 = scramble key entry data on write, descramble on read; 0 = passthrough.

VERSION

Table 87. key_manager.VERSION fields
BitsFieldAccessResetDescription
31:24rsvdR0x0Reserved; must read as zero
23:16majorR0x1Major version number
15:8minorR0x0Minor version number
7:0patchR0x0Patch version number

CTRL

Table 88. key_manager.CTRL fields
BitsFieldAccessResetDescription
31:0rsvdR0x0Reserved

SOFT_RST_CODE

Table 89. key_manager.SOFT_RST_CODE fields
BitsFieldAccessResetDescription
31:0codeRW0x032-bit reset code. Write 0x53525354 to trigger soft reset.

kmcsr.IRQ_STATUS

Table 90. key_manager.kmcsr.IRQ_STATUS fields
BitsFieldAccessResetDescription
31:12rsvdR0x0Reserved
11rom_access_violationRW1C0x0KM ROM instruction fetch or data read attempted after the ROM lockout engaged. The lockout engages on the first committed instruction fetch from write-locked SRAM once SRAM_EXEC_MODE.enable is set, and clears only on warm or cold reset. Sticky, write 1 to clear.
10exec_violationRW1C0x0Instruction fetch from a non-whitelisted (non-executable) memory region detected, excluding the KM ROM. Sticky, write 1 to clear.
9otp_sigintRW1C0x0OTP dual-rail encoding integrity violation: value and complement are not complementary on at least one field. Sticky, write 1 to clear.
8otp_changeRW1C0x0An OTP readout field value changed (decoded value differs from prior cycle). Sticky, write 1 to clear. Check OTP_CHANGE_STATUS for the specific field(s).
7wipe_stateRW1C0x0Wipe state event (rising edge of wipe_state input). Sticky, write 1 to clear.
6drbg_errRW1C0x0DRBG Sampler error (timeout or AXI-Stream error). Sticky, write 1 to clear.
5axi_decerrRW1C0x0AXI DECERR (decode error) response detected on CPU bus transaction. Sticky, write 1 to clear.
4axi_slverrRW1C0x0AXI SLVERR (slave error) response detected on CPU bus transaction. Sticky, write 1 to clear.
3sram_write_lock_errRW1C0x0SRAM write attempt to a write-locked region detected. Sticky, write 1 to clear.
2rom_write_errRW1C0x0ROM write attempt detected (ROM is read-only). Sticky, write 1 to clear.
1sram_parity_errRW1C0x0SRAM parity error detected. Sticky, write 1 to clear.
0rom_parity_errRW1C0x0ROM parity error detected. Sticky, write 1 to clear.

kmcsr.IRQ_ENABLE

Table 91. key_manager.kmcsr.IRQ_ENABLE fields
BitsFieldAccessResetDescription
31:12rsvdR0x0Reserved
11rom_access_violation_enRW0x0Enable ROM lockout violation interrupt
10exec_violation_enRW0x0Enable execute-permission whitelist violation interrupt
9otp_sigint_enRW0x0Enable OTP dual-rail integrity violation interrupt
8otp_change_enRW0x0Enable OTP field change interrupt
7wipe_state_enRW0x0Enable wipe state interrupt
6drbg_err_enRW0x0Enable DRBG Sampler error interrupt
5axi_decerr_enRW0x0Enable AXI DECERR error interrupt
4axi_slverr_enRW0x0Enable AXI SLVERR error interrupt
3sram_write_lock_enRW0x0Enable SRAM write-lock violation interrupt
2rom_write_enRW0x0Enable ROM write error interrupt
1sram_parity_enRW0x0Enable SRAM parity error interrupt
0rom_parity_enRW0x0Enable ROM parity error interrupt

SCRAMBLER_KEY

Table 92. key_manager.SCRAMBLER_KEY fields
BitsFieldAccessResetDescription
31:0keyRW-Scrambler key value. Not readable when SCRAMBLER_CTRL.LOCK=1 (returns 0). No reset for security; power-up value undefined.

SCRAMBLER_CTRL

Table 93. key_manager.SCRAMBLER_CTRL fields
BitsFieldAccessResetDescription
31:2rsvdR0x0Reserved
1lockRW0x0Lock scrambler key and enable bit. Once set, key and enable cannot be modified until reset. Write-once (0->1 only). Security requirement: prevents disabling scrambling after key provisioning.
0enableRW0x0Enable SRAM scrambling. When 0, data passes through unmodified. Locked when LOCK=1 (security requirement).

SRAM_LOCK

Table 94. key_manager.SRAM_LOCK fields
BitsFieldAccessResetDescription
31:0lock_bitsRW1S0x0One bit per 1 KB SRAM region. Region 0 = 0x8000-0x83FF, region 31 = 0xFC00-0xFFFF. Write 1 to lock; 0 has no effect. Warm reset domain: cleared by warm or cold reset.

IRQ_SET

Table 95. key_manager.IRQ_SET fields
BitsFieldAccessResetDescription
31:12rsvdW0x0Reserved (write-only; reads trigger SLVERR via err_if_bad_rw)
11rom_access_violation_setW 1P0x0Write 1 to set IRQ_STATUS.ROM_ACCESS_VIOLATION (triggers ROM lockout violation interrupt for testing)
10exec_violation_setW 1P0x0Write 1 to set IRQ_STATUS.EXEC_VIOLATION (triggers exec-permission violation interrupt for testing)
9otp_sigint_setW 1P0x0Write 1 to set IRQ_STATUS.OTP_SIGINT (triggers OTP sigint interrupt for testing)
8otp_change_setW 1P0x0Write 1 to set IRQ_STATUS.OTP_CHANGE (triggers OTP change interrupt for testing)
7wipe_state_setW 1P0x0Write 1 to set IRQ_STATUS.WIPE_STATE (triggers wipe state interrupt for testing)
6drbg_err_setW 1P0x0Write 1 to set IRQ_STATUS.DRBG_ERR (triggers DRBG Sampler interrupt for testing)
5axi_decerr_setW 1P0x0Write 1 to set IRQ_STATUS.AXI_DECERR (triggers AXI DECERR interrupt for testing)
4axi_slverr_setW 1P0x0Write 1 to set IRQ_STATUS.AXI_SLVERR (triggers AXI SLVERR interrupt for testing)
3sram_write_lock_err_setW 1P0x0Write 1 to set IRQ_STATUS.SRAM_WRITE_LOCK_ERR (triggers SRAM write-lock interrupt for testing)
2rom_write_err_setW 1P0x0Write 1 to set IRQ_STATUS.ROM_WRITE_ERR (triggers ROM write interrupt for testing)
1sram_parity_err_setW 1P0x0Write 1 to set IRQ_STATUS.SRAM_PARITY_ERR (triggers SRAM parity interrupt for testing)
0rom_parity_err_setW 1P0x0Write 1 to set IRQ_STATUS.ROM_PARITY_ERR (triggers ROM parity interrupt for testing)

SRAM_WRITE_LOCK_VIOLATION

Table 96. key_manager.SRAM_WRITE_LOCK_VIOLATION fields
BitsFieldAccessResetDescription
31:0violation_bitsRW1C0x0Bit[i]=1 if region i had attempted write while locked. Sticky, write 1 to clear each bit.

RECOVERABLE_ERR

Table 97. key_manager.RECOVERABLE_ERR fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0recoverable_errRW0x01 = recoverable fault occurred and was handled by ISR; 0 = clear. Write 1 to set, write 0 to clear.

BOOT_STATUS

Table 98. key_manager.BOOT_STATUS fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0cold_boot_doneRW1S0x0Write-1-only: set by ROM firmware at end of cold boot. Reads 0 after cold reset; reads 1 after firmware sets it. Sticky until next cold reset (preserved across warm resets).

OTP_LIFE_CYCLE

Table 99. key_manager.OTP_LIFE_CYCLE fields
BitsFieldAccessResetDescription
31:8rsvdR0x0Reserved
7:0valueR-8-bit life cycle state from OTP. No reset; power-up value undefined.

OTP_DEMOTION_STATE

Table 100. key_manager.OTP_DEMOTION_STATE fields
BitsFieldAccessResetDescription
31:4rsvdR0x0Reserved
3:2demote_2_valueR-2-bit demotion 2 state from OTP. No reset; power-up value undefined.
1:0demote_1_valueR-2-bit demotion 1 state from OTP. No reset; power-up value undefined.

SRAM_EXEC_MODE

Table 101. key_manager.SRAM_EXEC_MODE fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0enableRW1S0x0Execute-permission mode: 0=ROM-only whitelist; 1=write-locked SRAM whitelist, arming the ROM lockout. Write 1 to set; write 0 has no effect. Warm reset domain: cleared by warm or cold reset.

IRQ_ENTRY_ADDR

Table 102. key_manager.IRQ_ENTRY_ADDR fields
BitsFieldAccessResetDescription
31:0addrRW0x10IRQ handler entry PC. Reset matches ROM vector at 0x10. When locked, SW writes do not update storage.

IRQ_ENTRY_LOCK

Table 103. key_manager.IRQ_ENTRY_LOCK fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved; reads as zero.
0lockRW1S0x0Write 1 to set; write 0 has no effect; sticky until reset.

VUART_TX

Table 104. key_manager.VUART_TX fields
BitsFieldAccessResetDescription
31data_validRW0x0Data valid strobe. Set by firmware on write, cleared by hardware after one cycle.
30:8rsvd0R0x0Reserved
7:0tx_byteRW0x0Byte to transmit (write to send character to testbench)

VUART_RX

Table 105. key_manager.VUART_RX fields
BitsFieldAccessResetDescription
31data_validR0x0RX data valid. Set by testbench, cleared by firmware read.
30:8rsvd0R0x0Reserved
7:0rx_byteR0x0Received byte from testbench

VUART_STATUS

Table 106. key_manager.VUART_STATUS fields
BitsFieldAccessResetDescription
31:3rsvdR0x0Reserved
2print_enableR0x0Enable VUART printing. Set by testbench to enable printf output. Disabled by default to save simulation time.
1rx_validR0x0RX has valid data available
0tx_readyR0x1TX ready to accept data (always 1 in simulation)

TB_RESULT

Table 107. key_manager.TB_RESULT fields
BitsFieldAccessResetDescription
31:0resultRW0x0Test result: 0=fail, 1=pass

TB_SIGNATURE

Table 108. key_manager.TB_SIGNATURE fields
BitsFieldAccessResetDescription
31:0signatureRW0x0Completion signature value

TB_ERRCODE

Table 109. key_manager.TB_ERRCODE fields
BitsFieldAccessResetDescription
31:0errcodeRW0x0Error code value

TB_SUBTEST

Table 110. key_manager.TB_SUBTEST fields
BitsFieldAccessResetDescription
31:0subtestRW0x0Current subtest number

TB_CMD

Table 111. key_manager.TB_CMD fields
BitsFieldAccessResetDescription
31:0cmdRW0x0Command code (0=NOP, 1=ROM_PARITY_EN, 2=ROM_PARITY_DIS, 3=SRAM_PARITY_EN, 4=SRAM_PARITY_DIS)

TB_CMD_ARG

Table 112. key_manager.TB_CMD_ARG fields
BitsFieldAccessResetDescription
31:0argRW0x0Command argument value

TB_CMD_STATUS

Table 113. key_manager.TB_CMD_STATUS fields
BitsFieldAccessResetDescription
31:0statusRW0x0Command status: 0=IDLE, 1=ACK, 0xFFFFFFFF=ERR

TB_CMD_RESULT

Table 114. key_manager.TB_CMD_RESULT fields
BitsFieldAccessResetDescription
31:0resultR0x0Command result value

DEBUG

Table 115. key_manager.DEBUG fields
BitsFieldAccessResetDescription
31:0magicR0xCAFEBEEFMagic constant: 0xCAFEBEEF

OTP_CHIPLET_UID_VAL_0

Table 116. key_manager.OTP_CHIPLET_UID_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_1

Table 117. key_manager.OTP_CHIPLET_UID_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_2

Table 118. key_manager.OTP_CHIPLET_UID_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_3

Table 119. key_manager.OTP_CHIPLET_UID_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_4

Table 120. key_manager.OTP_CHIPLET_UID_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_5

Table 121. key_manager.OTP_CHIPLET_UID_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_6

Table 122. key_manager.OTP_CHIPLET_UID_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_7

Table 123. key_manager.OTP_CHIPLET_UID_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_0

Table 124. key_manager.OTP_CHIPLET_UID_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_1

Table 125. key_manager.OTP_CHIPLET_UID_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_2

Table 126. key_manager.OTP_CHIPLET_UID_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_3

Table 127. key_manager.OTP_CHIPLET_UID_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_4

Table 128. key_manager.OTP_CHIPLET_UID_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_5

Table 129. key_manager.OTP_CHIPLET_UID_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_6

Table 130. key_manager.OTP_CHIPLET_UID_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_7

Table 131. key_manager.OTP_CHIPLET_UID_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_0

Table 132. key_manager.OTP_SIP_UID_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_1

Table 133. key_manager.OTP_SIP_UID_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_2

Table 134. key_manager.OTP_SIP_UID_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_3

Table 135. key_manager.OTP_SIP_UID_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_4

Table 136. key_manager.OTP_SIP_UID_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_5

Table 137. key_manager.OTP_SIP_UID_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_6

Table 138. key_manager.OTP_SIP_UID_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_7

Table 139. key_manager.OTP_SIP_UID_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_0

Table 140. key_manager.OTP_SIP_UID_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_1

Table 141. key_manager.OTP_SIP_UID_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_2

Table 142. key_manager.OTP_SIP_UID_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_3

Table 143. key_manager.OTP_SIP_UID_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_4

Table 144. key_manager.OTP_SIP_UID_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_5

Table 145. key_manager.OTP_SIP_UID_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_6

Table 146. key_manager.OTP_SIP_UID_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_7

Table 147. key_manager.OTP_SIP_UID_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_0

Table 148. key_manager.OTP_SYS_UID_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_1

Table 149. key_manager.OTP_SYS_UID_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_2

Table 150. key_manager.OTP_SYS_UID_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_3

Table 151. key_manager.OTP_SYS_UID_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_4

Table 152. key_manager.OTP_SYS_UID_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_5

Table 153. key_manager.OTP_SYS_UID_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_6

Table 154. key_manager.OTP_SYS_UID_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_7

Table 155. key_manager.OTP_SYS_UID_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_0

Table 156. key_manager.OTP_SYS_UID_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_1

Table 157. key_manager.OTP_SYS_UID_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_2

Table 158. key_manager.OTP_SYS_UID_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_3

Table 159. key_manager.OTP_SYS_UID_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_4

Table 160. key_manager.OTP_SYS_UID_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_5

Table 161. key_manager.OTP_SYS_UID_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_6

Table 162. key_manager.OTP_SYS_UID_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_7

Table 163. key_manager.OTP_SYS_UID_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_0

Table 164. key_manager.OTP_CLASS_KEY_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_1

Table 165. key_manager.OTP_CLASS_KEY_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_2

Table 166. key_manager.OTP_CLASS_KEY_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_3

Table 167. key_manager.OTP_CLASS_KEY_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_4

Table 168. key_manager.OTP_CLASS_KEY_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_5

Table 169. key_manager.OTP_CLASS_KEY_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_6

Table 170. key_manager.OTP_CLASS_KEY_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_7

Table 171. key_manager.OTP_CLASS_KEY_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_0

Table 172. key_manager.OTP_CLASS_KEY_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_1

Table 173. key_manager.OTP_CLASS_KEY_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_2

Table 174. key_manager.OTP_CLASS_KEY_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_3

Table 175. key_manager.OTP_CLASS_KEY_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_4

Table 176. key_manager.OTP_CLASS_KEY_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_5

Table 177. key_manager.OTP_CLASS_KEY_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_6

Table 178. key_manager.OTP_CLASS_KEY_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_7

Table 179. key_manager.OTP_CLASS_KEY_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_READ_LOCK

Table 180. key_manager.OTP_READ_LOCK fields
BitsFieldAccessResetDescription
31:9rsvdR0x0Reserved
8sep_sys_idRW1S0x0Lock OTP_SEP_SYS_ID_VAL/CPL reads (returns zero when locked)
7sep_sip_idRW1S0x0Lock OTP_SEP_SIP_ID_VAL/CPL reads (returns zero when locked)
6sep_chiplet_idRW1S0x0Lock OTP_SEP_CHIPLET_ID_VAL/CPL reads (returns zero when locked)
5class_keyRW1S0x0Lock OTP_CLASS_KEY_VAL/CPL reads (returns zero when locked)
4sys_uidRW1S0x0Lock OTP_SYS_UID_VAL/CPL reads (returns zero when locked)
3sip_uidRW1S0x0Lock OTP_SIP_UID_VAL/CPL reads (returns zero when locked)
2chiplet_uidRW1S0x0Lock OTP_CHIPLET_UID_VAL/CPL reads (returns zero when locked)
1demotionRW1S0x0Lock OTP_DEMOTION_STATE reads (returns zero when locked)
0life_cycleRW1S0x0Lock OTP_LIFE_CYCLE reads (returns zero when locked)

OTP_CHANGE_STATUS

Table 181. key_manager.OTP_CHANGE_STATUS fields
BitsFieldAccessResetDescription
31:9rsvdR0x0Reserved
8sep_sys_idRW1C0x0OTP_SEP_SYS_ID value changed since last cycle. Sticky, write 1 to clear.
7sep_sip_idRW1C0x0OTP_SEP_SIP_ID value changed since last cycle. Sticky, write 1 to clear.
6sep_chiplet_idRW1C0x0OTP_SEP_CHIPLET_ID value changed since last cycle. Sticky, write 1 to clear.
5class_keyRW1C0x0OTP_CLASS_KEY value changed since last cycle. Sticky, write 1 to clear.
4sys_uidRW1C0x0OTP_SYS_UID value changed since last cycle. Sticky, write 1 to clear.
3sip_uidRW1C0x0OTP_SIP_UID value changed since last cycle. Sticky, write 1 to clear.
2chiplet_uidRW1C0x0OTP_CHIPLET_UID value changed since last cycle. Sticky, write 1 to clear.
1demotionRW1C0x0OTP_DEMOTION_STATE value changed since last cycle. Sticky, write 1 to clear.
0life_cycleRW1C0x0OTP_LIFE_CYCLE value changed since last cycle. Sticky, write 1 to clear.

OTP_READ_LOCK_COLD

Table 182. key_manager.OTP_READ_LOCK_COLD fields
BitsFieldAccessResetDescription
31:9rsvdR0x0Reserved
8sep_sys_idRW1S0x0Cold-reset read-lock for OTP_SEP_SYS_ID_VAL/CPL. Effective lock = OTP_READ_LOCK.sep_sys_id | OTP_READ_LOCK_COLD.sep_sys_id.
7sep_sip_idRW1S0x0Cold-reset read-lock for OTP_SEP_SIP_ID_VAL/CPL. Effective lock = OTP_READ_LOCK.sep_sip_id | OTP_READ_LOCK_COLD.sep_sip_id.
6sep_chiplet_idRW1S0x0Cold-reset read-lock for OTP_SEP_CHIPLET_ID_VAL/CPL. Effective lock = OTP_READ_LOCK.sep_chiplet_id | OTP_READ_LOCK_COLD.sep_chiplet_id.
5class_keyRW1S0x0Cold-reset read-lock for OTP_CLASS_KEY_VAL/CPL. Effective lock = OTP_READ_LOCK.class_key | OTP_READ_LOCK_COLD.class_key.
4sys_uidRW1S0x0Cold-reset read-lock for OTP_SYS_UID_VAL/CPL. Effective lock = OTP_READ_LOCK.sys_uid | OTP_READ_LOCK_COLD.sys_uid.
3sip_uidRW1S0x0Cold-reset read-lock for OTP_SIP_UID_VAL/CPL. Effective lock = OTP_READ_LOCK.sip_uid | OTP_READ_LOCK_COLD.sip_uid.
2chiplet_uidRW1S0x0Cold-reset read-lock for OTP_CHIPLET_UID_VAL/CPL. Effective lock = OTP_READ_LOCK.chiplet_uid | OTP_READ_LOCK_COLD.chiplet_uid.
1demotionRW1S0x0Cold-reset read-lock for OTP_DEMOTION_STATE. Effective lock = OTP_READ_LOCK.demotion | OTP_READ_LOCK_COLD.demotion.
0life_cycleRW1S0x0Cold-reset read-lock for OTP_LIFE_CYCLE. Effective lock = OTP_READ_LOCK.life_cycle | OTP_READ_LOCK_COLD.life_cycle.

OTP_SEP_CHIPLET_ID_VAL_0

Table 183. key_manager.OTP_SEP_CHIPLET_ID_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_1

Table 184. key_manager.OTP_SEP_CHIPLET_ID_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_2

Table 185. key_manager.OTP_SEP_CHIPLET_ID_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_3

Table 186. key_manager.OTP_SEP_CHIPLET_ID_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_4

Table 187. key_manager.OTP_SEP_CHIPLET_ID_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_5

Table 188. key_manager.OTP_SEP_CHIPLET_ID_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_6

Table 189. key_manager.OTP_SEP_CHIPLET_ID_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_7

Table 190. key_manager.OTP_SEP_CHIPLET_ID_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_0

Table 191. key_manager.OTP_SEP_CHIPLET_ID_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_1

Table 192. key_manager.OTP_SEP_CHIPLET_ID_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_2

Table 193. key_manager.OTP_SEP_CHIPLET_ID_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_3

Table 194. key_manager.OTP_SEP_CHIPLET_ID_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_4

Table 195. key_manager.OTP_SEP_CHIPLET_ID_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_5

Table 196. key_manager.OTP_SEP_CHIPLET_ID_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_6

Table 197. key_manager.OTP_SEP_CHIPLET_ID_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_7

Table 198. key_manager.OTP_SEP_CHIPLET_ID_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_0

Table 199. key_manager.OTP_SEP_SIP_ID_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_1

Table 200. key_manager.OTP_SEP_SIP_ID_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_2

Table 201. key_manager.OTP_SEP_SIP_ID_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_3

Table 202. key_manager.OTP_SEP_SIP_ID_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_4

Table 203. key_manager.OTP_SEP_SIP_ID_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_5

Table 204. key_manager.OTP_SEP_SIP_ID_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_6

Table 205. key_manager.OTP_SEP_SIP_ID_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_7

Table 206. key_manager.OTP_SEP_SIP_ID_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_0

Table 207. key_manager.OTP_SEP_SIP_ID_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_1

Table 208. key_manager.OTP_SEP_SIP_ID_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_2

Table 209. key_manager.OTP_SEP_SIP_ID_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_3

Table 210. key_manager.OTP_SEP_SIP_ID_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_4

Table 211. key_manager.OTP_SEP_SIP_ID_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_5

Table 212. key_manager.OTP_SEP_SIP_ID_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_6

Table 213. key_manager.OTP_SEP_SIP_ID_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_7

Table 214. key_manager.OTP_SEP_SIP_ID_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_0

Table 215. key_manager.OTP_SEP_SYS_ID_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_1

Table 216. key_manager.OTP_SEP_SYS_ID_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_2

Table 217. key_manager.OTP_SEP_SYS_ID_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_3

Table 218. key_manager.OTP_SEP_SYS_ID_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_4

Table 219. key_manager.OTP_SEP_SYS_ID_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_5

Table 220. key_manager.OTP_SEP_SYS_ID_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_6

Table 221. key_manager.OTP_SEP_SYS_ID_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_7

Table 222. key_manager.OTP_SEP_SYS_ID_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_0

Table 223. key_manager.OTP_SEP_SYS_ID_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_1

Table 224. key_manager.OTP_SEP_SYS_ID_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_2

Table 225. key_manager.OTP_SEP_SYS_ID_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_3

Table 226. key_manager.OTP_SEP_SYS_ID_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_4

Table 227. key_manager.OTP_SEP_SYS_ID_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_5

Table 228. key_manager.OTP_SEP_SYS_ID_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_6

Table 229. key_manager.OTP_SEP_SYS_ID_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_7

Table 230. key_manager.OTP_SEP_SYS_ID_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

DATA

Table 231. key_manager.DATA fields
BitsFieldAccessResetDescription
31:0dataR-32-bit random data from DRBG. No reset for security; power-up value undefined.

CFG

Table 232. key_manager.CFG fields
BitsFieldAccessResetDescription
31:16timeoutRW0x100Cycles to wait for DRBG on active CPU read; 0 = disable. Default 256.
15:1rsvdRW0x0Reserved
0prefetchRW0x0Enable prefetch. When 0, prefetch data register is cleared.

STATUS

Table 233. key_manager.STATUS fields
BitsFieldAccessResetDescription
31:16count_goodRW0x0Counts only reads completed through ST_RESPOND, excluding prefetched words. Saturates at 0xFFFF. Writing any non-zero value clears the field to 0; writing 0 has no effect.
15:8count_badRW0x0Failed transactions (timeout or error). Saturates at 0xFF. Writing any non-zero value clears the field to 0; writing 0 has no effect.
7:4rsvdR0x0Reserved
3stream_errRW1C0x0Set when there is an error on the DRBG AXI-Stream interface (e.g. TVALID deasserted before TREADY). Write 1 to clear.
2timeout_errRW1C0x0Set when a DRBG read from the KM CPU times out. Write 1 to clear.
1prefetchedR0x0Prefetched data available
0drbg_readyR0x0TVALID asserted from DRBG

PREFETCH_DATA

Table 234. key_manager.PREFETCH_DATA fields
BitsFieldAccessResetDescription
31:0dataR-Prefetched 32-bit random data. No reset for security; power-up value undefined.

KEY_SHARE0[12]

Table 235. key_manager.KEY_SHARE0[12] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

KEY_SHARE1[12]

Table 236. key_manager.KEY_SHARE1[12] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

otbn_wrapper_key.KEY_CTRL

Table 237. key_manager.otbn_wrapper_key.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, asserts keymgr_key_i.valid to indicate key is loaded.
Write 0 to invalidate the current key.

aes_wrapper_key.KEY_SHARE0[8]

Table 238. key_manager.aes_wrapper_key.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

aes_wrapper_key.KEY_SHARE1[8]

Table 239. key_manager.aes_wrapper_key.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

aes_wrapper_key.KEY_CTRL

Table 240. key_manager.aes_wrapper_key.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, asserts keymgr_key_i.valid to indicate key is loaded.
Write 0 to invalidate the current key.

kmac_wrapper_key.KEY_SHARE0[8]

Table 241. key_manager.kmac_wrapper_key.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

kmac_wrapper_key.KEY_SHARE1[8]

Table 242. key_manager.kmac_wrapper_key.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

kmac_wrapper_key.KEY_CTRL

Table 243. key_manager.kmac_wrapper_key.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, asserts keymgr_key_i.valid to indicate key is loaded.
Write 0 to invalidate the current key.

hmac_wrapper_key.KEY_SHARE0[8]

Table 244. key_manager.hmac_wrapper_key.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

hmac_wrapper_key.KEY_SHARE1[8]

Table 245. key_manager.hmac_wrapper_key.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

hmac_wrapper_key.KEY_CTRL

Table 246. key_manager.hmac_wrapper_key.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, asserts keymgr_key_i.valid to indicate key is loaded.
Write 0 to invalidate the current key.

abr_wrapper_key.MLDSA_SEED.KEY_SHARE0[8]

Table 247. key_manager.abr_wrapper_key.MLDSA_SEED.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

abr_wrapper_key.MLDSA_SEED.KEY_SHARE1[8]

Table 248. key_manager.abr_wrapper_key.MLDSA_SEED.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

abr_wrapper_key.MLDSA_SEED.KEY_CTRL

Table 249. key_manager.abr_wrapper_key.MLDSA_SEED.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, the seed is loaded and the KV shim will serve it to Adams Bridge.
Write 0 to invalidate and allow a new seed to be written.

abr_wrapper_key.MLKEM_SEED_D.KEY_SHARE0[8]

Table 250. key_manager.abr_wrapper_key.MLKEM_SEED_D.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

abr_wrapper_key.MLKEM_SEED_D.KEY_SHARE1[8]

Table 251. key_manager.abr_wrapper_key.MLKEM_SEED_D.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

abr_wrapper_key.MLKEM_SEED_D.KEY_CTRL

Table 252. key_manager.abr_wrapper_key.MLKEM_SEED_D.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, the seed is loaded and the KV shim will serve it to Adams Bridge.
Write 0 to invalidate and allow a new seed to be written.

abr_wrapper_key.MLKEM_SEED_Z.KEY_SHARE0[8]

Table 253. key_manager.abr_wrapper_key.MLKEM_SEED_Z.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

abr_wrapper_key.MLKEM_SEED_Z.KEY_SHARE1[8]

Table 254. key_manager.abr_wrapper_key.MLKEM_SEED_Z.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

abr_wrapper_key.MLKEM_SEED_Z.KEY_CTRL

Table 255. key_manager.abr_wrapper_key.MLKEM_SEED_Z.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, the seed is loaded and the KV shim will serve it to Adams Bridge.
Write 0 to invalidate and allow a new seed to be written.

abr_wrapper_key.MLKEM_MSG.KEY_SHARE0[8]

Table 256. key_manager.abr_wrapper_key.MLKEM_MSG.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

abr_wrapper_key.MLKEM_MSG.KEY_SHARE1[8]

Table 257. key_manager.abr_wrapper_key.MLKEM_MSG.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

abr_wrapper_key.MLKEM_MSG.KEY_CTRL

Table 258. key_manager.abr_wrapper_key.MLKEM_MSG.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, the seed is loaded and the KV shim will serve it to Adams Bridge.
Write 0 to invalidate and allow a new seed to be written.

KEY[8]

Table 259. key_manager.KEY[8] fields
BitsFieldAccessResetDescription
31:0dataR0x032-bit shared-key word. Hardware writes on key-ready event;
hardware clears to 0 on key-consume event (KEY_VALID cleared).

abr_wrapper_key.MLKEM_SHARED_KEY.KEY_CTRL

Table 260. key_manager.abr_wrapper_key.MLKEM_SHARED_KEY.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0C0x01 = shared key is valid and ready for firmware consumption.
Hardware sets this bit on key-ready event. Write 0 to clear;
write 1 has no effect (software cannot set this bit).

abr_wrapper_key.MLKEM_SHARED_KEY.IRQ_STATUS

Table 261. key_manager.abr_wrapper_key.MLKEM_SHARED_KEY.IRQ_STATUS fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW1C0x0ML-KEM shared key valid. Sticky, write 1 to clear.

abr_wrapper_key.MLKEM_SHARED_KEY.IRQ_ENABLE

Table 262. key_manager.abr_wrapper_key.MLKEM_SHARED_KEY.IRQ_ENABLE fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_valid_enRW0x01 = enable PicoRV32 IRQ when ML-KEM shared key is valid.
0 = mask the interrupt (KEY_CTRL.KEY_VALID can still be polled).

3.2.2. Control and Status Registers

Key Manager Control and Status Registers

Control and status registers for the Key Manager subsystem

Register List:

Table 263. Key Manager Control and Status Registers register list
AddressNameAccessDescription
0x0VERSIONRHardware version register (semantic versioning: major.minor.patch)
0x4CTRLRControl register (reserved for future use)
0x8SOFT_RST_CODERWSoftware reset code register. Write 0x53525354 ('SRST') to trigger soft reset. Any other value has no effect.
0xCIRQ_STATUSRWInterrupt status register. Sticky bits cleared by writing 1.
0x10IRQ_ENABLERWInterrupt enable/mask register
0x14SCRAMBLER_KEYRW32-bit scrambler key for SRAM address/data scrambling. When locked: writes ignored, reads return 0. No reset; powers up random.
0x18SCRAMBLER_CTRLRWScrambler control register
0x1CSRAM_LOCKRWSRAM write-lock bits. Bit[i]=1 locks region i (1 KB each, 32 regions). Write-1-only: writing 1 sets the bit, writing 0 has no effect. Cleared by warm or cold reset (warm reset domain); ROM re-applies the lock policy on every boot before handover to mutable firmware.
0x20IRQ_SETWInterrupt set register. Write 1 to trigger corresponding interrupt (for ISR testing). Write-only, reads return 0.
0x24SRAM_WRITE_LOCK_VIOLATIONRWWhich SRAM region(s) had write attempts while locked. Bit[i]=region i. Sticky, write 1 to clear each bit.
0x28RECOVERABLE_ERRRWRecoverable error status. Firmware writes 1 to set (after recovering in ISR), writes 0 to clear (e.g. when SEP requests clear). Drives recoverable error event output.
0x2CBOOT_STATUSRWBoot status. Firmware writes 1 to COLD_BOOT_DONE after cold-boot init completes; bit remains set until next cold reset.
0x30OTP_LIFE_CYCLERLife cycle state. 8-bit (4-bit value differentially encoded). Read-through from OTP port; no reset.
0x34OTP_DEMOTION_STATERDemotion state. 2-bit, differentially encoded. Read-through from OTP port; no reset.
0x38SRAM_EXEC_MODERWExecute-permission whitelist mode. Write-1-only (woset); cleared by warm or cold reset. 0=ROM executable; 1=write-locked SRAM regions executable, and the ROM lockout is armed. Set by ROM stack-less handover immediately before jumping to mutable firmware.
0xB8IRQ_ENTRY_ADDRRWEffective IRQ entry address for subsequent interrupts. Writable while unlocked; any 32-bit value accepted.
0xBCIRQ_ENTRY_LOCKRWWrite-one-only lock for IRQ_ENTRY_ADDR. Separate readable register; cleared only on KM reset.
0x100VUART_TXRWVirtual UART transmit register. Write a byte to send to testbench. DATA_VALID is set on write and self-clears.
0x104VUART_RXRVirtual UART receive register. Testbench writes bytes here for firmware to read.
0x108VUART_STATUSRVirtual UART status register for flow control
0x110TB_RESULTRWTest result register. Firmware writes 0=fail, 1=pass.
0x114TB_SIGNATURERWTest completion signature. Firmware writes 0x600D600D (pass) or 0xBADBADBA (fail).
0x118TB_ERRCODERWTest error code register. Firmware writes optional error code for debugging.
0x11CTB_SUBTESTRWCurrent subtest number register. Firmware increments for each subtest.
0x120TB_CMDRWTestbench command register. Firmware writes command, testbench reads and clears.
0x124TB_CMD_ARGRWTestbench command argument register. Firmware writes optional argument.
0x128TB_CMD_STATUSRWTestbench command status register. Testbench writes status, firmware reads.
0x12CTB_CMD_RESULTRTestbench command result register. Testbench writes result value.
0x1FCDEBUGRDebug register with known constant value for verification
0x200OTP_CHIPLET_UID_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x204OTP_CHIPLET_UID_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x208OTP_CHIPLET_UID_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x20COTP_CHIPLET_UID_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x210OTP_CHIPLET_UID_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x214OTP_CHIPLET_UID_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x218OTP_CHIPLET_UID_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x21COTP_CHIPLET_UID_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x220OTP_CHIPLET_UID_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x224OTP_CHIPLET_UID_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x228OTP_CHIPLET_UID_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x22COTP_CHIPLET_UID_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x230OTP_CHIPLET_UID_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x234OTP_CHIPLET_UID_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x238OTP_CHIPLET_UID_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x23COTP_CHIPLET_UID_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x240OTP_SIP_UID_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x244OTP_SIP_UID_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x248OTP_SIP_UID_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x24COTP_SIP_UID_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x250OTP_SIP_UID_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x254OTP_SIP_UID_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x258OTP_SIP_UID_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x25COTP_SIP_UID_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x260OTP_SIP_UID_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x264OTP_SIP_UID_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x268OTP_SIP_UID_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x26COTP_SIP_UID_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x270OTP_SIP_UID_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x274OTP_SIP_UID_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x278OTP_SIP_UID_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x27COTP_SIP_UID_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x280OTP_SYS_UID_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x284OTP_SYS_UID_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x288OTP_SYS_UID_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x28COTP_SYS_UID_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x290OTP_SYS_UID_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x294OTP_SYS_UID_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x298OTP_SYS_UID_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x29COTP_SYS_UID_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2A0OTP_SYS_UID_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2A4OTP_SYS_UID_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2A8OTP_SYS_UID_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2ACOTP_SYS_UID_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2B0OTP_SYS_UID_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2B4OTP_SYS_UID_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2B8OTP_SYS_UID_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2BCOTP_SYS_UID_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2C0OTP_CLASS_KEY_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2C4OTP_CLASS_KEY_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2C8OTP_CLASS_KEY_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2CCOTP_CLASS_KEY_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2D0OTP_CLASS_KEY_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2D4OTP_CLASS_KEY_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2D8OTP_CLASS_KEY_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2DCOTP_CLASS_KEY_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2E0OTP_CLASS_KEY_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2E4OTP_CLASS_KEY_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2E8OTP_CLASS_KEY_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2ECOTP_CLASS_KEY_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2F0OTP_CLASS_KEY_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2F4OTP_CLASS_KEY_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2F8OTP_CLASS_KEY_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x2FCOTP_CLASS_KEY_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x300OTP_READ_LOCKRWOTP field warm-reset-domain read-lock bits. Write 1 to set; writing 0 has no effect. Locked reads of the corresponding OTP field return zero (effective lock = OTP_READ_LOCK | OTP_READ_LOCK_COLD). Warm-reset domain: cleared by warm or cold reset.
0x304OTP_CHANGE_STATUSRWOTP field change status. A bit is set when the corresponding field's decoded value changes. Sticky, write 1 to clear. Valid after IRQ_STATUS.OTP_CHANGE fires.
0x308OTP_READ_LOCK_COLDRWOTP field cold-reset-domain read-lock bits. Write 1 to set; writing 0 has no effect. Locked reads of the corresponding OTP field return zero (effective lock = OTP_READ_LOCK | OTP_READ_LOCK_COLD). Cold-reset domain: survives warm reset.
0x400OTP_SEP_CHIPLET_ID_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x404OTP_SEP_CHIPLET_ID_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x408OTP_SEP_CHIPLET_ID_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x40COTP_SEP_CHIPLET_ID_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x410OTP_SEP_CHIPLET_ID_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x414OTP_SEP_CHIPLET_ID_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x418OTP_SEP_CHIPLET_ID_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x41COTP_SEP_CHIPLET_ID_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x420OTP_SEP_CHIPLET_ID_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x424OTP_SEP_CHIPLET_ID_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x428OTP_SEP_CHIPLET_ID_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x42COTP_SEP_CHIPLET_ID_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x430OTP_SEP_CHIPLET_ID_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x434OTP_SEP_CHIPLET_ID_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x438OTP_SEP_CHIPLET_ID_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x43COTP_SEP_CHIPLET_ID_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x440OTP_SEP_SIP_ID_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x444OTP_SEP_SIP_ID_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x448OTP_SEP_SIP_ID_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x44COTP_SEP_SIP_ID_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x450OTP_SEP_SIP_ID_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x454OTP_SEP_SIP_ID_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x458OTP_SEP_SIP_ID_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x45COTP_SEP_SIP_ID_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x460OTP_SEP_SIP_ID_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x464OTP_SEP_SIP_ID_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x468OTP_SEP_SIP_ID_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x46COTP_SEP_SIP_ID_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x470OTP_SEP_SIP_ID_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x474OTP_SEP_SIP_ID_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x478OTP_SEP_SIP_ID_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x47COTP_SEP_SIP_ID_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x480OTP_SEP_SYS_ID_VAL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x484OTP_SEP_SYS_ID_VAL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x488OTP_SEP_SYS_ID_VAL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x48COTP_SEP_SYS_ID_VAL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x490OTP_SEP_SYS_ID_VAL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x494OTP_SEP_SYS_ID_VAL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x498OTP_SEP_SYS_ID_VAL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x49COTP_SEP_SYS_ID_VAL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x4A0OTP_SEP_SYS_ID_CPL_0RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x4A4OTP_SEP_SYS_ID_CPL_1RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x4A8OTP_SEP_SYS_ID_CPL_2RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x4ACOTP_SEP_SYS_ID_CPL_3RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x4B0OTP_SEP_SYS_ID_CPL_4RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x4B4OTP_SEP_SYS_ID_CPL_5RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x4B8OTP_SEP_SYS_ID_CPL_6RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.
0x4BCOTP_SEP_SYS_ID_CPL_7RDual-rail OTP readout word (value or complement half). Read-through from OTP port; no reset. Returns zero when the field's bit is set in either OTP_READ_LOCK or OTP_READ_LOCK_COLD.

Register Details:

VERSION

Table 264. km_csr.VERSION fields
BitsFieldAccessResetDescription
31:24rsvdR0x0Reserved; must read as zero
23:16majorR0x1Major version number
15:8minorR0x0Minor version number
7:0patchR0x0Patch version number

CTRL

Table 265. km_csr.CTRL fields
BitsFieldAccessResetDescription
31:0rsvdR0x0Reserved

SOFT_RST_CODE

Table 266. km_csr.SOFT_RST_CODE fields
BitsFieldAccessResetDescription
31:0codeRW0x032-bit reset code. Write 0x53525354 to trigger soft reset.

IRQ_STATUS

Table 267. km_csr.IRQ_STATUS fields
BitsFieldAccessResetDescription
31:12rsvdR0x0Reserved
11rom_access_violationRW1C0x0KM ROM instruction fetch or data read attempted after the ROM lockout engaged. The lockout engages on the first committed instruction fetch from write-locked SRAM once SRAM_EXEC_MODE.enable is set, and clears only on warm or cold reset. Sticky, write 1 to clear.
10exec_violationRW1C0x0Instruction fetch from a non-whitelisted (non-executable) memory region detected, excluding the KM ROM. Sticky, write 1 to clear.
9otp_sigintRW1C0x0OTP dual-rail encoding integrity violation: value and complement are not complementary on at least one field. Sticky, write 1 to clear.
8otp_changeRW1C0x0An OTP readout field value changed (decoded value differs from prior cycle). Sticky, write 1 to clear. Check OTP_CHANGE_STATUS for the specific field(s).
7wipe_stateRW1C0x0Wipe state event (rising edge of wipe_state input). Sticky, write 1 to clear.
6drbg_errRW1C0x0DRBG Sampler error (timeout or AXI-Stream error). Sticky, write 1 to clear.
5axi_decerrRW1C0x0AXI DECERR (decode error) response detected on CPU bus transaction. Sticky, write 1 to clear.
4axi_slverrRW1C0x0AXI SLVERR (slave error) response detected on CPU bus transaction. Sticky, write 1 to clear.
3sram_write_lock_errRW1C0x0SRAM write attempt to a write-locked region detected. Sticky, write 1 to clear.
2rom_write_errRW1C0x0ROM write attempt detected (ROM is read-only). Sticky, write 1 to clear.
1sram_parity_errRW1C0x0SRAM parity error detected. Sticky, write 1 to clear.
0rom_parity_errRW1C0x0ROM parity error detected. Sticky, write 1 to clear.

IRQ_ENABLE

Table 268. km_csr.IRQ_ENABLE fields
BitsFieldAccessResetDescription
31:12rsvdR0x0Reserved
11rom_access_violation_enRW0x0Enable ROM lockout violation interrupt
10exec_violation_enRW0x0Enable execute-permission whitelist violation interrupt
9otp_sigint_enRW0x0Enable OTP dual-rail integrity violation interrupt
8otp_change_enRW0x0Enable OTP field change interrupt
7wipe_state_enRW0x0Enable wipe state interrupt
6drbg_err_enRW0x0Enable DRBG Sampler error interrupt
5axi_decerr_enRW0x0Enable AXI DECERR error interrupt
4axi_slverr_enRW0x0Enable AXI SLVERR error interrupt
3sram_write_lock_enRW0x0Enable SRAM write-lock violation interrupt
2rom_write_enRW0x0Enable ROM write error interrupt
1sram_parity_enRW0x0Enable SRAM parity error interrupt
0rom_parity_enRW0x0Enable ROM parity error interrupt

SCRAMBLER_KEY

Table 269. km_csr.SCRAMBLER_KEY fields
BitsFieldAccessResetDescription
31:0keyRW-Scrambler key value. Not readable when SCRAMBLER_CTRL.LOCK=1 (returns 0). No reset for security; power-up value undefined.

SCRAMBLER_CTRL

Table 270. km_csr.SCRAMBLER_CTRL fields
BitsFieldAccessResetDescription
31:2rsvdR0x0Reserved
1lockRW0x0Lock scrambler key and enable bit. Once set, key and enable cannot be modified until reset. Write-once (0->1 only). Security requirement: prevents disabling scrambling after key provisioning.
0enableRW0x0Enable SRAM scrambling. When 0, data passes through unmodified. Locked when LOCK=1 (security requirement).

SRAM_LOCK

Table 271. km_csr.SRAM_LOCK fields
BitsFieldAccessResetDescription
31:0lock_bitsRW1S0x0One bit per 1 KB SRAM region. Region 0 = 0x8000-0x83FF, region 31 = 0xFC00-0xFFFF. Write 1 to lock; 0 has no effect. Warm reset domain: cleared by warm or cold reset.

IRQ_SET

Table 272. km_csr.IRQ_SET fields
BitsFieldAccessResetDescription
31:12rsvdW0x0Reserved (write-only; reads trigger SLVERR via err_if_bad_rw)
11rom_access_violation_setW 1P0x0Write 1 to set IRQ_STATUS.ROM_ACCESS_VIOLATION (triggers ROM lockout violation interrupt for testing)
10exec_violation_setW 1P0x0Write 1 to set IRQ_STATUS.EXEC_VIOLATION (triggers exec-permission violation interrupt for testing)
9otp_sigint_setW 1P0x0Write 1 to set IRQ_STATUS.OTP_SIGINT (triggers OTP sigint interrupt for testing)
8otp_change_setW 1P0x0Write 1 to set IRQ_STATUS.OTP_CHANGE (triggers OTP change interrupt for testing)
7wipe_state_setW 1P0x0Write 1 to set IRQ_STATUS.WIPE_STATE (triggers wipe state interrupt for testing)
6drbg_err_setW 1P0x0Write 1 to set IRQ_STATUS.DRBG_ERR (triggers DRBG Sampler interrupt for testing)
5axi_decerr_setW 1P0x0Write 1 to set IRQ_STATUS.AXI_DECERR (triggers AXI DECERR interrupt for testing)
4axi_slverr_setW 1P0x0Write 1 to set IRQ_STATUS.AXI_SLVERR (triggers AXI SLVERR interrupt for testing)
3sram_write_lock_err_setW 1P0x0Write 1 to set IRQ_STATUS.SRAM_WRITE_LOCK_ERR (triggers SRAM write-lock interrupt for testing)
2rom_write_err_setW 1P0x0Write 1 to set IRQ_STATUS.ROM_WRITE_ERR (triggers ROM write interrupt for testing)
1sram_parity_err_setW 1P0x0Write 1 to set IRQ_STATUS.SRAM_PARITY_ERR (triggers SRAM parity interrupt for testing)
0rom_parity_err_setW 1P0x0Write 1 to set IRQ_STATUS.ROM_PARITY_ERR (triggers ROM parity interrupt for testing)

SRAM_WRITE_LOCK_VIOLATION

Table 273. km_csr.SRAM_WRITE_LOCK_VIOLATION fields
BitsFieldAccessResetDescription
31:0violation_bitsRW1C0x0Bit[i]=1 if region i had attempted write while locked. Sticky, write 1 to clear each bit.

RECOVERABLE_ERR

Table 274. km_csr.RECOVERABLE_ERR fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0recoverable_errRW0x01 = recoverable fault occurred and was handled by ISR; 0 = clear. Write 1 to set, write 0 to clear.

BOOT_STATUS

Table 275. km_csr.BOOT_STATUS fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0cold_boot_doneRW1S0x0Write-1-only: set by ROM firmware at end of cold boot. Reads 0 after cold reset; reads 1 after firmware sets it. Sticky until next cold reset (preserved across warm resets).

OTP_LIFE_CYCLE

Table 276. km_csr.OTP_LIFE_CYCLE fields
BitsFieldAccessResetDescription
31:8rsvdR0x0Reserved
7:0valueR-8-bit life cycle state from OTP. No reset; power-up value undefined.

OTP_DEMOTION_STATE

Table 277. km_csr.OTP_DEMOTION_STATE fields
BitsFieldAccessResetDescription
31:4rsvdR0x0Reserved
3:2demote_2_valueR-2-bit demotion 2 state from OTP. No reset; power-up value undefined.
1:0demote_1_valueR-2-bit demotion 1 state from OTP. No reset; power-up value undefined.

SRAM_EXEC_MODE

Table 278. km_csr.SRAM_EXEC_MODE fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0enableRW1S0x0Execute-permission mode: 0=ROM-only whitelist; 1=write-locked SRAM whitelist, arming the ROM lockout. Write 1 to set; write 0 has no effect. Warm reset domain: cleared by warm or cold reset.

IRQ_ENTRY_ADDR

Table 279. km_csr.IRQ_ENTRY_ADDR fields
BitsFieldAccessResetDescription
31:0addrRW0x10IRQ handler entry PC. Reset matches ROM vector at 0x10. When locked, SW writes do not update storage.

IRQ_ENTRY_LOCK

Table 280. km_csr.IRQ_ENTRY_LOCK fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved; reads as zero.
0lockRW1S0x0Write 1 to set; write 0 has no effect; sticky until reset.

VUART_TX

Table 281. km_csr.VUART_TX fields
BitsFieldAccessResetDescription
31data_validRW0x0Data valid strobe. Set by firmware on write, cleared by hardware after one cycle.
30:8rsvd0R0x0Reserved
7:0tx_byteRW0x0Byte to transmit (write to send character to testbench)

VUART_RX

Table 282. km_csr.VUART_RX fields
BitsFieldAccessResetDescription
31data_validR0x0RX data valid. Set by testbench, cleared by firmware read.
30:8rsvd0R0x0Reserved
7:0rx_byteR0x0Received byte from testbench

VUART_STATUS

Table 283. km_csr.VUART_STATUS fields
BitsFieldAccessResetDescription
31:3rsvdR0x0Reserved
2print_enableR0x0Enable VUART printing. Set by testbench to enable printf output. Disabled by default to save simulation time.
1rx_validR0x0RX has valid data available
0tx_readyR0x1TX ready to accept data (always 1 in simulation)

TB_RESULT

Table 284. km_csr.TB_RESULT fields
BitsFieldAccessResetDescription
31:0resultRW0x0Test result: 0=fail, 1=pass

TB_SIGNATURE

Table 285. km_csr.TB_SIGNATURE fields
BitsFieldAccessResetDescription
31:0signatureRW0x0Completion signature value

TB_ERRCODE

Table 286. km_csr.TB_ERRCODE fields
BitsFieldAccessResetDescription
31:0errcodeRW0x0Error code value

TB_SUBTEST

Table 287. km_csr.TB_SUBTEST fields
BitsFieldAccessResetDescription
31:0subtestRW0x0Current subtest number

TB_CMD

Table 288. km_csr.TB_CMD fields
BitsFieldAccessResetDescription
31:0cmdRW0x0Command code (0=NOP, 1=ROM_PARITY_EN, 2=ROM_PARITY_DIS, 3=SRAM_PARITY_EN, 4=SRAM_PARITY_DIS)

TB_CMD_ARG

Table 289. km_csr.TB_CMD_ARG fields
BitsFieldAccessResetDescription
31:0argRW0x0Command argument value

TB_CMD_STATUS

Table 290. km_csr.TB_CMD_STATUS fields
BitsFieldAccessResetDescription
31:0statusRW0x0Command status: 0=IDLE, 1=ACK, 0xFFFFFFFF=ERR

TB_CMD_RESULT

Table 291. km_csr.TB_CMD_RESULT fields
BitsFieldAccessResetDescription
31:0resultR0x0Command result value

DEBUG

Table 292. km_csr.DEBUG fields
BitsFieldAccessResetDescription
31:0magicR0xCAFEBEEFMagic constant: 0xCAFEBEEF

OTP_CHIPLET_UID_VAL_0

Table 293. km_csr.OTP_CHIPLET_UID_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_1

Table 294. km_csr.OTP_CHIPLET_UID_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_2

Table 295. km_csr.OTP_CHIPLET_UID_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_3

Table 296. km_csr.OTP_CHIPLET_UID_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_4

Table 297. km_csr.OTP_CHIPLET_UID_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_5

Table 298. km_csr.OTP_CHIPLET_UID_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_6

Table 299. km_csr.OTP_CHIPLET_UID_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_VAL_7

Table 300. km_csr.OTP_CHIPLET_UID_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_0

Table 301. km_csr.OTP_CHIPLET_UID_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_1

Table 302. km_csr.OTP_CHIPLET_UID_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_2

Table 303. km_csr.OTP_CHIPLET_UID_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_3

Table 304. km_csr.OTP_CHIPLET_UID_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_4

Table 305. km_csr.OTP_CHIPLET_UID_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_5

Table 306. km_csr.OTP_CHIPLET_UID_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_6

Table 307. km_csr.OTP_CHIPLET_UID_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CHIPLET_UID_CPL_7

Table 308. km_csr.OTP_CHIPLET_UID_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_0

Table 309. km_csr.OTP_SIP_UID_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_1

Table 310. km_csr.OTP_SIP_UID_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_2

Table 311. km_csr.OTP_SIP_UID_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_3

Table 312. km_csr.OTP_SIP_UID_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_4

Table 313. km_csr.OTP_SIP_UID_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_5

Table 314. km_csr.OTP_SIP_UID_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_6

Table 315. km_csr.OTP_SIP_UID_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_VAL_7

Table 316. km_csr.OTP_SIP_UID_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_0

Table 317. km_csr.OTP_SIP_UID_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_1

Table 318. km_csr.OTP_SIP_UID_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_2

Table 319. km_csr.OTP_SIP_UID_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_3

Table 320. km_csr.OTP_SIP_UID_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_4

Table 321. km_csr.OTP_SIP_UID_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_5

Table 322. km_csr.OTP_SIP_UID_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_6

Table 323. km_csr.OTP_SIP_UID_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SIP_UID_CPL_7

Table 324. km_csr.OTP_SIP_UID_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_0

Table 325. km_csr.OTP_SYS_UID_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_1

Table 326. km_csr.OTP_SYS_UID_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_2

Table 327. km_csr.OTP_SYS_UID_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_3

Table 328. km_csr.OTP_SYS_UID_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_4

Table 329. km_csr.OTP_SYS_UID_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_5

Table 330. km_csr.OTP_SYS_UID_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_6

Table 331. km_csr.OTP_SYS_UID_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_VAL_7

Table 332. km_csr.OTP_SYS_UID_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_0

Table 333. km_csr.OTP_SYS_UID_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_1

Table 334. km_csr.OTP_SYS_UID_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_2

Table 335. km_csr.OTP_SYS_UID_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_3

Table 336. km_csr.OTP_SYS_UID_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_4

Table 337. km_csr.OTP_SYS_UID_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_5

Table 338. km_csr.OTP_SYS_UID_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_6

Table 339. km_csr.OTP_SYS_UID_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SYS_UID_CPL_7

Table 340. km_csr.OTP_SYS_UID_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_0

Table 341. km_csr.OTP_CLASS_KEY_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_1

Table 342. km_csr.OTP_CLASS_KEY_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_2

Table 343. km_csr.OTP_CLASS_KEY_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_3

Table 344. km_csr.OTP_CLASS_KEY_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_4

Table 345. km_csr.OTP_CLASS_KEY_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_5

Table 346. km_csr.OTP_CLASS_KEY_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_6

Table 347. km_csr.OTP_CLASS_KEY_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_VAL_7

Table 348. km_csr.OTP_CLASS_KEY_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_0

Table 349. km_csr.OTP_CLASS_KEY_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_1

Table 350. km_csr.OTP_CLASS_KEY_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_2

Table 351. km_csr.OTP_CLASS_KEY_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_3

Table 352. km_csr.OTP_CLASS_KEY_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_4

Table 353. km_csr.OTP_CLASS_KEY_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_5

Table 354. km_csr.OTP_CLASS_KEY_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_6

Table 355. km_csr.OTP_CLASS_KEY_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_CLASS_KEY_CPL_7

Table 356. km_csr.OTP_CLASS_KEY_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_READ_LOCK

Table 357. km_csr.OTP_READ_LOCK fields
BitsFieldAccessResetDescription
31:9rsvdR0x0Reserved
8sep_sys_idRW1S0x0Lock OTP_SEP_SYS_ID_VAL/CPL reads (returns zero when locked)
7sep_sip_idRW1S0x0Lock OTP_SEP_SIP_ID_VAL/CPL reads (returns zero when locked)
6sep_chiplet_idRW1S0x0Lock OTP_SEP_CHIPLET_ID_VAL/CPL reads (returns zero when locked)
5class_keyRW1S0x0Lock OTP_CLASS_KEY_VAL/CPL reads (returns zero when locked)
4sys_uidRW1S0x0Lock OTP_SYS_UID_VAL/CPL reads (returns zero when locked)
3sip_uidRW1S0x0Lock OTP_SIP_UID_VAL/CPL reads (returns zero when locked)
2chiplet_uidRW1S0x0Lock OTP_CHIPLET_UID_VAL/CPL reads (returns zero when locked)
1demotionRW1S0x0Lock OTP_DEMOTION_STATE reads (returns zero when locked)
0life_cycleRW1S0x0Lock OTP_LIFE_CYCLE reads (returns zero when locked)

OTP_CHANGE_STATUS

Table 358. km_csr.OTP_CHANGE_STATUS fields
BitsFieldAccessResetDescription
31:9rsvdR0x0Reserved
8sep_sys_idRW1C0x0OTP_SEP_SYS_ID value changed since last cycle. Sticky, write 1 to clear.
7sep_sip_idRW1C0x0OTP_SEP_SIP_ID value changed since last cycle. Sticky, write 1 to clear.
6sep_chiplet_idRW1C0x0OTP_SEP_CHIPLET_ID value changed since last cycle. Sticky, write 1 to clear.
5class_keyRW1C0x0OTP_CLASS_KEY value changed since last cycle. Sticky, write 1 to clear.
4sys_uidRW1C0x0OTP_SYS_UID value changed since last cycle. Sticky, write 1 to clear.
3sip_uidRW1C0x0OTP_SIP_UID value changed since last cycle. Sticky, write 1 to clear.
2chiplet_uidRW1C0x0OTP_CHIPLET_UID value changed since last cycle. Sticky, write 1 to clear.
1demotionRW1C0x0OTP_DEMOTION_STATE value changed since last cycle. Sticky, write 1 to clear.
0life_cycleRW1C0x0OTP_LIFE_CYCLE value changed since last cycle. Sticky, write 1 to clear.

OTP_READ_LOCK_COLD

Table 359. km_csr.OTP_READ_LOCK_COLD fields
BitsFieldAccessResetDescription
31:9rsvdR0x0Reserved
8sep_sys_idRW1S0x0Cold-reset read-lock for OTP_SEP_SYS_ID_VAL/CPL. Effective lock = OTP_READ_LOCK.sep_sys_id | OTP_READ_LOCK_COLD.sep_sys_id.
7sep_sip_idRW1S0x0Cold-reset read-lock for OTP_SEP_SIP_ID_VAL/CPL. Effective lock = OTP_READ_LOCK.sep_sip_id | OTP_READ_LOCK_COLD.sep_sip_id.
6sep_chiplet_idRW1S0x0Cold-reset read-lock for OTP_SEP_CHIPLET_ID_VAL/CPL. Effective lock = OTP_READ_LOCK.sep_chiplet_id | OTP_READ_LOCK_COLD.sep_chiplet_id.
5class_keyRW1S0x0Cold-reset read-lock for OTP_CLASS_KEY_VAL/CPL. Effective lock = OTP_READ_LOCK.class_key | OTP_READ_LOCK_COLD.class_key.
4sys_uidRW1S0x0Cold-reset read-lock for OTP_SYS_UID_VAL/CPL. Effective lock = OTP_READ_LOCK.sys_uid | OTP_READ_LOCK_COLD.sys_uid.
3sip_uidRW1S0x0Cold-reset read-lock for OTP_SIP_UID_VAL/CPL. Effective lock = OTP_READ_LOCK.sip_uid | OTP_READ_LOCK_COLD.sip_uid.
2chiplet_uidRW1S0x0Cold-reset read-lock for OTP_CHIPLET_UID_VAL/CPL. Effective lock = OTP_READ_LOCK.chiplet_uid | OTP_READ_LOCK_COLD.chiplet_uid.
1demotionRW1S0x0Cold-reset read-lock for OTP_DEMOTION_STATE. Effective lock = OTP_READ_LOCK.demotion | OTP_READ_LOCK_COLD.demotion.
0life_cycleRW1S0x0Cold-reset read-lock for OTP_LIFE_CYCLE. Effective lock = OTP_READ_LOCK.life_cycle | OTP_READ_LOCK_COLD.life_cycle.

OTP_SEP_CHIPLET_ID_VAL_0

Table 360. km_csr.OTP_SEP_CHIPLET_ID_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_1

Table 361. km_csr.OTP_SEP_CHIPLET_ID_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_2

Table 362. km_csr.OTP_SEP_CHIPLET_ID_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_3

Table 363. km_csr.OTP_SEP_CHIPLET_ID_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_4

Table 364. km_csr.OTP_SEP_CHIPLET_ID_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_5

Table 365. km_csr.OTP_SEP_CHIPLET_ID_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_6

Table 366. km_csr.OTP_SEP_CHIPLET_ID_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_VAL_7

Table 367. km_csr.OTP_SEP_CHIPLET_ID_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_0

Table 368. km_csr.OTP_SEP_CHIPLET_ID_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_1

Table 369. km_csr.OTP_SEP_CHIPLET_ID_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_2

Table 370. km_csr.OTP_SEP_CHIPLET_ID_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_3

Table 371. km_csr.OTP_SEP_CHIPLET_ID_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_4

Table 372. km_csr.OTP_SEP_CHIPLET_ID_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_5

Table 373. km_csr.OTP_SEP_CHIPLET_ID_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_6

Table 374. km_csr.OTP_SEP_CHIPLET_ID_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_CHIPLET_ID_CPL_7

Table 375. km_csr.OTP_SEP_CHIPLET_ID_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_0

Table 376. km_csr.OTP_SEP_SIP_ID_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_1

Table 377. km_csr.OTP_SEP_SIP_ID_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_2

Table 378. km_csr.OTP_SEP_SIP_ID_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_3

Table 379. km_csr.OTP_SEP_SIP_ID_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_4

Table 380. km_csr.OTP_SEP_SIP_ID_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_5

Table 381. km_csr.OTP_SEP_SIP_ID_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_6

Table 382. km_csr.OTP_SEP_SIP_ID_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_VAL_7

Table 383. km_csr.OTP_SEP_SIP_ID_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_0

Table 384. km_csr.OTP_SEP_SIP_ID_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_1

Table 385. km_csr.OTP_SEP_SIP_ID_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_2

Table 386. km_csr.OTP_SEP_SIP_ID_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_3

Table 387. km_csr.OTP_SEP_SIP_ID_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_4

Table 388. km_csr.OTP_SEP_SIP_ID_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_5

Table 389. km_csr.OTP_SEP_SIP_ID_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_6

Table 390. km_csr.OTP_SEP_SIP_ID_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SIP_ID_CPL_7

Table 391. km_csr.OTP_SEP_SIP_ID_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_0

Table 392. km_csr.OTP_SEP_SYS_ID_VAL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_1

Table 393. km_csr.OTP_SEP_SYS_ID_VAL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_2

Table 394. km_csr.OTP_SEP_SYS_ID_VAL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_3

Table 395. km_csr.OTP_SEP_SYS_ID_VAL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_4

Table 396. km_csr.OTP_SEP_SYS_ID_VAL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_5

Table 397. km_csr.OTP_SEP_SYS_ID_VAL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_6

Table 398. km_csr.OTP_SEP_SYS_ID_VAL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_VAL_7

Table 399. km_csr.OTP_SEP_SYS_ID_VAL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_0

Table 400. km_csr.OTP_SEP_SYS_ID_CPL_0 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_1

Table 401. km_csr.OTP_SEP_SYS_ID_CPL_1 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_2

Table 402. km_csr.OTP_SEP_SYS_ID_CPL_2 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_3

Table 403. km_csr.OTP_SEP_SYS_ID_CPL_3 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_4

Table 404. km_csr.OTP_SEP_SYS_ID_CPL_4 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_5

Table 405. km_csr.OTP_SEP_SYS_ID_CPL_5 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_6

Table 406. km_csr.OTP_SEP_SYS_ID_CPL_6 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

OTP_SEP_SYS_ID_CPL_7

Table 407. km_csr.OTP_SEP_SYS_ID_CPL_7 fields
BitsFieldAccessResetDescription
31:0valueR-32-bit OTP word. No reset; power-up value undefined.

3.2.3. Key and Policy Vault Registers

Key and Policy Vault (KM Port)

Key entry storage and KM control registers. Access conditioned by lock_write/lock_use.

Register Arrays:

  • KEY_ENTRY[64].WORD[16]: 1024 registers, base 0x0 (KEY_ENTRY x64 stride 0x40, WORD x16 stride 0x4)
  • CTRL[64]: 64 registers, base 0x1000, stride 0x4

Register List:

Table 408. Key and Policy Vault (KM Port) register list
AddressNameAccessDescription
0x0 - 0xFFCKEY_ENTRY[64].WORD[16]RWOne 32-bit word of a key entry (512-bit key = 16 words). No reset; powers up random.
0x1000 - 0x10FCCTRL[64]RWPer-slot control: lock bits (W1S) and the erase trigger
0x1100KPV_SCRAMBLER_KEYRW32-bit key for KPV key entry scrambling. No reset; powers up random. Locked when KPV_SCRAMBLER_CTRL.LOCK=1.
0x1104KPV_SCRAMBLER_CTRLRWKPV scrambler enable and lock. Reset to 0 on KM reset. LOCK is write-one-only.

Register Details:

KEY_ENTRY[64].WORD[16]

Table 409. km_kpv.KEY_ENTRY[64].WORD[16] fields
BitsFieldAccessResetDescription
31:0dataRW-32-bit key data word. No reset for security; power-up value undefined.
Actual storage is in km_kpv_regfile; CSR field is a protocol placeholder.

CTRL[64]

Table 410. km_kpv.CTRL[64] fields
BitsFieldAccessResetDescription
31:4rsvd_31_4R0x0Reserved
3sealRW1S0x0Seals this key entry until warm reset. Read-any, write-1-only. Setting this
bit also sets lock_write in hardware, so a single write seals the slot: its
data can be read but not overwritten. Erase remains available, and erasing
a sealed slot retires it rather than freeing it (see ERASE), so a sealed
slot's material can be destroyed but its slot never reused.
2eraseRW1S0x0Write-1 to start hardware erase of this slot: an LFSR fills all 16 key
words (through the KPV scrambler). Hardware self-clears this bit when the
erase completes. Never blocked: neither lock_write, lock_use nor seal
prevents an erase. The slot's seal state when the erase completes decides
the outcome. Unsealed, the slot CTRL register is cleared and the slot is
reusable. Sealed, lock_write stays set and lock_use is set, retiring the
slot: its data is destroyed and it can be neither read, rewritten nor
reused until warm reset. A seal taken while an erase is already in flight
therefore still retires the slot.
1lock_useRW1S0x0Prevents KM read of this key entry data until reset. Read-any, write-1-only.
Hardware sets this bit when an erase of a sealed slot completes, retiring
the slot: its destroyed contents cannot be read back.
0lock_writeRW1S0x0Prevents KM write to this key entry data until reset; this register stays
writable so that a locked slot can still be read-locked and erased.
Read-any, write-1-only. Hardware holds this bit set for as long as SEAL is
set, so sealing a slot write-locks it without a separate write here.

KPV_SCRAMBLER_KEY

Table 411. km_kpv.KPV_SCRAMBLER_KEY fields
BitsFieldAccessResetDescription
31:0keyRW-Scrambler key. No reset for security. HW clears to 0 on wipe via hwclr.

KPV_SCRAMBLER_CTRL

Table 412. km_kpv.KPV_SCRAMBLER_CTRL fields
BitsFieldAccessResetDescription
31:2rsvdR0x0Reserved
1lockRW1S0x0Write-one-only. When 1, key and ENABLE cannot be modified until KM reset.
0enableRW0x01 = scramble key entry data on write, descramble on read; 0 = passthrough.

3.2.4. DRBG Sampler Registers

DRBG Sampler

DRBG random data interface and configuration/status registers

Register List:

Table 413. DRBG Sampler register list
AddressNameAccessDescription
0x0DATAROne word of random data. Read triggers request or returns prefetch. Writes return SLVERR. No reset.
0x4CFGRWConfiguration: PREFETCH enable, TIMEOUT cycles for active CPU read.
0x8STATUSRWStatus: DRBG_READY, PREFETCHED, TIMEOUT_ERR (W1C), STREAM_ERR (W1C), COUNT_BAD, COUNT_GOOD.
0xCPREFETCH_DATARPrefetched word (read-only, for debugging). Cleared when PREFETCH=0. No reset; power-up undefined.

Register Details:

DATA

Table 414. km_drbg_sampler.DATA fields
BitsFieldAccessResetDescription
31:0dataR-32-bit random data from DRBG. No reset for security; power-up value undefined.

CFG

Table 415. km_drbg_sampler.CFG fields
BitsFieldAccessResetDescription
31:16timeoutRW0x100Cycles to wait for DRBG on active CPU read; 0 = disable. Default 256.
15:1rsvdRW0x0Reserved
0prefetchRW0x0Enable prefetch. When 0, prefetch data register is cleared.

STATUS

Table 416. km_drbg_sampler.STATUS fields
BitsFieldAccessResetDescription
31:16count_goodRW0x0Counts only reads completed through ST_RESPOND, excluding prefetched words. Saturates at 0xFFFF. Writing any non-zero value clears the field to 0; writing 0 has no effect.
15:8count_badRW0x0Failed transactions (timeout or error). Saturates at 0xFF. Writing any non-zero value clears the field to 0; writing 0 has no effect.
7:4rsvdR0x0Reserved
3stream_errRW1C0x0Set when there is an error on the DRBG AXI-Stream interface (e.g. TVALID deasserted before TREADY). Write 1 to clear.
2timeout_errRW1C0x0Set when a DRBG read from the KM CPU times out. Write 1 to clear.
1prefetchedR0x0Prefetched data available
0drbg_readyR0x0TVALID asserted from DRBG

PREFETCH_DATA

Table 417. km_drbg_sampler.PREFETCH_DATA fields
BitsFieldAccessResetDescription
31:0dataR-Prefetched 32-bit random data. No reset for security; power-up value undefined.

3.2.5. KM Mailbox Registers

Key Manager Mailbox KM Side

Register interface for KM CPU to access mailbox (write to outbound FIFO, read from inbound FIFO)

Register List:

Table 418. Key Manager Mailbox KM Side register list
AddressNameAccessDescription
0x0KM_WRITE_DATAWWrite data to outbound FIFO (KM→SEP messages)
0x4KM_WRITE_SEPARATORRWWrite 1 to set message separator on next outbound (KM→SEP) write. Cleared by hardware when that write completes.
0x8KM_READ_DATARRead data from inbound FIFO (SEP→KM messages)
0xCKM_STATUSRWFIFO status information
0x10KM_IRQ_STATUSRWInterrupt status register
0x14KM_IRQ_ENABLERWInterrupt enable register for KM CPU
0x18KM_CTRLRWControl register for mailbox behavior configuration

Register Details:

KM_WRITE_DATA

Table 419. km_mailbox_km.KM_WRITE_DATA fields
BitsFieldAccessResetDescription
31:0dataW0x032-bit data word to write to outbound FIFO

KM_WRITE_SEPARATOR

Table 420. km_mailbox_km.KM_WRITE_SEPARATOR fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0setRW0x0Write 1 to set message separator on next outbound write. Cleared by hardware when that write completes.

KM_READ_DATA

Table 421. km_mailbox_km.KM_READ_DATA fields
BitsFieldAccessResetDescription
31:0dataR0x032-bit data word read from inbound FIFO

KM_STATUS

Table 422. km_mailbox_km.KM_STATUS fields
BitsFieldAccessResetDescription
31:26rsvdR0x0Reserved
25outbound_separatorR0x0Message separator: 1 if the last word read from outbound FIFO had the separator bit set (last word of message). Read-only, not sticky.
24inbound_separatorR0x0Message separator: 1 if the last word read from inbound FIFO had the separator bit set (last word of message). Read-only, not sticky.
23outbound_underflowRW1C0x0Outbound FIFO underflow detected (read attempted when empty). Sticky, write 1 to clear.
22inbound_underflowRW1C0x0Inbound FIFO underflow detected (read attempted when empty). Sticky, write 1 to clear.
21outbound_overflowRW1C0x0Outbound FIFO overflow detected (write attempted when full). Sticky, write 1 to clear.
20inbound_overflowRW1C0x0Inbound FIFO overflow detected (write attempted when full). Sticky, write 1 to clear.
19:12outbound_depthR0x0Outbound FIFO fill level (number of words in FIFO)
11:4inbound_depthR0x0Inbound FIFO fill level (number of words in FIFO)
3outbound_fullR0x0Outbound FIFO is full (cannot write more data)
2outbound_emptyR0x1Outbound FIFO is empty (no data available for SEP to read)
1inbound_fullR0x0Inbound FIFO is full
0inbound_emptyR0x1Inbound FIFO is empty (no data available for KM to read)

KM_IRQ_STATUS

Table 423. km_mailbox_km.KM_IRQ_STATUS fields
BitsFieldAccessResetDescription
31:5rsvdR0x0Reserved
4flushed_by_sepRW1C0x0SEP performed a mailbox flush. Sticky, write 1 to clear.
3inbound_underflowRW1C0x0Inbound FIFO underflow detected. Sticky, write 1 to clear.
2outbound_overflowRW1C0x0Outbound FIFO overflow detected. Sticky, write 1 to clear.
1outbound_write_space_availR0x0Outbound FIFO has space available for KM to write (level-sensitive). 1 = space available, 0 = full.
0inbound_read_data_availR0x0Inbound FIFO has data available for KM to read (level-sensitive). 1 = data available, 0 = empty.

KM_IRQ_ENABLE

Table 424. km_mailbox_km.KM_IRQ_ENABLE fields
BitsFieldAccessResetDescription
31:5rsvdR0x0Reserved
4flushed_by_sep_enRW0x0Enable interrupt to KM when SEP performs a mailbox flush
3inbound_underflow_enRW0x0Enable interrupt to KM when inbound FIFO underflow is detected
2outbound_overflow_enRW0x0Enable interrupt to KM when outbound FIFO overflow is detected
1outbound_write_space_avail_enRW0x0Enable interrupt to KM when outbound FIFO has space available (KM->SEP messages)
0inbound_read_data_avail_enRW0x0Enable interrupt to KM when inbound FIFO has data available (SEP->KM messages)

KM_CTRL

Table 425. km_mailbox_km.KM_CTRL fields
BitsFieldAccessResetDescription
31:3rsvdR0x0Reserved
2flushRW0x0Write 1 to flush all mailbox FIFOs (inbound and outbound). Cleared by hardware when flush completes.
1inbound_underflow_respRW0x0Response type for inbound FIFO underflow: 0=SLVERR (default), 1=OKAY
0outbound_overflow_respRW0x0Response type for outbound FIFO overflow: 0=SLVERR (default), 1=OKAY

3.2.6. SEP Mailbox Registers

Key Manager Mailbox SEP Side

Register interface for SEP host to access mailbox (write to inbound FIFO, read from outbound FIFO)

Register List:

Table 426. Key Manager Mailbox SEP Side register list
AddressNameAccessDescription
0x0SEP_WRITE_DATAWWrite data to inbound FIFO (SEP→KM messages)
0x4SEP_WRITE_SEPARATORRWWrite 1 to set message separator on next inbound (SEP→KM) write. Cleared by hardware when that write completes.
0x8SEP_READ_DATARRead data from outbound FIFO (KM→SEP messages)
0xCSEP_STATUSRWFIFO status information
0x10SEP_IRQ_STATUSRWInterrupt status register
0x14SEP_IRQ_ENABLERWInterrupt enable register for SEP host
0x18SEP_CTRLRWControl register for mailbox behavior configuration

Register Details:

SEP_WRITE_DATA

Table 427. km_mailbox_sep.SEP_WRITE_DATA fields
BitsFieldAccessResetDescription
31:0dataW0x032-bit data word to write to inbound FIFO

SEP_WRITE_SEPARATOR

Table 428. km_mailbox_sep.SEP_WRITE_SEPARATOR fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0setRW0x0Write 1 to set message separator on next inbound write. Cleared by hardware when that write completes.

SEP_READ_DATA

Table 429. km_mailbox_sep.SEP_READ_DATA fields
BitsFieldAccessResetDescription
31:0dataR0x032-bit data word read from outbound FIFO

SEP_STATUS

Table 430. km_mailbox_sep.SEP_STATUS fields
BitsFieldAccessResetDescription
31:26rsvdR0x0Reserved
25outbound_separatorR0x0Message separator: 1 if the last word read from outbound FIFO had the separator bit set (last word of message). Read-only, not sticky.
24inbound_separatorR0x0Message separator: 1 if the last word read from inbound FIFO had the separator bit set (last word of message). Read-only, not sticky.
23outbound_underflowRW1C0x0Outbound FIFO underflow detected (read attempted when empty). Sticky, write 1 to clear.
22inbound_underflowRW1C0x0Inbound FIFO underflow detected (read attempted when empty). Sticky, write 1 to clear.
21outbound_overflowRW1C0x0Outbound FIFO overflow detected (write attempted when full). Sticky, write 1 to clear.
20inbound_overflowRW1C0x0Inbound FIFO overflow detected (write attempted when full). Sticky, write 1 to clear.
19:12outbound_depthR0x0Outbound FIFO fill level (number of words in FIFO)
11:4inbound_depthR0x0Inbound FIFO fill level (number of words in FIFO)
3outbound_fullR0x0Outbound FIFO is full
2outbound_emptyR0x1Outbound FIFO is empty (no data available for SEP to read)
1inbound_fullR0x0Inbound FIFO is full (cannot write more data)
0inbound_emptyR0x1Inbound FIFO is empty (no data available for KM to read)

SEP_IRQ_STATUS

Table 431. km_mailbox_sep.SEP_IRQ_STATUS fields
BitsFieldAccessResetDescription
31:5rsvdR0x0Reserved
4flushed_by_kmRW1C0x0KM performed a mailbox flush. Sticky, write 1 to clear.
3outbound_underflowRW1C0x0Outbound FIFO underflow detected. Sticky, write 1 to clear.
2inbound_overflowRW1C0x0Inbound FIFO overflow detected. Sticky, write 1 to clear.
1inbound_write_space_availR0x0Inbound FIFO has space available for SEP to write (level-sensitive). 1 = space available, 0 = full.
0outbound_read_data_availR0x0Outbound FIFO has data available for SEP to read (level-sensitive). 1 = data available, 0 = empty.

SEP_IRQ_ENABLE

Table 432. km_mailbox_sep.SEP_IRQ_ENABLE fields
BitsFieldAccessResetDescription
31:5rsvdR0x0Reserved
4flushed_by_km_enRW0x0Enable interrupt to SEP when KM performs a mailbox flush
3outbound_underflow_enRW0x0Enable interrupt to SEP when outbound FIFO underflow is detected
2inbound_overflow_enRW0x0Enable interrupt to SEP when inbound FIFO overflow is detected
1inbound_write_space_avail_enRW0x0Enable interrupt to SEP when inbound FIFO has space available (SEP->KM messages)
0outbound_read_data_avail_enRW0x0Enable interrupt to SEP when outbound FIFO has data available (KM->SEP messages)

SEP_CTRL

Table 433. km_mailbox_sep.SEP_CTRL fields
BitsFieldAccessResetDescription
31:3rsvdR0x0Reserved
2flushRW0x0Write 1 to flush all mailbox FIFOs (inbound and outbound). Cleared by hardware when flush completes.
1outbound_underflow_respRW0x0Response type for outbound FIFO underflow: 0=SLVERR (default), 1=OKAY
0inbound_overflow_respRW0x0Response type for inbound FIFO overflow: 0=SLVERR (default), 1=OKAY

3.2.7. Adams Bridge Key Interface Registers

Adams Bridge Key Sideload Registers

Single AXI4-Lite window for all KM sideload interfaces to Adams Bridge.
Contains four dual-share secret-seed inputs and one shared-key output.

Register Arrays:

  • MLDSA_SEED.KEY_SHARE0[8]: 8 registers, base 0x0, stride 0x4
  • MLDSA_SEED.KEY_SHARE1[8]: 8 registers, base 0x20, stride 0x4
  • MLKEM_SEED_D.KEY_SHARE0[8]: 8 registers, base 0x100, stride 0x4
  • MLKEM_SEED_D.KEY_SHARE1[8]: 8 registers, base 0x120, stride 0x4
  • MLKEM_SEED_Z.KEY_SHARE0[8]: 8 registers, base 0x200, stride 0x4
  • MLKEM_SEED_Z.KEY_SHARE1[8]: 8 registers, base 0x220, stride 0x4
  • MLKEM_MSG.KEY_SHARE0[8]: 8 registers, base 0x300, stride 0x4
  • MLKEM_MSG.KEY_SHARE1[8]: 8 registers, base 0x320, stride 0x4
  • KEY[8]: 8 registers, base 0x400, stride 0x4

Register List:

Table 434. Adams Bridge Key Sideload Registers register list
AddressNameAccessDescription
0x0 - 0x1CMLDSA_SEED.KEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x20 - 0x3CMLDSA_SEED.KEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x40MLDSA_SEED.KEY_CTRLRWSeed control register. Writing KEY_VALID=1 marks the seed as loaded.
Write 0 to invalidate. The KV shim gates the AB kv_read response
on this bit.
0x100 - 0x11CMLKEM_SEED_D.KEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x120 - 0x13CMLKEM_SEED_D.KEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x140MLKEM_SEED_D.KEY_CTRLRWSeed control register. Writing KEY_VALID=1 marks the seed as loaded.
Write 0 to invalidate. The KV shim gates the AB kv_read response
on this bit.
0x200 - 0x21CMLKEM_SEED_Z.KEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x220 - 0x23CMLKEM_SEED_Z.KEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x240MLKEM_SEED_Z.KEY_CTRLRWSeed control register. Writing KEY_VALID=1 marks the seed as loaded.
Write 0 to invalidate. The KV shim gates the AB kv_read response
on this bit.
0x300 - 0x31CMLKEM_MSG.KEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x320 - 0x33CMLKEM_MSG.KEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x340MLKEM_MSG.KEY_CTRLRWSeed control register. Writing KEY_VALID=1 marks the seed as loaded.
Write 0 to invalidate. The KV shim gates the AB kv_read response
on this bit.
0x400 - 0x41CKEY[8]ROne 32-bit word of ML-KEM shared key output. Written by hardware
when key is ready; read by KM firmware to consume. Hardware clears
all words to 0 when KEY_CTRL.KEY_VALID is cleared (via hwclr).
0x420MLKEM_SHARED_KEY.KEY_CTRLRWShared-key control. HW sets KEY_VALID when a new key is ready.
Firmware writes 0 to clear (consume and zeroize).
0x424IRQ_STATUSRWInterrupt status for ML-KEM shared key. Sticky bit set by
hardware when a new shared key becomes valid; cleared by writing 1.
0x428IRQ_ENABLERWInterrupt enable for ML-KEM shared key. Mask for the
PicoRV32 IRQ vector bit driven by the shared-key-valid event.

Register Details:

MLDSA_SEED.KEY_SHARE0[8]

Table 435. abr_wrapper_key.MLDSA_SEED.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

MLDSA_SEED.KEY_SHARE1[8]

Table 436. abr_wrapper_key.MLDSA_SEED.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

MLDSA_SEED.KEY_CTRL

Table 437. abr_wrapper_key.MLDSA_SEED.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, the seed is loaded and the KV shim will serve it to Adams Bridge.
Write 0 to invalidate and allow a new seed to be written.

MLKEM_SEED_D.KEY_SHARE0[8]

Table 438. abr_wrapper_key.MLKEM_SEED_D.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

MLKEM_SEED_D.KEY_SHARE1[8]

Table 439. abr_wrapper_key.MLKEM_SEED_D.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

MLKEM_SEED_D.KEY_CTRL

Table 440. abr_wrapper_key.MLKEM_SEED_D.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, the seed is loaded and the KV shim will serve it to Adams Bridge.
Write 0 to invalidate and allow a new seed to be written.

MLKEM_SEED_Z.KEY_SHARE0[8]

Table 441. abr_wrapper_key.MLKEM_SEED_Z.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

MLKEM_SEED_Z.KEY_SHARE1[8]

Table 442. abr_wrapper_key.MLKEM_SEED_Z.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

MLKEM_SEED_Z.KEY_CTRL

Table 443. abr_wrapper_key.MLKEM_SEED_Z.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, the seed is loaded and the KV shim will serve it to Adams Bridge.
Write 0 to invalidate and allow a new seed to be written.

MLKEM_MSG.KEY_SHARE0[8]

Table 444. abr_wrapper_key.MLKEM_MSG.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

MLKEM_MSG.KEY_SHARE1[8]

Table 445. abr_wrapper_key.MLKEM_MSG.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

MLKEM_MSG.KEY_CTRL

Table 446. abr_wrapper_key.MLKEM_MSG.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, the seed is loaded and the KV shim will serve it to Adams Bridge.
Write 0 to invalidate and allow a new seed to be written.

KEY[8]

Table 447. abr_wrapper_key.KEY[8] fields
BitsFieldAccessResetDescription
31:0dataR0x032-bit shared-key word. Hardware writes on key-ready event;
hardware clears to 0 on key-consume event (KEY_VALID cleared).

MLKEM_SHARED_KEY.KEY_CTRL

Table 448. abr_wrapper_key.MLKEM_SHARED_KEY.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0C0x01 = shared key is valid and ready for firmware consumption.
Hardware sets this bit on key-ready event. Write 0 to clear;
write 1 has no effect (software cannot set this bit).

IRQ_STATUS

Table 449. abr_wrapper_key.IRQ_STATUS fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW1C0x0ML-KEM shared key valid. Sticky, write 1 to clear.

IRQ_ENABLE

Table 450. abr_wrapper_key.IRQ_ENABLE fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_valid_enRW0x01 = enable PicoRV32 IRQ when ML-KEM shared key is valid.
0 = mask the interrupt (KEY_CTRL.KEY_VALID can still be polled).

3.2.8. AES Key Interface Registers

AES Wrapper Key Registers

Key storage registers for the AES sideload interface.
Written by Key Manager CPU, drives keymgr_key_i on the OT AES core.

Register Arrays:

  • KEY_SHARE0[8]: 8 registers, base 0x0, stride 0x4
  • KEY_SHARE1[8]: 8 registers, base 0x20, stride 0x4

Register List:

Table 451. AES Wrapper Key Registers register list
AddressNameAccessDescription
0x0 - 0x1CKEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x20 - 0x3CKEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x40KEY_CTRLRWKey control register. Writing KEY_VALID=1 asserts the sideload
valid signal to the AES core.

Register Details:

KEY_SHARE0[8]

Table 452. aes_wrapper_key.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

KEY_SHARE1[8]

Table 453. aes_wrapper_key.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

KEY_CTRL

Table 454. aes_wrapper_key.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, asserts keymgr_key_i.valid to indicate key is loaded.
Write 0 to invalidate the current key.

3.2.9. HMAC Key Interface Registers

HMAC Wrapper Key Registers

Key storage registers for the HMAC sideload interface.
Written by Key Manager CPU, drives keymgr_key_i on the OT HMAC core.

Register Arrays:

  • KEY_SHARE0[8]: 8 registers, base 0x0, stride 0x4
  • KEY_SHARE1[8]: 8 registers, base 0x20, stride 0x4

Register List:

Table 455. HMAC Wrapper Key Registers register list
AddressNameAccessDescription
0x0 - 0x1CKEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x20 - 0x3CKEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x40KEY_CTRLRWKey control register. Writing KEY_VALID=1 asserts the sideload
valid signal to the HMAC core.

Register Details:

KEY_SHARE0[8]

Table 456. hmac_wrapper_key.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

KEY_SHARE1[8]

Table 457. hmac_wrapper_key.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

KEY_CTRL

Table 458. hmac_wrapper_key.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, asserts keymgr_key_i.valid to indicate key is loaded.
Write 0 to invalidate the current key.

3.2.10. KMAC Key Interface Registers

KMAC Wrapper Key Registers

Key storage registers for the KMAC sideload interface.
Written by Key Manager CPU, drives keymgr_key_i on the OT KMAC core.

Register Arrays:

  • KEY_SHARE0[8]: 8 registers, base 0x0, stride 0x4
  • KEY_SHARE1[8]: 8 registers, base 0x20, stride 0x4

Register List:

Table 459. KMAC Wrapper Key Registers register list
AddressNameAccessDescription
0x0 - 0x1CKEY_SHARE0[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x20 - 0x3CKEY_SHARE1[8]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x40KEY_CTRLRWKey control register. Writing KEY_VALID=1 asserts the sideload
valid signal to the KMAC core.

Register Details:

KEY_SHARE0[8]

Table 460. kmac_wrapper_key.KEY_SHARE0[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

KEY_SHARE1[8]

Table 461. kmac_wrapper_key.KEY_SHARE1[8] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

KEY_CTRL

Table 462. kmac_wrapper_key.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, asserts keymgr_key_i.valid to indicate key is loaded.
Write 0 to invalidate the current key.

3.2.11. OTBN Key Interface Registers

OTBN Wrapper Key Registers

Key storage registers for the OTBN sideload interface.
Written by Key Manager CPU, drives keymgr_key_i on the OT OTBN core.

Register Arrays:

  • KEY_SHARE0[12]: 12 registers, base 0x0, stride 0x4
  • KEY_SHARE1[12]: 12 registers, base 0x30, stride 0x4

Register List:

Table 463. OTBN Wrapper Key Registers register list
AddressNameAccessDescription
0x0 - 0x2CKEY_SHARE0[12]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x30 - 0x5CKEY_SHARE1[12]WOne 32-bit word of key data. Write-only; reads return 0.
No reset; powers up with undefined value.
0x60KEY_CTRLRWKey control register. Writing KEY_VALID=1 asserts the sideload
valid signal to the OTBN core.

Register Details:

KEY_SHARE0[12]

Table 464. otbn_wrapper_key.KEY_SHARE0[12] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

KEY_SHARE1[12]

Table 465. otbn_wrapper_key.KEY_SHARE1[12] fields
BitsFieldAccessResetDescription
31:0dataW-32-bit key data word. Write-only for security.

KEY_CTRL

Table 466. otbn_wrapper_key.KEY_CTRL fields
BitsFieldAccessResetDescription
31:1rsvdR0x0Reserved
0key_validRW0x0When 1, asserts keymgr_key_i.valid to indicate key is loaded.
Write 0 to invalidate the current key.