1 /*
2 * Arm SCP/MCP Software
3 * Copyright (c) 2022, Arm Limited and Contributors. All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8 #include <tc0_dvfs.h>
9
10 #include <mod_tc0_power_model.h>
11 #include <mod_thermal_mgmt.h>
12
13 #include <fwk_element.h>
14 #include <fwk_id.h>
15 #include <fwk_module.h>
16
17 #include <stddef.h>
18 #include <stdint.h>
19
20 static struct mod_thermal_mgmt_actor_config actor_table_domain0[3] = {
21 [0] = {
22 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_TC0_POWER_MODEL, 0),
23 .dvfs_domain_id =
24 FWK_ID_ELEMENT_INIT(
25 FWK_MODULE_IDX_DVFS, DVFS_ELEMENT_IDX_KLEIN),
26 .weight = 100,
27 },
28 [1] = {
29 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_TC0_POWER_MODEL, 1),
30 .dvfs_domain_id =
31 FWK_ID_ELEMENT_INIT(
32 FWK_MODULE_IDX_DVFS, DVFS_ELEMENT_IDX_MATTERHORN),
33 .weight = 100,
34 },
35 [2] = {
36 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_TC0_POWER_MODEL, 2),
37 .dvfs_domain_id =
38 FWK_ID_ELEMENT_INIT(
39 FWK_MODULE_IDX_DVFS, DVFS_ELEMENT_IDX_MATTERHORN_ELP_ARM),
40 .weight = 100,
41 },
42 };
43
44 static const struct fwk_element thermal_mgmt_domains_elem_table[2] = {
45 [0] = {
46 .name = "Thermal Domain 0",
47 .data = &((struct mod_thermal_mgmt_dev_config){
48 .slow_loop_mult = 25,
49 .tdp = 10,
50 .pi_controller = {
51 .switch_on_temperature = 50,
52 .control_temperature = 60,
53 .integral_cutoff = 0,
54 .integral_max = 100,
55 .k_p_undershoot = 1,
56 .k_p_overshoot = 1,
57 .k_integral = 1,
58 },
59 .sensor_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_SENSOR, 0),
60 .driver_api_id = FWK_ID_API_INIT(
61 FWK_MODULE_IDX_TC0_POWER_MODEL,
62 MOD_TC0_POWER_MODEL_THERMAL_DRIVER_API_IDX),
63 .thermal_actors_table = actor_table_domain0,
64 .thermal_actors_count = FWK_ARRAY_SIZE(actor_table_domain0),
65 }),
66 },
67 [1] = { 0 } /* Termination description */
68 };
69
get_element_table(fwk_id_t module_id)70 static const struct fwk_element *get_element_table(fwk_id_t module_id)
71 {
72 return thermal_mgmt_domains_elem_table;
73 }
74
75 struct fwk_module_config config_thermal_mgmt = {
76 .elements = FWK_MODULE_DYNAMIC_ELEMENTS(get_element_table),
77 };
78