diff options
author | Santeri Salko <santeri.salko@gmail.com> | 2018-02-08 22:01:26 +0200 |
---|---|---|
committer | Santeri Salko <santeri.salko@gmail.com> | 2018-02-09 20:49:57 +0200 |
commit | 53a98be35f614caa1d2c34076b43b08d0810b6fa (patch) | |
tree | 63f8c836dc56f8149d29406912f54ae943f836fb /plat/qemu/qemu_gic.c | |
parent | cc40f7fe017ad15884d7b7b93f9f9a702443f80b (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.c | 68 |
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); -} - |