Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IOPMP Reference Model #31

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open

Conversation

gullahmed1
Copy link

This Pull Request introduces the IOPMP Reference Model, developed in compliance with the RISC-V IOPMP Specification Version 0.9.2-RC2 (November 2024). This model serves as a reference implementation, ensuring alignment with the latest specification and will be updated as future revisions are released. Just as the RISC-V IOMMU Specification repository contains its own reference model, it is imperative that the IOPMP Specification repository includes a corresponding reference model to maintain consistency and support the community's development efforts.

Supported Features

The IOPMP Reference Model incorporates all IOPMP Models and each model can be configured based upon SRCMD_FMT and MDCFG_FMT flags at compilation time. All features outlined in the RISC-V IOPMP Specification Version 0.9.2-RC2 (November 2024). Key features include:

Feature Possible Values Description
TOR_EN 0/1 Indicates if Top-Of-Range (TOR) addressing mode is supported.
0: TOR not supported.
1: TOR supported
SPS_EN 0/1 Indicates if Secondary Permission Settings (SPS) are supported.
0: SPS not supported.
1: SPS is supported
PRIENT_PROG 0/1 Indicates if the prio_entry field in HWCFG2 is programmable.
0: Field is fixed.
1: Field is programmable
RRID_TRANSL_EN 0/1 Indicates if tagging a new Requestor ID (RRID) on the initiator port is supported.
0: Tagging not supported.
1: New RRID tagging is supported.
RRID_TRANSL_PROG 0/1 Indicates if the rrid_transl field is programmable.
0: Field is fixed.
1: Field is programmable
CHK_X 0/1 Indicates if the IOPMP implements check of an instruction fetches based on the instruction fetches fields
0: Fields of instruction fetches are ignored
1: Fields of instruction fetches are not ignored
NO_X 0/1 Valid only if CHK_X = 1.
0: Instruction fetch checks are permissive.
1: Instruction fetches are always denied.
NO_W 0/1 Indicates if write accesses are always denied.
0: Write accesses are allowed based on permissions.
1: Write accesses are always denied.
STALL_EN 0/1 Indicates if stalling is supported.
0: No stalling supported.
1: Stalling features are implemented.
PEIS 0/1 Indicates if Per-Entry Interrupt Suppression is supported.
0: Feature not supported.
1: Interrupts can be suppressed per entry.
PEES 0/1 Indicates if Per-Entry Error Suppression is supported.
0: Feature not supported.
1: Errors can be suppressed per entry.
MFR_EN 0/1 Indicates if Multi Fault Record Extension is supported.
0: Feature not supported.
1: Subsequent violations will be recorded.
MD_ENTRY_NUM 0 - IMP Indicates the number of entries associated with each Memory Domain (MD) when MDCFG_FMT is not 0.
Implementation defined value
MD_NUM 0 - 63 Indicates the maximum number of supported Memory Domain (MD).
ADDRH_EN 0/1 Indicates if higher-address fields are available.
0: Higher-address fields not available.
1: Higher-address fields are implemented.
RRID_NUM 0 - 65535 Indicates the maximum number of Requestor IDs (RRIDs) supported.
ENTRY_NUM 0 - IMP Indicates the total number of entries supported.
PRIO_ENTRY 1 - ENTRY_NUM Indicates the number of entries matched based on priority.
ERROR_CAPTURE_EN 0/1 Indicates if the Error Capture Record feature is implemented.
0: Feature not supported.
1: Error details can be captured and logged.
IMP_ERROR_REQID 0/1 Indicates if ERR_REQID is implemented.
0: Feature not supported.
1: Errored RRID and Entry num is recorded.
IMP_MDLCK 0/1 Indicates if the Memory Domain Lock (MDLCK) feature is implemented.
0: Feature is not implemented
1: Memory domains can be locked.
REG_INTF_BUS_WIDTH 4/8 Specifies the width (in bytes) of the register interface bus.
4: 4-byte width.
8: 8-byte width.
MSI_EN 0/1 Indicates if Messaged-Signal-Interrupts are supported.
0: MSI is not supported.
1: MSI can be generated.

All IOPMP Models and Mentioned features are tested using C, test files are included in the verif/tests directory.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant