跳到主要内容

15. Security Subsystem

15.1 Crypto Engine

15.1.1 Overview

The Crypto Engine supports both internationally recognized cryptographic algorithms and China’s commercial cryptography standards.

15.1.2 Features

  • Supports hash algorithms: SHA-1, SHA-224, SHA-256, SM3
  • Supports symmetric algorithms: AES-128/192/256, SM4
    • Supports 3-stage key ladder for AES-128 and SM4
  • Supports asymmetric algorithms: RSA-1024/2048/4096, ECC-128/256/512, SM2

15.2 TRNG

15.2.1 Overview

The True Random Number Generator (TRNG) complies with China’s commercial cryptography standards and provides high-quality random numbers for security applications.

15.2.2 Features

  • Built-in 32-bit TRNG
  • Ensures randomness, unpredictability, and non-reproducibility

15.3 eFuse

15.3.1 Overview

An integrated 4096-bit eFuse, divided into 16 banks of 256 bits each, with 256 bits available for user customization.

15.3.2 Features

  • Supports eFuse bank locking
  • Supports automatic hardware parameter loading
  • Supports lifecycle management:
    • CM (Chip Manufacturing)
    • DM (Development Mode)
    • SP (Secure Production)
      • CPU cannot access AES keys; accessible only by the secure engine
    • RMA (Return Merchandise Authorization)
      • Forces JTAG debug mode to be enabled
      • Denies AES key access for all entities
    • Lifecycle priority: RMA > SP > DM > CM
  • Supports secure boot configuration
  • Supports encrypted boot configuration
  • Supports storage of root keys and encryption-protected keys
  • Supports 256-bit non-volatile counter (NV counter):
    • 224 bits for non-secure modules, 32 bits for secure modules

15.4 IOPMP

15.4.1 Overview

The IOPMP (I/O Physical Memory Protection) module is designed in coordination with the PMP to ensure secure access control across the platform peripherals.

While the PMP validates bus accesses initiated by RISC-V cores, the IOPMP verifies transactions issued by other bus masters or subsystems.

Configured exclusively by the secure world, the IOPMP defines access permissions and attributes for transactions initiated by non-CPU masters.

All transactions initiated by the slave devices of an IOPMP are subject to that IOPMP instance, and access is granted only when the permission verification passes.

15.4.2 Features

  • Supports access control for read, write, and execute permissions
  • Bus requests incur a one-cycle delay after permission checking
  • Supports logging of access violation information
  • Supports interrupt generation for access violation events
  • Integrates 9 IOPMPs to provide security control for hardware modules and subsystems

15.4.3 Functional Description

15.4.3.1 IOPMP Configuration Overview

Within the chip, the functionality of each IOPMP instance varies depending on its configuration at different nodes. The detailed configuration parameters are listed below.

IOPMP Configuration Parameters

Parameter NameDefault ValueConfigurable RangeDescription
IOPMP_MD_K44 / 8 / 16 / 32Number of entries per MD
IOPMP_MD_NUM161 ~ 63Number of MDs in the IOPMP
IOPMP_SID_NUM641 ~ 1024Number of SIDs supported by the IOPMP
IOPMP_ID_WIDTH81 ~ 16AXI ID signal width
IOPMP_ADDR_WIDTH4432 ~ 64AXI address signal width
IOPMP_DATA_WIDTH642^N (N = 5 ~ 10)AXI data signal width
IOPMP_WSTRB_WIDTH8IOPMP_DATA_WIDTH / 8AXI WSTRB signal width
IOPMP_AWUSER_WIDTH3Not specifiedAXI AWUSER signal width
IOPMP_ARUSER_WIDTH3Not specifiedAXI ARUSER signal width
IOPMP_WUSER_WIDTH3Not specifiedAXI WUSER signal width
IOPMP_BUSER_WIDTH3Not specifiedAXI BUSER signal width
IOPMP_RUSER_WIDTH3Not specifiedAXI RUSER signal width
IOPMP_LOOPBACK_WIDTH8Not specifiedACE5-Lite W/R LOOPBACK signal width
IOPMP_MMUSID_WIDTH16Not specifiedACE5-Lite W/R MMUSID signal width
IOPMP_MMUSSID_WIDTH16Not specifiedACE5-Lite W/R MMUSSID signal width
IOPMP_DATACHK_WIDTH8IOPMP_DATA_WIDTH / 8ACE5-Lite W/R DATACHK signal width
IOPMP_POISON_WIDTH1IOPMP_DATA_WIDTH / 64ACE5-Lite W/R POISON signal width
IOPMP_DEFAULT_AWADDR44'h04 KB aligned addressDefault AXI write error address
IOPMP_DEFAULT_ARADDR44'h04 KB aligned addressDefault AXI read error address
IOPMP_DEVICEID_WIDTH201 ~ 32Stream ID signal width

