Skip to content

Commit 2efabc4

Browse files
committed
refactor(baremetal): isolate runtime init and platform run defaults
Move baremetal runtime-init helpers out of shared VAL headers and hide platform run-request defaults behind a baremetal accessor. This keeps VAL-facing headers focused on shared runtime APIs, removes baremetal default externs from common headers, and aligns run-request default ownership more closely with the execution-policy model without changing runtime behavior. - add acs_runtime_init.h and rename acs_common.c to acs_runtime_init.c - move baremetal-only init helper declarations out of val/include/acs_common.h - remove baremetal run-request default externs from apps/baremetal/acs.h - add pal_run_request.h for baremetal platform default access - make each target own static run-request default arrays in platform_cfg_fvp.c - expose target defaults through acs_get_platform_run_request_defaults() - update baremetal runtime init to seed run-request state from platform defaults - keep helper-only list checks local to the baremetal runtime-init unit Change-Id: I7aa53bdf394d6d17159bdfd41112d55baa707b20
1 parent 4072557 commit 2efabc4

8 files changed

Lines changed: 215 additions & 115 deletions

File tree

apps/baremetal/acs.h

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,24 +81,14 @@
8181
gating C code when included by .S files */
8282
#ifndef __ASSEMBLER__
8383
#include "val/include/rule_based_execution.h"
84+
#include "acs_runtime_init.h"
8485

8586
#define LEVEL_PRINT_FORMAT(level, filter_mode, fr_level) ((filter_mode == LVL_FILTER_FR) ? \
8687
((filter_mode == LVL_FILTER_ONLY && level == fr_level) ? \
8788
"\n Starting tests for only level FR " : "\n Starting tests for level FR ") : \
8889
((filter_mode == LVL_FILTER_ONLY) ? \
8990
"\n Starting tests for only level %2d " : "\n Starting tests for level %2d "))
9091

91-
/* Extern declarations for globals from platform_cfg_fvp.c */
92-
extern RULE_ID_e g_rule_list_arr[];
93-
extern uint32_t g_rule_count;
94-
extern RULE_ID_e g_skip_rule_list_arr[];
95-
extern uint32_t g_skip_rule_count;
96-
extern uint32_t g_execute_modules_arr[];
97-
extern uint32_t g_num_modules;
98-
extern uint32_t g_skip_modules_arr[];
99-
extern uint32_t g_num_skip_modules;
100-
extern uint32_t g_level_filter_mode;
101-
10292
/* Remaining baremetal execution globals from apps/baremetal/acs_globals.c */
10393
extern uint32_t g_el1physkip;
10494
extern uint32_t g_curr_module;
Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <stdint.h>
2020
#include <stdbool.h>
2121
#include "pal/baremetal/base/include/pal_execution_policy.h"
22+
#include "pal/baremetal/base/include/pal_run_request.h"
2223
#include "val/include/val_interface.h"
2324
#include "val/include/acs_el3_param.h"
2425
#include "val/include/rule_based_execution_enum.h"
@@ -33,21 +34,7 @@ const uint32_t acs_build_module_count =
3334
sizeof(acs_build_module_array) / sizeof(acs_build_module_array[0]);
3435
#endif
3536

36-
bool
37-
acs_is_module_enabled(uint32_t module_base)
38-
{
39-
const acs_run_request_t *ctx = acs_get_run_request();
40-
41-
/* Runtime / EL3 / CLI override has highest priority */
42-
if (ctx->num_modules) {
43-
return acs_list_contains(ctx->execute_modules, ctx->num_modules, module_base);
44-
}
45-
/* No overrides: enable everything */
46-
(void)module_base;
47-
return true;
48-
}
49-
50-
bool
37+
static bool
5138
acs_list_contains(const uint32_t *list, uint32_t count, uint32_t value)
5239
{
5340
uint32_t i;
@@ -63,6 +50,20 @@ acs_list_contains(const uint32_t *list, uint32_t count, uint32_t value)
6350
return false;
6451
}
6552

