summaryrefslogtreecommitdiff
path: root/plat/hisilicon
diff options
context:
space:
mode:
authordavidcunado-arm <david.cunado@arm.com>2018-01-25 00:07:06 +0000
committerGitHub <noreply@github.com>2018-01-25 00:07:06 +0000
commit8253eb57e25a1a5e0233fe609216a3883d38aba2 (patch)
tree659186f701117067afd609682bdaabd3c3054385 /plat/hisilicon
parentd95eb476d564f888eed2759bca7666b04096fed4 (diff)
parentb79f7ed03ac0654a479e23bc72a05ab4736ce159 (diff)
Merge pull request #1231 from Leo-Yan/hikey960_enable_fiq_handling
Hikey960: Enable invalid FIQ handling
Diffstat (limited to 'plat/hisilicon')
-rw-r--r--plat/hisilicon/hikey960/hikey960_bl31_setup.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/plat/hisilicon/hikey960/hikey960_bl31_setup.c b/plat/hisilicon/hikey960/hikey960_bl31_setup.c
index f685f9cf..f0d15a35 100644
--- a/plat/hisilicon/hikey960/hikey960_bl31_setup.c
+++ b/plat/hisilicon/hikey960/hikey960_bl31_setup.c
@@ -16,6 +16,8 @@
#include <gicv2.h>
#include <hi3660.h>
#include <hisi_ipc.h>
+#include <interrupt_mgmt.h>
+#include <platform.h>
#include <platform_def.h>
#include "hikey960_def.h"
@@ -167,6 +169,37 @@ void bl31_platform_setup(void)
hisi_ipc_init();
}
+#ifdef SPD_none
+static uint64_t hikey_debug_fiq_handler(uint32_t id,
+ uint32_t flags,
+ void *handle,
+ void *cookie)
+{
+ int intr, intr_raw;
+
+ /* Acknowledge interrupt */
+ intr_raw = plat_ic_acknowledge_interrupt();
+ intr = plat_ic_get_interrupt_id(intr_raw);
+ ERROR("Invalid interrupt: intr=%d\n", intr);
+ console_flush();
+ panic();
+
+ return 0;
+}
+#endif
+
void bl31_plat_runtime_setup(void)
{
+#ifdef SPD_none
+ uint32_t flags;
+ int32_t rc;
+
+ flags = 0;
+ set_interrupt_rm_flag(flags, NON_SECURE);
+ rc = register_interrupt_type_handler(INTR_TYPE_S_EL1,
+ hikey_debug_fiq_handler,
+ flags);
+ if (rc != 0)
+ panic();
+#endif
}