15.4.3.2 IOPMP Instance Overview

In K3, a total of 9 IOPMP instances are implemented. The configuration of each IOPMP instance within the chip is summarized in the table below.

IOPMP InstanceUpstream DevicesMD_KMD_NUMSID_NUMADDR_WDATA_W
IOPMP1 / IOPMP_M2FRCPU41613264
IOPMP2 / IOPMP_F2MSecure DMA / Non-secure DMA / USB3 / Security Engine / SD / USB OTG / UFS / eSPI (AP) / PCIe / CPU416163264
IOPMP3 / IOPMP_DMASecure DMA / Non-secure DMA (share one SID; treated as a single device by IOPMP)41613864
IOPMP41616163264
IOPMP5 / IOPMP_HSDMAHSDMA416140128
IOPMP6 / IOPMP_INT0DBG_AW / DBG_AR / GPU / VPU / ETR / REE_W / REE_R4161638256
IOPMP7 / IOPMP_INT1Secure DMA / Non-secure DMA / USB3 / Security Engine / SD / USB OTG / UFS / eSPI (AP) / GMAC0 / GMAC1 / AUD / UCIE / GMAC24161638256
IOPMP8 / IOPMP_INT2PCIe4161638256
IOPMP9 / IOPMP_INT3ISP / LCD0 / LCD14161638256

15.4.3.3 SID Mechanism

For K3, all IOPMP instances use static SIDs (i.e., AxUSER signals) to distinguish access permissions of different master devices to protected memory regions. Each IOPMP instance is associated with a set of upstream masters, with a fixed SID assigned to each master. The SID configuration is shown in the table below.

IOPMP InstanceUpstream MasterStatic SID
IOPMP1 / IOPMP_M2FRCPU0x0
IOPMP2 / IOPMP_F2MSecure DMA0x0 (security enable required)
Non-secure DMA0xF
USB30x2
Security Engine0x3
SD0x4
USB OTG0x5
UFS0x6
eSPI (AP)0x9
PCIe0x8
CPU0x1
IOPMP3 / IOPMP_DMASecure DMA / Non-secure DMA0x0
IOPMP4
IOPMP5 / IOPMP_HSDMAHSDMA0x0
IOPMP6 / IOPMP_INT0DBG_AWSee below
DBG_ARSee below
GPUSee below
VPUSee below
ETRSee below
REE_WSee below
REE_RSee below
IOPMP7 / IOPMP_INT1Secure DMA0x0
Non-secure DMA0xF
USB30x2
Security Engine0x3
SD0x4
USB OTG0x5
UFS0x6
eSPI (AP)0x9
GMAC0See below
GMAC1See below
AUDSee below
UCIESee below
GMAC2See below
IOPMP8 / IOPMP_INT2PCIeSee below
IOPMP9 / IOPMP_INT3ISPSee below
LCD0See below
LCD1See below

15.4.3.4 SID Configuration via SEC_CIU

For certain devices, the SID must be configured via registers in the SEC_CIU module (base address: 0xF0580000). The relevant register fields are described below.

Secure DMA

By default, Secure DMA shares the same SID as Non-secure DMA.

When differentiation between Secure DMA and Non-secure DMA is required by the IOPMP, the security attribute of Secure DMA can be enabled through the DMA_SEC_CTRL_KEY_SEL[15:0] register field:

  • Each bit corresponds to one DMA channel (bit n → channel n).
  • When DMA_SEC_CTRL_KEY_SEL[n] = 1, the corresponding channel is marked as secure DMA, and its SID is assigned to the dedicated secure DMA SID.
DMA SECURE CONTROL REGISTER

DMA_SEC_CTRL_KEY_SEL Offset: 0x0

