1 /*
2 * Arm SCP/MCP Software
3 * Copyright (c) 2018-2021, Arm Limited and Contributors. All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8 #include "config_clock.h"
9
10 #include <mod_dvfs.h>
11 #include <mod_scmi_perf.h>
12
13 #include <fwk_element.h>
14 #include <fwk_id.h>
15 #include <fwk_macros.h>
16 #include <fwk_module.h>
17 #include <fwk_module_idx.h>
18
19 static struct mod_dvfs_opp opps[] = { {
20 .level = 1313 * 1000000UL,
21 .frequency = 1313 * FWK_KHZ,
22 .voltage = 100,
23 },
24 {
25 .level = 1531 * 1000000UL,
26 .frequency = 1531 * FWK_KHZ,
27 .voltage = 200,
28 },
29 {
30 .level = 1750 * 1000000UL,
31 .frequency = 1750 * FWK_KHZ,
32 .voltage = 300,
33 },
34 {
35 .level = 2100 * 1000000UL,
36 .frequency = 2100 * FWK_KHZ,
37 .voltage = 400,
38 },
39 {
40 .level = 2600 * 1000000UL,
41 .frequency = 2600 * FWK_KHZ,
42 .voltage = 500,
43 },
44 { 0 } };
45
46 static const struct mod_dvfs_domain_config cpu_group0 = {
47 .psu_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_PSU, 0),
48 .clock_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_IDX_CPU_GROUP0),
49 .alarm_id = FWK_ID_SUB_ELEMENT_INIT(FWK_MODULE_IDX_TIMER, 0, 0),
50 .retry_ms = 1,
51 .latency = 1200,
52 .sustained_idx = 2,
53 .opps = opps,
54 };
55
56 static const struct mod_dvfs_domain_config cpu_group1 = {
57 .psu_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_PSU, 1),
58 .clock_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CLOCK, CLOCK_IDX_CPU_GROUP1),
59 .alarm_id = FWK_ID_SUB_ELEMENT_INIT(FWK_MODULE_IDX_TIMER, 0, 1),
60 .retry_ms = 1,
61 .latency = 1200,
62 .sustained_idx = 2,
63 .opps = opps,
64 };
65
66 static const struct fwk_element element_table[] = {
67 [0] = {
68 .name = "GROUP0",
69 .data = &cpu_group0,
70 },
71 [1] = {
72 .name = "GROUP1",
73 .data = &cpu_group1,
74 },
75 { 0 }
76 };
77
dvfs_get_element_table(fwk_id_t module_id)78 static const struct fwk_element *dvfs_get_element_table(fwk_id_t module_id)
79 {
80 return element_table;
81 }
82
83 const struct fwk_module_config config_dvfs = {
84 .elements = FWK_MODULE_DYNAMIC_ELEMENTS(dvfs_get_element_table),
85 };
86