GICR_NSACR, Non-secure Access Control Register
The GICR_NSACR characteristics are:
See Forwarding an SGI to a target PE for more information.
GICR_NSACR is a 32-bit register.
The GICR_NSACR bit assignments are:
|NS_access<x>, bits [2x+1:2x], for x = 0 to 15|
NS_access<x>, bits [2x+1:2x], for x = 0 to 15
Configures the level of Non-secure access permitted when the SGI is in Secure Group 0 or Secure Group 1, as defined from GICR_IGROUPR0 and GICR_IGRPMODR0. A field is provided for each SGI. The possible values of each 2-bit field are:
Non-secure writes are not permitted to generate Secure Group 0 SGIs or Secure Group 1 SGIs.
Non-secure writes are permitted to generate a Secure Group 0 SGI.
As 0b01, but additionally Non-secure writes to are permitted to generate a Secure Group 1 SGI.
If the field is programmed to the reserved value, then the hardware will treat the field as if it has been programmed to an IMPLEMENTATION DEFINED choice of the valid values. However, to maintain the principle that as the value increases additional accesses are permitted Arm strongly recommends that implementations treat this value as 0b10. It is IMPLEMENTATION DEFINED whether the value read back is the value programmed or the valid value chosen.
This field resets to an architecturally UNKNOWN value.
Accessing the GICR_NSACR
When GICD_CTLR.DS == 1, this register is RAZ/WI.
When GICD_CTLR.DS == 0, this register is Secure, and is RAZ/WI to Non-secure accesses.
This register is used when affinity routing is enabled. When affinity routing is not enabled for the Security state of the interrupt, GICD_NSACR<n> with n=0 provides equivalent functionality.
This register does not support PPIs.
GICR_NSACR can be accessed through the memory-mapped interfaces:
This interface is accessible as follows:
- When GICD_CTLR.DS == 0b0 accesses to this register are RW.
- When IsAccessSecure() accesses to this register are RW.
- When !IsAccessSecure() accesses to this register are RW.