BitsFieldTypeResetDescription
31ECO_KEY_SELRW0x0Key select (added by ECO): 1 = OTP_OEM_KEY_HASH; 0 = OTP_RKEK (ECO)
30:23RSVDRO0Reserved for future use.
22DAP_SEC_ENRW0x0DAP secure enable.
21KEYPAD_SEC_ENRW0x0KEYPAD secure enable.
20TIMER_SEC_ENRW0x0TIMER secure enable.
19RTC_SEC_ENRW0x0RTC secure enable.
18I2C3_SEC_ENRW0x0I2C3 secure enable.
17SSP2_SEC_ENRW0x0SSP2 secure enable.
16UART_SEC_ENRW0x0UART secure enable.
15:0DMA_CHAN_SEC_ENRW0x0DMA channel secure control.
DBG_AW and DBG_AR

The SIDs are configured via the NSAID_CTRL0 register (offset: 0x10):

  • DBG_AW.SID ← bits [27:24]
  • DBG_AR.SID ← bits [31:28]
NSAID CONTROL REGISTER0

NSAID_CTRL0 Offset: 0x10

BitsFieldTypeResetDescription
31:28APCORE_DBG_AR_NSAIDRW0x0APCORE DBG read NSAID.
27:24APCORE_DBG_AW_NSAIDRW0x0APCORE DBG write NSAID.
23:20APCORE_AR_NSAIDRW0x0APCORE read NSAID.
19:16APCORE_AW_NSAIDRW0x0APCORE write NSAID.
15:11ReservedRO0Reserved for future use.
10:8BOM_REE_KEY_SELRW0x0BOM_REE key select.
7:4BOM_REE_AR_NSAIDRW0x0BOM_REE read NSAID.
3:0BOM_REE_AW_NSAIDRW0x0BOM_REE write NSAID.
GPU

To configure the SID for the GPU:

  1. Set NSAID_CTRL1 (offset: 0x14) bit [30] = 1.
  2. Specify the SID via NSAID_CTRL1 bits [19:16].
NSAID CONTROL REGISTER1

NSAID_CTRL1 Offset: 0x14

BitsFieldTypeResetDescription
31VPU_NSAID_SELRW0x0VPU NSAID select.
30GPU_NSAID_SELRW0x0GPU NSAID select.
29APPBRC_NSAID_SELRW0x0APPBRC NSAID select.
28LCD_NSAID_SELRW0x0LCD NSAID select.
27:24USB3_NSAIDRW0x0USB3 (M3) NSAID.
23:20VPU_NSAIDRW0x0VPU NSAID.
19:16GPU_NSAIDRW0x0GPU NSAID.
15:12APFBRC_NSAIDRW0x0APFBRC NSAID.
11:8V2D_NSAIDRW0x0V2D NSAID.
7:4LCD_NSAIDRW0x0LCD NSAID.
3:0EMAC0 NSAIDRW0x0EMAC0 NSAID.
VPU

To configure the SID for the VPU:

  1. Set NSAID_CTRL1 (offset: 0x14) bit [31] = 0.
  2. Specify the SID via NSAID_CTRL1 bits [23:20].
V2D

To configure the SID for the V2D:

  1. Set MAS_SEC_CTRL (offset: 0x8) bit [31] = 1.
  2. Specify the SID via NSAID_CTRL1 (offset: 0x14) bits [11:8].
MASTER SECURE CONTROL REGISTER

MAS_SEC_CTRL Offset: 0x8

BitsFieldTypeResetDescription
31V2D_AXUSER_SELRW0x0V2D AXUSER select.
30PCIE_USB_COMBO_AXUSER_SELRW0x0PCIe/USB combo AXUSER select.
29LCDSAT2_AXUSER_SELRW0x0LCDSAT2 AXUSER select.
28:15RSVDRO0Reserved for future use.
14LCDSAT2_SECURE_ENRW0x0LCDSAT2 master secure enable.
13AUDMCU_SECURE_ENRW0x0AUDMCU master secure enable.
12LCD_SECURE_ENRW0x0LCD master secure enable.
11PCIE2DDR_SECURE_ENRW0x0PCIE2DDR master secure enable.
10UCIE_SECURE_ENRW0x0UCIE master secure enable.
9V2D_SECURE_ENRW0x0V2D master secure enable.
8VPU_SECURE_ENRW0x0VPU master secure enable.
7ESPI_SECURE_ENRW0x0eSPI master secure enable.
6PCIE_SECURE_ENRW0x0PCIe master secure enable.
5UFS_SECURE_ENRW0x0UFS master secure enable.
4GPU_SECURE_ENRW0x0GPU master secure enable.
3ISP_SECURE_ENRW0x0ISP master secure enable.
2USB3_SECURE_ENRW0x0DDRC TrustZone disable.
1USB2_HOST_SECURE_ENRW0x0DDRC TrustZone lock.
0USB2_SECURE_ENRW0x0DDR low 2GB remap to high address, 0x0, not remap.
ETR

