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