You copied the Doc URL to your clipboard.

MMU_400 - transaction labels

Incoming transactions need labels, made up of a StreamId and an SSD_Index or SSD (Security State Determinator).

The SSD_Index/SSD, StreamId pair maps a transaction to a security world (Secure or Non-secure) and a translation context that holds the information necessary to perform the translation. Transactions with the same label appear the same.

You use SSD_Index to indirectly find the security world of the transaction using a mapping table (SMMU_SSDRn) in the SMMU, while SSD directly encodes the security state of the transaction.


The security state of the transaction is independent of the Normal/Secure attribute of the transaction.

In the case of the MMU-400, the secure transactions never go to a translation context and instead can either be faulted, or bypass the address translation and have a limited attribute-only transformation applied.

In a hardware System on a Chip (SoC), the StreamId and the SSD_Index are usually formed by side-band signals on the bus or by AXI routing IDs, for example. Models do not have direct parallels for these signals. Instead, you must label transactions coming from a device.

The MMU_400 component uses the top 16 bits of the 32 bit master_id as a label. It has parameters such as:

label0_read_stream_id label0_read_ssd label0_write_stream_id label0_write_ssd ...

These map a label N (range 0..31) in the top 16 bits of the master_id to a particular StreamId and SSD_Index/SSD.


The read and write transactions can have different StreamIds and SSD_Index/SSDs.

If MMU_400 uses SSD_Indexes, then the parameter label{N}_{read/write}_ssd is the index. Otherwise it is 0 or 1, for Secure and Non-secure, respectively.

Transactions have a master_id field, set by a master. Many masters simply use zero, and these often do not allow you to change it. A simple Labeller component exists to put the labels in the master_id. Place it under each upstream device or bus-segment that the SoC wishes to distinguish. The LISA code shows you how it works, so you can create alternative labeling components.

The MMU_400 component is a wrapper round the component MMU_400_BASE. If the SoC identifies transactions in an alternative way, then you can write a new wrapper for MMU_400_BASE and implement your own identification scheme. The LISA code shows you how it works. In particular, you must replace the identify behavior with one specific to the SoC.

Was this page helpful? Yes No