TBD

REE_W and REE_R

The SIDs are configured via the NSAID_CTRL0 register (offset: 0x10):

  • REE_W.SID ← bits [3:0]
  • REE_R.SID ← bits [7:4]
GMAC0/1/2

The SIDs are configured via the DDRPORT_USER_CTRL register (offset: 0x78):

  • GMAC0.SID ← bits [3:0]
  • GMAC1.SID ← bits [7:4]
  • GMAC2.SID ← bits [19:16]
DDR PORT USER CONTROL REGISTER

DDRPORT_USER_CTRL Offset: 0x78

BitsFieldTypeResetDescription
31:28PCIE_USB_COMBO_AXUSERRW0x0PCIe/USB combo AXUSER.
27:20RSVDRO0Reserved for future use.
19:16GMAC2_AXUSERRW0x0GMAC2_AXUSER.
15:12UCIE_AXUSERRW0x0UCIE_AXUSER.
11:8AUD_AXUSERRW0x0AUD_AXUSER.
7:4GMAC1_AXUSERRW0x0GMAC1_AXUSER.
3:0GMAC0_AXUSERRW0x0GMAC0_AXUSER.
AUD (Little Core)

The SID is configured via the DDRPORT_USER_CTRL register (offset: 0x78) bits [11:8].

UCIE

The SID is configured via the DDRPORT_USER_CTRL register (offset: 0x78) bits [15:12].

ISP

The SID is configured via the NSAID_CTRL1 register (offset: 0x14) bits [3:0].

LCD0

To configure the SID for LCD0:

  • Set NSAID_CTRL1 (offset: 0x14) bit [28] = 0.
  • Specify the SID via NSAID_CTRL1 (offset: 0x14) bits [7:4].
LCD1

To configure the SID for LCD1:

  • Set MAS_SEC_CTRL (offset: 0x8) bit [29] = 1.
  • Specify the SID via DDRPORT_USER_CTRL (offset: 0x78) bits [27:24].
IOPMP8 PCIe

To configure the SID for PCIe on IOPMP8:

  • Set MAS_SEC_CTRL (offset: 0x8) bit [30] = 1.
  • Specify the SID via DDRPORT_USER_CTRL (offset: 0x78) bits [31:28].

15.4.4 Registers

15.4.4.1 IOPMP Register Address Mapping

Each IOPMP instance occupies a 64 KB configuration register address space. The address allocation for each IOPMP instance in the chip is shown in the table below.

IOPMP InstanceUpstream DevicesBase Address
IOPMP1 / IOPMP_M2FRCPU0xF080_0000
IOPMP2 / IOPMP_F2MSecure DMA / Non-secure DMA / USB3 / Security Engine
/ SD / USB OTG / UFS / eSPI (AP) / PCIe / CPU
0xF085_0000
IOPMP3 / IOPMP_DMASecure DMA / Non-secure DMA
(share one SID; treated as a single device by IOPMP)
0xF087_0000
IOPMP40xF086_0000
IOPMP5 / IOPMP_HSDMAHSDMA0xF088_0000
IOPMP6 / IOPMP_INT0DBG_AW / DBG_AR / GPU / VPU / ETR / REE_W / REE_R0xF081_0000
IOPMP7 / IOPMP_INT1Secure DMA / Non-secure DMA / USB3 / Security Engine
/ SD / USB OTG / UFS / eSPI (AP) / GMAC0 / GMAC1
/ AUD / UCIE / GMAC2
0xF082_0000
IOPMP8 / IOPMP_INT2PCIe0xF083_0000
IOPMP9 / IOPMP_INT3ISP / LCD0 / LCD10xF084_0000

15.4.4.2 Register List

