1 /*
2  * Arm SCP/MCP Software
3  * Copyright (c) 2022-2023, Arm Limited and Contributors. All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #include <mod_scmi_perf.h>
9 
10 #include <fwk_id.h>
11 #include <fwk_macros.h>
12 #include <fwk_module.h>
13 #include <fwk_module_idx.h>
14 
15 #include <stddef.h>
16 #include <stdint.h>
17 
18 #define TEST_MODULE_IDX       0x5
19 #define TEST_SCMI_AGENT_IDX_0 0x1
20 
21 #define TEST_OPP_COUNT 0x5
22 
23 enum dvfs_element_idx {
24     DVFS_ELEMENT_IDX_0,
25     DVFS_ELEMENT_IDX_1,
26     DVFS_ELEMENT_IDX_2,
27     DVFS_ELEMENT_IDX_COUNT,
28 };
29 
30 static const struct mod_scmi_perf_domain_config domains[] = {
31     [DVFS_ELEMENT_IDX_0] = {
32         .fast_channels_addr_scp =
33             (uint64_t[]){
34                 [MOD_SCMI_PERF_FAST_CHANNEL_LEVEL_GET] = 1,
35             },
36         .fast_channels_addr_ap =
37             (uint64_t[]){
38                 [MOD_SCMI_PERF_FAST_CHANNEL_LEVEL_GET] = 1,
39             },
40     },
41     [DVFS_ELEMENT_IDX_1] = {},
42     [DVFS_ELEMENT_IDX_2] = {},
43 };
44 
45 #ifdef BUILD_HAS_SCMI_PERF_PLUGIN_HANDLER
46 static const struct mod_scmi_plugin_config plugins_table[] = {
47     [0] = {
48         .id = FWK_ID_NONE_INIT,
49         .dom_type = PERF_PLUGIN_DOM_TYPE_PHYSICAL,
50     },
51 };
52 #endif
53 
54 struct fwk_module_config config_scmi_perf = {
55     .data = &((struct mod_scmi_perf_config){
56         .domains = &domains,
57         .perf_doms_count = FWK_ARRAY_SIZE(domains),
58         .fast_channels_alarm_id = FWK_ID_NONE_INIT,
59 #ifdef BUILD_HAS_SCMI_PERF_PLUGIN_HANDLER
60         .plugins = plugins_table,
61         .plugins_count = FWK_ARRAY_SIZE(plugins_table),
62 #endif
63     }),
64 };
65 
66 static const struct mod_dvfs_domain_config test_dvfs_config = {
67     .latency = 1200,
68     .sustained_idx = 2,
69     .opps =
70         (struct mod_dvfs_opp[]){
71             {
72                 .level = 100 * 1000000UL,
73                 .frequency = 101 * FWK_KHZ,
74                 .voltage = 102,
75             },
76             {
77                 .level = 200 * 1000000UL,
78                 .frequency = 201 * FWK_KHZ,
79                 .voltage = 202,
80             },
81             {
82                 .level = 300 * 1000000UL,
83                 .frequency = 301 * FWK_KHZ,
84                 .voltage = 302,
85             },
86             {
87                 .level = 400 * 1000000UL,
88                 .frequency = 401 * FWK_KHZ,
89                 .voltage = 402,
90             },
91             {
92                 .level = 500 * 1000000UL,
93                 .frequency = 501 * FWK_KHZ,
94                 .voltage = 502,
95             },
96             { 0 },
97         }
98 };
99