mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-21 03:54:34 +00:00
rpi3: Implement simple interrupt routing
Implement minimal interrupt routing functions. All interrupts are treated as non-secure interrupts to be handled by the non-secure world. Add note to the documentation about disabling FIQs qhen using OP-TEE with Linux. Change-Id: I937096542d973925e43ae946c5d0b306d0d95a94 Tested-by: Ying-Chun Liu (PaulLiu) <paul.liu@linaro.org> Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
This commit is contained in:
parent
df4c512d47
commit
d35de55e55
2 changed files with 20 additions and 7 deletions
|
@ -243,6 +243,12 @@ The following build options are supported:
|
||||||
BL32_EXTRA1=tee-pager_v2.bin BL32_EXTRA2=tee-pageable_v2.bin``
|
BL32_EXTRA1=tee-pager_v2.bin BL32_EXTRA2=tee-pageable_v2.bin``
|
||||||
to put the binaries into the FIP.
|
to put the binaries into the FIP.
|
||||||
|
|
||||||
|
Note: If OP-TEE is used it may be needed to add the following options to the
|
||||||
|
Linux command line so that the USB driver doesn't use FIQs:
|
||||||
|
``dwc_otg.fiq_enable=0 dwc_otg.fiq_fsm_enable=0 dwc_otg.nak_holdoff=0``.
|
||||||
|
This will unfortunately reduce the performance of the USB driver. It is needed
|
||||||
|
when using Raspbian, for example.
|
||||||
|
|
||||||
- ``TRUSTED_BOARD_BOOT``: This port supports TBB. Set this option
|
- ``TRUSTED_BOARD_BOOT``: This port supports TBB. Set this option
|
||||||
``TRUSTED_BOARD_BOOT=1`` to enable it. In order to use TBB, you might
|
``TRUSTED_BOARD_BOOT=1`` to enable it. In order to use TBB, you might
|
||||||
want to set ``GENERATE_COT=1`` to let the contents of the FIP automatically
|
want to set ``GENERATE_COT=1`` to let the contents of the FIP automatically
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <arch_helpers.h>
|
#include <arch_helpers.h>
|
||||||
|
#include <assert.h>
|
||||||
#include <bl_common.h>
|
#include <bl_common.h>
|
||||||
#include <console.h>
|
#include <console.h>
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
@ -198,15 +199,21 @@ unsigned int plat_get_syscnt_freq2(void)
|
||||||
|
|
||||||
uint32_t plat_ic_get_pending_interrupt_type(void)
|
uint32_t plat_ic_get_pending_interrupt_type(void)
|
||||||
{
|
{
|
||||||
|
ERROR("rpi3: Interrupt routed to EL3.\n");
|
||||||
return INTR_TYPE_INVAL;
|
return INTR_TYPE_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t plat_interrupt_type_to_line(uint32_t type,
|
uint32_t plat_interrupt_type_to_line(uint32_t type, uint32_t security_state)
|
||||||
uint32_t security_state)
|
|
||||||
{
|
{
|
||||||
/* It is not expected to receive an interrupt route to EL3.
|
assert((type == INTR_TYPE_S_EL1) || (type == INTR_TYPE_EL3) ||
|
||||||
* Hence panic() to flag error.
|
(type == INTR_TYPE_NS));
|
||||||
*/
|
|
||||||
ERROR("Interrupt not expected to be routed to EL3");
|
assert(sec_state_is_valid(security_state));
|
||||||
panic();
|
|
||||||
|
/* Non-secure interrupts are signalled on the IRQ line always. */
|
||||||
|
if (type == INTR_TYPE_NS)
|
||||||
|
return __builtin_ctz(SCR_IRQ_BIT);
|
||||||
|
|
||||||
|
/* Secure interrupts are signalled on the FIQ line always. */
|
||||||
|
return __builtin_ctz(SCR_FIQ_BIT);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue