summaryrefslogtreecommitdiff
path: root/plat/qemu/qemu_gic.c
diff options
context:
space:
mode:
authorSanteri Salko <santeri.salko@gmail.com>2018-02-08 22:01:26 +0200
committerSanteri Salko <santeri.salko@gmail.com>2018-02-09 20:49:57 +0200
commit53a98be35f614caa1d2c34076b43b08d0810b6fa (patch)
tree63f8c836dc56f8149d29406912f54ae943f836fb /plat/qemu/qemu_gic.c
parentcc40f7fe017ad15884d7b7b93f9f9a702443f80b (diff)
qemu: Fix interrupt type check
Function plat_ic_get_pending_interrupt_type() should return interrupt type, not id. The function is used in aarch64 exception handling and currently the irq/fiq forwarding fails if a secure interrupt happens while running normal world. The qemu-specific gic file does not contain any extra functionality so it can be removed and common file can be used instead. fixes arm-software/tf-issues#546 Signed-off-by: Santeri Salko <santeri.salko@gmail.com>
Diffstat (limited to 'plat/qemu/qemu_gic.c')
-rw-r--r--plat/qemu/qemu_gic.c68
1 files changed, 0 insertions, 68 deletions
diff --git a/plat/qemu/qemu_gic.c b/plat/qemu/qemu_gic.c
deleted file mode 100644
index 41b5eb45..00000000
--- a/plat/qemu/qemu_gic.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <assert.h>
-#include <bl_common.h>
-#include <gicv2.h>
-#include <interrupt_mgmt.h>
-
-uint32_t plat_ic_get_pending_interrupt_id(void)
-{
- return gicv2_get_pending_interrupt_id();
-}
-
-uint32_t plat_ic_get_pending_interrupt_type(void)
-{
- return gicv2_get_pending_interrupt_type();
-}
-
-uint32_t plat_ic_acknowledge_interrupt(void)
-{
- return gicv2_acknowledge_interrupt();
-}
-
-uint32_t plat_ic_get_interrupt_type(uint32_t id)
-{
- uint32_t group;
-
- group = gicv2_get_interrupt_group(id);
-
- /* Assume that all secure interrupts are S-EL1 interrupts */
- if (!group)
- return INTR_TYPE_S_EL1;
- else
- return INTR_TYPE_NS;
-
-}
-
-void plat_ic_end_of_interrupt(uint32_t id)
-{
- gicv2_end_of_interrupt(id);
-}
-
-uint32_t plat_interrupt_type_to_line(uint32_t type,
- uint32_t security_state)
-{
- assert(type == INTR_TYPE_S_EL1 ||
- type == INTR_TYPE_EL3 ||
- type == INTR_TYPE_NS);
-
- assert(sec_state_is_valid(security_state));
-
- /* 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 using the IRQ line if the FIQ_EN
- * bit is not set else they are signalled using the FIQ line.
- */
- if (gicv2_is_fiq_enabled())
- return __builtin_ctz(SCR_FIQ_BIT);
- else
- return __builtin_ctz(SCR_IRQ_BIT);
-}
-