INFO Registers
Register NameOffsetDescription
VERSION0x0000Specification version
IMPLEMENT0x0004Implementation ID
HWCFG00x0008IOPMP hardware configuration 0
HWCFG10x000CIOPMP hardware configuration 1
HWCFG20x0010IOPMP hardware configuration 2
ENTRYOFFSET0x0014Offset of Entry register array
Configuration Protection Registers
Register NameOffsetDescription
MDLCK0x0040MD configuration lock
MDLCKH0x0044MD configuration lock (high bits)
ENTRYLCK0x004CEntry configuration lock
Error Capture Registers
Register NameOffsetDescription
ERR_CFG0x0060Error configuration
ERR_REQINFO0x0064Error request information
ERR_REQADDR0x0068Lower bits of error address
ERR_REQADDRH0x006CUpper bits of error address
ERR_REQID0x0070Entry index where the error occurred
ERR_NUM_W0x0100Accumulated error count on write channel
ERR_NUM_R0x0104Accumulated error count on read channel
DEVICEID Configuration Register
Register NameOffsetDescription
DEVICEIDCFG0x0200DeviceID type selection
Default Address Registers
Register NameOffsetDescription
DFT_ADDR_W0x0210Bits [33:12] of default write address.
Reset value is defined by configuration parameter IOPMP_DEFAULT_AWADDR. Not writable after enable is set to 1.
DFT_ADDRH_W0x0214Bits [65:34] of default write address.
Valid width depends on the actual address width. Reset value is defined by IOPMP_DEFAULT_AWADDR. Not writable after enable is set to 1.
DFT_ADDR_R0x0218Bits [33:12] of default read address.
Reset value is defined by configuration parameter IOPMP_DEFAULT_ARADDR. Not writable after enable is set to 1.
DFT_ADDRH_R0x021CBits [65:34] of default read address.
Valid width depends on the actual address width. Reset value is defined by IOPMP_DEFAULT_ARADDR. Not writable after enable is set to 1.
SRCMD Table Registers
Register NameOffsetDescription
SRCMD_EN(s)0x1000 + (s) × 32SID-to-MD mapping configuration
SRCMD_ENH(s)0x1004 + (s) × 32SID-to-MD mapping configuration (high bits)
DeviceID to SID Registers
Register NameOffsetDescription
DEVICEID(s)0x9000 + (s) × 4DeviceID mapped to SIDs. Bit width is defined by configuration parameter IOPMP_DEVICEID_WIDTH
Entry Array Registers
Register NameOffsetDescription
ENTRY_ADDR(i)0xA000 + (i) × 16Bits [33:12] of the entry physical address
ENTRY_ADDRH(i)0xA004 + (i) × 16Bits [65:34] of the entry physical address.
Valid width depends on actual address width
ENTRY_CFG(i)0xA008 + (i) × 16Entry configuration

15.4.4.3 Register Descriptions