53+
bool
54+
acs_is_module_enabled(uint32_t module_base)
55+
{
56+
const acs_run_request_t *ctx = acs_get_run_request();
57+
58+
/* Runtime / EL3 / CLI override has highest priority */
59+
if (ctx->num_modules) {
60+
return acs_list_contains(ctx->execute_modules, ctx->num_modules, module_base);
61+
}
62+
/* No overrides: enable everything */
63+
(void)module_base;
64+
return true;
65+
}
66+
6667
void
6768
acs_load_execution_policy_defaults(acs_execution_policy_t *policy)
6869
{
@@ -117,9 +118,15 @@ acs_load_execution_policy_defaults(acs_execution_policy_t *policy)
117118
void
118119
acs_load_run_request_defaults(acs_run_request_t *ctx)
119120
{
121+
const acs_platform_run_request_defaults_t *platform_defaults;
122+
120123
if (ctx == NULL)
121124
return;
122125

126+
/*
127+
* Seed the detached/shared request directly to keep the baremetal path
128+
* freestanding and avoid aggregate-copy codegen pulling in memcpy().
129+
*/
123130
ctx->rule_list = NULL;
124131
ctx->rule_count = 0;
125132
ctx->skip_rule_list = NULL;
@@ -129,29 +136,35 @@ acs_load_run_request_defaults(acs_run_request_t *ctx)
129136
ctx->skip_modules = NULL;
130137
ctx->num_skip_modules = 0;
131138
ctx->arch_selection = ARCH_NONE;
132-
ctx->level_filter_mode = g_level_filter_mode;
139+
ctx->level_filter_mode = LVL_FILTER_NONE;
133140
ctx->level_value = 0;
134141
ctx->bsa_sw_view_mask = 0;
135142
ctx->rule_list_owned = false;
136143
ctx->skip_rule_list_owned = false;
137144
ctx->execute_modules_owned = false;
138145
ctx->skip_modules_owned = false;
139146

140-
if (g_rule_count) {
141-
ctx->rule_list = g_rule_list_arr;
142-
ctx->rule_count = g_rule_count;
147+
platform_defaults = acs_get_platform_run_request_defaults();
148+
if (platform_defaults == NULL)
149+
return;
150+
151+
ctx->level_filter_mode = platform_defaults->level_filter_mode;
152+
153+
if (platform_defaults->rule_count != 0u) {
154+
ctx->rule_list = platform_defaults->rule_list;
155+
ctx->rule_count = platform_defaults->rule_count;
143156
}
144-
if (g_skip_rule_count) {
145-
ctx->skip_rule_list = g_skip_rule_list_arr;
146-
ctx->skip_rule_count = g_skip_rule_count;
157+
if (platform_defaults->skip_rule_count != 0u) {
158+
ctx->skip_rule_list = platform_defaults->skip_rule_list;
159+
ctx->skip_rule_count = platform_defaults->skip_rule_count;
147160
}
148-
if (g_num_modules) {
149-
ctx->execute_modules = g_execute_modules_arr;
150-
ctx->num_modules = g_num_modules;
161+
if (platform_defaults->num_modules != 0u) {
162+
ctx->execute_modules = platform_defaults->execute_modules;
163+
ctx->num_modules = platform_defaults->num_modules;
151164
}
152-
if (g_num_skip_modules) {
153-
ctx->skip_modules = g_skip_modules_arr;
154-
ctx->num_skip_modules = g_num_skip_modules;
165+
if (platform_defaults->num_skip_modules != 0u) {
166+
ctx->skip_modules = platform_defaults->skip_modules;
167+
ctx->num_skip_modules = platform_defaults->num_skip_modules;
155168
}
156169
}
157170

apps/baremetal/acs_runtime_init.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/** @file
2+
* Copyright (c) 2026, Arm Limited or its affiliates. All rights reserved.
3+
* SPDX-License-Identifier : Apache-2.0
4+
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
**/
17+
18+
#ifndef __ACS_RUNTIME_INIT_H__
19+
#define __ACS_RUNTIME_INIT_H__
20+
21+
#include "acs_execution_policy.h"
22+
#include "acs_run_request.h"
23+
24+
void acs_load_run_request_defaults(acs_run_request_t *ctx);
25+
void acs_load_execution_policy_defaults(acs_execution_policy_t *policy);
26+
void acs_apply_el3_params(acs_run_request_t *ctx, acs_execution_policy_t *policy);
27+
bool acs_is_module_enabled(uint32_t module_base);
28+
void acs_apply_compile_params(acs_run_request_t *ctx, acs_execution_policy_t *policy);
29+
30+
#endif /* __ACS_RUNTIME_INIT_H__ */
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/** @file
2+
* Copyright (c) 2026, Arm Limited or its affiliates. All rights reserved.
3+
* SPDX-License-Identifier : Apache-2.0
4+
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
**/
17+
18+
#ifndef __PAL_RUN_REQUEST_H__
19+
#define __PAL_RUN_REQUEST_H__
20+
21+
#include <stdint.h>
22+
23+
#include "rule_based_execution_enum.h"
24+
25+
/*
26+
* Target-owned baremetal run-request defaults. These are borrowed/static
27+
* inputs used to seed the mutable shared run request before compile-time or
28+
* EL3 overrides are applied.
29+
*/
30+
typedef struct {
31+
RULE_ID_e *rule_list;
32+
uint32_t rule_count;
33+
RULE_ID_e *skip_rule_list;
34+
uint32_t skip_rule_count;
35+
uint32_t *execute_modules;
36+
uint32_t num_modules;
37+
uint32_t *skip_modules;
38+
uint32_t num_skip_modules;
39+
uint32_t level_filter_mode; /* LEVEL_FILTER_MODE_e */
40+
} acs_platform_run_request_defaults_t;
41+
42+
const acs_platform_run_request_defaults_t *acs_get_platform_run_request_defaults(void);
43+
44+
#endif /* __PAL_RUN_REQUEST_H__ */

pal/baremetal/target/RDN2/src/platform_cfg_fvp.c

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,52 +16,62 @@
1616
**/
1717

1818
#include "pal_common_support.h"
19+
#include "pal_run_request.h"
1920
#include "platform_override_struct.h"
2021
#include "rule_based_execution_enum.h"
2122

2223
/* Following global variables can be edited by user before compilation to pass hints to framework
2324
as well as run compliance against subset of rules.
2425
2526
Partner fill-in guide :
26-
- g_rule_list_arr: Explicit list of rule IDs (RULE_ID_e) to execute. Leave empty for default
27-
rule checklist.
27+
- platform_rule_list_arr: Explicit list of rule IDs (RULE_ID_e) to execute. Leave empty for
28+
the default rule checklist.
2829
Example entries: B_PE_01, S_L3PE_02, P_L1PE_01, B_GIC_03, ...
2930
Refer sysarch-acs/val/include/rule_based_execution_enum.h for valid enums.
3031
31-
- g_skip_rule_list_arr: Rules (RULE_ID_e) to skip.
32-
These take precedence over selections via g_rule_list_arr or module filters.
32+
- platform_skip_rule_list_arr: Rules (RULE_ID_e) to skip.
33+
These take precedence over selections via platform_rule_list_arr or module filters.
3334
Example entries: B_PE_01, S_L3PE_02, P_L1PE_01, B_GIC_03, ...
3435
Refer sysarch-acs/val/include/rule_based_execution_enum.h for valid enums.
3536
36-
- g_execute_modules_arr: Modules to include (values from MODULE_NAME_e: PE, GIC, SMMU,
37+
- platform_execute_modules_arr: Modules to include (values from MODULE_NAME_e: PE, GIC, SMMU,
3738
TIMER, PERIPHERAL, RAS, WATCHDOG, PCIE, MPAM, ETE, TPM, etc.). If non-empty, only
3839
rules belonging to these modules will run.
3940
Refer sysarch-acs/val/include/rule_based_execution_enum.h for valid enums.
4041
41-
- g_skip_modules_arr: Modules (MODULE_NAME_e) to exclude from execution.
42+
- platform_skip_modules_arr: Modules (MODULE_NAME_e) to exclude from execution.
43+
44+
- g_platform_run_request_defaults.level_filter_mode: Default baremetal level filtering mode.
4245
4346
Notes:
4447
- Counts are auto-derived via sizeof; no sentinel terminators are required.
4548
- If both include and skip specify the same module/rule, skip wins.
4649
*/
47-
RULE_ID_e g_rule_list_arr[] = {} ;
48-
uint32_t g_rule_count = sizeof(g_rule_list_arr)/sizeof(g_rule_list_arr[0]);
49-
50-
RULE_ID_e g_skip_rule_list_arr[] = {};
51-
uint32_t g_skip_rule_count = sizeof(g_skip_rule_list_arr)/sizeof(g_skip_rule_list_arr[0]);
52-
53-
uint32_t g_execute_modules_arr[] = {};
54-
uint32_t g_num_modules = sizeof(g_execute_modules_arr)/sizeof(g_execute_modules_arr[0]);
55-
56-
uint32_t g_skip_modules_arr[] = {};
57-
uint32_t g_num_skip_modules = sizeof(g_skip_modules_arr)/sizeof(g_skip_modules_arr[0]);
50+
static RULE_ID_e platform_rule_list_arr[] = {};
51+
static RULE_ID_e platform_skip_rule_list_arr[] = {};
52+
static uint32_t platform_execute_modules_arr[] = {};
53+
static uint32_t platform_skip_modules_arr[] = {};
54+
55+
static const acs_platform_run_request_defaults_t g_platform_run_request_defaults = {
56+
.rule_list = platform_rule_list_arr,
57+
.rule_count = sizeof(platform_rule_list_arr) / sizeof(platform_rule_list_arr[0]),
58+
.skip_rule_list = platform_skip_rule_list_arr,
59+
.skip_rule_count = sizeof(platform_skip_rule_list_arr) /
60+
sizeof(platform_skip_rule_list_arr[0]),
61+
.execute_modules = platform_execute_modules_arr,
62+
.num_modules = sizeof(platform_execute_modules_arr) /
63+
sizeof(platform_execute_modules_arr[0]),
64+
.skip_modules = platform_skip_modules_arr,
65+
.num_skip_modules = sizeof(platform_skip_modules_arr) /
66+
sizeof(platform_skip_modules_arr[0]),
67+
.level_filter_mode = LVL_FILTER_MAX,
68+
};
5869

59-
/* The Baremetal app supports three filtering modes
60-
LVL_FILTER_MAX, run rules with level <= selected level
61-
LVL_FILTER_ONLY, run rules with level == selected level
62-
LVL_FILTER_FR run rules with level <= *_LEVEL_FR
63-
*/
64-
uint32_t g_level_filter_mode = LVL_FILTER_MAX; /* Default set to LVL_FILTER_MAX */
70+
const acs_platform_run_request_defaults_t *
71+
acs_get_platform_run_request_defaults(void)
72+
{
73+
return &g_platform_run_request_defaults;
74+
}
6575

6676
/*
6777
* Platform execution-policy defaults overlaid on top of the generic runtime

pal/baremetal/target/RDV3/src/platform_cfg_fvp.c

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,52 +16,62 @@
1616
**/
1717

1818
#include "pal_common_support.h"
19+
#include "pal_run_request.h"
1920
#include "platform_override_struct.h"
2021
#include "rule_based_execution_enum.h"
2122

2223
/* Following global variables can be edited by user before compilation to pass hints to framework
2324
as well as run compliance against subset of rules.
2425
2526
Partner fill-in guide :
26-
- g_rule_list_arr: Explicit list of rule IDs (RULE_ID_e) to execute. Leave empty for default
27-
rule checklist.
27+
- platform_rule_list_arr: Explicit list of rule IDs (RULE_ID_e) to execute. Leave empty for
28+
the default rule checklist.
2829
Example entries: B_PE_01, S_L3PE_02, P_L1PE_01, B_GIC_03, ...
2930
Refer sysarch-acs/val/include/rule_based_execution_enum.h for valid enums.
3031
31-
- g_skip_rule_list_arr: Rules (RULE_ID_e) to skip.
32-
These take precedence over selections via g_rule_list_arr or module filters.
32+
- platform_skip_rule_list_arr: Rules (RULE_ID_e) to skip.
33+
These take precedence over selections via platform_rule_list_arr or module filters.
3334
Example entries: B_PE_01, S_L3PE_02, P_L1PE_01, B_GIC_03, ...
3435
Refer sysarch-acs/val/include/rule_based_execution_enum.h for valid enums.
3536
36-
- g_execute_modules_arr: Modules to include (values from MODULE_NAME_e: PE, GIC, SMMU,
37+
- platform_execute_modules_arr: Modules to include (values from MODULE_NAME_e: PE, GIC, SMMU,
3738
TIMER, PERIPHERAL, RAS, WATCHDOG, PCIE, MPAM, ETE, TPM, etc.). If non-empty, only
3839
rules belonging to these modules will run.
3940
Refer sysarch-acs/val/include/rule_based_execution_enum.h for valid enums.
4041
41-
- g_skip_modules_arr: Modules (MODULE_NAME_e) to exclude from execution.
42+
- platform_skip_modules_arr: Modules (MODULE_NAME_e) to exclude from execution.
43+
44+
- g_platform_run_request_defaults.level_filter_mode: Default baremetal level filtering mode.
4245
4346
Notes:
4447
- Counts are auto-derived via sizeof; no sentinel terminators are required.
4548
- If both include and skip specify the same module/rule, skip wins.
4649
*/
47-
RULE_ID_e g_rule_list_arr[] = {} ;
48-
uint32_t g_rule_count = sizeof(g_rule_list_arr)/sizeof(g_rule_list_arr[0]);
49-
50-
RULE_ID_e g_skip_rule_list_arr[] = {};
51-
uint32_t g_skip_rule_count = sizeof(g_skip_rule_list_arr)/sizeof(g_skip_rule_list_arr[0]);
52-
53-
uint32_t g_execute_modules_arr[] = {};
54-
uint32_t g_num_modules = sizeof(g_execute_modules_arr)/sizeof(g_execute_modules_arr[0]);
55-
56-
uint32_t g_skip_modules_arr[] = {};
57-
uint32_t g_num_skip_modules = sizeof(g_skip_modules_arr)/sizeof(g_skip_modules_arr[0]);
50+
static RULE_ID_e platform_rule_list_arr[] = {};
51+
static RULE_ID_e platform_skip_rule_list_arr[] = {};
52+
static uint32_t platform_execute_modules_arr[] = {};
53+
static uint32_t platform_skip_modules_arr[] = {};
54+
55+
static const acs_platform_run_request_defaults_t g_platform_run_request_defaults = {
56+
.rule_list = platform_rule_list_arr,
57+
.rule_count = sizeof(platform_rule_list_arr) / sizeof(platform_rule_list_arr[0]),
58+
.skip_rule_list = platform_skip_rule_list_arr,
59+
.skip_rule_count = sizeof(platform_skip_rule_list_arr) /
60+
sizeof(platform_skip_rule_list_arr[0]),
61+
.execute_modules = platform_execute_modules_arr,
62+
.num_modules = sizeof(platform_execute_modules_arr) /
63+
sizeof(platform_execute_modules_arr[0]),
64+
.skip_modules = platform_skip_modules_arr,
65+
.num_skip_modules = sizeof(platform_skip_modules_arr) /
66+
sizeof(platform_skip_modules_arr[0]),
67+
.level_filter_mode = LVL_FILTER_MAX,
68+
};
5869

59-
/* The Baremetal app supports three filtering modes
60-
LVL_FILTER_MAX, run rules with level <= selected level
61-
LVL_FILTER_ONLY, run rules with level == selected level
62-
LVL_FILTER_FR run rules with level <= *_LEVEL_FR
63-
*/
64-
uint32_t g_level_filter_mode = LVL_FILTER_MAX; /* Default set to LVL_FILTER_MAX */
70+
const acs_platform_run_request_defaults_t *
71+
acs_get_platform_run_request_defaults(void)
72+
{
73+
return &g_platform_run_request_defaults;
74+
}
6575

6676
/*
6777
* Platform execution-policy defaults overlaid on top of the generic runtime

0 commit comments

Comments
 (0)