#ifndef _LIBJEDEC_H
#define _LIBJEDEC_H
#include <sys/types.h>
#include <stdint.h>
#include <libnvpair.h>
#ifdef __cplusplus
extern "C" {
#endif
extern const char *libjedec_vendor_string(uint_t, uint_t);
typedef enum {
JEDEC_TEMP_CASE_A1T,
JEDEC_TEMP_CASE_A2T,
JEDEC_TEMP_CASE_A3T,
JEDEC_TEMP_CASE_IT,
JEDEC_TEMP_CASE_ET,
JEDEC_TEMP_CASE_ST,
JEDEC_TEMP_CASE_XT,
JEDEC_TEMP_CASE_NT,
JEDEC_TEMP_CASE_RT,
JEDEC_TEMP_AMB_CT,
JEDEC_TEMP_AMB_IOT,
JEDEC_TEMP_AMB_IPT,
JEDEC_TEMP_AMB_IXT,
JEDEC_TEMP_AMB_AO3T,
JEDEC_TEMP_AMB_AO2T,
JEDEC_TEMP_AMB_AO1T,
JEDEC_TEMP_STOR_2,
JEDEC_TEMP_STOR_1B,
JEDEC_TEMP_STOR_1A,
JEDEC_TEMP_STOR_ST,
JEDEC_TEMP_JNCT_A135,
JEDEC_TEMP_JNCT_A130,
JEDEC_TEMP_JNCT_A1T,
JEDEC_TEMP_JNCT_A120,
JEDEC_TEMP_JNCT_A115,
JEDEC_TEMP_JNCT_A110,
JEDEC_TEMP_JNCT_A2T,
JEDEC_TEMP_JNCT_A100,
JEDEC_TEMP_JNCT_A95,
JEDEC_TEMP_JNCT_A90,
JEDEC_TEMP_JNCT_A3T,
JEDEC_TEMP_JNCT_LT135,
JEDEC_TEMP_JNCT_LT130,
JEDEC_TEMP_JNCT_LT125,
JEDEC_TEMP_JNCT_LT120,
JEDEC_TEMP_JNCT_LT115,
JEDEC_TEMP_JNCT_LT110,
JEDEC_TEMP_JNCT_LT105,
JEDEC_TEMP_JNCT_LT100,
JEDEC_TEMP_JNCT_IT,
JEDEC_TEMP_JNCT_LT90,
JEDEC_TEMP_JNCT_LT85,
JEDEC_TEMP_JNCT_ET120,
JEDEC_TEMP_JNCT_ET115,
JEDEC_TEMP_JNCT_ET110,
JEDEC_TEMP_JNCT_ET,
JEDEC_TEMP_JNCT_ET100,
JEDEC_TEMP_JNCT_ET95,
JEDEC_TEMP_JNCT_ET90,
JEDEC_TEMP_JNCT_ST,
JEDEC_TEMP_JNCT_120,
JEDEC_TEMP_JNCT_115,
JEDEC_TEMP_JNCT_110,
JEDEC_TEMP_JNCT_105,
JEDEC_TEMP_JNCT_100,
JEDEC_TEMP_JNCT_XT,
JEDEC_TEMP_JNCT_90,
JEDEC_TEMP_JNCT_NT
} libjedec_temp_range_t;
extern boolean_t libjedec_temp_range(libjedec_temp_range_t, int32_t *,
int32_t *);
typedef enum {
LIBJEDEC_SPD_OK = 0,
LIBJEDEC_SPD_NOMEM,
LIBJEDEC_SPD_TOOSHORT,
LIBJEDEC_SPD_UNSUP_TYPE,
LIBJEDEC_SPD_UNSUP_REV
} spd_error_t;
extern nvlist_t *libjedec_spd(const uint8_t *, size_t, spd_error_t *);
#define SPD_KEY_NBYTES_TOTAL "meta.total-bytes"
#define SPD_KEY_NBYTES_USED "meta.used-bytes"
#define SPD_KEY_REV_ENC "meta.revision-encoding"
#define SPD_KEY_REV_ADD "meta.revision-additions"
#define SPD_KEY_BETA "meta.beta-version"
#define SPD_KEY_MOD_REV_ENC "meta.module-revision-encoding"
#define SPD_KEY_MOD_REV_ADD "meta.module-revision-additions"
typedef enum {
SPD_DT_FAST_PAGE_MODE = 0x01,
SPD_DT_EDO = 0x02,
SPD_DT_PIPE_NIBBLE = 0x03,
SPD_DT_SDRAM = 0x04,
SPD_DT_ROM = 0x05,
SPD_DT_DDR_SGRAM = 0x06,
SPD_DT_DDR_SDRAM = 0x07,
SPD_DT_DDR2_SDRAM = 0x08,
SPD_DT_DDR2_SDRAM_FBDIMM = 0x09,
SPD_DT_DDR2_SDRAM_FDIMM_P = 0x0a,
SPD_DT_DDR3_SDRAM = 0x0b,
SPD_DT_DDR4_SDRAM = 0x0c,
SPD_DT_DDR4E_SDRAM = 0x0e,
SPD_DT_LPDDR3_SDRAM = 0x0f,
SPD_DT_LPDDR4_SDRAM = 0x10,
SPD_DT_LPDDR4X_SDRAM = 0x11,
SPD_DT_DDR5_SDRAM = 0x12,
SPD_DT_LPDDR5_SDRAM = 0x13,
SPD_DT_DDR5_NVDIMM_P = 0x14,
SPD_DT_LPDDR5X_SDRAM = 0x15
} spd_dram_type_t;
#define SPD_KEY_DRAM_TYPE "meta.dram-type"
typedef enum {
SPD_MOD_TYPE_RDIMM,
SPD_MOD_TYPE_UDIMM,
SPD_MOD_TYPE_SODIMM,
SPD_MOD_TYPE_LRDIMM,
SPD_MOD_TYPE_MRDIMM,
SPD_MOD_TYPE_DDIMM,
SPD_MOD_TYPE_SOLDER,
SPD_MOD_TYPE_MINI_RDIMM,
SPD_MOD_TYPE_MINI_UDIMM,
SPD_MOD_TYPE_MINI_CDIMM,
SPD_MOD_TYPE_72b_SO_RDIMM,
SPD_MOD_TYPE_72b_SO_UDIMM,
SPD_MOD_TYPE_72b_SO_CDIMM,
SPD_MOD_TYPE_16b_SO_DIMM,
SPD_MOD_TYPE_32b_SO_DIMM,
SPD_MOD_TYPE_CUDIMM,
SPD_MOD_TYPE_CSODIMM,
SPD_MOD_TYPE_CAMM2,
SPD_MOD_TYPE_LPDIMM,
SPD_MOD_TYPE_MICRO_DIMM
} spd_module_type_t;
#define SPD_KEY_MOD_TYPE "meta.module-type"
typedef enum {
SPD_MOD_NOT_HYBRID,
SPD_MOD_HYBRID_NVDIMMM
} spd_module_hybrid_t;
#define SPD_KEY_MOD_HYBRID_TYPE "meta.hybrid-type"
typedef enum {
SPD_MOD_TYPE_NVDIMM_N,
SPD_MOD_TYPE_NVDIMM_P,
SPD_MOD_TYPE_NVDIMM_H
} spd_module_nvdimm_type_t;
#define SPD_KEY_MOD_NVDIMM_TYPE "meta.nvdimm-type"
#define SPD_KEY_CRC_DDR3 "meta.crc-ddr3"
#define SPD_KEY_CRC_DDR3_LEN "meta.crc-ddr3-len"
#define SPD_KEY_CRC_DDR4_BASE "meta.crc-ddr4-base"
#define SPD_KEY_CRC_DDR4_BLK1 "meta.crc-ddr4-block1"
#define SPD_KEY_CRC_DDR5 "meta.crc-ddr5"
typedef enum {
SPD_HASH_SEQ_ALG_1
} spd_hash_seq_alg_t;
#define SPD_KEY_HASH_SEQ "meta.hash-sequence-algorithm"
#define SPD_KEY_NROW_BITS "dram.num-row-bits"
#define SPD_KEY_NCOL_BITS "dram.num-column-bits"
#define SPD_KEY_NBANK_BITS "dram.num-bank-bits"
#define SPD_KEY_NBGRP_BITS "dram.num-bank-group-bits"
#define SPD_KEY_SEC_NROW_BITS "dram.sec-num-row-bits"
#define SPD_KEY_SEC_NCOL_BITS "dram.sec-num-column-bits"
#define SPD_KEY_SEC_NBANK_BITS "dram.sec-num-bank-bits"
#define SPD_KEY_SEC_NBGRP_BITS "dram.sec-num-bank-group-bits"
#define SPD_KEY_DIE_SIZE "dram.die-bit-size"
#define SPD_KEY_SEC_DIE_SIZE "dram.sec-die-bit-size"
#define SPD_KEY_PKG_NOT_MONO "meta.non-monolithic-package"
#define SPD_KEY_PKG_NDIE "dram.package-die-count"
#define SPD_KEY_SEC_PKG_NDIE "dram.sec-package-die-count"
typedef enum {
SPD_SL_UNSPECIFIED,
SPD_SL_MUTLI_STACK,
SPD_SL_3DS
} spd_signal_loading_t;
#define SPD_KEY_PKG_SL "dram.package-sig-loading"
#define SPD_KEY_SEC_PKG_SL "dram.sec-package-sig-loading"
typedef enum {
SPD_PPR_F_HARD_PPR = 1 << 0,
SPD_PPR_F_SOFT_PPR = 1 << 1,
SPD_PPR_F_MBIST_PPR = 1 << 2,
SPD_PPR_F_PPR_UNDO = 1 << 3
} spd_ppr_flags_t;
typedef enum {
SPD_PPR_GRAN_BANK_GROUP,
SPD_PPR_GRAN_BANK
} spd_ppr_gran_t;
#define SPD_KEY_PPR "dram.ppr-flags"
#define SPD_KEY_PPR_GRAN "dram.ppr-gran"
#define SPD_KEY_NOM_VDD "dram.nominal-vdd"
#define SPD_KEY_NOM_VDDQ "dram.nominal-vddq"
#define SPD_KEY_NOM_VPP "dram.nominal-vpp"
#define SPD_KEY_RANK_ASYM "dram.asymmetrical-ranks"
#define SPD_KEY_NRANKS "channel.num-ranks"
#define SPD_KEY_DRAM_WIDTH "dram.width"
#define SPD_KEY_SEC_DRAM_WIDTH "dram.sec-width"
#define SPD_KEY_DRAM_NCHAN "dram.num-channels"
#define SPD_KEY_NSUBCHAN "module.num-subchan"
#define SPD_KEY_DATA_WIDTH "channel.data-width"
#define SPD_KEY_ECC_WIDTH "channel.ecc-width"
#define SPD_KEY_LP_BYTE_MODE "lp.byte-mode"
#define SPD_KEY_LP_LOAD_DSM "lp.load-data-strobe-mask"
#define SPD_KEY_LP_LOAD_CAC "lp.load-command-address-clock"
#define SPD_KEY_LP_LOAD_CS "lp.load-chip-select"
#define SPD_KEY_MTB "dram.median-time-base"
#define SPD_KEY_FTB "dram.fine-time-base"
#define SPD_KEY_CAS "dram.cas-latencies"
#define SPD_KEY_TCKAVG_MIN "dram.t~CKAVG~min"
#define SPD_KEY_TCKAVG_MAX "dram.t~CKAVG~max"
#define SPD_KEY_TAA_MIN "dram.t~AA~min"
#define SPD_KEY_TRCD_MIN "dram.t~RCD~min"
#define SPD_KEY_TRP_MIN "dram.t~RP~min"
#define SPD_KEY_TRAS_MIN "dram.t~RAS~min"
#define SPD_KEY_TRC_MIN "dram.t~RC~min"
#define SPD_KEY_TRFC1_MIN "dram.t~RFC1~min"
#define SPD_KEY_TRFC2_MIN "dram.t~RFC2~min"
#define SPD_KEY_TFAW "dram.t~FAW~"
#define SPD_KEY_TRRD_L_MIN "dram.t~RRD_L~min"
#define SPD_KEY_TCCD_L_MIN "dram.t~CCD_S~min"
#define SPD_KEY_TWR_MIN "dram.t~WR~min"
#define SPD_KEY_TRFC4_MIN "dram.t~RFC4~min"
#define SPD_KEY_TRRD_S_MIN "dram.t~RRD_S~min"
#define SPD_KEY_TWTRS_MIN "dram.t~WTR_S~min"
#define SPD_KEY_TWTRL_MIN "dram.t~WTR_L~min"
#define SPD_KEY_TCCDLWR "dram.t~CCD_L_WR"
#define SPD_KEY_TCCDLWR2 "dram.t~CCD_L_WR2"
#define SPD_KEY_TCCDLWTR "dram.t~CCD_L_WTR"
#define SPD_KEY_TCCDSWTR "dram.t~CCD_S_WTR"
#define SPD_KEY_TRTP "dram.t~RTP~"
#define SPD_KEY_TCCDM "dram.t~CCD_M~"
#define SPD_KEY_TCCDMWR "dram.t~CCD_M_WR~"
#define SPD_KEY_TCCDMWTR "dram.t~CCD_M_WTR~"
#define SPD_KEY_TRRD_L_NCK "dram.t~RRD_L~nCK"
#define SPD_KEY_TCCD_L_NCK "dram.t~CCD_L~nCK"
#define SPD_KEY_TCCDLWR_NCK "dram.t~CCD_L_WR~nCK"
#define SPD_KEY_TCCDLWR2_NCK "dram.t~CCD_L_WR2~nCK"
#define SPD_KEY_TFAW_NCK "dram.t~FAW~nCK"
#define SPD_KEY_TCCDLWTR_NCK "dram.t~CCD_L_WTR~nCK"
#define SPD_KEY_TCCDSWTR_NCK "dram.t~CCD_S_WTR~nCK"
#define SPD_KEY_TRTP_NCK "dram.t~RTP~nCK"
#define SPD_KEY_TCCDM_NCK "dram.t~CCD_M~nCK"
#define SPD_KEY_TCCDMWR_NCK "dram.t~CCD_M_WR~nCK"
#define SPD_KEY_TCCDMWTR_NCK "dram.t~CCD_M_WTR~nCK"
#define SPD_KEY_TRFCSB "dram.t~RFCsb~"
#define SPD_KEY_TRFC1_DLR "dram.3ds-t~RFC1_dlr~"
#define SPD_KEY_TRFC2_DLR "dram.3ds-t~RFC2_dlr~"
#define SPD_KEY_TRFCSB_DLR "dram.3ds-t~RFCsb_dlr~"
#define SPD_KEY_TRPAB_MIN "dram.t~RPab~"
#define SPD_KEY_TRPPB_MIN "dram.t~RPpb~"
#define SPD_KEY_TRFCAB_MIN "dram.t~RFCab~"
#define SPD_KEY_TRFCPB_MIN "dram.t~RFCpb~"
#define SPD_KEY_MAW "dram.maw"
#define SPD_KEY_MAC "dram.mac"
#define SPD_KEY_MAC_UNLIMITED UINT32_MAX
typedef enum {
SPD_LP_RWLAT_WRITE_A = 1 << 0,
SPD_LP_RWLAT_WRITE_B = 1 << 1,
SPD_LP_RWLAT_DBIRD_EN = 1 << 2
} spd_lp_rwlat_t;
#define SPD_KEY_LP_RWLAT "lp.read-write-latency"
#define SPD_KEY_DDR_PASR "dram.pasr"
typedef enum {
SPD_DDR3_FEAT_ASR = 1 << 0,
SPD_DDR3_FEAT_DLL_OFF = 1 << 1,
SPD_DDR3_FEAT_RZQ_7 = 1 << 2,
SPD_DDR3_FEAT_RZQ_6 = 1 << 3
} spd_ddr3_feat_t;
#define SPD_KEY_DDR3_FEAT "ddr3.asr"
#define SPD_KEY_DDR3_XTRR "ddr3.xt-refresh-rate"
#define SPD_KEY_DDR5_BL32 "ddr5.bl32"
typedef enum {
SPD_DCA_UNSPPORTED,
SPD_DCA_1_OR_2_PHASE,
SPD_DCA_4_PHASE
} spd_dca_t;
#define SPD_KEY_DDR5_DCA "ddr5.dca"
#define SPD_KEY_DDR5_WIDE_TS "ddr5.wide-temp-sense"
typedef enum {
SPD_FLT_BOUNDED = 1 << 0,
SPD_FLT_WRSUP_MR9 = 1 << 1,
SPD_FLT_WRSUP_MR15 = 1 << 2
} spd_fault_t;
#define SPD_KEY_DDR5_FLT "ddr5.fault-handling"
#define SPD_KEY_DDR5_NONSTD_TIME "ddr5.non-standard-timing"
typedef enum {
SPD_RFM_F_REQUIRED = 1 << 0,
SPD_RFM_F_DRFM_SUP = 1 << 1,
} spd_rfm_flags_t;
#define SPD_KEY_DDR5_RFM_FLAGS_PRI "ddr5.rfm.flags"
#define SPD_KEY_DDR5_RFM_RAAIMT_PRI "ddr5.rfm.raaimt"
#define SPD_KEY_DDR5_RFM_RAAIMT_FGR_PRI "ddr5.rfm.raaimt-fgr"
#define SPD_KEY_DDR5_RFM_RAAMMT_PRI "ddr5.rfm.raammt"
#define SPD_KEY_DDR5_RFM_RAAMMT_FGR_PRI "ddr5.rfm.raammt-fgr"
#define SPD_KEY_DDR5_RFM_BRC_CFG_PRI "ddr5.rfm.brc-config"
typedef enum {
SPD_BRC_F_LVL_2 = 1 << 0,
SPD_BRC_F_LVL_3 = 1 << 1,
SPD_BRC_F_LVL_4 = 1 << 2
} spd_brc_flags_t;
#define SPD_KEY_DDR5_RFM_BRC_SUP_PRI "ddr5.rfm.brc-level"
#define SPD_KEY_DDR5_RFM_RAA_DEC_PRI "ddr5.rfm.raa-dec"
#define SPD_KEY_DDR5_RFM_FLAGS_SEC "ddr5.rfm.sec-flags"
#define SPD_KEY_DDR5_RFM_RAAIMT_SEC "ddr5.rfm.sec-raaimt"
#define SPD_KEY_DDR5_RFM_RAAIMT_FGR_SEC "ddr5.rfm.sec-raaimt-fgr"
#define SPD_KEY_DDR5_RFM_RAAMMT_SEC "ddr5.rfm.sec-raammt"
#define SPD_KEY_DDR5_RFM_RAAMMT_FGR_SEC "ddr5.rfm.sec-raammt-fgr"
#define SPD_KEY_DDR5_RFM_BRC_CFG_SEC "ddr5.rfm.sec-brc-config"
#define SPD_KEY_DDR5_RFM_BRC_SUP_SEC "ddr5.rfm.sec-brc-level"
#define SPD_KEY_DDR5_RFM_RAA_DEC_SEC "ddr5.rfm.sec-raa-dec"
#define SPD_KEY_DDR5_ARFMA_FLAGS_PRI "ddr5.arfm-a.flags"
#define SPD_KEY_DDR5_ARFMA_RAAIMT_PRI "ddr5.arfm-a.raaimt"
#define SPD_KEY_DDR5_ARFMA_RAAIMT_FGR_PRI "ddr5.arfm-a.raaimt-fgr"
#define SPD_KEY_DDR5_ARFMA_RAAMMT_PRI "ddr5.arfm-a.raammt"
#define SPD_KEY_DDR5_ARFMA_RAAMMT_FGR_PRI "ddr5.arfm-a.raammt-fgr"
#define SPD_KEY_DDR5_ARFMA_BRC_CFG_PRI "ddr5.arfm-a.brc-config"
#define SPD_KEY_DDR5_ARFMA_BRC_SUP_PRI "ddr5.arfm-a.brc-level"
#define SPD_KEY_DDR5_ARFMA_RAA_DEC_PRI "ddr5.arfm-a.raa-dec"
#define SPD_KEY_DDR5_ARFMA_FLAGS_SEC "ddr5.arfm-a.sec-flags"
#define SPD_KEY_DDR5_ARFMA_RAAIMT_SEC "ddr5.arfm-a.sec-raaimt"
#define SPD_KEY_DDR5_ARFMA_RAAIMT_FGR_SEC "ddr5.arfm-a.sec-raaimt-fgr"
#define SPD_KEY_DDR5_ARFMA_RAAMMT_SEC "ddr5.arfm-a.sec-raammt"
#define SPD_KEY_DDR5_ARFMA_RAAMMT_FGR_SEC "ddr5.arfm-a.sec-raammt-fgr"
#define SPD_KEY_DDR5_ARFMA_BRC_CFG_SEC "ddr5.arfm-a.sec-brc-config"
#define SPD_KEY_DDR5_ARFMA_BRC_SUP_SEC "ddr5.arfm-a.sec-brc-level"
#define SPD_KEY_DDR5_ARFMA_RAA_DEC_SEC "ddr5.arfm-a.sec-raa-dec"
#define SPD_KEY_DDR5_ARFMB_FLAGS_PRI "ddr5.arfm-b.flags"
#define SPD_KEY_DDR5_ARFMB_RAAIMT_PRI "ddr5.arfm-b.raaimt"
#define SPD_KEY_DDR5_ARFMB_RAAIMT_FGR_PRI "ddr5.arfm-b.raaimt-fgr"
#define SPD_KEY_DDR5_ARFMB_RAAMMT_PRI "ddr5.arfm-b.raammt"
#define SPD_KEY_DDR5_ARFMB_RAAMMT_FGR_PRI "ddr5.arfm-b.raammt-fgr"
#define SPD_KEY_DDR5_ARFMB_BRC_CFG_PRI "ddr5.arfm-b.brc-config"
#define SPD_KEY_DDR5_ARFMB_BRC_SUP_PRI "ddr5.arfm-b.brc-level"
#define SPD_KEY_DDR5_ARFMB_RAA_DEC_PRI "ddr5.arfm-b.raa-dec"
#define SPD_KEY_DDR5_ARFMB_FLAGS_SEC "ddr5.arfm-b.sec-flags"
#define SPD_KEY_DDR5_ARFMB_RAAIMT_SEC "ddr5.arfm-b.sec-raaimt"
#define SPD_KEY_DDR5_ARFMB_RAAIMT_FGR_SEC "ddr5.arfm-b.sec-raaimt-fgr"
#define SPD_KEY_DDR5_ARFMB_RAAMMT_SEC "ddr5.arfm-b.sec-raammt"
#define SPD_KEY_DDR5_ARFMB_RAAMMT_FGR_SEC "ddr5.arfm-b.sec-raammt-fgr"
#define SPD_KEY_DDR5_ARFMB_BRC_CFG_SEC "ddr5.arfm-b.sec-brc-config"
#define SPD_KEY_DDR5_ARFMB_BRC_SUP_SEC "ddr5.arfm-b.sec-brc-level"
#define SPD_KEY_DDR5_ARFMB_RAA_DEC_SEC "ddr5.arfm-b.sec-raa-dec"
#define SPD_KEY_DDR5_ARFMC_FLAGS_PRI "ddr5.arfm-c.flags"
#define SPD_KEY_DDR5_ARFMC_RAAIMT_PRI "ddr5.arfm-c.raaimt"
#define SPD_KEY_DDR5_ARFMC_RAAIMT_FGR_PRI "ddr5.arfm-c.raaimt-fgr"
#define SPD_KEY_DDR5_ARFMC_RAAMMT_PRI "ddr5.arfm-c.raammt"
#define SPD_KEY_DDR5_ARFMC_RAAMMT_FGR_PRI "ddr5.arfm-c.raammt-fgr"
#define SPD_KEY_DDR5_ARFMC_BRC_CFG_PRI "ddr5.arfm-c.brc-config"
#define SPD_KEY_DDR5_ARFMC_BRC_SUP_PRI "ddr5.arfm-c.brc-level"
#define SPD_KEY_DDR5_ARFMC_RAA_DEC_PRI "ddr5.arfm-c.raa-dec"
#define SPD_KEY_DDR5_ARFMC_FLAGS_SEC "ddr5.arfm-c.sec-flags"
#define SPD_KEY_DDR5_ARFMC_RAAIMT_SEC "ddr5.arfm-c.sec-raaimt"
#define SPD_KEY_DDR5_ARFMC_RAAIMT_FGR_SEC "ddr5.arfm-c.sec-raaimt-fgr"
#define SPD_KEY_DDR5_ARFMC_RAAMMT_SEC "ddr5.arfm-c.sec-raammt"
#define SPD_KEY_DDR5_ARFMC_RAAMMT_FGR_SEC "ddr5.arfm-c.sec-raammt-fgr"
#define SPD_KEY_DDR5_ARFMC_BRC_CFG_SEC "ddr5.arfm-c.sec-brc-config"
#define SPD_KEY_DDR5_ARFMC_BRC_SUP_SEC "ddr5.arfm-c.sec-brc-level"
#define SPD_KEY_DDR5_ARFMC_RAA_DEC_SEC "ddr5.arfm-c.sec-raa-dec"
typedef enum {
SPD_DRIVE_LIGHT,
SPD_DRIVE_MODERATE,
SPD_DRIVE_STRONG,
SPD_DRIVE_VERY_STRONG,
SPD_DRIVE_WEAK
} spd_drive_t;
typedef enum {
SPD_SLEW_SLOW,
SPD_SLEW_MODERATE,
SPD_SLEW_FAST
} spd_slew_t;
#define SPD_KEY_DDR3_RCD_DS_CAA "ddr3.rcd.ca-a-drive-strength"
#define SPD_KEY_DDR3_RCD_DS_CAB "ddr3.rcd.ca-b-drive-strength"
#define SPD_KEY_DDR3_RCD_DS_CTLA "ddr3.rcd.cs-a-drive-strength"
#define SPD_KEY_DDR3_RCD_DS_CTLB "ddr3.rcd.cs-b-drive-strength"
#define SPD_KEY_DDR3_RCD_DS_Y0 "ddr3.rcd.y0-drive-strength"
#define SPD_KEY_DDR3_RCD_DS_Y1 "ddr3.rcd.y1-drive-strength"
#define SPD_KEY_DDR3_MB_DS_Y0 "ddr3.mb.y0-drive-strength"
#define SPD_KEY_DDR3_MB_DS_Y1 "ddr3.mb.y1-drive-strength"
#define SPD_KEY_DDR3_MB_DS_CKE "ddr3.mb.cke-drive-strength"
#define SPD_KEY_DDR3_MB_DS_ODT "ddr3.mb.cke-drive-strength"
#define SPD_KEY_DDR3_MB_DS_CS "ddr3.mb.cs-drive-strength"
#define SPD_KEY_DDR3_MB_DS_CA "ddr3.mb.ca-drive-strength"
#define SPD_KEY_DDR4_RCD_SLEW "ddr4.rcd.rcd-slew-control"
#define SPD_KEY_DDR4_RCD_DS_CKE "ddr4.rcd.cke-drive-strength"
#define SPD_KEY_DDR4_RCD_DS_ODT "ddr4.rcd.odt-drive-strength"
#define SPD_KEY_DDR4_RCD_DS_CA "ddr4.rcd.ca-drive-strength"
#define SPD_KEY_DDR4_RCD_DS_CS "ddr4.rcd.cs-drive-strength"
#define SPD_KEY_DDR4_RCD_DS_Y0 "ddr4.rcd.y0-drive-strength"
#define SPD_KEY_DDR4_RCD_DS_Y1 "ddr4.rcd.y1-drive-strength"
#define SPD_KEY_DDR4_RCD_DS_BCOM "ddr4.rcd.bcom-drive-strength"
#define SPD_KEY_DDR4_RCD_DS_BCK "ddr4.rcd.bck-drive-strength"
typedef enum {
SPD_ORNT_HORIZONTAL,
SPD_ORNT_VERTICAL
} spd_orientation_t;
#define SPD_KEY_DDR3_MB_ORIENT "ddr3.mb.orientation"
#define SPD_KEY_DDR3_MB_EXTD_Y "ddr4.mb.y-extended-delay"
#define SPD_KEY_DDR3_MB_EXTD_CS "ddr4.mb.cs-extended-delay"
#define SPD_KEY_DDR3_MB_EXTD_ODT "ddr4.mb.odt-extended-delay"
#define SPD_KEY_DDR3_MB_EXTD_CKE "ddr4.mb.cke-extended-delay"
#define SPD_KEY_DDR3_MB_ADDD_Y "ddr4.mb.y-additive-delay"
#define SPD_KEY_DDR3_MB_ADDD_CS "ddr4.mb.cs-additive-delay"
#define SPD_KEY_DDR3_MB_ADDD_ODT "ddr4.mb.odt-additive-delay"
#define SPD_KEY_DDR3_MB_ADDD_CKE "ddr4.mb.cke-additive-delay"
#define SPD_KEY_DDR3_MB_R0_ODT0_RD "ddr3.mb.r0-qxodt0-read-assert"
#define SPD_KEY_DDR3_MB_R0_ODT1_RD "ddr3.mb.r0-qxodt1-read-assert"
#define SPD_KEY_DDR3_MB_R0_ODT0_WR "ddr3.mb.r0-qxodt0-write-assert"
#define SPD_KEY_DDR3_MB_R0_ODT1_WR "ddr3.mb.r0-qxodt1-write-assert"
#define SPD_KEY_DDR3_MB_R1_ODT0_RD "ddr3.mb.r1-qxodt0-read-assert"
#define SPD_KEY_DDR3_MB_R1_ODT1_RD "ddr3.mb.r1-qxodt1-read-assert"
#define SPD_KEY_DDR3_MB_R1_ODT0_WR "ddr3.mb.r1-qxodt0-write-assert"
#define SPD_KEY_DDR3_MB_R1_ODT1_WR "ddr3.mb.r1-qxodt1-write-assert"
#define SPD_KEY_DDR3_MB_R2_ODT0_RD "ddr3.mb.r2-qxodt0-read-assert"
#define SPD_KEY_DDR3_MB_R2_ODT1_RD "ddr3.mb.r2-qxodt1-read-assert"
#define SPD_KEY_DDR3_MB_R2_ODT0_WR "ddr3.mb.r2-qxodt0-write-assert"
#define SPD_KEY_DDR3_MB_R2_ODT1_WR "ddr3.mb.r2-qxodt1-write-assert"
#define SPD_KEY_DDR3_MB_R3_ODT0_RD "ddr3.mb.r3-qxodt0-read-assert"
#define SPD_KEY_DDR3_MB_R3_ODT1_RD "ddr3.mb.r3-qxodt1-read-assert"
#define SPD_KEY_DDR3_MB_R3_ODT0_WR "ddr3.mb.r3-qxodt0-write-assert"
#define SPD_KEY_DDR3_MB_R3_ODT1_WR "ddr3.mb.r3-qxodt1-write-assert"
#define SPD_KEY_DDR3_MB_R4_ODT0_RD "ddr3.mb.r4-qxodt0-read-assert"
#define SPD_KEY_DDR3_MB_R4_ODT1_RD "ddr3.mb.r4-qxodt1-read-assert"
#define SPD_KEY_DDR3_MB_R4_ODT0_WR "ddr3.mb.r4-qxodt0-write-assert"
#define SPD_KEY_DDR3_MB_R4_ODT1_WR "ddr3.mb.r4-qxodt1-write-assert"
#define SPD_KEY_DDR3_MB_R5_ODT0_RD "ddr3.mb.r5-qxodt0-read-assert"
#define SPD_KEY_DDR3_MB_R5_ODT1_RD "ddr3.mb.r5-qxodt1-read-assert"
#define SPD_KEY_DDR3_MB_R5_ODT0_WR "ddr3.mb.r5-qxodt0-write-assert"
#define SPD_KEY_DDR3_MB_R5_ODT1_WR "ddr3.mb.r5-qxodt1-write-assert"
#define SPD_KEY_DDR3_MB_R6_ODT0_RD "ddr3.mb.r6-qxodt0-read-assert"
#define SPD_KEY_DDR3_MB_R6_ODT1_RD "ddr3.mb.r6-qxodt1-read-assert"
#define SPD_KEY_DDR3_MB_R6_ODT0_WR "ddr3.mb.r6-qxodt0-write-assert"
#define SPD_KEY_DDR3_MB_R6_ODT1_WR "ddr3.mb.r6-qxodt1-write-assert"
#define SPD_KEY_DDR3_MB_R7_ODT0_RD "ddr3.mb.r7-qxodt0-read-assert"
#define SPD_KEY_DDR3_MB_R7_ODT1_RD "ddr3.mb.r7-qxodt1-read-assert"
#define SPD_KEY_DDR3_MB_R7_ODT0_WR "ddr3.mb.r7-qxodt0-write-assert"
#define SPD_KEY_DDR3_MB_R7_ODT1_WR "ddr3.mb.r7-qxodt1-write-assert"
#define SPD_KEY_DDR4_VREFDQ_R0 "ddr4.lrdimm.VrefDQ-rank0"
#define SPD_KEY_DDR4_VREFDQ_R1 "ddr4.lrdimm.VrefDQ-rank1"
#define SPD_KEY_DDR4_VREFDQ_R2 "ddr4.lrdimm.VrefDQ-rank2"
#define SPD_KEY_DDR4_VREFDQ_R3 "ddr4.lrdimm.VrefDQ-rank3"
#define SPD_KEY_DDR4_VREFDQ_DB "ddr4.lrdimm.VrefDQ-db"
#define SPD_TERM_DISABLED 0
#define SPD_TERM_HIZ UINT32_MAX
#define SPD_KEY_DDR4_MDQ_RTT "ddr4.lrdimm.mdq-read-termination"
#define SPD_KEY_DDR4_MDQ_DS "ddr4.lrdimm.mdq-drive-strength"
#define SPD_KEY_DDR4_DRAM_DS "ddr4.lrdimm.dram-drive-strength"
#define SPD_KEY_DDR4_RTT_WR "ddr4.lrdimm.odt-read-termination-wr"
#define SPD_KEY_DDR4_RTT_NOM "ddr4.lrdimm.odt-read-termination-nom"
#define SPD_KEY_DDR4_RTT_PARK_R0 "ddr4.lrdimm.odt-r0_1-rtt-park"
#define SPD_KEY_DDR4_RTT_PARK_R2 "ddr4.lrdimm.odt-r2_3-rtt-park"
#define SPD_KEY_DDR3_MDQ_DS "ddr3.lrdimm.mdq-drive-strength"
#define SPD_KEY_DDR3_MDQ_ODT "ddr3.lrdimm.mdq-odt-strength"
#define SPD_KEY_DDR3_RTT_WRT "ddr3.lrdimm.mdq-odt-read-termination-wr"
#define SPD_KEY_DDR3_RTT_NOM "ddr3.lrdimm.mdq-odt-read-termination-nom"
#define SPD_KEY_DDR3_DRAM_DS "ddr3.lrdimm.dram-drive-strength"
#define SPD_KEY_DDR3_MOD_MIN_DELAY "ddr3.lrdimm.minimum-module-delay"
#define SPD_KEY_DDR3_MOD_MAX_DELAY "ddr3.lrdimm.maximum-module-delay"
#define SPD_KEY_DDR3_MB_PERS "ddr3.lrdimm.personality"
#define SPD_KEY_DDR4_DB_GAIN "ddr4.lrdimm.db-gain-adjustment"
#define SPD_KEY_DDR4_DB_DFE "ddr4.lrdimm.decision-feedback-eq"
#define SPD_KEY_DDR5_RCD_QACK_EN "ddr5.rcd.qack-enabled"
#define SPD_KEY_DDR5_RCD_QBCK_EN "ddr5.rcd.qbck-enabled"
#define SPD_KEY_DDR5_RCD_QCCK_EN "ddr5.rcd.qcck-enabled"
#define SPD_KEY_DDR5_RCD_QDCK_EN "ddr5.rcd.qdck-enabled"
#define SPD_KEY_DDR5_RCD_BCK_EN "ddr5.rcd.bck-enabled"
#define SPD_KEY_DDR5_RCD_QACA_EN "ddr5.rcd.qaca-enabled"
#define SPD_KEY_DDR5_RCD_QBCA_EN "ddr5.rcd.qbca-enabled"
#define SPD_KEY_DDR5_RCD_QxCS_EN "ddr5.rcd.qxcs-enabled"
#define SPD_KEY_DDR5_RCD_QxCA13_EN "ddr5.rcd.qxca13-enabled"
#define SPD_KEY_DDR5_RCD_QACS_EN "ddr5.rcd.qacs-enabled"
#define SPD_KEY_DDR5_RCD_QBCS_EN "ddr5.rcd.qbcs-enabled"
#define SPD_KEY_DDR5_RCD_QACK_DS "ddr5.rcd.qack-drive-strength"
#define SPD_KEY_DDR5_RCD_QBCK_DS "ddr5.rcd.qbck-drive-strength"
#define SPD_KEY_DDR5_RCD_QCCK_DS "ddr5.rcd.qcck-drive-strength"
#define SPD_KEY_DDR5_RCD_QDCK_DS "ddr5.rcd.qdck-drive-strength"
#define SPD_KEY_DDR5_RCD_QxCS_DS "ddr5.rcd.qxcs-drive-strength"
#define SPD_KEY_DDR5_RCD_CA_DS "ddr5.rcd.ca-drive-strength"
#define SPD_KEY_DDR5_RCD_QCK_SLEW "ddr5.rcd.qck-slew"
#define SPD_KEY_DDR5_RCD_QCA_SLEW "ddr5.rcd.qca-slew"
#define SPD_KEY_DDR5_RCD_QCS_SLEW "ddr5.rcd.qcs-slew"
#define SPD_KEY_DDR5_RCD_BCS_EN "ddr5.rcd.bcs-enabled"
#define SPD_KEY_DDR5_RCD_BCOM_DS "ddr5.rcd.bcom-drive-strength"
#define SPD_KEY_DDR5_RCD_BCK_DS "ddr5.rcd.bck-drive-strength"
#define SPD_KEY_DDR5_RCD_RTT_TERM "ddr5.rcd.dqs-rtt"
#define SPD_KEY_DDR5_RCD_BCOM_SLEW "ddr5.rcd.bcom-slew"
#define SPD_KEY_DDR5_RCD_BCK_SLEW "ddr5.rcd.bck-slew"
#define SPD_KEY_DDR5_CKD_CHAQCK0_EN "ddr5.ckd.cha-qck0_A-enabled"
#define SPD_KEY_DDR5_CKD_CHAQCK1_EN "ddr5.ckd.cha-qck1_A-enabled"
#define SPD_KEY_DDR5_CKD_CHBQCK0_EN "ddr5.ckd.chb-qck0_B-enabled"
#define SPD_KEY_DDR5_CKD_CHBQCK1_EN "ddr5.ckd.chb-qck1_B-enabled"
#define SPD_KEY_DDR5_CKD_CHAQCK0_DS "ddr5.ckd.cha-qck0_A-drive-strength"
#define SPD_KEY_DDR5_CKD_CHAQCK1_DS "ddr5.ckd.cha-qck1_A-drive-strength"
#define SPD_KEY_DDR5_CKD_CHBQCK0_DS "ddr5.ckd.chb-qck0_B-drive-strength"
#define SPD_KEY_DDR5_CKD_CHBQCK1_DS "ddr5.ckd.chb-qck1_B-drive-strength"
#define SPD_KEY_DDR5_CKD_CHAQCK_SLEW "ddr5.ckd.cha-qck_slew"
#define SPD_KEY_DDR5_CKD_CHBQCK_SLEW "ddr5.ckd.chb-qck_slew"
#define SPD_KEY_DDR5_MRCD_QACK_EN "ddr5.mrcd.qack-enabled"
#define SPD_KEY_DDR5_MRCD_QBCK_EN "ddr5.mrcd.qbck-enabled"
#define SPD_KEY_DDR5_MRCD_QCCK_EN "ddr5.mrcd.qcck-enabled"
#define SPD_KEY_DDR5_MRCD_QDCK_EN "ddr5.mrcd.qdck-enabled"
#define SPD_KEY_DDR5_MRCD_BCK_EN "ddr5.mrcd.bck-enabled"
#define SPD_KEY_DDR5_MRCD_QACA_EN "ddr5.mrcd.qaca-enabled"
#define SPD_KEY_DDR5_MRCD_QBCA_EN "ddr5.mrcd.qbca-enabled"
#define SPD_KEY_DDR5_MRCD_BCS_EN "ddr5.mrcd.bcs-enabled"
#define SPD_KEY_DDR5_MRCD_QxCS_EN "ddr5.mrcd.qxcs-enabled"
#define SPD_KEY_DDR5_MRCD_QxCA13_EN "ddr5.mrcd.qxca13-enabled"
#define SPD_KEY_DDR5_MRCD_QACS_EN "ddr5.mrcd.qacs-enabled"
#define SPD_KEY_DDR5_MRCD_QBCS_EN "ddr5.mrcd.qbcs-enabled"
#define SPD_KEY_DDR5_MRCD_DCS1_EN "ddr5.mrcd.dcs1-enabled"
#define SPD_KEY_DDR5_MRCD_QACK_DS "ddr5.mrcd.qack-drive-strength"
#define SPD_KEY_DDR5_MRCD_QBCK_DS "ddr5.mrcd.qbck-drive-strength"
#define SPD_KEY_DDR5_MRCD_QCCK_DS "ddr5.mrcd.qcck-drive-strength"
#define SPD_KEY_DDR5_MRCD_QDCK_DS "ddr5.mrcd.qdck-drive-strength"
#define SPD_KEY_DDR5_MRCD_QxCS_DS "ddr5.mrcd.qxcs-drive-strength"
#define SPD_KEY_DDR5_MRCD_CA_DS "ddr5.mrcd.ca-drive-strength"
#define SPD_KEY_DDR5_MRCD_BCOM_DS "ddr5.mrcd.bcom-drive-strength"
#define SPD_KEY_DDR5_MRCD_BCK_DS "ddr5.mrcd.bck-drive-strength"
#define SPD_KEY_DDR5_MRCD_QCK_SLEW "ddr5.mrcd.qck-slew"
#define SPD_KEY_DDR5_MRCD_QCA_SLEW "ddr5.mrcd.qca-slew"
#define SPD_KEY_DDR5_MRCD_QCS_SLEW "ddr5.mrcd.qcs-slew"
#define SPD_KEY_DDR5_MRCD_BCOM_SLEW "ddr5.mrcd.bcom-slew"
#define SPD_KEY_DDR5_MRCD_BCK_SLEW "ddr5.mrcd.bck-slew"
typedef enum {
SPD_MRCD_OUT_NORMAL,
SPD_MRCD_OUT_DISABLED,
SPD_MRCD_OUT_LOW
} spd_mrcd_output_ctrl_t;
#define SPD_KEY_DDR5_MRCD_QxCS_OUT "ddr5.mrcd.qxcs-output-control"
typedef enum {
SPD_MRCD_DCA_CFG_0,
SPD_MRCD_DCA_CFG_1
} spd_mrcd_dca_cfg_t;
#define SPD_KEY_DDR5_MRCD_DCA_CFG "ddr5.mrcd.dca-configuration"
typedef enum {
SPD_MRDIMM_IRXT_UNMATCHED,
SPD_MRDIMM_IRXT_MATCHED
} spd_mrdimm_irxt_t;
#define SPD_KEY_DDR5_MRDIMM_IRXT "ddr5.mrdimm.interface-rx-type"
#define SPD_KEY_DDR4_MAP_DQ0 "module.dq0-map"
#define SPD_KEY_DDR4_MAP_DQ4 "module.dq4-map"
#define SPD_KEY_DDR4_MAP_DQ8 "module.dq8-map"
#define SPD_KEY_DDR4_MAP_DQ12 "module.dq12-map"
#define SPD_KEY_DDR4_MAP_DQ16 "module.dq16-map"
#define SPD_KEY_DDR4_MAP_DQ20 "module.dq20-map"
#define SPD_KEY_DDR4_MAP_DQ24 "module.dq24-map"
#define SPD_KEY_DDR4_MAP_DQ28 "module.dq28-map"
#define SPD_KEY_DDR4_MAP_DQ32 "module.dq32-map"
#define SPD_KEY_DDR4_MAP_DQ36 "module.dq36-map"
#define SPD_KEY_DDR4_MAP_DQ40 "module.dq40-map"
#define SPD_KEY_DDR4_MAP_DQ44 "module.dq44-map"
#define SPD_KEY_DDR4_MAP_DQ48 "module.dq48-map"
#define SPD_KEY_DDR4_MAP_DQ52 "module.dq52-map"
#define SPD_KEY_DDR4_MAP_DQ56 "module.dq56-map"
#define SPD_KEY_DDR4_MAP_DQ60 "module.dq60-map"
#define SPD_KEY_DDR4_MAP_CB0 "module.cb0-map"
#define SPD_KEY_DDR4_MAP_CB4 "module.cb4-map"
#define SPD_KEY_MOD_EDGE_MIRROR "module.edge-odd-mirror"
typedef enum {
SPD_DEVICE_TEMP_1 = 1 << 0,
SPD_DEVICE_TEMP_2 = 1 << 1,
SPD_DEVICE_HS = 1 << 2,
SPD_DEVICE_PMIC_0 = 1 << 3,
SPD_DEVICE_PMIC_1 = 1 << 4,
SPD_DEVICE_PMIC_2 = 1 << 5,
SPD_DEVICE_CD_0 = 1 << 6,
SPD_DEVICE_CD_1 = 1 << 7,
SPD_DEVICE_RCD = 1 << 8,
SPD_DEVICE_DB = 1 << 9,
SPD_DEVICE_MRCD = 1 << 10,
SPD_DEVICE_MDB = 1 << 11,
SPD_DEVICE_DMB = 1 << 12,
SPD_DEVICE_SPD = 1 << 13
} spd_device_t;
#define SPD_KEY_DEVS "module.devices"
typedef enum {
SPD_TEMP_T_TSE2002,
SPD_TEMP_T_TSE2004av,
SPD_TEMP_T_TS5111,
SPD_TEMP_T_TS5110,
SPD_TEMP_T_TS5211,
SPD_TEMP_T_TS5210
} spd_temp_type_t;
typedef enum {
SPD_PMIC_T_PMIC5000,
SPD_PMIC_T_PMIC5010,
SPD_PMIC_T_PMIC5100,
SPD_PMIC_T_PMIC5020,
SPD_PMIC_T_PMIC5120,
SPD_PMIC_T_PMIC5200,
SPD_PMIC_T_PMIC5030
} spd_pmic_type_t;
typedef enum {
SPD_CD_T_DDR5CK01
} spd_cd_type_t;
typedef enum {
SPD_RCD_T_SSTE32882,
SPD_RCD_T_DDR4RCD01,
SPD_RCD_T_DDR4RCD02,
SPD_RCD_T_DDR5RCD01,
SPD_RCD_T_DDR5RCD02,
SPD_RCD_T_DDR5RCD03,
SPD_RCD_T_DDR5RCD04,
SPD_RCD_T_DDR5RCD05
} spd_rcd_type_t;
typedef enum {
SPD_DB_T_DDR4DB01,
SPD_DB_T_DDR4DB02,
SPD_DB_T_DDR5DB01,
SPD_DB_T_DDR5DB02,
SPD_DB_T_DDR3MB
} spd_db_type_t;
typedef enum {
SPD_MRCD_T_DDR5MRCD01,
SPD_MRCD_T_DDR5MRCD02,
} spd_mrcd_type_t;
typedef enum {
SPD_MDB_T_DDR5MDB01,
SPD_MDB_T_DDR5MDB02
} spd_mdb_type_t;
typedef enum {
SPD_DMB_T_DMB5011
} spd_dmb_type_t;
typedef enum {
SPD_SPD_T_EE1004,
SPD_SPD_T_SPD5118,
SPD_SPD_T_ESPD5216,
SPD_SPD_T_EE1002
} spd_spd_type_t;
#define SPD_KEY_DEV_TEMP_MFG "module.temp.mfg-id"
#define SPD_KEY_DEV_TEMP_MFG_NAME "module.temp.mfg-name"
#define SPD_KEY_DEV_TEMP_TYPE "module.temp.type"
#define SPD_KEY_DEV_TEMP_REV "module.temp.revision"
#define SPD_KEY_DEV_PMIC0_MFG "module.pmic0.mfg-id"
#define SPD_KEY_DEV_PMIC0_MFG_NAME "module.pmic0.mfg-name"
#define SPD_KEY_DEV_PMIC0_TYPE "module.pmic0.type"
#define SPD_KEY_DEV_PMIC0_REV "module.pmic0.revision"
#define SPD_KEY_DEV_PMIC1_MFG "module.pmic1.mfg-id"
#define SPD_KEY_DEV_PMIC1_MFG_NAME "module.pmic1.mfg-name"
#define SPD_KEY_DEV_PMIC1_TYPE "module.pmic1.type"
#define SPD_KEY_DEV_PMIC1_REV "module.pmic1.revision"
#define SPD_KEY_DEV_PMIC2_MFG "module.pmic2.mfg-id"
#define SPD_KEY_DEV_PMIC2_MFG_NAME "module.pmic2.mfg-name"
#define SPD_KEY_DEV_PMIC2_TYPE "module.pmic2.type"
#define SPD_KEY_DEV_PMIC2_REV "module.pmic2.revision"
#define SPD_KEY_DEV_CD0_MFG "module.cd0.mfg-id"
#define SPD_KEY_DEV_CD0_MFG_NAME "module.cd0.mfg-name"
#define SPD_KEY_DEV_CD0_TYPE "module.cd0.type"
#define SPD_KEY_DEV_CD0_REV "module.cd0.revision"
#define SPD_KEY_DEV_CD1_MFG "module.cd1.mfg-id"
#define SPD_KEY_DEV_CD1_MFG_NAME "module.cd1.mfg-name"
#define SPD_KEY_DEV_CD1_TYPE "module.cd1.type"
#define SPD_KEY_DEV_CD1_REV "module.cd1.revision"
#define SPD_KEY_DEV_RCD_MFG "module.rcd.mfg-id"
#define SPD_KEY_DEV_RCD_MFG_NAME "module.rcd.mfg-name"
#define SPD_KEY_DEV_RCD_TYPE "module.rcd.type"
#define SPD_KEY_DEV_RCD_REV "module.rcd.revision"
#define SPD_KEY_DEV_DB_MFG "module.db.mfg-id"
#define SPD_KEY_DEV_DB_MFG_NAME "module.db.mfg-name"
#define SPD_KEY_DEV_DB_TYPE "module.db.type"
#define SPD_KEY_DEV_DB_REV "module.db.revision"
#define SPD_KEY_DEV_MRCD_MFG "module.mrcd.mfg-id"
#define SPD_KEY_DEV_MRCD_MFG_NAME "module.mrcd.mfg-name"
#define SPD_KEY_DEV_MRCD_TYPE "module.mrcd.type"
#define SPD_KEY_DEV_MRCD_REV "module.mrcd.revision"
#define SPD_KEY_DEV_MDB_MFG "module.mdb.mfg-id"
#define SPD_KEY_DEV_MDB_MFG_NAME "module.mdb.mfg-name"
#define SPD_KEY_DEV_MDB_TYPE "module.mdb.type"
#define SPD_KEY_DEV_MDB_REV "module.mdb.revision"
#define SPD_KEY_DEV_DMB_MFG "module.dmb.mfg-id"
#define SPD_KEY_DEV_DMB_MFG_NAME "module.dmb.mfg-name"
#define SPD_KEY_DEV_DMB_TYPE "module.dmb.type"
#define SPD_KEY_DEV_DMB_REV "module.dmb.revision"
#define SPD_KEY_DEV_SPD_MFG "module.spd.mfg-id"
#define SPD_KEY_DEV_SPD_MFG_NAME "module.spd.mfg-name"
#define SPD_KEY_DEV_SPD_TYPE "module.spd.type"
#define SPD_KEY_DEV_SPD_REV "module.spd.revision"
#define SPD_MOD_HEIGHT_LT15MM 15
#define SPD_MOD_HEIGHT_GT45MM 46
#define SPD_KEY_MOD_HEIGHT "module.height"
#define SPD_MOD_THICK_GT15MM 16
#define SPD_KEY_MOD_FRONT_THICK "module.front-thickness"
#define SPD_KEY_MOD_BACK_THICK "module.back-thickness"
#define SPD_KEY_MOD_NROWS "module.dram-die-rows"
#define SPD_KEY_MOD_NREGS "module.total-registers"
#define SPD_KEY_MOD_OPER_TEMP "module.operating-temperature"
#define SPD_KEY_MOD_REF_DESIGN "module.reference-design"
#define SPD_KEY_MOD_DESIGN_REV "module.design-revision"
#define SPD_KEY_MFG_MOD_MFG_ID "mfg.module-mfg-id"
#define SPD_KEY_MFG_MOD_MFG_NAME "mfg.module-mfg-name"
#define SPD_KEY_MFG_DRAM_MFG_ID "mfg.dram-mfg-id"
#define SPD_KEY_MFG_DRAM_MFG_NAME "mfg.dram-mfg-name"
#define SPD_KEY_MFG_MOD_LOC_ID "mfg.module-loc-id"
#define SPD_KEY_MFG_MOD_YEAR "mfg.module-year"
#define SPD_KEY_MFG_MOD_WEEK "mfg.module-week"
#define SPD_KEY_MFG_MOD_PN "mfg.module-pn"
#define SPD_KEY_MFG_MOD_SN "mfg.module-sn"
#define SPD_KEY_MFG_MOD_REV "mfg.module-rev"
#define SPD_KEY_MFG_DRAM_STEP "mfg.dram-step"
typedef enum {
SPD_ERROR_NO_XLATE,
SPD_ERROR_UNPRINT,
SPD_ERROR_NO_DATA,
SPD_ERROR_INTERNAL,
SPD_ERROR_BAD_DATA
} spd_error_kind_t;
#define SPD_KEY_INCOMPLETE "incomplete"
#define SPD_KEY_ERRS "errors"
#define SPD_KEY_ERRS_CODE "code"
#define SPD_KEY_ERRS_MSG "message"
#ifdef __cplusplus
}
#endif
#endif