VERSION(0x0000)
BitsFieldTypeResetDescription
31:24specverRO8'h0Specification version.
23:0vendorRO24'h0JEDEC manufacturer ID.
IMPLEMENT(0x0004)
BitsFieldTypeResetDescription
31:0impidRO32'h0Implementation ID.
HWCFG0(0x0008)
BitsFieldTypeResetDescription
31enableW1SS1'h0IOPMP enable. Supports write-one-to-set only.
30addrh_enROCFGIndicates support for ENTRY_ADDRH register. 0x0: ENTRY_ADDRH not supported; 0x1: ENTRY_ADDRH supported.
29:24md_numROCFGNumber of configured MDs.
23:17md_entry_numROCFGNumber of entries per MD minus 1.
16mfr_enRO1'h0Multiple Fault Recording (MFR) not supported.
15peesRO1'h0Per-entry bus error suppression not supported.
14peisRO1'h0Per-entry interrupt suppression not supported.
13stall_enRO1'h0MDSTALL / SIDSCP not supported.
12no_wRO1'h0Global write disable not supported.
11no_xRO1'h0Global execute (instruction fetch) disable not supported.
10chk_xRO1'h1Instruction fetch checking supported.
9rrid_transl_progRO1'h0RRID translation programming not supported.
8rrid_transl_enRO1'h0RRID translation not supported.
7prient_progRO1'h0Priority entry modification not supported.
6user_cfg_enRO1'h0Custom user attribute configuration not supported.
5sps_enRO1'h0Secondary permission not supported.
4tor_enRO1'h1TOR (Top of Range) address matching supported.
3:2srcmd_fmtRO2'h0Format 0 for Rapid-K model.
1:0mdcfg_fmtRO2'h1Format 1 for Rapid-K model.
HWCFG1(0x000C)
BitsFieldTypeResetDescription
31:16entry_numROCFGNumber of configured entries.
15:0rrid_numROCFGNumber of configured RRIDs.
HWCFG2(0x0010)
BitsFieldTypeResetDescription
31:16rrid_translRO16'h0RRID translation not supported (no new RRID is forwarded to the target).
15:0prio_entryRO16'h0Priority-based address matching not supported.
ENTRYOFFSET(0x0014)
BitsFieldTypeResetDescription
31:0offsetRO32'hA000Offset of the Entry register array.
MDLCK(0x0040)
BitsFieldTypeResetDescription
31:1mdW1SS31'h0Each bit md[j] locks the corresponding SRCMD_EN(i).md[j] field.
The number of valid bits depends on the configured number of MDs.
0lW1SS1'h0Lock bit for MDLCK and MDLCKH registers.
MDLCKH(0x0044)
BitsFieldTypeResetDescription
31:0mdhW1SS32'h0Each bit mdh[j] locks the corresponding SRCMD_ENH(i).mdh[j] field.
The number of valid bits depends on the configured number of MDs.
ENTRYLCK(0x004C)
BitsFieldTypeResetDescription
31:17rsvRO15'h0Reserved.
16:1fRW16'h0Locks entries from entry(0) to entry(f-1). Only increasing values are allowed (write-once, monotonic increment).
0lW1SS1'h0Lock bit for the ENTRYLCK register.
ERR_CFG(0x0060)
BitsFieldTypeResetDescription
31:19rsv2RO13'h0Reserved.
18:8msidataRO11'h0MSI interrupt not supported.
7:4rsv1RO4'h0Reserved.
3msi_enRO1'h0MSI interrupt not supported.
2rsRO1'h0Bus error suppression not supported.
1ieRW1'h0IOPMP interrupt enable.
0lW1SS1'h0Lock bit for the ERR_CFG register.
ERR_REQINFO(0x0064)
BitsFieldTypeResetDescription
31:8rsv2RO24'h0Reserved.
7svcRO1'h0Multiple Fault Recording (MFR) not supported.
6:4etypeRO3'h0Error type:
0x0 = No error;
0x1 = Read error;
0x2 = Write error;
0x3 = Execution error;
0x4 = Reserved;
0x5 = No matching rule;
0x6 = Unknown SID;
0x7 = Reserved
3rsv1RO1'h0Reserved.
2:1ttypeRO2'h0Transaction type:
0x0 = Reserved;
0x1 = Read;
0x2 = Write;
0x3 = Execution
0vW1C1'h0Interrupt status bit. Write 1 to clear. Not affected by interrupt enable. Once set by hardware, error information is not updated until cleared. After clearing, error recording resumes.
ERR_REQADDR(0x0068)
BitsFieldTypeResetDescription
31:0addrRO32'h0Bits [33:2] of the address where the error occurred.
ERR_REQADDRH(0x006C)
BitsFieldTypeResetDescription
31:0addrhRO32'h0Bits [65:34] of the address where the error occurred.
The number of valid bits depends on the configured address width.
ERR_REQID(0x0070)
BitsFieldTypeResetDescription
31:16eidRO16'h0Entry ID where the error occurred.
15:0rridRO16'h0RRID associated with the error.
ERR_NUM_W(0x0100)
BitsFieldTypeResetDescription
31:16rsvRO16'h0Reserved.
15:0numRO16'h0Accumulated error count on the write channel. Cleared when ERR_REQINFO.v is written with 1.
ERR_NUM_R(0x0104)
BitsFieldTypeResetDescription
31:16rsvRO16'h0Reserved.
15:0numRO16'h0Accumulated error count on the read channel. Cleared when ERR_REQINFO.v is written with 1.
DEVICEIDCFG(0x0200)
BitsFieldTypeResetDescription
31:2rsvRO30'h0Reserved.
1lW1SS1'h0Lock bit for the DEVICEIDCFG register.
0id_selRW1'h0DeviceID selection:
0x0 = Use AxUSER signal as SID; DeviceID2SID registers are not used;
0x1 = Use Stream ID as SID; DeviceID2SID registers are used
DFT_ADDR_W(0x0210)
BitsFieldTypeResetDescription
31:10addrRWCFGBits [33:12] of the default write address. The reset value is defined by configuration parameter IOPMP_DEFAULT_AWADDR. Not writable after enable is set to 1.
9:0rsvRO10'h0Reserved.
DFT_ADDRH_W(0x0214)
BitsFieldTypeResetDescription
31:0addrhRWCFGBits [65:34] of the default write address.
The number of valid bits depends on the configured address width. The reset value is defined by configuration parameter IOPMP_DEFAULT_AWADDR. Not writable after enable is set to 1.
DFT_ADDR_R(0x0218)
BitsFieldTypeResetDescription
31:10addrRWCFGBits [33:12] of the default read address. The reset value is defined by configuration parameter IOPMP_DEFAULT_ARADDR. Not writable after enable is set to 1.
9:0rsvRO10'h0Reserved.
DFT_ADDRH_R(0x021C)
BitsFieldTypeResetDescription
31:0addrhRWCFGBits [65:34] of the default read address.
The number of valid bits depends on the configured address width. The reset value is defined by configuration parameter IOPMP_DEFAULT_ARADDR. Not writable after enable is set to 1.
SRCMD_EN(0x1000 + (s)*32)
BitsFieldTypeResetDescription
31:1mdRW31'h0md[j] = 1 indicates that MD j is associated with SIDs.
The number of valid bits depends on the configured number of MDs.
0lW1SS1'h0Lock bit for SRCMD_EN(s) and SRCMD_ENH(s).
SRCMD_ENH(s)(0x1004 + (s)*32)
BitsFieldTypeResetDescription
31:0mdhRW32'h0mdh[j] = 1 indicates that MD (j + 31) is associated with SIDs.
The number of valid bits depends on the configured number of MDs.
DEVICEID(s)(0x9000 + (s)*4)
BitsFieldTypeResetDescription
[31:IOPMP_DEVICEID_WIDTH]rsvRO(32-IOPMP_DEVICEID_WIDTH)'h0Reserved.
[IOPMP_DEVICEID_WIDTH-1:0]deviceidRW(IOPMP_DEVICEID_WIDTH)'h0DeviceID mapped to SIDs. The bit width is defined by configuration parameter IOPMP_DEVICEID_WIDTH.
ENTRY_ADDR(i)(0xA000 + (i)*16)
BitsFieldTypeResetDescription
31:10addrRW22'h0Bits [33:12] of the physical address.
9addr11RW1'h0Bit [11] of the physical address. Ignored when TOR mode is used.
In NAPOT mode, this bit determines the address range definition:
0x0 = 4 KB region defined by higher address bits;
0x1 = larger region defined by higher address bits.
8:0rsvRO9'h0Reserved.
ENTRY_ADDRH(i)(0xA004 + (i)*16)
BitsFieldTypeResetDescription
31:0addrhRW32'h0Bits [65:34] of the physical address.
The number of valid bits depends on the configured address width.
ENTRY_CFG(i)(0xA008 + (i)*16)
BitsFieldTypeResetDescription
31:11rsvRO21'h0Reserved.
10sexeRO1'h0Per-entry bus error suppression for execution not supported.
9seweRO1'h0Per-entry bus error suppression for write not supported.
8sereRO1'h0Per-entry bus error suppression for read not supported.
7sixeRO1'h0Per-entry interrupt suppression for execution not supported.
6siweRO1'h0Per-entry interrupt suppression for write not supported.
5sireRO1'h0Per-entry interrupt suppression for read not supported.
4:3aRW2'h0Address matching mode:
0x0 = OFF;
0x1 = TOR;
0x2 = Reserved;
0x3 = NAPOT.
2xRW1'h0Execute (instruction fetch) access enable.
1wRW1'h0Write access enable.
0rRW1'h0Read access enable.

