From 53a98be35f614caa1d2c34076b43b08d0810b6fa Mon Sep 17 00:00:00 2001 From: Santeri Salko Date: Thu, 8 Feb 2018 22:01:26 +0200 Subject: 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 --- plat/qemu/qemu_gic.c | 68 ---------------------------------------------------- 1 file changed, 68 deletions(-) delete mode 100644 plat/qemu/qemu_gic.c (limited to 'plat/qemu/qemu_gic.c') 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 -#include -#include -#include - -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); -} - -- cgit v1.2.3