IOPMP/SPS (Secondary Permission Setting) is an extension to support different sources to share memory domain while allowing each sources to have different read, write and instruction permission to a single memory domain. IOPMP/SPS is only supported when the SRCMD table is in the format 0, a.k.a. HWCFG0.srcmd_fmt=0. HWCFG0.sps_en=1 indicates IOPMP/SPS extention is implemented.
If IOPMP/SPS extension is implemented, each SRCMD table entry shall additionally define read and write permission registers: SRCMD_R(s) and SRCMD_W(s), and SRCMD_RH(s) and SRCMD_WH(s) if applicable. Register SRCMD_R(s) and SRCMD_W(s) each has a single fields, SRCMD_R(s).md and SRCMD_W(s).md respectively representing the read and write permission for each memory domain for source s. Setting lock to SRCMD_EN(s).l also locks SRCMD_R(s), SRCMD_RH(s), SRCMD_W(s), and SRCMD_WH(s).
IOPMP/SPS has two sets of permission settings: one from IOPMP entry and the other from SRCMD_R/SRCMD_W. IOPMP/SPS shall check read and write permission on both the SRCMD table and entries, a transaction fail the IOPMP/SPS check if it violates either of the permission settings.
The instruction fetch permission on IOPMP/SPS is considered the same as the read permission.