OpenBIC
OpenSource Bridge-IC
plat_hook.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_HOOK_H
18#define PLAT_HOOK_H
19
20#include "sensor.h"
21
22#define VR_MAX_NUM 11
23#define VR_MUTEX_LOCK_TIMEOUT_MS 1000
24
25#include "plat_pldm_sensor.h"
26
40};
41
64};
65
75};
76
85};
86
97
107
117};
118
144};
145
150};
151
155
157
158typedef struct vr_mapping_sensor {
159 uint8_t index;
160 uint8_t sensor_id;
161 uint8_t *sensor_name;
164
165typedef struct vr_vout_user_settings {
168
170
171typedef struct vr_mapping_status {
172 uint8_t index;
173 uint16_t pmbus_reg;
176
178
179typedef struct _vr_pre_proc_arg {
180 void *mutex;
181 uint8_t vr_page;
183
184typedef struct temp_mapping_sensor {
185 uint8_t index;
186 uint8_t sensor_id;
187 uint8_t *sensor_name;
189
193
197
199
201 uint8_t temp_index_threshold_type; //PLAT_TEMP_INDEX_THRESHOLD_TYPE_E
203 uint8_t sensor_id;
206
208
210 uint8_t index;
212 uint8_t *strap_name;
213 uint8_t bits[8];
214 uint8_t bit_count;
218
219bool plat_get_vout_min(uint8_t rail, uint16_t *millivolt);
220bool plat_get_vout_max(uint8_t rail, uint16_t *millivolt);
221bool plat_set_vout_min(uint8_t rail, uint16_t *millivolt);
222bool plat_set_vout_max(uint8_t rail, uint16_t *millivolt);
223bool temp_sensor_rail_name_get(uint8_t rail, uint8_t **name);
224bool temp_sensor_rail_enum_get(uint8_t *name, uint8_t *num);
225bool plat_get_temp_status(uint8_t rail, uint8_t *temp_status);
226bool plat_clear_temp_status(uint8_t rail);
227bool pre_vr_read(sensor_cfg *cfg, void *args);
228bool post_vr_read(sensor_cfg *cfg, void *args, int *const reading);
229bool perm_config_clear();
230bool is_mb_dc_on();
231void *vr_mutex_get(enum VR_INDEX_E vr_index);
232void vr_mutex_init(void);
233bool vr_rail_name_get(uint8_t rail, uint8_t **name);
234bool vr_rail_enum_get(uint8_t *name, uint8_t *num);
235int power_level_send_event(bool is_assert, int ubc1_current, int ubc2_current);
236bool post_ubc_read(sensor_cfg *cfg, void *args, int *reading);
237void set_uart_power_event_is_enable(bool is_enable);
238void pwr_level_mutex_init(void);
239void set_alert_level_to_default_or_user_setting(bool is_default, int32_t user_setting);
242int get_alert_level_info(bool *is_assert, int32_t *default_value, int32_t *setting_value);
245bool vr_rail_voltage_peak_get(uint8_t *name, int *peak_value);
246bool vr_rail_voltage_peak_clear(uint8_t rail_index);
248void user_settings_init(void);
249bool temp_index_threshold_type_name_get(uint8_t type, uint8_t **name);
250bool temp_threshold_type_enum_get(uint8_t *name, uint8_t *num);
251bool plat_get_temp_threshold(uint8_t temp_index_threshold_type, uint32_t *millidegree_celsius);
252bool plat_set_temp_threshold(uint8_t temp_index_threshold_type, uint32_t *millidegree_celsius,
253 bool is_default, bool is_perm);
254bool plat_get_vout_command(uint8_t rail, uint16_t *millivolt);
255bool plat_set_vout_command(uint8_t rail, uint16_t *millivolt, bool is_default, bool is_perm);
256bool plat_get_vr_status(uint8_t rail, uint8_t vr_status_rail, uint16_t *vr_status);
257bool plat_clear_vr_status(uint8_t rail);
258bool vr_status_name_get(uint8_t rail, uint8_t **name);
259bool vr_status_enum_get(uint8_t *name, uint8_t *num);
260bool strap_name_get(uint8_t rail, uint8_t **name);
261bool strap_enum_get(uint8_t *name, uint8_t *num);
262bool find_bootstrap_by_rail(uint8_t rail, bootstrap_mapping_register *result);
263bool set_bootstrap_table_and_user_settings(uint8_t rail, uint8_t *change_setting_value,
264 uint8_t drive_index_level, bool is_perm);
265bool get_bootstrap_change_drive_level(int rail, int *drive_level);
266
267#endif
vr_pre_proc_arg vr_pre_read_args[]
Definition: plat_hook.c:962
bool is_mb_dc_on()
Definition: plat_hook.c:1249
struct _vr_pre_proc_arg vr_pre_proc_arg
bool pre_vr_read(sensor_cfg *cfg, void *args)
Definition: plat_hook.c:988
struct vr_mapping_status vr_mapping_status
struct bootstrap_user_settings_struct bootstrap_user_settings_struct
struct temp_mapping_sensor temp_mapping_sensor
vr_mapping_sensor vr_rail_table[]
Definition: plat_hook.c:423
void set_uart_power_event_is_enable(bool is_enable)
Definition: plat_hook.c:1093
bool plat_get_vout_max(uint8_t rail, uint16_t *millivolt)
bool plat_get_vout_command(uint8_t rail, uint16_t *millivolt)
Definition: plat_hook.c:1339
struct vr_vout_user_settings vr_vout_user_settings
bootstrap_user_settings_struct bootstrap_user_settings
Definition: plat_hook.c:235
bool temp_sensor_rail_name_get(uint8_t rail, uint8_t **name)
Definition: plat_hook.c:171
void vr_mutex_init(void)
Definition: plat_hook.c:408
bool post_ubc_read(sensor_cfg *cfg, void *args, int *reading)
Definition: plat_hook.c:70
int get_user_settings_alert_level_from_eeprom(void *user_settings, uint8_t data_length)
Definition: plat_hook.c:663
struct vr_mapping_sensor vr_mapping_sensor
PLAT_TEMP_INDEX_E
Definition: plat_hook.h:77
@ TEMP_INDEX_ON_DIE_3_4
Definition: plat_hook.h:79
@ TEMP_INDEX_BOT_OUTLET
Definition: plat_hook.h:83
@ TEMP_INDEX_MAX
Definition: plat_hook.h:84
@ TEMP_INDEX_ON_DIE_1_2
Definition: plat_hook.h:78
@ TEMP_INDEX_BOT_INLET
Definition: plat_hook.h:82
@ TEMP_INDEX_TOP_OUTLET
Definition: plat_hook.h:81
@ TEMP_INDEX_TOP_INLET
Definition: plat_hook.h:80
PLAT_TEMP_INDEX_THRESHOLD_TYPE_E
Definition: plat_hook.h:87
@ ON_DIE_3_4_REMOTE_1_THERM_LIMIT
Definition: plat_hook.h:105
@ ON_DIE_3_4_LOCAL_LOW_LIMIT
Definition: plat_hook.h:99
@ BOT_INLET_LOW_LIMIT
Definition: plat_hook.h:112
@ ON_DIE_1_2_REMOTE_1_LOW_LIMIT
Definition: plat_hook.h:91
@ ON_DIE_3_4_LOCAL_HIGH_LIMIT
Definition: plat_hook.h:98
@ ON_DIE_1_2_REMOTE_2_HIGH_LIMIT
Definition: plat_hook.h:92
@ ON_DIE_1_2_REMOTE_1_THERM_LIMIT
Definition: plat_hook.h:95
@ PLAT_TEMP_INDEX_THRESHOLD_TYPE_MAX
Definition: plat_hook.h:116
@ TOP_OUTLET_HIGH_LIMIT
Definition: plat_hook.h:111
@ ON_DIE_3_4_REMOTE_2_LOW_LIMIT
Definition: plat_hook.h:103
@ ON_DIE_1_2_LOCAL_THERM_LIMIT
Definition: plat_hook.h:94
@ BOT_OUTLET_HIGH_LIMIT
Definition: plat_hook.h:115
@ BOT_OUTLET_LOW_LIMIT
Definition: plat_hook.h:114
@ ON_DIE_3_4_REMOTE_1_LOW_LIMIT
Definition: plat_hook.h:101
@ TOP_INLET_HIGH_LIMIT
Definition: plat_hook.h:109
@ ON_DIE_1_2_REMOTE_2_LOW_LIMIT
Definition: plat_hook.h:93
@ TOP_OUTLET_LOW_LIMIT
Definition: plat_hook.h:110
@ TOP_INLET_LOW_LIMIT
Definition: plat_hook.h:108
@ ON_DIE_3_4_LOCAL_THERM_LIMIT
Definition: plat_hook.h:104
@ ON_DIE_1_2_REMOTE_2_THERM_LIMIT
Definition: plat_hook.h:96
@ ON_DIE_3_4_REMOTE_1_HIGH_LIMIT
Definition: plat_hook.h:100
@ ON_DIE_1_2_LOCAL_LOW_LIMIT
Definition: plat_hook.h:89
@ ON_DIE_3_4_REMOTE_2_THERM_LIMIT
Definition: plat_hook.h:106
@ ON_DIE_3_4_REMOTE_2_HIGH_LIMIT
Definition: plat_hook.h:102
@ ON_DIE_1_2_REMOTE_1_HIGH_LIMIT
Definition: plat_hook.h:90
@ ON_DIE_1_2_LOCAL_HIGH_LIMIT
Definition: plat_hook.h:88
@ BOT_INLET_HIGH_LIMIT
Definition: plat_hook.h:113
bool temp_sensor_rail_enum_get(uint8_t *name, uint8_t *num)
Definition: plat_hook.c:184
struct temp_threshold_mapping_sensor temp_threshold_mapping_sensor
bool vr_rail_voltage_peak_get(uint8_t *name, int *peak_value)
Definition: plat_hook.c:1143
bool find_bootstrap_by_rail(uint8_t rail, bootstrap_mapping_register *result)
Definition: plat_hook.c:266
bool plat_set_vout_max(uint8_t rail, uint16_t *millivolt)
bool vr_vout_user_settings_get(void *user_settings)
Definition: plat_hook.c:540
VR_RAIL_E
Definition: plat_hook.h:42
@ VR_RAIL_E_P0V8_VDDA_PCIE
Definition: plat_hook.h:61
@ VR_RAIL_E_P0V4_VDDQL_HBM1_HBM3_HBM5
Definition: plat_hook.h:58
@ VR_RAIL_E_P0V75_VDDPHY_HBM1_HBM3_HBM5
Definition: plat_hook.h:60
@ VR_RAIL_E_P0V75_TRVDD_ZONEA
Definition: plat_hook.h:49
@ VR_RAIL_E_P1V1_VDDC_HBM0_HBM2_HBM4
Definition: plat_hook.h:53
@ VR_RAIL_E_P0V85_PVDD
Definition: plat_hook.h:44
@ VR_RAIL_E_P3V3
Definition: plat_hook.h:43
@ VR_RAIL_E_P0V75_TRVDD_ZONEB
Definition: plat_hook.h:51
@ VR_RAIL_E_P1V8_VPP_HBM0_HBM2_HBM4
Definition: plat_hook.h:50
@ VR_RAIL_E_P0V75_PVDD_CH_S
Definition: plat_hook.h:47
@ VR_RAIL_E_P0V75_VDDPHY_HBM0_HBM2_HBM4
Definition: plat_hook.h:54
@ VR_RAIL_E_P0V75_PVDD_CH_N
Definition: plat_hook.h:45
@ VR_RAIL_E_P0V75_MAX_PHY_S
Definition: plat_hook.h:48
@ VR_RAIL_E_P0V9_TRVDD_ZONEB
Definition: plat_hook.h:57
@ VR_RAIL_E_MAX
Definition: plat_hook.h:63
@ VR_RAIL_E_P1V2_VDDHTX_PCIE
Definition: plat_hook.h:62
@ VR_RAIL_E_P1V1_VDDC_HBM1_HBM3_HBM5
Definition: plat_hook.h:59
@ VR_RAIL_E_P0V9_TRVDD_ZONEA
Definition: plat_hook.h:55
@ VR_RAIL_E_P0V75_MAX_PHY_N
Definition: plat_hook.h:46
@ VR_RAIL_E_P1V8_VPP_HBM1_HBM3_HBM5
Definition: plat_hook.h:56
@ VR_RAIL_E_P0V4_VDDQL_HBM0_HBM2_HBM4
Definition: plat_hook.h:52
bool plat_get_temp_threshold(uint8_t temp_index_threshold_type, uint32_t *millidegree_celsius)
Definition: plat_hook.c:1676
bool vr_rail_name_get(uint8_t rail, uint8_t **name)
Definition: plat_hook.c:474
VR_INDEX_E
Definition: plat_hook.h:27
@ VR_INDEX_E_P1V1_VDDC_HBM0_HBM2_HBM4
Definition: plat_hook.h:34
@ VR_INDEX_E_P0V85
Definition: plat_hook.h:29
@ VR_INDEX_E_P0V75_CH_S
Definition: plat_hook.h:31
@ VR_INDEX_E_P3V3
Definition: plat_hook.h:28
@ VR_INDEX_E_P0V9_TRVDD_ZONEA
Definition: plat_hook.h:35
@ VR_INDEX_E_P0V75_TRVDD_ZONEA
Definition: plat_hook.h:32
@ VR_INDEX_E_P0V75_CH_N
Definition: plat_hook.h:30
@ VR_INDEX_E_P0V8_VDDA_PCIE
Definition: plat_hook.h:38
@ VR_INDEX_E_P0V9_TRVDD_ZONEB
Definition: plat_hook.h:36
@ VR_INDEX_E_P0V75_TRVDD_ZONEB
Definition: plat_hook.h:33
@ VR_INDEX_E_P1V1_VDDC_HBM1_HBM3_HBM5
Definition: plat_hook.h:37
@ VR_INDEX_MAX
Definition: plat_hook.h:39
bool plat_get_vout_min(uint8_t rail, uint16_t *millivolt)
bool get_user_settings_soc_pcie_perst_from_eeprom(void *user_settings, uint8_t data_length)
Definition: plat_hook.c:617
bool plat_set_temp_threshold(uint8_t temp_index_threshold_type, uint32_t *millidegree_celsius, bool is_default, bool is_perm)
Definition: plat_hook.c:1724
bool vr_rail_voltage_peak_clear(uint8_t rail_index)
Definition: plat_hook.c:1158
struct temp_threshold_user_settings_struct temp_threshold_user_settings_struct
bool set_user_settings_soc_pcie_perst_to_eeprom(void *user_settings, uint8_t data_length)
Definition: plat_hook.c:591
bool vr_status_enum_get(uint8_t *name, uint8_t *num)
Definition: plat_hook.c:524
bool plat_clear_temp_status(uint8_t rail)
Definition: plat_hook.c:1535
bool plat_set_vout_command(uint8_t rail, uint16_t *millivolt, bool is_default, bool is_perm)
Definition: plat_hook.c:1401
bool post_vr_read(sensor_cfg *cfg, void *args, int *const reading)
Definition: plat_hook.c:320
bool get_bootstrap_change_drive_level(int rail, int *drive_level)
Definition: plat_hook.c:1074
PLAT_DRIVE_LEVEL_INDEX_E
Definition: plat_hook.h:146
@ DRIVE_INDEX_LEVEL_LOW
Definition: plat_hook.h:147
@ DRIVE_INDEX_LEVEL_DEFAULT
Definition: plat_hook.h:149
@ DRIVE_INDEX_LEVEL_HIGH
Definition: plat_hook.h:148
bool vr_rail_enum_get(uint8_t *name, uint8_t *num)
Definition: plat_hook.c:508
bool temp_index_threshold_type_name_get(uint8_t type, uint8_t **name)
Definition: plat_hook.c:767
bool strap_enum_get(uint8_t *name, uint8_t *num)
Definition: plat_hook.c:250
bool plat_set_vout_min(uint8_t rail, uint16_t *millivolt)
int set_user_settings_alert_level_to_eeprom(void *user_settings, uint8_t data_length)
Definition: plat_hook.c:640
bool temp_threshold_type_enum_get(uint8_t *name, uint8_t *num)
Definition: plat_hook.c:780
PLAT_STRAP_INDEX_E
Definition: plat_hook.h:119
@ STRAP_INDEX_S_OWL_DFT_TAP_EN_L
Definition: plat_hook.h:133
@ STRAP_INDEX_N_OWL_DFT_TAP_EN_L
Definition: plat_hook.h:137
@ STRAP_INDEX_SOC_BOOT_SOURCE_0_4
Definition: plat_hook.h:125
@ STRAP_INDEX_N_OWL_CORE_TAP_CTRL_L
Definition: plat_hook.h:138
@ STRAP_INDEX_S_OWL_BOOT_SOURCE_0_7
Definition: plat_hook.h:129
@ STRAP_INDEX_SOC_ATPG_MODE_L
Definition: plat_hook.h:122
@ STRAP_INDEX_N_OWL_ATPG_MODE_L
Definition: plat_hook.h:136
@ STRAP_INDEX_S_OWL_CORE_TAP_CTRL_L
Definition: plat_hook.h:134
@ STRAP_INDEX_SOC_GPIO2
Definition: plat_hook.h:128
@ STRAP_INDEX_SOC_PAD_TRI_L
Definition: plat_hook.h:123
@ STRAP_INDEX_SOC_BOOT_SOURCE_7
Definition: plat_hook.h:127
@ STRAP_INDEX_SOC_CORE_TAP_CTRL_L
Definition: plat_hook.h:124
@ STRAP_INDEX_SOC_JTAG_MUX_SEL_0_3
Definition: plat_hook.h:120
@ STRAP_INDEX_SOC_BOOT_SOURCE_5_6
Definition: plat_hook.h:126
@ STRAP_INDEX_N_OWL_PAD_TRI_L
Definition: plat_hook.h:135
@ STRAP_INDEX_S_OWL_UART_MUX_SEL_0_2
Definition: plat_hook.h:141
@ STRAP_INDEX_SOC_DFT_TAP_EN_L
Definition: plat_hook.h:121
@ STRAP_INDEX_N_OWL_BOOT_SOURCE_0_7
Definition: plat_hook.h:130
@ STRAP_INDEX_N_OWL_UART_MUX_SEL_0_2
Definition: plat_hook.h:142
@ STRAP_INDEX_S_OWL_ATPG_MODE_L
Definition: plat_hook.h:132
@ STRAP_INDEX_N_OWL_JTAG_MUX_SEL_0_3
Definition: plat_hook.h:140
@ STRAP_INDEX_S_OWL_JTAG_MUX_SEL_0_3
Definition: plat_hook.h:139
@ STRAP_INDEX_S_OWL_PAD_TRI_L
Definition: plat_hook.h:131
@ STRAP_INDEX_MAX
Definition: plat_hook.h:143
bool perm_config_clear()
Definition: plat_hook.c:1295
void user_settings_init(void)
Definition: plat_hook.c:1062
bool plat_clear_vr_status(uint8_t rail)
Definition: plat_hook.c:1234
temp_threshold_user_settings_struct temp_threshold_user_settings
Definition: plat_hook.c:396
bool strap_name_get(uint8_t rail, uint8_t **name)
Definition: plat_hook.c:237
temp_threshold_mapping_sensor temp_threshold_table[]
void * vr_mutex_get(enum VR_INDEX_E vr_index)
Definition: plat_hook.c:278
struct bootstrap_mapping_register bootstrap_mapping_register
bool plat_get_vr_status(uint8_t rail, uint8_t vr_status_rail, uint16_t *vr_status)
Definition: plat_hook.c:1169
int get_alert_level_info(bool *is_assert, int32_t *default_value, int32_t *setting_value)
Definition: plat_hook.c:1126
VR_STAUS_E
Definition: plat_hook.h:66
@ VR_STAUS_E_STATUS_INPUT
Definition: plat_hook.h:71
@ VR_STAUS_E_STATUS_IOUT
Definition: plat_hook.h:70
@ VR_STAUS_E_STATUS_CML
Definition: plat_hook.h:73
@ VR_STAUS_E_MAX
Definition: plat_hook.h:74
@ VR_STAUS_E_STATUS_BYTE
Definition: plat_hook.h:67
@ VR_STAUS_E_STATUS_TEMPERATURE
Definition: plat_hook.h:72
@ VR_STAUS_E_STATUS_VOUT
Definition: plat_hook.h:69
@ VR_STAUS_E_STATUS_WORD
Definition: plat_hook.h:68
bool vr_status_name_get(uint8_t rail, uint8_t **name)
Definition: plat_hook.c:487
void pwr_level_mutex_init(void)
Definition: plat_hook.c:1104
bool set_bootstrap_table_and_user_settings(uint8_t rail, uint8_t *change_setting_value, uint8_t drive_index_level, bool is_perm)
Definition: plat_hook.c:940
bool plat_get_temp_status(uint8_t rail, uint8_t *temp_status)
Definition: plat_hook.c:1474
vr_vout_user_settings user_settings
Definition: plat_hook.c:505
int power_level_send_event(bool is_assert, int ubc1_current, int ubc2_current)
Definition: plat_hook.c:53
void set_alert_level_to_default_or_user_setting(bool is_default, int32_t user_setting)
Definition: plat_hook.c:1111
uint8_t type
Definition: pldm_base.h:0
uint8_t reading[1]
Definition: pldm_monitor.h:3
uint32_t data_length
Definition: pldm_oem.h:1
Definition: sensor.h:257
Definition: plat_hook.h:22
void * mutex
Definition: plat_hook.h:180
uint8_t vr_page
Definition: plat_hook.h:25
Definition: plat_hook.h:209
uint8_t * strap_name
Definition: plat_hook.h:212
uint8_t default_setting_value
Definition: plat_hook.h:215
uint8_t cpld_offsets
Definition: plat_hook.h:211
uint8_t index
Definition: plat_hook.h:210
uint8_t change_setting_value
Definition: plat_hook.h:216
uint8_t bit_count
Definition: plat_hook.h:214
uint8_t bits[8]
Definition: plat_hook.h:213
Definition: plat_hook.h:152
uint16_t user_setting_value[STRAP_INDEX_MAX]
Definition: plat_hook.h:153
Definition: sensor.h:780
Definition: sensor.h:776
Definition: plat_hook.h:184
uint8_t * sensor_name
Definition: plat_hook.h:187
uint8_t index
Definition: plat_hook.h:185
uint8_t sensor_id
Definition: plat_hook.h:186
Definition: plat_hook.h:200
uint8_t sensor_id
Definition: plat_hook.h:203
uint8_t * temp_threshold_name
Definition: plat_hook.h:204
uint8_t temp_threshold_type
Definition: plat_hook.h:202
uint8_t temp_index_threshold_type
Definition: plat_hook.h:201
Definition: plat_hook.h:194
uint32_t temperature_reg_val[PLAT_TEMP_INDEX_THRESHOLD_TYPE_MAX]
Definition: plat_hook.h:195
Definition: plat_hook.h:158
uint8_t * sensor_name
Definition: plat_hook.h:161
int peak_value
Definition: plat_hook.h:162
uint8_t sensor_id
Definition: plat_hook.h:160
uint8_t index
Definition: plat_hook.h:159
Definition: plat_hook.h:171
uint8_t * vr_status_name
Definition: plat_hook.h:174
uint16_t pmbus_reg
Definition: plat_hook.h:173
uint8_t index
Definition: plat_hook.h:172
Definition: plat_hook.h:165
uint16_t vout[VR_RAIL_E_MAX]
Definition: plat_hook.h:166
name
Definition: plat_i2c.h:24