blob: 7f8dc152f234c13914907a23272bd46d7402908c [file] [log] [blame]
nabkah01002e5692022-10-10 12:36:46 +01001/*
AlexeiFedorov2f30f102023-03-13 19:37:46 +00002 * Copyright (c) 2022-2023, Arm Limited. All rights reserved.
nabkah01002e5692022-10-10 12:36:46 +01003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
AlexeiFedorov2f30f102023-03-13 19:37:46 +00007#include <arch_helpers.h>
nabkah01002e5692022-10-10 12:36:46 +01008#include <debug.h>
AlexeiFedorov2f30f102023-03-13 19:37:46 +00009#include <host_realm_pmu.h>
nabkah01002e5692022-10-10 12:36:46 +010010
AlexeiFedorov2f30f102023-03-13 19:37:46 +000011/* Realm interrupt handler */
nabkah01002e5692022-10-10 12:36:46 +010012void realm_interrupt_handler(void)
13{
AlexeiFedorov2f30f102023-03-13 19:37:46 +000014 /* Read INTID and acknowledge interrupt */
15 unsigned long iar1_el1 = read_icv_iar1_el1();
16
17 /* Deactivate interrupt */
18 write_icv_eoir1_el1(iar1_el1);
19
20 /* Clear PMU interrupt */
21 if (iar1_el1 == PMU_VIRQ) {
22 write_pmintenclr_el1(read_pmintenset_el1());
23 isb();
24 } else {
25 panic();
26 }
nabkah01002e5692022-10-10 12:36:46 +010027}