1 /*
2  * Arm SCP/MCP Software
3  * Copyright (c) 2019-2022, Arm Limited and Contributors. All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #include "config_juno_xrp7724.h"
9 #include "config_psu.h"
10 #include "config_sensor.h"
11 #include "juno_alarm_idx.h"
12 
13 #include <mod_juno_xrp7724.h>
14 #include <mod_psu.h>
15 #include <mod_sensor.h>
16 
17 #include <fwk_element.h>
18 #include <fwk_id.h>
19 #include <fwk_module.h>
20 #include <fwk_module_idx.h>
21 
22 enum mod_juno_xrp7724_gpio_idx  {
23     MOD_JUNO_XRP7724_GPIO_IDX_ASSERT,
24     MOD_JUNO_XRP7724_GPIO_IDX_MODE,
25     MOD_JUNO_XRP7724_GPIO_IDX_COUNT,
26 };
27 
28 /*
29  * Temperature sensor information
30  */
31 static struct mod_sensor_info juno_xrp7724_info_temperature = {
32     .type = MOD_SENSOR_TYPE_DEGREES_C,
33     .update_interval = 0,
34     .update_interval_multiplier = 0,
35     .unit_multiplier = -3,
36 };
37 
38 static const struct fwk_element juno_xrp7724_element_table[] = {
39     [MOD_JUNO_XRP7724_ELEMENT_IDX_SENSOR] = {
40         .name = "",
41         .data = &(const struct mod_juno_xrp7724_dev_config) {
42             .driver_response_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_SENSOR,
43                 MOD_JUNO_SENSOR_XRP7724_PMIC_TEMP_IDX),
44             .driver_response_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_SENSOR,
45                 MOD_SENSOR_API_IDX_DRIVER_RESPONSE),
46             .sensor_info = &juno_xrp7724_info_temperature,
47             .type = MOD_JUNO_XRP7724_ELEMENT_TYPE_SENSOR,
48         },
49     },
50     [MOD_JUNO_XRP7724_ELEMENT_IDX_GPIO] = {
51         .name = "",
52         .sub_element_count = (size_t) MOD_JUNO_XRP7724_GPIO_IDX_COUNT,
53         .data = &(const struct mod_juno_xrp7724_dev_config) {
54             .type = MOD_JUNO_XRP7724_ELEMENT_TYPE_GPIO,
55         },
56     },
57     [MOD_JUNO_XRP7724_ELEMENT_IDX_PSU_VSYS] = {
58         .name = "",
59         .data = &(const struct mod_juno_xrp7724_dev_config) {
60             .driver_response_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_PSU,
61                 MOD_PSU_ELEMENT_IDX_VSYS),
62             .driver_response_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_PSU,
63                 MOD_PSU_API_IDX_DRIVER_RESPONSE),
64             .psu_adc_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_SENSOR,
65                 MOD_JUNO_SENSOR_VOLT_SYS_IDX),
66             .psu_bus_idx = 0,
67             .type = MOD_JUNO_XRP7724_ELEMENT_TYPE_PSU,
68             .alarm_hal_id = FWK_ID_SUB_ELEMENT_INIT(FWK_MODULE_IDX_TIMER, 0,
69                 JUNO_XRP7724_ALARM_IDX_PSU_VSYS),
70         },
71     },
72     [MOD_JUNO_XRP7724_ELEMENT_IDX_PSU_VBIG] = {
73         .name = "",
74         .data = &(const struct mod_juno_xrp7724_dev_config) {
75             .driver_response_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_PSU,
76                 MOD_PSU_ELEMENT_IDX_VBIG),
77             .driver_response_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_PSU,
78                 MOD_PSU_API_IDX_DRIVER_RESPONSE),
79             .psu_adc_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_SENSOR,
80                 MOD_JUNO_SENSOR_VOLT_BIG_IDX),
81             .psu_bus_idx = 1,
82             .type = MOD_JUNO_XRP7724_ELEMENT_TYPE_PSU,
83             .alarm_hal_id = FWK_ID_SUB_ELEMENT_INIT(FWK_MODULE_IDX_TIMER, 0,
84                 JUNO_XRP7724_ALARM_IDX_PSU_VBIG),
85         },
86     },
87     [MOD_JUNO_XRP7724_ELEMENT_IDX_PSU_VLITTLE] = {
88         .name = "",
89         .data = &(const struct mod_juno_xrp7724_dev_config) {
90             .driver_response_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_PSU,
91                 MOD_PSU_ELEMENT_IDX_VLITTLE),
92             .driver_response_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_PSU,
93                 MOD_PSU_API_IDX_DRIVER_RESPONSE),
94             .psu_adc_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_SENSOR,
95                  MOD_JUNO_SENSOR_VOLT_LITTLE_IDX),
96             .psu_bus_idx = 2,
97             .type = MOD_JUNO_XRP7724_ELEMENT_TYPE_PSU,
98             .alarm_hal_id = FWK_ID_SUB_ELEMENT_INIT(FWK_MODULE_IDX_TIMER, 0,
99                 JUNO_XRP7724_ALARM_IDX_PSU_VLITTLE),
100         },
101     },
102     [MOD_JUNO_XRP7724_ELEMENT_IDX_PSU_VGPU] = {
103         .name = "",
104         .data = &(const struct mod_juno_xrp7724_dev_config) {
105             .driver_response_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_PSU,
106                 MOD_PSU_ELEMENT_IDX_VGPU),
107             .driver_response_api_id = FWK_ID_API_INIT(FWK_MODULE_IDX_PSU,
108                 MOD_PSU_API_IDX_DRIVER_RESPONSE),
109             .psu_adc_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_SENSOR,
110                 MOD_JUNO_SENSOR_VOLT_GPU_IDX),
111             .psu_bus_idx = 3,
112             .type = MOD_JUNO_XRP7724_ELEMENT_TYPE_PSU,
113             .alarm_hal_id = FWK_ID_SUB_ELEMENT_INIT(FWK_MODULE_IDX_TIMER, 0,
114                 JUNO_XRP7724_ALARM_IDX_PSU_VGPU),
115         },
116     },
117 
118     [MOD_JUNO_XRP7724_ELEMENT_IDX_COUNT] = { 0 },
119 };
120 
juno_xrp7724_get_element_table(fwk_id_t module_id)121 static const struct fwk_element *juno_xrp7724_get_element_table(
122     fwk_id_t module_id)
123 {
124     return juno_xrp7724_element_table;
125 }
126 
127 const struct fwk_module_config config_juno_xrp7724 = {
128     .data =
129         &(struct mod_juno_xrp7724_config){
130             .target_address = 0x28,
131             .i2c_hal_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_I2C, 0),
132             .timer_hal_id = FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_TIMER, 0),
133             .gpio_assert_id = FWK_ID_SUB_ELEMENT_INIT(
134                 FWK_MODULE_IDX_JUNO_XRP7724,
135                 MOD_JUNO_XRP7724_ELEMENT_IDX_GPIO,
136                 MOD_JUNO_XRP7724_GPIO_IDX_ASSERT),
137             .gpio_mode_id = FWK_ID_SUB_ELEMENT_INIT(
138                 FWK_MODULE_IDX_JUNO_XRP7724,
139                 MOD_JUNO_XRP7724_ELEMENT_IDX_GPIO,
140                 MOD_JUNO_XRP7724_GPIO_IDX_MODE),
141         },
142 
143     .elements = FWK_MODULE_DYNAMIC_ELEMENTS(juno_xrp7724_get_element_table),
144 };
145