Note:

  • W1SS: Write 1 to set (bit can only transition from 0 to 1)
  • W1C: Write 1 to clear

15.4.5 Programming Guide

15.4.5.1 Basic State and Security Constraints

  • Reset and Enable Behavior
    • After power-on reset, the IOPMP operates in bypass mode, allowing all bus transactions without performing access permission checks.
    • Once enabled (enable = 1), the IOPMP continuously enforces access control on all bus transactions and cannot be disabled until the next reset.
  • Security Domain Requirement
    • The IOPMP configuration registers reside in the secure domain and must only be accessed from a secure environment (e.g., Secure Boot or a Trusted Execution Environment, TEE).
  • Clock Dependency
    • Before configuring IOPMP registers, software must ensure that both pclk and aclk are enabled.
  • Lock Protection
    • Software should make appropriate use of the configuration protection mechanism to lock MDs and entries with higher security requirements.

15.4.5.2 Configuration Rules and Address Mapping

  • Entry Attributes
    • Each entry can be configured in either NAPOT or TOR addressing mode.
    • If the first entry of the first MD is configured as TOR, the starting address defaults to 0x0.
  • Intra-SID Overlap Mechanism
    • Multiple entries mapped to the same SID are allowed to have overlapping address ranges.
    • When a bus transaction matches multiple entries (due to overlap):
      • If at least one entry grants the required access permission, the transaction is considered valid and no error is reported.
      • If none of the matched entries grant permission, the transaction is considered invalid and an error (etype = 0x5) is generated.
    • Software may leverage this mechanism to improve entry utilization, but care must be taken to avoid introducing security risks.
  • Inter-SID Overlap Mechanism
    • Address overlap is also allowed among entries mapped to different SIDs, enabling different permission attributes for the same address space.
  • SID Conflict Handling
    • If a transaction matches multiple SIDs (e.g., multiple DeviceID registers are configured with the same value), the hardware treats this as an error.
  • Update Considerations
    • The hardware does not support stalling specific MDs or SIDs (i.e., there is no MDSTALL mechanism).
    • During entry or SID configuration updates, software must ensure that access rules remain complete and consistent, and must prevent peripherals from accessing address regions whose permissions are being modified.

