OpenBIC
OpenSource Bridge-IC
plat_i2c_target.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_I2C_SLAVE_H
18#define PLAT_I2C_SLAVE_H
19
20#include <drivers/i2c.h>
21#include "hal_i2c_target.h"
22
23#define TARGET_ENABLE 1
24#define TARGET_DISABLE 0
25
26// i2c target register
27#define SENSOR_INIT_DATA_0_REG 0x00
28#define SENSOR_INIT_DATA_1_REG 0x01
29#define SENSOR_READING_0_REG 0x02
30#define SENSOR_READING_1_REG 0x03
31#define SENSOR_READING_2_REG 0x04
32#define SENSOR_READING_3_REG 0x05
33#define INVENTORY_IDS_REG 0x06
34#define STRAP_CAPABILTITY_REG 0x08
35#define WRITE_STRAP_PIN_VALUE_REG 0x09
36#define I2C_BRIDGE_COMMAND_REG 0x40
37#define I2C_BRIDGE_COMMAND_STATUS_REG 0x41
38#define I2C_BRIDGE_COMMAND_RESPONSE_REG 0x42
39#define CONTROL_VOL_VR_ASIC_P0V75_VDDPHY_HBM0246_REG 0x80
40#define CONTROL_VOL_VR_ASIC_P0V75_VDDPHY_HBM1357_REG 0x81
41#define CONTROL_VOL_VR_ASIC_P1V1_VDDQC_HBM0246_REG 0x82
42#define CONTROL_VOL_VR_ASIC_P1V1_VDDQC_HBM1357_REG 0x83
43#define CONTROL_VOL_VR_ASIC_P0V4_VDDQL_HBM0246_REG 0x84
44#define CONTROL_VOL_VR_ASIC_P0V4_VDDQL_HBM1357_REG 0x85
45#define CONTROL_VOL_VR_ASIC_P1V8_VPP_HBM0246_REG 0x86
46#define CONTROL_VOL_VR_ASIC_P1V8_VPP_HBM1357_REG 0x87
47#define CONTROL_VOL_VR_ASIC_P0V85_MEDHA0_VDD_REG 0x88
48#define CONTROL_VOL_VR_ASIC_P0V85_MEDHA1_VDD_REG 0x89
49#define LEVEL_1_2_3_PWR_ALERT_THRESHOLD_REG 0x90
50#define LEVEL_1_2_3_PWR_ALERT_TIME_WINDOW_REG 0x91
51#define VR_POWER_READING_REG 0x93
52#define TRAY_INFO_REG 0x98
53
54#define SET_SENSOR_POLLING_COMMAND_REG 0xF0
55
57 uint16_t reg; // register address
58 uint8_t addr;
59 uint8_t (*wr_fn)(struct _i2c_target_command_mapping *);
60 uint8_t (*rd_fn)(struct _i2c_target_command_mapping *);
61 uint8_t *data;
63typedef struct __attribute__((__packed__)) {
64 uint16_t carrier_board_id; // MTIA Gen1 - Aegis=0x00
65 uint32_t bic_fw_version;
66 uint32_t cpld_fw_version;
68// size = sizeof(plat_inventory_ids)
69typedef struct __attribute__((__packed__)) {
70 uint8_t device_type;
71 uint8_t register_layout_version;
72 uint8_t num_idx; //Number of PDR indexes in this register
73 uint8_t reserved_1;
74
75 uint16_t sbi; //Sensor base index (SBI= 248*R) used in this register's array
76 uint16_t max_pdr_idx; //Max PDR sensor index exported in total (MAX_PDRIDX)
77
78 uint8_t sensor_r_len[]; //sensor[0] reading length ~ sensor[247] reading length
80typedef struct __attribute__((__packed__)) {
81 uint8_t sensor_index_offset; // Sensor index offset (e.g. PDR sensor index offset)
82 uint32_t sensor_value; // Sensor value (4 bytes)
84typedef struct __attribute__((__packed__)) {
85 uint8_t device_type; // Device type (Aegis = 0x01, Rainbow = 0x02)
86 uint8_t register_layout_version; // Register layout version (e.g. VERSION_1 = 0x01)
87 uint16_t sensor_base_index; // Sensor base index (SBI)
88 uint8_t max_sbi_off; // Max sensor base index offset in this register (0 <= MAX_SBI_OFF <= 49)
89 // The following is a flexible array of sensor entries.
90 // The number of entries is (max_sbi_off + 1)
91 sensor_entry sensor_entries[];
93
96 uint8_t data[4];
98
103};
104
109};
110
116};
117typedef struct {
124} vr_level_t;
125
126typedef struct {
129
130// size = sizeof(plat_sensor_reading) + num_sensors * sizeof(SensorEntry);
131// num_sensors = max_sbi_off + 1
133typedef struct _telemetry_info_ {
134 uint8_t telemetry_offset;
135 uint16_t data_size;
136 bool (*telemetry_table_init)(telemetry_info *, uint8_t *);
138typedef struct __attribute__((__packed__)) {
139 uint8_t strap_set_index;
140 uint8_t strap_set_value;
141 uint8_t strap_set_type;
142 // b7 No Drive-Input, b6 PushPull-Output, b5 OpenDrain-Output, b4-b3: Reserved,
143 // b2: DriveType(0:OpenDrain,1:PushPull), b1: Direction(0:output,1:input), b0: Reserved
145typedef struct __attribute__((__packed__)) {
146 uint8_t strap_data_length;
147 strap_entry strap_set_format[];
149typedef struct __attribute__((__packed__)) {
150 struct k_work work;
151 uint8_t bus; // 0 base (0,1,2,3,4,..)
152 uint8_t addr; // 7 bit addr
153 uint8_t read_len;
154 uint8_t write_len; // include data[0]
155 uint8_t data[]; // data[0]: offset
157typedef struct __attribute__((__packed__)) {
158 uint8_t data_status;
160typedef struct __attribute__((__packed__)) {
161 uint8_t data_length;
162 uint8_t response_data[];
169typedef struct voltage_rail_mapping_sensor {
170 uint8_t control_vol_reg;
171 uint8_t vr_rail_e;
173typedef struct __attribute__((__packed__)) {
174 struct k_work work;
175 uint8_t rail;
176 uint16_t set_value;
178typedef struct __attribute__((__packed__)) {
179 struct k_work work;
180 uint8_t set_value;
183void update_sensor_reading_by_sensor_number(uint8_t sensor_number);
185float get_sensor_reading_cache_as_float(uint8_t sensor_number);
186#endif
uint8_t data[]
Definition: isl69259.c:2
uint8_t addr
Definition: isl69259.c:0
void plat_telemetry_table_init(void)
Definition: plat_i2c_target.c:1062
void update_strap_capability_table(void)
Definition: plat_i2c_target.c:676
i2c_bridge_command_error
Definition: plat_i2c_target.h:85
@ I2C_BRIDGE_COMMAND_SUCCESS
Definition: plat_i2c_target.h:86
@ I2C_BRIDGE_COMMAND_IN_PROCESS
Definition: plat_i2c_target.h:87
@ I2C_BRIDGE_COMMAND_FAILURE
Definition: plat_i2c_target.h:88
struct _telemetry_info_ telemetry_info
Definition: plat_i2c_target.h:96
uint8_t set_value
Definition: pldm_oem.h:1
uint32_t data_length
Definition: pldm_oem.h:1
plat_control_voltage
Definition: plat_i2c_target.h:177
plat_i2c_bridge_command_status
Definition: plat_i2c_target.h:159
VR_PWR_CONTROLLER
Definition: plat_i2c_target.h:105
@ VR_PWR_CONTROLLER_MAX
Definition: plat_i2c_target.h:108
@ MEDHA0
Definition: plat_i2c_target.h:106
@ MEDHA1
Definition: plat_i2c_target.h:107
plat_control_sensor_polling
Definition: plat_i2c_target.h:181
VR_ALERT_LEVEL
Definition: plat_i2c_target.h:111
@ VR_ALERT_LEVEL_3
Definition: plat_i2c_target.h:114
@ VR_ALERT_LEVEL_1
Definition: plat_i2c_target.h:112
@ VR_ALERT_LEVEL_2
Definition: plat_i2c_target.h:113
@ VR_ALERT_MAX
Definition: plat_i2c_target.h:115
plat_i2c_bridge_command_response_data
Definition: plat_i2c_target.h:163
plat_inventory_ids
Definition: plat_i2c_target.h:67
float get_sensor_reading_cache_as_float(uint8_t sensor_number)
Definition: plat_i2c_target.c:223
plat_sensor_init_data
Definition: plat_i2c_target.h:79
VR_INFO_TYPE
Definition: plat_i2c_target.h:99
@ VR_TIME_WINDOW
Definition: plat_i2c_target.h:101
@ VR_THRESHOLD
Definition: plat_i2c_target.h:100
@ VR_INFO_TYPE_MAX
Definition: plat_i2c_target.h:102
void update_sensor_reading_by_sensor_number(uint8_t sensor_number)
Definition: plat_i2c_target.c:195
strap_entry
Definition: plat_i2c_target.h:144
struct voltage_rail_mapping_sensor voltage_rail_mapping_sensor
sensor_entry
Definition: plat_i2c_target.h:83
struct _i2c_target_command_mapping i2c_target_command_mapping
plat_strap_capability
Definition: plat_i2c_target.h:148
plat_sensor_reading
Definition: plat_i2c_target.h:92
struct _plat_sensor_reading_data_ plat_sensor_reading_data
plat_i2c_bridge_command_config
Definition: plat_i2c_target.h:156
Definition: pldm_smbios.h:61
Definition: plat_i2c_target.h:56
uint8_t * data
Definition: plat_i2c_target.h:61
uint8_t(* wr_fn)(struct _i2c_target_command_mapping *)
Definition: plat_i2c_target.h:59
uint16_t reg
Definition: plat_i2c_target.h:57
uint8_t addr
Definition: plat_i2c_target.h:58
uint8_t(* rd_fn)(struct _i2c_target_command_mapping *)
Definition: plat_i2c_target.h:60
Definition: plat_i2c_target.h:94
uint8_t data[4]
Definition: plat_i2c_target.h:96
uint8_t sensor_number
Definition: plat_i2c_target.h:95
Definition: plat_i2c_target.h:98
uint16_t data_size
Definition: plat_i2c_target.h:100
uint8_t telemetry_offset
Definition: plat_i2c_target.h:99
bool(* telemetry_table_init)(telemetry_info *, uint8_t *)
Definition: plat_i2c_target.h:101
Definition: plat_i2c_target.c:144
uint8_t vr_rail_e
Definition: plat_i2c_target.c:146
uint8_t control_vol_reg
Definition: plat_i2c_target.c:145
Definition: plat_i2c_target.h:126
Definition: plat_i2c_target.h:117
uint8_t threshold_msb
Definition: plat_i2c_target.h:119
uint8_t time_window_msb
Definition: plat_i2c_target.h:121
uint8_t read_data_lsb
Definition: plat_i2c_target.h:122
uint8_t time_window_lsb
Definition: plat_i2c_target.h:120
uint8_t threshold_lsb
Definition: plat_i2c_target.h:118
uint8_t read_data_msb
Definition: plat_i2c_target.h:123