标签:when pst developer config embed security isp win save
原文:
How do I handle Non-secure Group 1 interrupts when a core runs at Secure EL1?
N/A
In a GICv3 system with two Security states, an interrupt can be configured as one of the following groups:
Group 0
Secure Group 1
Non-secure Group 1
The following table shows you that each group of interrupts uses a different interrupt signal when the core runs at a different Exception level:
Current Exception level |
Group 0 |
Secure Group 1 |
Non-secure Group 1 |
|
FIQ |
IRQ |
FIQ |
|
FIQ |
FIQ |
IRQ |
|
FIQ |
FIQ |
FIQ |
In a GICv2 system that implements the Generic Interrupt Controller (GIC) Security Extensions:
Group 0 interrupts are Secure interrupts, and they are signaled as FIQs.
Group 1 interrupts are Non-secure interrupts, and they are signaled as IRQs.
In conclusion, Non-secure Group 1 interrupts are handled as follows:
In the GICv3 system:
Non-secure Group 1 interrupts are signaled as FIQs when the core is in Secure EL1.
Non-secure Group1 interrupts are signaled as IRQs when the core is in Non-secure state.
In the GICv2 system:
Non-secure Group1 interrupts are signaled as IRQs when the core is in Secure EL1.
Non-secure Group1 interrupts are signaled as IRQs when the core is in Non-secure state.
The GICv3 and GICv2 use different signals to assert the Non-secure Group 1 interrupt when the core is in Secure EL1.
When a core runs at Secure EL1, the core handles one of the following calls from the Non-secure world:
Fast call
Yielding call
For Fast call, the PSTATE.IRQ and FIQ bits should be set. Therefore, no interrupt can be handled during a Fast call.
The target Exception level of an interrupt is configured through the FIQ and IRQ bits in SCR_EL3.
When SCR_EL3.FIQ is set to 1, FIQs are routed to EL3.
When SCR_EL3.IRQ is set to 1, IRQs are routed to EL3.
EL3 configures SCR_EL3 FIQ or IRQ bits to a target Exception level value before the core exits from EL3.
When the core switches to Secure EL1 from EL3, EL3 can configure SCR_EL3 with the following values:
SCR_EL3.FIQ = 0 (SCR_EL3.IRQ = 0 in GICv2).
SCR_EL3.FIQ = 1 (SCR_EL3.IRQ = 1 in GICv2).
An example of using the GICv3 is given below for two scenarios:
Scenario 1: SCR_EL3.FIQ = 0
Scenario 2: SCR_EL3.FIQ = 1
The process to handle the Non-secure Group 1 interrupt is as follows:
The GIC signals a Non-secure Group 1 interrupt as an FIQ (IRQ in GICv2).
The Secure EL1 exception vector handles the FIQ first.
The
Secure EL1 reads the interrupt ID as a special Interrupt Identifier
(INTID), which indicates that the pending interrupt does not belong to
the current Security state.
Secure EL1 sends an SMC to EL3, as shown in the following figure.
The Secure EL1 might perform context saving before sending the SMC to EL3, depending on the usage.
EL3 receives the SMC call from Secure EL1, prepares the Non-secure context, and configures the SCR_EL3.IRQ to 0 before switching to Non-secure world, as shown in the following figure:
When the core switches to Non-secure world, the interrupt re-asserts as an IRQ, and the Non-secure world exception vector handles the interrupt.
After the interrupt handling is complete, the Non-secure world invokes an SMC to EL3 to instruct the Secure EL1 to continue execution.
The process to handle the Non-secure Group 1 interrupt is as follows:
The GIC signals a Non-secure Group 1 interrupt as an FIQ (IRQ in GICv2) and the FIQ is routed to EL3, as shown in the following figure.
The EL3 exception vector handles the FIQ first.
The EL3 read the interrupt ID as a special INTID, which indicates that the pending interrupt belongs to Non-secure Group 1.
The EL3 prepares the Non-secure context and configures the SCR_EL3.IRQ with 0 before switching to the Non-secure world.
In this case, Secure EL1 has no chance to save any context.
When the core switches to Non-secure world, the interrupt re-asserts as IRQ, and the Non-secure world exception vector handles the interrupt.
After the interrupt handling is complete, the Non-secure world invokes an SMC to EL3 to instruct Secure EL1 to continue, as shown in the following figure:
End
How do I handle Non-secure Group 1 interrupts when a core runs at Secure EL1?
标签:when pst developer config embed security isp win save
原文地址:https://www.cnblogs.com/pengdonglin137/p/12535684.html