22#include <sys/byteorder.h>
24#define READ_DDR_TEMP_REQ_LEN 0
25#define READ_DDR_TEMP_RESP_LEN 32
26#define READ_DDR_SLOT_INFO_REQ_LEN 0
27#define READ_DDR_SLOT_INFO_RESP_LEN 68
28#define MAX_DIMM_PER_CXL 4
29#define MAX_CXL_COUNT 2
31#define VISTARA_SPD_DDR4_TOTAL_BYTES 512
32#define VISTARA_SPD_CHUNK_DEFAULT 64
33#define VISTARA_SPD_MODULE_SN_OFF 325
34#define VISTARA_SPD_MODULE_SN_LEN 4
35#define VISTARA_CCI_BUFFER_SIZE 256
37enum VISTARA_CCI_CMD_OEM_OPCODE {
38 CCI_OEM_OP_READ_DDR_TEMP = 0xC531,
39 CCI_OEM_OP_DIMM_SPD_READ = 0xC510,
40 CCI_OEM_OP_DIMM_SLOT_INFO = 0xC520,
43enum VISTARA_SENSOR_TYPE {
63struct vistara_dimm_spd_read_args {
69static inline size_t vistara_encode_dimm_spd_read(uint8_t dst[12],
70 const struct vistara_dimm_spd_read_args *a)
72 sys_put_le32(a->spd_id, &dst[0]);
73 sys_put_le32(a->offset, &dst[4]);
74 sys_put_le32(a->num_bytes, &dst[8]);
81 uint8_t dimm_silk_screen;
87 uint32_t num_dimm_slots;
88 dimm_slot_info_t
dimm_info[MAX_DIMM_PER_CXL];
89} read_ddr_slot_info_resp;
94 read_ddr_slot_info_resp slot_info[MAX_CXL_COUNT];
95 uint8_t master_dimm_id[MAX_CXL_COUNT];
96} ddr_slot_info_cache_t;
98extern ddr_slot_info_cache_t g_ddr_slot_cache;
103bool vistara_cci_command(uint8_t cxl_eid,
mctp_cci_msg cci_msg, uint8_t *resp, uint8_t resp_len);
104bool vistara_read_ddr_temp(uint8_t cxl_eid, uint8_t *resp);
105int vistara_read_dimm_spd_chunk_eid(uint8_t cxl_eid, uint8_t dimm_idx, uint16_t
offset,
106 uint8_t
length, uint8_t *out);
107bool vistara_read_dimm_spd_ddr4(uint8_t cxl_eid, uint8_t dimm_idx,
108 uint8_t out512[VISTARA_SPD_DDR4_TOTAL_BYTES]);
109bool vistara_read_ddr_slot_info(uint8_t cxl_eid, uint8_t *resp);
110int vistara_init_ddr_slot_info(
void);
111bool vistara_get_dimm_present_from_cache(uint8_t dimm_id);
int length
Definition: hal_jtag.h:1
uint32_t timestamp
Definition: ipmb.h:19
uint8_t status
Definition: mctp_ctrl.h:1
uint32_t reserved
Definition: plat_ncsi.h:4
uint32_t offset
Definition: pldm_firmware_update.h:0
Definition: plat_dimm.h:71