blob: 2cfe14a833894c06686ff005a7b517791a5ae86a [file] [log] [blame]
Andre Przywarafa914d82022-11-21 17:04:10 +00001/*
2 * Copyright (c) 2022, ARM Limited. All rights reserved.
Varun Wadekar0a46eb12023-04-13 21:06:18 +01003 * Copyright (c) 2023, NVIDIA Corporation. All rights reserved.
Andre Przywarafa914d82022-11-21 17:04:10 +00004 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 *
7 * Dispatch synchronous system register traps from lower ELs.
8 */
9
10#include <bl31/sync_handle.h>
11#include <context.h>
12
13int handle_sysreg_trap(uint64_t esr_el3, cpu_context_t *ctx)
14{
Varun Wadekar0a46eb12023-04-13 21:06:18 +010015 uint64_t __unused opcode = esr_el3 & ISS_SYSREG_OPCODE_MASK;
16
Andre Przywarabdc76f12022-11-21 17:07:25 +000017#if ENABLE_FEAT_RNG_TRAP
Varun Wadekar0a46eb12023-04-13 21:06:18 +010018 if ((opcode == ISS_SYSREG_OPCODE_RNDR) || (opcode == ISS_SYSREG_OPCODE_RNDRRS)) {
Andre Przywarabdc76f12022-11-21 17:07:25 +000019 return plat_handle_rng_trap(esr_el3, ctx);
Varun Wadekar0a46eb12023-04-13 21:06:18 +010020 }
Andre Przywarabdc76f12022-11-21 17:07:25 +000021#endif
Varun Wadekar0a46eb12023-04-13 21:06:18 +010022
23#if IMPDEF_SYSREG_TRAP
24 if ((opcode & ISS_SYSREG_OPCODE_IMPDEF) == ISS_SYSREG_OPCODE_IMPDEF) {
25 return plat_handle_impdef_trap(esr_el3, ctx);
Andre Przywarafa914d82022-11-21 17:04:10 +000026 }
Varun Wadekar0a46eb12023-04-13 21:06:18 +010027#endif
28
29 return TRAP_RET_UNHANDLED;
Andre Przywarafa914d82022-11-21 17:04:10 +000030}