blob: e38d045bc0f91f958fea3d762638c9a49aef23da [file] [log] [blame]
Javier Almansa Sobrino82cd82e2025-01-17 17:37:42 +00001/*
2 * Copyright (c) 2025, Arm Limited. All rights reserved.
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5
6#include <arch.h>
7#include <arch_helpers.h>
8#include <sync.h>
9#include <realm_helpers.h>
Javier Almansa Sobrino43ad50d2025-03-28 17:37:04 +000010#include <utils_def.h>
Javier Almansa Sobrino82cd82e2025-01-17 17:37:42 +000011
12/* Check if Realm gets undefined abort when it access MPAM registers */
13bool test_realm_mpam_undef_abort(void)
14{
Javier Almansa Sobrino43ad50d2025-03-28 17:37:04 +000015 void (*write_reg[])(u_register_t) = {write_mpam0_el1,
16 write_mpam1_el1,
17 write_mpamsm_el1,
18 write_mpamidr_el1};
19 unsigned int n_access = ARRAY_SIZE(write_reg);
20
Javier Almansa Sobrino82cd82e2025-01-17 17:37:42 +000021 realm_reset_undef_abort_count();
22
23 /* Install exception handler to catch undefined abort */
24 register_custom_sync_exception_handler(realm_sync_exception_handler);
Javier Almansa Sobrino43ad50d2025-03-28 17:37:04 +000025
26 for (unsigned int i = 0U; i < n_access; i++) {
27 write_reg[i](0UL);
28 }
29
Javier Almansa Sobrino82cd82e2025-01-17 17:37:42 +000030 unregister_custom_sync_exception_handler();
31
Javier Almansa Sobrino43ad50d2025-03-28 17:37:04 +000032 return (realm_get_undef_abort_count() == (unsigned long)n_access);
Javier Almansa Sobrino82cd82e2025-01-17 17:37:42 +000033}