OpenBIC
OpenSource Bridge-IC
plat_pldm_sensor.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef PLAT_PLDM_SENSOR_H
18#define PLAT_PLDM_SENSOR_H
19
20#include "pdr.h"
21#include "sensor.h"
22#define ADDR_UNKNOWN (0xFF >> 1)
23
24/* Define sensors address(7 bit) */
25#define UBC1_ADDR (0x28 >> 1) // 0x14 (7 bit)
26#define UBC1_2ND_ADDR (0x3E >> 1) // 0x1f (7 bit)
27#define UBC2_ADDR (0x34 >> 1)
28
29#define TOP_INLET_TEMP_ADDR (0x92 >> 1)
30#define TOP_OUTLET_TEMP_ADDR (0x9E >> 1)
31#define BOT_INLET_TEMP_ADDR (0x94 >> 1)
32#define BOT_OUTLET_TEMP_ADDR (0X96 >> 1)
33
34#define ASIC_DIE_ATH_SENSOR_0_TEMP_TMP432_ADDR (0X98 >> 1)
35#define ASIC_DIE_ATH_SENSOR_1_TEMP_TMP432_ADDR (0X9A >> 1)
36#define ASIC_DIE_N_OWL_TEMP_TMP432_ADDR (0X98 >> 1)
37#define ASIC_DIE_S_OWL_TEMP_TMP432_ADDR (0X9A >> 1)
38
39#define ASIC_DIE_ATH_SENSOR_0_TEMP_EMC1413_ADDR (0XB8 >> 1)
40#define ASIC_DIE_ATH_SENSOR_1_TEMP_EMC1413_ADDR (0X38 >> 1)
41#define ASIC_DIE_N_OWL_TEMP_EMC1413_ADDR (0XB8 >> 1)
42#define ASIC_DIE_S_OWL_TEMP_EMC1413_ADDR (0X38 >> 1)
43
44#define VR_P3V3_MP2971_ADDR (0xF6 >> 1)
45#define VR_P3V3_MP2971_FAB3_ADDR (0xD6 >> 1) // Change to 0xD6 at FAB3 board
46#define VR_P3V3_ISL69260_ADDR (0xC0 >> 1)
47
48#define VR_ASIC_P0V85_PVDD_MP2891_ADDR (0x4C >> 1)
49#define VR_ASIC_P0V85_PVDD_RAA228238_ADDR (0xE4 >> 1)
50
51#define VR_ASIC_P0V75_PVDD_CH_N_MP2971_ADDR (0xE0 >> 1)
52#define VR_ASIC_P0V75_PVDD_CH_N_ISL69260_ADDR (0xC0 >> 1)
53
54#define VR_ASIC_P0V75_MAX_PHY_N_MP2971_ADDR (0xE0 >> 1)
55#define VR_ASIC_P0V75_MAX_PHY_N_ISL69260_ADDR (0xC0 >> 1)
56
57#define VR_ASIC_P0V75_PVDD_CH_S_MP2971_ADDR (0xE2 >> 1)
58#define VR_ASIC_P0V75_PVDD_CH_S_ISL69260_ADDR (0xC2 >> 1)
59
60#define VR_ASIC_P0V75_MAX_PHY_S_MP2971_ADDR (0xE2 >> 1)
61#define VR_ASIC_P0V75_MAX_PHY_S_ISL69260_ADDR (0xC2 >> 1)
62
63#define VR_ASIC_P0V75_TRVDD_ZONEA_MP2971_ADDR (0xE6 >> 1)
64#define VR_ASIC_P0V75_TRVDD_ZONEA_ISL69260_ADDR (0xC4 >> 1)
65
66#define VR_ASIC_P1V8_VPP_HBM0_HBM2_HBM4_MP2971_ADDR (0xE6 >> 1)
67#define VR_ASIC_P1V8_VPP_HBM0_HBM2_HBM4_ISL69260_ADDR (0xC4 >> 1)
68
69#define VR_ASIC_P0V75_TRVDD_ZONEB_MP2971_ADDR (0xEC >> 1)
70#define VR_ASIC_P0V75_TRVDD_ZONEB_ISL69260_ADDR (0xC6 >> 1)
71
72#define VR_ASIC_P0V4_VDDQL_HBM0_HBM2_HBM4_MP2971_ADDR (0xEC >> 1)
73#define VR_ASIC_P0V4_VDDQL_HBM0_HBM2_HBM4_ISL69260_ADDR (0xC6 >> 1)
74
75#define VR_ASIC_P1V1_VDDC_HBM0_HBM2_HBM4_MP2971_ADDR (0xEA >> 1)
76#define VR_ASIC_P1V1_VDDC_HBM0_HBM2_HBM4_ISL69260_ADDR (0xE8 >> 1)
77
78#define VR_ASIC_P0V75_VDDPHY_HBM0_HBM2_HBM4_MP2971_ADDR (0xEA >> 1)
79#define VR_ASIC_P0V75_VDDPHY_HBM0_HBM2_HBM4_ISL69260_ADDR (0xE8 >> 1)
80
81#define VR_ASIC_P0V9_TRVDD_ZONEA_MP2971_ADDR (0xE4 >> 1)
82#define VR_ASIC_P0V9_TRVDD_ZONEA_ISL69260_ADDR (0xC0 >> 1)
83
84#define VR_ASIC_P1V8_VPP_HBM1_HBM3_HBM5_MP2971_ADDR (0xE4 >> 1)
85#define VR_ASIC_P1V8_VPP_HBM1_HBM3_HBM5_ISL69260_ADDR (0xC0 >> 1)
86
87#define VR_ASIC_P0V9_TRVDD_ZONEB_MP2971_ADDR (0xE8 >> 1)
88#define VR_ASIC_P0V9_TRVDD_ZONEB_ISL69260_ADDR (0xC2 >> 1)
89
90#define VR_ASIC_P0V4_VDDQL_HBM1_HBM3_HBM5_MP2971_ADDR (0xE8 >> 1)
91#define VR_ASIC_P0V4_VDDQL_HBM1_HBM3_HBM5_ISL69260_ADDR (0xC2 >> 1)
92
93#define VR_ASIC_P1V1_VDDC_HBM1_HBM3_HBM5_MP2971_ADDR (0xEE >> 1)
94#define VR_ASIC_P1V1_VDDC_HBM1_HBM3_HBM5_ISL69260_ADDR (0xC4 >> 1)
95
96#define VR_ASIC_P0V75_VDDPHY_HBM1_HBM3_HBM5_MP2971_ADDR (0xEE >> 1)
97#define VR_ASIC_P0V75_VDDPHY_HBM1_HBM3_HBM5_ISL69260_ADDR (0xC4 >> 1)
98
99#define VR_ASIC_P0V8_VDDA_PCIE_MP2971_ADDR (0xF2 >> 1)
100#define VR_ASIC_P0V8_VDDA_PCIE_MP2971_FAB3_ADDR (0xD2 >> 1) // Change to 0xD2 at FAB3 board
101#define VR_ASIC_P0V8_VDDA_PCIE_ISL69260_ADDR (0xC6 >> 1)
102
103#define VR_ASIC_P1V2_VDDHTX_PCIE_MP2971_ADDR (0xF2 >> 1)
104#define VR_ASIC_P1V2_VDDHTX_PCIE_MP2971_FAB3_ADDR (0xD2 >> 1) // Change to 0xD2 at FAB3 board
105#define VR_ASIC_P1V2_VDDHTX_PCIE_ISL69260_ADDR (0xC6 >> 1)
106
107/* Define the sensor numbers used in this platform */
108#define UBC1_P12V_TEMP_C 0x01
109#define UBC1_P50V_INPUT_VOLT_V 0x02
110#define UBC1_P12V_OUTPUT_VOLT_V 0x03
111#define UBC1_P12V_CURR_A 0x04
112#define UBC1_P12V_PWR_W 0x05
113
114#define UBC2_P12V_TEMP_C 0x06
115#define UBC2_P50V_INPUT_VOLT_V 0x07
116#define UBC2_P12V_OUTPUT_VOLT_V 0x08
117#define UBC2_P12V_CURR_A 0x09
118#define UBC2_P12V_PWR_W 0x0A
119
120#define TOP_INLET_TEMP_C 0x0B
121#define TOP_OUTLET_TEMP_C 0x0C
122#define BOT_INLET_TEMP_C 0x0D
123#define BOT_OUTLET_TEMP_C 0x0E
124#define ASIC_DIE_ATH_SENSOR_0_TEMP_C 0x0F
125#define ASIC_DIE_ATH_SENSOR_1_TEMP_C 0x10
126#define ASIC_DIE_N_OWL_TEMP_C 0x11
127#define ASIC_DIE_S_OWL_TEMP_C 0x12
128
129#define VR_P3V3_TEMP_C 0x13
130#define VR_P3V3_VOLT_V 0x14
131#define VR_P3V3_CURR_A 0x15
132#define VR_P3V3_PWR_W 0x16
133
134#define VR_ASIC_P0V85_PVDD_TEMP_C 0x17
135#define VR_ASIC_P0V85_PVDD_VOLT_V 0x18
136#define VR_ASIC_P0V85_PVDD_CURR_A 0x19
137#define VR_ASIC_P0V85_PVDD_PWR_W 0x1A
138
139#define VR_ASIC_P0V75_PVDD_CH_N_TEMP_C 0x1B
140#define VR_ASIC_P0V75_PVDD_CH_N_VOLT_V 0x1C
141#define VR_ASIC_P0V75_PVDD_CH_N_CURR_A 0x1D
142#define VR_ASIC_P0V75_PVDD_CH_N_PWR_W 0x1E
143#define VR_ASIC_P0V75_MAX_PHY_N_TEMP_C 0x1F
144#define VR_ASIC_P0V75_MAX_PHY_N_VOLT_V 0x20
145#define VR_ASIC_P0V75_MAX_PHY_N_CURR_A 0x21
146#define VR_ASIC_P0V75_MAX_PHY_N_PWR_W 0x22
147
148#define VR_ASIC_P0V75_PVDD_CH_S_TEMP_C 0x23
149#define VR_ASIC_P0V75_PVDD_CH_S_VOLT_V 0x24
150#define VR_ASIC_P0V75_PVDD_CH_S_CURR_A 0x25
151#define VR_ASIC_P0V75_PVDD_CH_S_PWR_W 0x26
152#define VR_ASIC_P0V75_MAX_PHY_S_TEMP_C 0x27
153#define VR_ASIC_P0V75_MAX_PHY_S_VOLT_V 0x28
154#define VR_ASIC_P0V75_MAX_PHY_S_CURR_A 0x29
155#define VR_ASIC_P0V75_MAX_PHY_S_PWR_W 0x2A
156
157#define VR_ASIC_P0V75_TRVDD_ZONEA_TEMP_C 0x2B
158#define VR_ASIC_P0V75_TRVDD_ZONEA_VOLT_V 0x2C
159#define VR_ASIC_P0V75_TRVDD_ZONEA_CURR_A 0x2D
160#define VR_ASIC_P0V75_TRVDD_ZONEA_PWR_W 0x2E
161#define VR_ASIC_P1V8_VPP_HBM0_HBM2_HBM4_TEMP_C 0x2F
162#define VR_ASIC_P1V8_VPP_HBM0_HBM2_HBM4_VOLT_V 0x30
163#define VR_ASIC_P1V8_VPP_HBM0_HBM2_HBM4_CURR_A 0x31
164#define VR_ASIC_P1V8_VPP_HBM0_HBM2_HBM4_PWR_W 0x32
165
166#define VR_ASIC_P0V75_TRVDD_ZONEB_TEMP_C 0x33
167#define VR_ASIC_P0V75_TRVDD_ZONEB_VOLT_V 0x34
168#define VR_ASIC_P0V75_TRVDD_ZONEB_CURR_A 0x35
169#define VR_ASIC_P0V75_TRVDD_ZONEB_PWR_W 0x36
170#define VR_ASIC_P0V4_VDDQL_HBM0_HBM2_HBM4_TEMP_C 0x37
171#define VR_ASIC_P0V4_VDDQL_HBM0_HBM2_HBM4_VOLT_V 0x38
172#define VR_ASIC_P0V4_VDDQL_HBM0_HBM2_HBM4_CURR_A 0x39
173#define VR_ASIC_P0V4_VDDQL_HBM0_HBM2_HBM4_PWR_W 0x3A
174
175#define VR_ASIC_P1V1_VDDC_HBM0_HBM2_HBM4_TEMP_C 0x3B
176#define VR_ASIC_P1V1_VDDC_HBM0_HBM2_HBM4_VOLT_V 0x3C
177#define VR_ASIC_P1V1_VDDC_HBM0_HBM2_HBM4_CURR_A 0x3D
178#define VR_ASIC_P1V1_VDDC_HBM0_HBM2_HBM4_PWR_W 0x3E
179#define VR_ASIC_P0V75_VDDPHY_HBM0_HBM2_HBM4_TEMP_C 0x3F
180#define VR_ASIC_P0V75_VDDPHY_HBM0_HBM2_HBM4_VOLT_V 0x40
181#define VR_ASIC_P0V75_VDDPHY_HBM0_HBM2_HBM4_CURR_A 0x41
182#define VR_ASIC_P0V75_VDDPHY_HBM0_HBM2_HBM4_PWR_W 0x42
183
184#define VR_ASIC_P0V9_TRVDD_ZONEA_TEMP_C 0x43
185#define VR_ASIC_P0V9_TRVDD_ZONEA_VOLT_V 0x44
186#define VR_ASIC_P0V9_TRVDD_ZONEA_CURR_A 0x45
187#define VR_ASIC_P0V9_TRVDD_ZONEA_PWR_W 0x46
188#define VR_ASIC_P1V8_VPP_HBM1_HBM3_HBM5_TEMP_C 0x47
189#define VR_ASIC_P1V8_VPP_HBM1_HBM3_HBM5_VOLT_V 0x48
190#define VR_ASIC_P1V8_VPP_HBM1_HBM3_HBM5_CURR_A 0x49
191#define VR_ASIC_P1V8_VPP_HBM1_HBM3_HBM5_PWR_W 0x4A
192
193#define VR_ASIC_P0V9_TRVDD_ZONEB_TEMP_C 0x4B
194#define VR_ASIC_P0V9_TRVDD_ZONEB_VOLT_V 0x4C
195#define VR_ASIC_P0V9_TRVDD_ZONEB_CURR_A 0x4D
196#define VR_ASIC_P0V9_TRVDD_ZONEB_PWR_W 0x4E
197#define VR_ASIC_P0V4_VDDQL_HBM1_HBM3_HBM5_TEMP_C 0x4F
198#define VR_ASIC_P0V4_VDDQL_HBM1_HBM3_HBM5_VOLT_V 0x50
199#define VR_ASIC_P0V4_VDDQL_HBM1_HBM3_HBM5_CURR_A 0x51
200#define VR_ASIC_P0V4_VDDQL_HBM1_HBM3_HBM5_PWR_W 0x52
201
202#define VR_ASIC_P1V1_VDDC_HBM1_HBM3_HBM5_TEMP_C 0x53
203#define VR_ASIC_P1V1_VDDC_HBM1_HBM3_HBM5_VOLT_V 0x54
204#define VR_ASIC_P1V1_VDDC_HBM1_HBM3_HBM5_CURR_A 0x55
205#define VR_ASIC_P1V1_VDDC_HBM1_HBM3_HBM5_PWR_W 0x56
206#define VR_ASIC_P0V75_VDDPHY_HBM1_HBM3_HBM5_TEMP_C 0x57
207#define VR_ASIC_P0V75_VDDPHY_HBM1_HBM3_HBM5_VOLT_V 0x58
208#define VR_ASIC_P0V75_VDDPHY_HBM1_HBM3_HBM5_CURR_A 0x59
209#define VR_ASIC_P0V75_VDDPHY_HBM1_HBM3_HBM5_PWR_W 0x5A
210
211#define VR_ASIC_P0V8_VDDA_PCIE_TEMP_C 0x5B
212#define VR_ASIC_P0V8_VDDA_PCIE_VOLT_V 0x5C
213#define VR_ASIC_P0V8_VDDA_PCIE_CURR_A 0x5D
214#define VR_ASIC_P0V8_VDDA_PCIE_PWR_W 0x5E
215#define VR_ASIC_P1V2_VDDHTX_PCIE_TEMP_C 0x5F
216#define VR_ASIC_P1V2_VDDHTX_PCIE_VOLT_V 0x60
217#define VR_ASIC_P1V2_VDDHTX_PCIE_CURR_A 0x61
218#define VR_ASIC_P1V2_VDDHTX_PCIE_PWR_W 0x62
219
220#define PLAT_SENSOR_NUM_MAX 0x63 //Change if there is new sensor
221
222#define TMP75_TEMP_OFFSET 0x00
223#define UPDATE_INTERVAL_1S 1
224#define UPDATE_INTERVAL_5S 5
225#define UPDATE_INTERVAL_60S 60
226
227#define ATH_VDD_INTERVAL_MS 10 // 10 ms
228
236};
237
241};
242
243int plat_pldm_sensor_get_sensor_count(int thread_id);
247uint8_t plat_pldm_sensor_get_vr_dev(uint8_t *vr_dev);
252bool is_dc_access(uint8_t sensor_num);
261bool is_ubc_access(uint8_t sensor_num);
262bool is_temp_access(uint8_t cfg_idx);
263bool is_vr_access(uint8_t sensor_num);
264bool get_sensor_info_by_sensor_id(uint8_t sensor_id, uint8_t *vr_bus, uint8_t *vr_addr,
265 uint8_t *sensor_dev);
266bool is_osfp_3v3_access(uint8_t sensor_num);
267size_t char16_strlen(const char16_t *str);
268char16_t *char16_strcpy(char16_t *dest, const char16_t *src);
270
271#endif
uint_least16_t char16_t
Definition: libutil.h:86
GET_VR_DEV_STATUS
Definition: plat_pldm_sensor.h:238
@ GET_VR_DEV_FAILED
Definition: plat_pldm_sensor.h:240
@ GET_VR_DEV_SUCCESS
Definition: plat_pldm_sensor.h:239
bool get_plat_sensor_vr_polling_enable_flag()
Definition: plat_pldm_sensor.c:9959
int plat_pldm_sensor_get_sensor_count(int thread_id)
Definition: plat_pldm_sensor.c:9234
bool is_vr_access(uint8_t sensor_num)
Definition: plat_pldm_sensor.c:9979
bool is_osfp_3v3_access(uint8_t sensor_num)
Definition: plat_pldm_sensor.c:10114
char16_t * char16_strcat_char(char16_t *dest)
Definition: plat_pldm_sensor.c:9370
bool is_ubc_access(uint8_t sensor_num)
Definition: plat_pldm_sensor.c:9964
SENSOR_THREAD_LIST
Definition: plat_pldm_sensor.h:229
@ VR_SENSOR_P0V85_PVDD_THREAD_ID
Definition: plat_pldm_sensor.h:232
@ VR_SENSOR_P3V3_THREAD_ID
Definition: plat_pldm_sensor.h:231
@ UBC_SENSOR_THREAD_ID
Definition: plat_pldm_sensor.h:230
@ MAX_SENSOR_THREAD_ID
Definition: plat_pldm_sensor.h:235
@ TEMP_SENSOR_THREAD_ID
Definition: plat_pldm_sensor.h:234
@ VR_SENSOR_THREAD_ID
Definition: plat_pldm_sensor.h:233
size_t char16_strlen(const char16_t *str)
Definition: plat_pldm_sensor.c:9352
bool get_plat_sensor_ubc_polling_enable_flag()
Definition: plat_pldm_sensor.c:9949
bool is_dc_access(uint8_t sensor_num)
Definition: plat_sensor_table.c:1564
void plat_pldm_sensor_get_pdr_numeric_sensor(int thread_id, int sensor_num, PDR_numeric_sensor *numeric_sensor_table)
Definition: plat_pldm_sensor.c:9266
void plat_pldm_sensor_change_cpu_bus()
Definition: plat_pldm_sensor.c:6760
void set_plat_sensor_polling_enable_flag(bool value)
Definition: plat_pldm_sensor.c:9924
bool get_sensor_info_by_sensor_id(uint8_t sensor_id, uint8_t *vr_bus, uint8_t *vr_addr, uint8_t *sensor_dev)
Definition: plat_pldm_sensor.c:9988
void plat_pldm_sensor_change_ubc_addr()
Definition: plat_pldm_sensor.c:9823
bool get_plat_sensor_temp_polling_enable_flag()
Definition: plat_pldm_sensor.c:9954
void plat_pldm_sensor_change_retimer_dev()
Definition: plat_pldm_sensor.c:6804
bool is_temp_access(uint8_t cfg_idx)
Definition: plat_pldm_sensor.c:9973
void plat_pldm_sensor_change_vr_dev()
Definition: plat_pldm_sensor.c:9666
sensor_cfg * get_sensor_cfg_by_sensor_id(uint8_t sensor_id)
Definition: plat_pldm_sensor.c:10066
void set_plat_sensor_ubc_polling_enable_flag(bool value)
Definition: plat_pldm_sensor.c:9929
char16_t * char16_strcpy(char16_t *dest, const char16_t *src)
Definition: plat_pldm_sensor.c:9361
void set_plat_sensor_temp_polling_enable_flag(bool value)
Definition: plat_pldm_sensor.c:9934
void set_plat_sensor_vr_polling_enable_flag(bool value)
Definition: plat_pldm_sensor.c:9939
uint8_t plat_pldm_sensor_get_vr_dev(uint8_t *vr_dev)
Definition: plat_pldm_sensor.c:6932
bool get_plat_sensor_polling_enable_flag()
Definition: plat_pldm_sensor.c:9944
PDR_numeric_sensor * numeric_sensor_table
Definition: pdr.c:32
PDR_numeric_sensor
Definition: pdr.h:134
uint16_t sensor_id
Definition: pldm_monitor.h:0
uint8_t sensor_num
Definition: storage_handler.h:6
Definition: sensor.h:264