15.4.5.3 Error Detection and Recording

  • Detection Methods
    • Software can detect access violations by:
      • Enabling interrupts; or
      • Polling the ERR_REQINFO.v bit.
  • Recording Mechanism
    • The hardware records only the first error.
    • After clearing ERR_REQINFO.v, subsequent errors can be recorded.
    • Software can read ERR_NUM_W and ERR_NUM_R to obtain the total number of write and read errors, respectively.
  • Concurrent Error Priority
    • If read and write channel errors occur in the same cycle, the hardware prioritizes recording the write error.
  • Counting Rules
    • Write channel error → ERR_NUM_W increments by 1
    • Read channel error → ERR_NUM_R increments by 1

15.4.5.4 Error Type Definition (etype)

  • SID-related Errors (etype = 0x6)
    • No SID match
    • Multiple SID matches

    Note: These two conditions share the same error code.

  • Entry-related Errors (etype = 0x5)
    • No entry match
    • Multiple entry matches:
      • If permission is granted → no error is reported
      • If permission is not granted → etype = 0x5

15.4.5.5 Error Information Register Validity

  • ERR_REQID.sid Field
    • Source:
      • When DEVICEIDCFG.id_sel = 0, this field is assigned the AxUSER signal of the transaction that triggered the error.
      • Otherwise, it is assigned the SID corresponding to the stream ID of the transaction.
    • Validity:
      • This field is valid only when ERR_REQINFO.etype ≠ 0x6.
      • Otherwise, it is set to 0 and should be considered invalid.
  • ERR_REQID.eid Field
    • Validity:
      • This field is valid only when ERR_REQINFO.etype = 0x1, 0x2, or 0x3.
      • It represents the entry index used for access permission checking.
      • Otherwise, it is set to 0 and should be considered invalid.

15.4.5.6 Default Address Configuration Guidelines

Register Description

The reset values of the default address registers (DFT_ADDR/H_W, DFT_ADDR/H_R) are determined by the configuration parameters IOPMP_DEFAULT_AWADDR and IOPMP_DEFAULT_ARADDR.

  • If the default configuration is used, software does not need to program these registers.
  • To use a custom default address, software must:
    • Select a valid address within the chip address space.
    • Ensure the address is 4 KB aligned.
    • Program the address into DFT_ADDR/H_W and DFT_ADDR/H_R.
Configuration Recommendations
  • IOPMP1/2/3
    • Upon a check failure, the response is handled by the Fabric Default Slave.
    • It is recommended to map the default address to a reserved region in the memory map.
  • IOPMP2
    • Maximum default space: 16 × 8 Bytes = 128 Bytes (length × size)
    • Recommended address: 0x30000000
  • DDR IOPMP 5/6/7/8/9
    • Maximum default space: 256 × 32 Bytes = 8192 Bytes (length × size)
  • Other IOPMP instances
    • Software should configure these based on the specific application scenario, following platform guidelines.