1 /*
2 * Arm SCP/MCP Software
3 * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8 #include <morello_alarm_idx.h>
9
10 #include <mod_morello_sensor.h>
11 #include <mod_sensor.h>
12 #include <mod_timer.h>
13
14 #include <fwk_element.h>
15 #include <fwk_id.h>
16 #include <fwk_module.h>
17 #include <fwk_module_idx.h>
18
19 #include <stddef.h>
20
21 /*
22 * MORELLO sensor driver config
23 */
24
25 static struct mod_sensor_info info_temp_sensor = {
26 .type = MOD_SENSOR_TYPE_DEGREES_C,
27 .update_interval = 0,
28 .update_interval_multiplier = 0,
29 .unit_multiplier = 0,
30 };
31
32 static struct mod_sensor_info info_volt_sensor = {
33 .type = MOD_SENSOR_TYPE_VOLTS,
34 .update_interval = 0,
35 .update_interval_multiplier = 0,
36 .unit_multiplier = 0,
37 };
38
39 static const struct fwk_element
40 morello_sensor_element_table[MOD_MORELLO_VOLT_SENSOR_COUNT + 1] = {
41 [MOD_MORELLO_TEMP_SENSOR_IDX_CLUSTER0] = {
42 .name = "CLUS0 Temperature",
43 .data = &((struct mod_morello_temp_sensor_config) {
44 .alarm_threshold = 70,
45 .shutdown_threshold = 80,
46 .info = &info_temp_sensor,
47 }),
48 },
49 [MOD_MORELLO_TEMP_SENSOR_IDX_CLUSTER1] = {
50 .name = "CLUS1 Temperature",
51 .data = &((struct mod_morello_temp_sensor_config) {
52 .alarm_threshold = 70,
53 .shutdown_threshold = 80,
54 .info = &info_temp_sensor,
55 }),
56 },
57 [MOD_MORELLO_TEMP_SENSOR_IDX_SYSTEM] = {
58 .name = "SYS Temperature",
59 .data = &((struct mod_morello_temp_sensor_config) {
60 .alarm_threshold = 70,
61 .shutdown_threshold = 80,
62 .info = &info_temp_sensor,
63 }),
64 },
65 [MOD_MORELLO_VOLT_SENSOR_IDX_CLUS0CORE0] = {
66 .name = "CLUS0CORE0 Voltage",
67 .data = &((struct mod_morello_volt_sensor_config) {
68 .info = &info_volt_sensor,
69 }),
70 },
71 [MOD_MORELLO_VOLT_SENSOR_IDX_CLUS0CORE1] = {
72 .name = "CLUS0CORE1 Voltage",
73 .data = &((struct mod_morello_volt_sensor_config) {
74 .info = &info_volt_sensor,
75 }),
76 },
77 [MOD_MORELLO_VOLT_SENSOR_IDX_CLUS1CORE0] = {
78 .name = "CLUS1CORE0 Voltage",
79 .data = &((struct mod_morello_volt_sensor_config) {
80 .info = &info_volt_sensor,
81 }),
82 },
83 [MOD_MORELLO_VOLT_SENSOR_IDX_CLUS1CORE1] = {
84 .name = "CLUS1CORE1 Voltage",
85 .data = &((struct mod_morello_volt_sensor_config) {
86 .info = &info_volt_sensor,
87 }),
88 },
89 [MOD_MORELLO_VOLT_SENSOR_COUNT] = { 0 },
90 };
91
get_morello_sensor_element_table(fwk_id_t id)92 static const struct fwk_element *get_morello_sensor_element_table(fwk_id_t id)
93 {
94 return morello_sensor_element_table;
95 }
96
97 struct fwk_module_config config_morello_sensor = {
98 .data =
99 &(struct mod_morello_sensor_config){
100 .alarm_id = FWK_ID_SUB_ELEMENT_INIT(
101 FWK_MODULE_IDX_TIMER,
102 0,
103 MORELLO_SENSOR_ALARM_IDX),
104 .alarm_api =
105 FWK_ID_API_INIT(FWK_MODULE_IDX_TIMER, MOD_TIMER_API_IDX_ALARM),
106 .t_sensor_count = 3,
107 .v_sensor_count = 4,
108 },
109
110 .elements = FWK_MODULE_DYNAMIC_ELEMENTS(get_morello_sensor_element_table),
111 };
112
113 /*
114 * Sensor module config
115 */
116 static const struct fwk_element
117 sensor_element_table[MOD_MORELLO_VOLT_SENSOR_COUNT + 1] = {
118 [MOD_MORELLO_TEMP_SENSOR_IDX_CLUSTER0] = {
119 .name = "CLUS0 Temperature",
120 .data = &((struct mod_sensor_dev_config) {
121 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_MORELLO_SENSOR,
122 MOD_MORELLO_TEMP_SENSOR_IDX_CLUSTER0),
123 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MORELLO_SENSOR, 0),
124 }),
125 },
126 [MOD_MORELLO_TEMP_SENSOR_IDX_CLUSTER1] = {
127 .name = "CLUS1 Temperature",
128 .data = &((struct mod_sensor_dev_config) {
129 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_MORELLO_SENSOR,
130 MOD_MORELLO_TEMP_SENSOR_IDX_CLUSTER1),
131 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MORELLO_SENSOR, 0),
132 }),
133 },
134 [MOD_MORELLO_TEMP_SENSOR_IDX_SYSTEM] = {
135 .name = "SYS Temperature",
136 .data = &((struct mod_sensor_dev_config) {
137 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_MORELLO_SENSOR,
138 MOD_MORELLO_TEMP_SENSOR_IDX_SYSTEM),
139 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MORELLO_SENSOR, 0),
140 }),
141 },
142 [MOD_MORELLO_VOLT_SENSOR_IDX_CLUS0CORE0] = {
143 .name = "CLUS0CORE0 Voltage",
144 .data = &((struct mod_sensor_dev_config) {
145 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_MORELLO_SENSOR,
146 MOD_MORELLO_VOLT_SENSOR_IDX_CLUS0CORE0),
147 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MORELLO_SENSOR, 0),
148 }),
149 },
150 [MOD_MORELLO_VOLT_SENSOR_IDX_CLUS0CORE1] = {
151 .name = "CLUS0CORE1 Voltage",
152 .data = &((struct mod_sensor_dev_config) {
153 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_MORELLO_SENSOR,
154 MOD_MORELLO_VOLT_SENSOR_IDX_CLUS0CORE1),
155 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MORELLO_SENSOR, 0),
156 }),
157 },
158 [MOD_MORELLO_VOLT_SENSOR_IDX_CLUS1CORE0] = {
159 .name = "CLUS1CORE0 Voltage",
160 .data = &((struct mod_sensor_dev_config) {
161 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_MORELLO_SENSOR,
162 MOD_MORELLO_VOLT_SENSOR_IDX_CLUS1CORE0),
163 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MORELLO_SENSOR, 0),
164 }),
165 },
166 [MOD_MORELLO_VOLT_SENSOR_IDX_CLUS1CORE1] = {
167 .name = "CLUS1CORE1 Voltage",
168 .data = &((struct mod_sensor_dev_config) {
169 .driver_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_MORELLO_SENSOR,
170 MOD_MORELLO_VOLT_SENSOR_IDX_CLUS1CORE1),
171 .driver_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_MORELLO_SENSOR, 0),
172 }),
173 },
174 [MOD_MORELLO_VOLT_SENSOR_COUNT] = { 0 },
175 };
176
get_sensor_element_table(fwk_id_t module_id)177 static const struct fwk_element *get_sensor_element_table(fwk_id_t module_id)
178 {
179 return sensor_element_table;
180 }
181
182 struct fwk_module_config config_sensor = {
183 .elements = FWK_MODULE_DYNAMIC_ELEMENTS(get_sensor_element_table),
184 };
185