SPU provides support for the definition of non-secure callable (NSC) sub-regions to allow non-secure to secure function calls.
A non-secure callable sub-region can only exist within an existing secure region and its definition is done using the following registers:
- FLASHNSC[n].REGION, used to select the secure region that will contain the NSC sub-region
- FLASHNSC[n].SIZE, used to define the size of the NSC sub-region within the secure region
The NSC sub-region will be defined starting with the highest address in that region and descending. The following figure illustrates the NSC sub-regions and the registers used for their definition.
The NSC sub-region will only be defined when the following are true:
- FLASHNSC[i].SIZE value is non zero
- FLASHNSC[i].REGION defines a secure region
If FLASHNSC[i].REGION and FLASHNSCj].REGION have the same value, there is only one sub-region defined as NSC, with the size given by the maximum of FLASHNSC[i].SIZE and FLASHNSC[j].SIZE.
If FLASHNSC[i].REGION defines a non-secure region, then there is no non-secure callable region defined and the selected region stays non-secure.