1*8119dad8SRobert Mustacchi /* 2*8119dad8SRobert Mustacchi * This file and its contents are supplied under the terms of the 3*8119dad8SRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0. 4*8119dad8SRobert Mustacchi * You may only use this file in accordance with the terms of version 5*8119dad8SRobert Mustacchi * 1.0 of the CDDL. 6*8119dad8SRobert Mustacchi * 7*8119dad8SRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this 8*8119dad8SRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at 9*8119dad8SRobert Mustacchi * http://www.illumos.org/license/CDDL. 10*8119dad8SRobert Mustacchi */ 11*8119dad8SRobert Mustacchi 12*8119dad8SRobert Mustacchi /* 13*8119dad8SRobert Mustacchi * Copyright 2024 Oxide Computer Company 14*8119dad8SRobert Mustacchi */ 15*8119dad8SRobert Mustacchi 16*8119dad8SRobert Mustacchi #ifndef _SPD_DDR3_H 17*8119dad8SRobert Mustacchi #define _SPD_DDR3_H 18*8119dad8SRobert Mustacchi 19*8119dad8SRobert Mustacchi /* 20*8119dad8SRobert Mustacchi * Definitions for use in DDR3 Serial Presence Decoding 21*8119dad8SRobert Mustacchi * based on JEDEC Standard 21-C Section Annex K: Serial Presence Detect 22*8119dad8SRobert Mustacchi * (SPD) for DDR3 SDRAM Modules Release 6. 23*8119dad8SRobert Mustacchi * 24*8119dad8SRobert Mustacchi * DDR3 modules are organized in a 256 byte memory map: 25*8119dad8SRobert Mustacchi * 26*8119dad8SRobert Mustacchi * o Base Configuration and DRAM parameters (bytes 0x00-0x3b) 27*8119dad8SRobert Mustacchi * o Standard Module Parameters (bytes 0x40-0x74) these vary on whether 28*8119dad8SRobert Mustacchi * something is considered an RDIMM, UDIMM, etc. 29*8119dad8SRobert Mustacchi * o Manufacturing Information (bytes 0x75-0xaf) 30*8119dad8SRobert Mustacchi * o End User Programmable data (0xb0-0xff). 31*8119dad8SRobert Mustacchi */ 32*8119dad8SRobert Mustacchi 33*8119dad8SRobert Mustacchi #include <sys/bitext.h> 34*8119dad8SRobert Mustacchi #include "spd_common.h" 35*8119dad8SRobert Mustacchi 36*8119dad8SRobert Mustacchi #ifdef __cplusplus 37*8119dad8SRobert Mustacchi extern "C" { 38*8119dad8SRobert Mustacchi #endif 39*8119dad8SRobert Mustacchi 40*8119dad8SRobert Mustacchi /* 41*8119dad8SRobert Mustacchi * Number of Bytes Used / Number of Bytes in SPD Device / CRC Coverage 42*8119dad8SRobert Mustacchi */ 43*8119dad8SRobert Mustacchi #define SPD_DDR3_NBYTES 0x00 44*8119dad8SRobert Mustacchi #define SPD_DDR3_NBYTES_CRC(r) bitx8(r, 7, 7) 45*8119dad8SRobert Mustacchi #define SPD_DDR3_NBYTES_CRC_125 0 46*8119dad8SRobert Mustacchi #define SPD_DDR3_NBYTES_CRC_116 1 47*8119dad8SRobert Mustacchi #define SPD_DDR3_NBYTES_TOTAL(r) bitx8(r, 6, 4) 48*8119dad8SRobert Mustacchi #define SPD_DDR3_NBYTES_TOTAL_UNDEF 0 49*8119dad8SRobert Mustacchi #define SPD_DDR3_NBYTES_TOTAL_256 1 50*8119dad8SRobert Mustacchi #define SPD_DDR3_NBYTES_USED(r) bitx8(r, 3, 0) 51*8119dad8SRobert Mustacchi #define SPD_DDR3_NBYTES_USED_UNDEF 0 52*8119dad8SRobert Mustacchi #define SPD_DDR3_NBYTES_USED_128 1 53*8119dad8SRobert Mustacchi #define SPD_DDR3_NBYTES_USED_176 2 54*8119dad8SRobert Mustacchi #define SPD_DDR3_NBYTES_USED_256 3 55*8119dad8SRobert Mustacchi 56*8119dad8SRobert Mustacchi /* 57*8119dad8SRobert Mustacchi * SPD Revision. This is the same as described in SPD_DDR4_SPD_REV as 58*8119dad8SRobert Mustacchi * defined in spd_ddr4.h. 59*8119dad8SRobert Mustacchi */ 60*8119dad8SRobert Mustacchi #define SPD_DDR3_SPD_REV 0x01 61*8119dad8SRobert Mustacchi #define SPD_DDR3_SPD_REV_ENC(r) bitx8(r, 7, 4) 62*8119dad8SRobert Mustacchi #define SPD_DDR3_SPD_REV_ADD(r) bitx8(r, 3, 0) 63*8119dad8SRobert Mustacchi #define SPD_DDR3_SPD_REV_V1 1 64*8119dad8SRobert Mustacchi 65*8119dad8SRobert Mustacchi /* 66*8119dad8SRobert Mustacchi * Key Byte / DRAM Device Type. This field identifies the type of DDR device and 67*8119dad8SRobert Mustacchi * is actually consistent across all SPD versions. Known values are in the 68*8119dad8SRobert Mustacchi * spd_dram_type_t enumeration. 69*8119dad8SRobert Mustacchi */ 70*8119dad8SRobert Mustacchi #define SPD_DDR3_DRAM_TYPE 0x02 71*8119dad8SRobert Mustacchi 72*8119dad8SRobert Mustacchi /* 73*8119dad8SRobert Mustacchi * Key Byte / Module Type. This is used to describe what kind of DDR module it 74*8119dad8SRobert Mustacchi * is, which tells us what the module-specific section contents are. These bits, 75*8119dad8SRobert Mustacchi * unlike the one above are device specific. 76*8119dad8SRobert Mustacchi */ 77*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE 0x03 78*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE(r) bitx8(r, 3, 0) 79*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_UNDEF 0 80*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_RDIMM 1 81*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_UDIMM 2 82*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_SODIMM 3 83*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_MICRO_DIMM 4 84*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_MINI_RDIMM 5 85*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_MINI_UDIMM 6 86*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_MINI_CDIMM 7 87*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_72b_SORDIMM 8 88*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_72b_SOUDIMM 9 89*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_72b_SOCDIMM 10 90*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_LRDIMM 11 91*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_16b_SODIMM 12 92*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_TYPE_TYPE_32b_SODIMM 13 93*8119dad8SRobert Mustacchi 94*8119dad8SRobert Mustacchi /* 95*8119dad8SRobert Mustacchi * SDRAM Density and Banks 96*8119dad8SRobert Mustacchi */ 97*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY 0x04 98*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_NBA_BITS(r) bitx8(r, 6, 4) 99*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_NBA_BITS_BASE 3 100*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_NBA_BITS_MAX 6 101*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_DENSITY(r) bitx8(r, 3, 0) 102*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_DENSITY_256Mb 0 103*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_DENSITY_512Mb 1 104*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_DENSITY_1Gb 2 105*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_DENSITY_2Gb 3 106*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_DENSITY_4Gb 4 107*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_DENSITY_8Gb 5 108*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_DENSITY_16Gb 6 109*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_DENSITY_32Gb 7 110*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_DENSITY_12Gb 8 111*8119dad8SRobert Mustacchi #define SPD_DDR3_DENSITY_DENSITY_24Gb 9 112*8119dad8SRobert Mustacchi 113*8119dad8SRobert Mustacchi /* 114*8119dad8SRobert Mustacchi * SDRAM Addressing. 115*8119dad8SRobert Mustacchi */ 116*8119dad8SRobert Mustacchi #define SPD_DDR3_ADDR 0x05 117*8119dad8SRobert Mustacchi #define SPD_DDR3_ADDR_NROWS(r) bitx8(r, 5, 3) 118*8119dad8SRobert Mustacchi #define SPD_DDR3_ADDR_NROWS_BASE 12 119*8119dad8SRobert Mustacchi #define SPD_DDR3_ADDR_NROWS_MAX 16 120*8119dad8SRobert Mustacchi #define SPD_DDR3_ADDR_NCOLS(r) bitx8(r, 2, 0) 121*8119dad8SRobert Mustacchi #define SPD_DDR3_ADDR_NCOLS_BASE 9 122*8119dad8SRobert Mustacchi #define SPD_DDR3_ADDR_NCOLS_MAX 12 123*8119dad8SRobert Mustacchi 124*8119dad8SRobert Mustacchi /* 125*8119dad8SRobert Mustacchi * Module Nominal Voltage, VDD 126*8119dad8SRobert Mustacchi */ 127*8119dad8SRobert Mustacchi #define SPD_DDR3_VOLT 0x06 128*8119dad8SRobert Mustacchi #define SPD_DDR3_VOLT_V1P25_OPER(r) bitx8(r, 2, 2) 129*8119dad8SRobert Mustacchi #define SPD_DDR3_VOLT_V1P35_OPER(r) bitx8(r, 1, 1) 130*8119dad8SRobert Mustacchi #define SPD_DDR3_VOLT_V1P5_OPER(r) bitx8(r, 0, 0) 131*8119dad8SRobert Mustacchi 132*8119dad8SRobert Mustacchi /* 133*8119dad8SRobert Mustacchi * Module Organization 134*8119dad8SRobert Mustacchi */ 135*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_ORG 0x07 136*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_ORG_NRANKS(r) bitx(r, 5, 3) 137*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_ORG_NRANKS_1 0 138*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_ORG_NRANKS_2 1 139*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_ORG_NRANKS_3 2 140*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_ORG_NRANKS_4 3 141*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_ORG_NRANKS_8 4 142*8119dad8SRobert Mustacchi #define SPD_DDR4_MOD_ORG_WIDTH(r) bitx8(r, 2, 0) 143*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_ORG_WIDTH_BASE 2 144*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_ORG_WIDTH_MAX 32 145*8119dad8SRobert Mustacchi 146*8119dad8SRobert Mustacchi /* 147*8119dad8SRobert Mustacchi * Module Memory Bus Width 148*8119dad8SRobert Mustacchi */ 149*8119dad8SRobert Mustacchi #define SPD_DDR3_BUS_WIDTH 0x08 150*8119dad8SRobert Mustacchi #define SPD_DDR3_BUS_WIDTH_EXT(r) bitx8(r, 4, 3) 151*8119dad8SRobert Mustacchi #define SPD_DDR3_BUS_WIDTH_EXT_NONE 0 152*8119dad8SRobert Mustacchi #define SPD_DDR3_BUS_WIDTH_EXT_8b 1 153*8119dad8SRobert Mustacchi #define SPD_DDR3_BUS_WIDTH_PRI(r) bitx8(r, 2, 0) 154*8119dad8SRobert Mustacchi #define SPD_DDR3_BUS_WIDTH_PRI_BASE 3 155*8119dad8SRobert Mustacchi #define SPD_DDR3_BUS_WIDTH_PRI_MAX 64 156*8119dad8SRobert Mustacchi 157*8119dad8SRobert Mustacchi /* 158*8119dad8SRobert Mustacchi * Fine Timebase (FTB) Dividend / Divisor. While LPDDR3+ and DDR4+ use fixed 159*8119dad8SRobert Mustacchi * timebases, DDR3 does not and the fine time base is defined as a divisor and 160*8119dad8SRobert Mustacchi * dividend. 161*8119dad8SRobert Mustacchi */ 162*8119dad8SRobert Mustacchi #define SPD_DDR3_FTB 0x09 163*8119dad8SRobert Mustacchi #define SPD_DDR3_FTB_DIVIDEND(r) bitx8(r, 7, 4) 164*8119dad8SRobert Mustacchi #define SPD_DDR3_FTB_DIVISOR(r) bitx8(r, 3, 0) 165*8119dad8SRobert Mustacchi #define SPD_DDR3_FTB_PS 1 166*8119dad8SRobert Mustacchi 167*8119dad8SRobert Mustacchi /* 168*8119dad8SRobert Mustacchi * Medium Timebase (MTB) Dividend and Divisor. Like the FTB, this is split into 169*8119dad8SRobert Mustacchi * two different values. DDR3 only defines a single valid MTB value, a dividend 170*8119dad8SRobert Mustacchi * of 1 and a divisor of 8 meaning that the MTB is 125 ps. 171*8119dad8SRobert Mustacchi */ 172*8119dad8SRobert Mustacchi #define SPD_DDR3_MTB_DIVIDEND 0x0a 173*8119dad8SRobert Mustacchi #define SPD_DDR3_MTB_DIVISOR 0x0b 174*8119dad8SRobert Mustacchi #define SPD_DDR3_MTB_PS 125 175*8119dad8SRobert Mustacchi #define SPD_DDR3_MTB_125PS_DIVIDEND 1 176*8119dad8SRobert Mustacchi #define SPD_DDR3_MTB_125PS_DIVISOR 8 177*8119dad8SRobert Mustacchi 178*8119dad8SRobert Mustacchi /* 179*8119dad8SRobert Mustacchi * SDRAM Minimum Cycle Time t~CK~min. This is only in units of MTB. 180*8119dad8SRobert Mustacchi * Fine offset for ^ 181*8119dad8SRobert Mustacchi */ 182*8119dad8SRobert Mustacchi #define SPD_DDR3_TCK_MIN 0x0c 183*8119dad8SRobert Mustacchi #define SPD_DDR3_TCK_MIN_FINE 0x22 184*8119dad8SRobert Mustacchi 185*8119dad8SRobert Mustacchi /* 186*8119dad8SRobert Mustacchi * Supported CAS Latencies. There are two bytes that are used to get at what 187*8119dad8SRobert Mustacchi * speeds are supported. This starts at CL4 and goes up by 1 each time. 188*8119dad8SRobert Mustacchi */ 189*8119dad8SRobert Mustacchi #define SPD_DDR3_CAS_SUP0 0x0e 190*8119dad8SRobert Mustacchi #define SPD_DDR3_CAS_SUP1 0x0f 191*8119dad8SRobert Mustacchi #define SPD_DDR3_CAS_BASE 0x04 192*8119dad8SRobert Mustacchi 193*8119dad8SRobert Mustacchi /* 194*8119dad8SRobert Mustacchi * Minimum CAS Latency Time t~AA~min. 195*8119dad8SRobert Mustacchi * Fine Offset for ^ 196*8119dad8SRobert Mustacchi */ 197*8119dad8SRobert Mustacchi #define SPD_DDR3_TAA_MIN 0x10 198*8119dad8SRobert Mustacchi #define SPD_DDR3_TAA_MIN_FINE 0x23 199*8119dad8SRobert Mustacchi 200*8119dad8SRobert Mustacchi /* 201*8119dad8SRobert Mustacchi * Minimum Write Recovery Time t~WR~min. 202*8119dad8SRobert Mustacchi */ 203*8119dad8SRobert Mustacchi #define SPD_DDR3_TWR_MIN 0x11 204*8119dad8SRobert Mustacchi 205*8119dad8SRobert Mustacchi /* 206*8119dad8SRobert Mustacchi * Minimum RAS to CAS Delay Time t~RCD~min. 207*8119dad8SRobert Mustacchi * Fine Offset for ^ 208*8119dad8SRobert Mustacchi */ 209*8119dad8SRobert Mustacchi #define SPD_DDR3_TRCD_MIN 0x12 210*8119dad8SRobert Mustacchi #define SPD_DDR3_TRCD_MIN_FINE 0x24 211*8119dad8SRobert Mustacchi 212*8119dad8SRobert Mustacchi /* 213*8119dad8SRobert Mustacchi * Minimum Row Active to Row Active Delay Time t~RRD~min 214*8119dad8SRobert Mustacchi */ 215*8119dad8SRobert Mustacchi #define SPD_DDR3_TRRD_MIN 0x13 216*8119dad8SRobert Mustacchi 217*8119dad8SRobert Mustacchi /* 218*8119dad8SRobert Mustacchi * Minimum Row Precharge Delay Time t~RP~min. 219*8119dad8SRobert Mustacchi * Fine Offset for ^ 220*8119dad8SRobert Mustacchi */ 221*8119dad8SRobert Mustacchi #define SPD_DDR3_TRP_MIN 0x14 222*8119dad8SRobert Mustacchi #define SPD_DDR3_TRP_MIN_FINE 0x25 223*8119dad8SRobert Mustacchi 224*8119dad8SRobert Mustacchi /* 225*8119dad8SRobert Mustacchi * Upper Nibbles for t~RAS~min and t~RC~min. These are bits 11:9 of 226*8119dad8SRobert Mustacchi * these values. The lower byte is in subsequent values. 227*8119dad8SRobert Mustacchi * Minimum Active to Precharge Delay Time t~RAS~min. 228*8119dad8SRobert Mustacchi * Minimum Active to Active/Refresh Delay Time t~RC~min. 229*8119dad8SRobert Mustacchi * Fine Offset for ^ 230*8119dad8SRobert Mustacchi */ 231*8119dad8SRobert Mustacchi #define SPD_DDR3_RAS_RC_UPPER 0x15 232*8119dad8SRobert Mustacchi #define SPD_DDR3_RAS_RC_UPPER_RC(r) bitx8(r, 7, 4) 233*8119dad8SRobert Mustacchi #define SPD_DDR3_RAS_RC_UPPER_RAS(r) bitx8(r, 3, 0) 234*8119dad8SRobert Mustacchi #define SPD_DDR3_TRAS_MIN 0x16 235*8119dad8SRobert Mustacchi #define SPD_DDR3_TRC_MIN 0x17 236*8119dad8SRobert Mustacchi #define SPD_DDR3_TRC_MIN_FINE 0x26 237*8119dad8SRobert Mustacchi 238*8119dad8SRobert Mustacchi /* 239*8119dad8SRobert Mustacchi * Minimum Refresh Recovery Delay Time t~RFC~min. This value is split into two 240*8119dad8SRobert Mustacchi * bytes of MTB. 241*8119dad8SRobert Mustacchi */ 242*8119dad8SRobert Mustacchi #define SPD_DDR3_TRFC_MIN_LSB 0x18 243*8119dad8SRobert Mustacchi #define SPD_DDR3_TRFC_MIN_MSB 0x19 244*8119dad8SRobert Mustacchi 245*8119dad8SRobert Mustacchi /* 246*8119dad8SRobert Mustacchi * Minimum Internal Write to Read Command Delay t~WTR~min. 247*8119dad8SRobert Mustacchi */ 248*8119dad8SRobert Mustacchi #define SPD_DDR3_TWTR_MIN 0x1a 249*8119dad8SRobert Mustacchi 250*8119dad8SRobert Mustacchi /* 251*8119dad8SRobert Mustacchi * Minimum Internal Read to Precharge Command Delay Time t~RTP~min. 252*8119dad8SRobert Mustacchi */ 253*8119dad8SRobert Mustacchi #define SPD_DDR3_TRTP_MIN 0x1b 254*8119dad8SRobert Mustacchi 255*8119dad8SRobert Mustacchi /* 256*8119dad8SRobert Mustacchi * Upper Nibble for t~FAW~ 257*8119dad8SRobert Mustacchi * Minimum Four Activate Window Delay Time t~FAW~min 258*8119dad8SRobert Mustacchi */ 259*8119dad8SRobert Mustacchi #define SPD_DDR3_TFAW_NIB 0x1c 260*8119dad8SRobert Mustacchi #define SPD_DDR3_TFAB_NIB_UPPER_TFAW(r) bitx8(r, 3, 0) 261*8119dad8SRobert Mustacchi #define SPD_DDR3_TFAW_LSB 0x1d 262*8119dad8SRobert Mustacchi 263*8119dad8SRobert Mustacchi /* 264*8119dad8SRobert Mustacchi * SDRAM Optional Features 265*8119dad8SRobert Mustacchi */ 266*8119dad8SRobert Mustacchi #define SPD_DDR3_OPT_FEAT 0x1e 267*8119dad8SRobert Mustacchi #define SPD_DDR3_OPT_FEAT_DLLO(r) bitx8(r, 7, 7) 268*8119dad8SRobert Mustacchi #define SPD_DDR3_OPT_FEAT_RZQ7(r) bitx8(r, 1, 1) 269*8119dad8SRobert Mustacchi #define SPD_DDR3_OPT_FEAT_RZQ6(r) bitx8(r, 0, 0) 270*8119dad8SRobert Mustacchi 271*8119dad8SRobert Mustacchi /* 272*8119dad8SRobert Mustacchi * SDRAM Thermal and Refresh Options 273*8119dad8SRobert Mustacchi */ 274*8119dad8SRobert Mustacchi #define SPD_DDR3_REFRESH 0x1f 275*8119dad8SRobert Mustacchi #define SPD_DDR3_REFRESH_PASR_SUP(r) bitx8(r, 7, 7) 276*8119dad8SRobert Mustacchi #define SPD_DDR3_REFRESH_ODTS_SUP(r) bitx8(r, 3, 3) 277*8119dad8SRobert Mustacchi #define SPD_DDR3_REFRESH_ASR_SUP(r) bitx8(r, 2, 2) 278*8119dad8SRobert Mustacchi #define SPD_DDR3_REFRESH_ETR_REF(r) bitx8(r, 1, 1) 279*8119dad8SRobert Mustacchi #define SPD_DDR3_REFRESH_ETR_REF_2X 0 280*8119dad8SRobert Mustacchi #define SPD_DDR3_REFRESH_ETR_REF_1X 1 281*8119dad8SRobert Mustacchi #define SPD_DDR3_REFRESH_ETR_TEMP(r) bitx8(r, 0, 0) 282*8119dad8SRobert Mustacchi #define SPD_DDR3_REFRESH_ETR_TEMP_85C 0 283*8119dad8SRobert Mustacchi #define SPD_DDR3_REFRESH_ETR_TEMP_95C 1 284*8119dad8SRobert Mustacchi 285*8119dad8SRobert Mustacchi /* 286*8119dad8SRobert Mustacchi * Module Thermal Sensor. If present, this complies with TSE2002. The remaining 287*8119dad8SRobert Mustacchi * bits here are used for thermal sensor accuracy and all values are undefined. 288*8119dad8SRobert Mustacchi */ 289*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_THERM 0x20 290*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_THERM_PRES(r) bitx8(r, 7, 7) 291*8119dad8SRobert Mustacchi 292*8119dad8SRobert Mustacchi /* 293*8119dad8SRobert Mustacchi * SDRAM Device Type 294*8119dad8SRobert Mustacchi */ 295*8119dad8SRobert Mustacchi #define SPD_DDR3_TYPE 0x21 296*8119dad8SRobert Mustacchi #define SPD_DDR3_PKG_TYPE(r) bitx8(r, 7, 7) 297*8119dad8SRobert Mustacchi #define SPD_DDR3_PKG_TYPE_MONO 0 298*8119dad8SRobert Mustacchi #define SPD_DDR3_PKG_TYPE_NOT 1 299*8119dad8SRobert Mustacchi #define SPD_DDR3_PKG_DIE_CNT(r) bitx8(r, 6, 4) 300*8119dad8SRobert Mustacchi #define SPD_DDR3_PKG_DIE_CNT_MIN 1 301*8119dad8SRobert Mustacchi #define SPD_DDR3_PKG_DIE_CNT_MAX 8 302*8119dad8SRobert Mustacchi #define SPD_DDR3_PKG_SIG_LOAD(r) bitx8(r, 1, 0) 303*8119dad8SRobert Mustacchi #define SPD_DDR3_PKG_SIG_LOAD_UNSPEC 0 304*8119dad8SRobert Mustacchi #define SPD_DDR3_PKG_SIG_LOAD_MULTI 1 305*8119dad8SRobert Mustacchi #define SPD_DDR3_PKG_SIG_LOAD_SINGLE 2 306*8119dad8SRobert Mustacchi 307*8119dad8SRobert Mustacchi /* 308*8119dad8SRobert Mustacchi * SDRAM Maximum Active Count 309*8119dad8SRobert Mustacchi */ 310*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC 0x29 311*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC_MAW(r) bitx8(r, 5, 4) 312*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC_MAW_8192X 0 313*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC_MAW_4096X 1 314*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC_MAW_2048X 2 315*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC_MAC(r) bitx8(r, 3, 0) 316*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC_MAC_UNTESTED 0 317*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC_MAC_700K 1 318*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC_MAC_600K 2 319*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC_MAC_500K 3 320*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC_MAC_400K 4 321*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC_MAC_300K 5 322*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC_MAC_200K 6 323*8119dad8SRobert Mustacchi #define SPD_DDR3_MAC_MAC_UNLIMITED 8 324*8119dad8SRobert Mustacchi 325*8119dad8SRobert Mustacchi /* 326*8119dad8SRobert Mustacchi * Module Specific Bytes. There are four annexes defined: UDIMMs, RDIMMs, 327*8119dad8SRobert Mustacchi * CDIMMs, and LRDIMMS. 328*8119dad8SRobert Mustacchi */ 329*8119dad8SRobert Mustacchi 330*8119dad8SRobert Mustacchi /* 331*8119dad8SRobert Mustacchi * Annex K.1 Module Specific Bytes for Unbuffered Memory Module Types. 332*8119dad8SRobert Mustacchi */ 333*8119dad8SRobert Mustacchi 334*8119dad8SRobert Mustacchi /* 335*8119dad8SRobert Mustacchi * UDIMM: Raw Card Extension, Module Nominal Height. Bits 7-5 here have a raw 336*8119dad8SRobert Mustacchi * card revision. The revision extension, bits 7:5, are only valid when the 337*8119dad8SRobert Mustacchi * value of the normal reference card used in byte 0x3e is set to 0b11 (3). 338*8119dad8SRobert Mustacchi */ 339*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_HEIGHT 0x3c 340*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_HEIGHT_REV(r) bitx8(r, 7, 5) 341*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_HEIGHT_MM(r) bitx8(r, 4, 0) 342*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_HEIGHT_LT15MM 0 343*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_HEIGHT_BASE 15 344*8119dad8SRobert Mustacchi 345*8119dad8SRobert Mustacchi /* 346*8119dad8SRobert Mustacchi * UDIMM: Module Maximum Thickness. These measure thicknesses in mm, 347*8119dad8SRobert Mustacchi * with zero value meaning less than or equal to 1mm. 348*8119dad8SRobert Mustacchi */ 349*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_THICK 0x3d 350*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_THICK_BACK(r) bitx8(r, 7, 4) 351*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_THICK_FRONT(r) bitx8(r, 3, 0) 352*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_THICK_BASE 1 353*8119dad8SRobert Mustacchi 354*8119dad8SRobert Mustacchi /* 355*8119dad8SRobert Mustacchi * UDIMM: Reference Raw Card Used. Bit 7 is used as basically another 356*8119dad8SRobert Mustacchi * bit for bits 4-0. We do not define each meaning of these bit combinations in 357*8119dad8SRobert Mustacchi * this header, that is left for tables in the library. When bits 6:5 are 0b11 358*8119dad8SRobert Mustacchi * (3) then we must add in the reference card value in byte 0x80 to bits 6:5. 359*8119dad8SRobert Mustacchi */ 360*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_REF 0x3e 361*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_REF_EXT(r) bitx8(r, 7, 7) 362*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_REF_REV(r) bitx8(r, 6, 5) 363*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_REV_USE_HEIGHT 3 364*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_REF_CARD(r) bitx8(r, 4, 0) 365*8119dad8SRobert Mustacchi 366*8119dad8SRobert Mustacchi /* 367*8119dad8SRobert Mustacchi * UDIMM: Address Mapping from Edge Connector to DRAM. 368*8119dad8SRobert Mustacchi */ 369*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_MAP 0x3f 370*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_MAP_R1(r) bitx8(r, 0, 0) 371*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_MAP_R1_STD 0 372*8119dad8SRobert Mustacchi #define SPD_DDR3_UDIMM_MAP_R1_MIRROR 1 373*8119dad8SRobert Mustacchi 374*8119dad8SRobert Mustacchi /* 375*8119dad8SRobert Mustacchi * Annex K.2 Module Specific bytes for Registered Memory Module Types. 376*8119dad8SRobert Mustacchi */ 377*8119dad8SRobert Mustacchi 378*8119dad8SRobert Mustacchi /* 379*8119dad8SRobert Mustacchi * RDIMM: Raw Card Extension, Module Nominal Height 380*8119dad8SRobert Mustacchi * RDIMM: Module Maximum Thickness 381*8119dad8SRobert Mustacchi * RDIMM: Reference Raw Card Used 382*8119dad8SRobert Mustacchi * 383*8119dad8SRobert Mustacchi * These have the same definitions as the DDR3 UDIMM. 384*8119dad8SRobert Mustacchi */ 385*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_HEIGHT 0x3c 386*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_THICK 0x3d 387*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_REF 0x3e 388*8119dad8SRobert Mustacchi 389*8119dad8SRobert Mustacchi /* 390*8119dad8SRobert Mustacchi * RDIMM: DIMM Module Attributes 391*8119dad8SRobert Mustacchi */ 392*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_ATTR 0x3f 393*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_ATTR_NROWS(r) bitx8(r, 3, 2) 394*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_ATTR_NREGS(r) bitx8(r, 1, 0) 395*8119dad8SRobert Mustacchi 396*8119dad8SRobert Mustacchi /* 397*8119dad8SRobert Mustacchi * RDIMM: Thermal Heat Spreader Solution. 398*8119dad8SRobert Mustacchi */ 399*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_THERM 0x40 400*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_THERM_IMPL(r) bitx8(r, 7, 7) 401*8119dad8SRobert Mustacchi 402*8119dad8SRobert Mustacchi /* 403*8119dad8SRobert Mustacchi * RDIMM: Register Manufacturer JEDEC ID. This contains the JEDEC ID for the 404*8119dad8SRobert Mustacchi * manufacturer encoded as the number of continuation bytes and then the actual 405*8119dad8SRobert Mustacchi * code. This works with libjedec_vendor_string. 406*8119dad8SRobert Mustacchi */ 407*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_REG_MFG_ID0 0x41 408*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_REG_MFG_ID1 0x42 409*8119dad8SRobert Mustacchi 410*8119dad8SRobert Mustacchi /* 411*8119dad8SRobert Mustacchi * RDIMM: Register Revision Number. This value is just a straight up hex encoded 412*8119dad8SRobert Mustacchi * value. It's a bit arbitrary. For example, they say 0x31 can be rev 3.1, while 413*8119dad8SRobert Mustacchi * 0x01 is just revision 1, and 0xB1 is revision B1. 414*8119dad8SRobert Mustacchi */ 415*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_REV 0x43 416*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_REV_UNDEF 0xff 417*8119dad8SRobert Mustacchi 418*8119dad8SRobert Mustacchi /* 419*8119dad8SRobert Mustacchi * RDIMM: Register Type 420*8119dad8SRobert Mustacchi */ 421*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_RTYPE 0x44 422*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_RTYPE_TYPE(r) bitx8(r, 2, 0) 423*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_RTYPE_TYPE_SSTE32882 0 424*8119dad8SRobert Mustacchi 425*8119dad8SRobert Mustacchi /* 426*8119dad8SRobert Mustacchi * Byte 69 (0x45) is reserved for future use. 427*8119dad8SRobert Mustacchi */ 428*8119dad8SRobert Mustacchi 429*8119dad8SRobert Mustacchi /* 430*8119dad8SRobert Mustacchi * RDIMM: SSTE32882: RC3 / RC2 - Drive Strength, Command/Address. The lower 431*8119dad8SRobert Mustacchi * nibble is reserved. 432*8119dad8SRobert Mustacchi */ 433*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_CADS 0x46 434*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_CADS_CAA(r) bitx8(r, 5, 4) 435*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_DS_LIGHT 0 436*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_DS_MODERATE 1 437*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_DS_STRONG 2 438*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_DS_VERY_STRONG 3 /* LRDIMMs only */ 439*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_CADS_CAB(r) bitx8(r, 7, 6) 440*8119dad8SRobert Mustacchi 441*8119dad8SRobert Mustacchi /* 442*8119dad8SRobert Mustacchi * RDIMM: SSTE32882: RC5 / RC4 - Drive Strength, Control and Clock 443*8119dad8SRobert Mustacchi */ 444*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_CCDS 0x47 445*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_CCDS_CLK0(r) bitx8(r, 7, 6) 446*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_CCDS_CLK1(r) bitx8(r, 5, 4) 447*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_CCDS_CTLB(r) bitx8(r, 3, 2) 448*8119dad8SRobert Mustacchi #define SPD_DDR3_RDIMM_CCDS_CTLA(r) bitx8(r, 1, 0) 449*8119dad8SRobert Mustacchi 450*8119dad8SRobert Mustacchi /* 451*8119dad8SRobert Mustacchi * Bytes 72-76 have definitions but must be written as zero and are all 452*8119dad8SRobert Mustacchi * reserved. As such we don't define any of them. The rest of the section is 453*8119dad8SRobert Mustacchi * fully reserved. 454*8119dad8SRobert Mustacchi */ 455*8119dad8SRobert Mustacchi 456*8119dad8SRobert Mustacchi /* 457*8119dad8SRobert Mustacchi * Annex K.3: Module Specific Bytes for Clocked Memory Module Types 458*8119dad8SRobert Mustacchi * 459*8119dad8SRobert Mustacchi * CDIMM: Raw Card Extension, Module Nominal Height 460*8119dad8SRobert Mustacchi * CDIMM: Module Maximum Thickness 461*8119dad8SRobert Mustacchi * CDIMM: Reference Raw Card Used 462*8119dad8SRobert Mustacchi * 463*8119dad8SRobert Mustacchi * These have the same definitions as the DDR3 UDIMM. 464*8119dad8SRobert Mustacchi */ 465*8119dad8SRobert Mustacchi #define SPD_DDR3_CDIMM_HEIGHT 0x3c 466*8119dad8SRobert Mustacchi #define SPD_DDR3_CDIMM_THICK 0x3d 467*8119dad8SRobert Mustacchi #define SPD_DDR3_CDIMM_REF 0x3e 468*8119dad8SRobert Mustacchi 469*8119dad8SRobert Mustacchi /* 470*8119dad8SRobert Mustacchi * Annex K.4: Module Specific Bytes for Load Reduced Memory Module Types 471*8119dad8SRobert Mustacchi */ 472*8119dad8SRobert Mustacchi 473*8119dad8SRobert Mustacchi /* 474*8119dad8SRobert Mustacchi * LRDIMM: Raw Card Extension, Module Nominal Height 475*8119dad8SRobert Mustacchi * LRDIMM: Module Maximum Thickness 476*8119dad8SRobert Mustacchi * LRDIMM: Reference Raw Card Used 477*8119dad8SRobert Mustacchi * 478*8119dad8SRobert Mustacchi * These have the same definitions as the DDR3 UDIMM. 479*8119dad8SRobert Mustacchi */ 480*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_HEIGHT 0x3c 481*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_THICK 0x3d 482*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_REF 0x3e 483*8119dad8SRobert Mustacchi 484*8119dad8SRobert Mustacchi /* 485*8119dad8SRobert Mustacchi * LRDIMM: Module Attributes 486*8119dad8SRobert Mustacchi */ 487*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ATTR 0x3f 488*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ATTR_HS(r) bitx8(r, 7, 7) 489*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ATTR_RN(r) bitx8(r, 5, 5) 490*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ATTR_RN_CONTIG 0 491*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ATTR_RN_EVEN 1 492*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ATTR_ORIENT(r) bitx8(r, 4, 4) 493*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ATTR_ORIENT_VERT 0 494*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ATTR_ORIENT_HORIZ 1 495*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ATTR_NROWS(r) bitx8(r, 3, 2) 496*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ATTR_MIR(r) bitx8(r, 1, 0) 497*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ATTR_MIR_ALL_NONE 0 498*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ATTR_MIR_ODD_ARE 1 499*8119dad8SRobert Mustacchi 500*8119dad8SRobert Mustacchi /* 501*8119dad8SRobert Mustacchi * LRDIMM: Memory Buffer Revision Number 502*8119dad8SRobert Mustacchi * LRDIMM: Memory Buffer Manufacturer ID Code 503*8119dad8SRobert Mustacchi */ 504*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MB_REV 0x40 505*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MB_MFG_ID0 0x41 506*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MB_MFG_ID1 0x42 507*8119dad8SRobert Mustacchi 508*8119dad8SRobert Mustacchi /* 509*8119dad8SRobert Mustacchi * LRDIMM: F0RC3 / F0RC2 - Timing Control & Drive Strength, Address/Command & 510*8119dad8SRobert Mustacchi * QxCS_n 511*8119dad8SRobert Mustacchi * 512*8119dad8SRobert Mustacchi * Drive strength values and encodings are shared with RDIMMs. 513*8119dad8SRobert Mustacchi */ 514*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_TCDS 0x43 515*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_TCDS_QxCS(r) bitx8(r, 7, 6) 516*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_TCDS_AC(r) bitx8(r, 5, 4) 517*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_TCDS_SWAP(r) bitx8(r, 1, 1) 518*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_TCDS_SWAP_NONE 0 519*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_TCDS_SWAP_R15 1 520*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_TCDS_ACPL(r) bitx8(r, 0, 0) 521*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_TCDS_ACPL_STD 0 522*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_TCDS_ACPL_F1RC12 1 523*8119dad8SRobert Mustacchi 524*8119dad8SRobert Mustacchi /* 525*8119dad8SRobert Mustacchi * LRDIMM: F0RC5 / F0RC4 - Drive Strength, QxODT & QxCKE and Clock 526*8119dad8SRobert Mustacchi */ 527*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_CKDS 0x44 528*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_CKDS_Y0Y2(r) bitx8(r, 7, 6) 529*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_CKDS_Y1Y3(r) bitx8(r, 5, 4) 530*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_CKDS_CKE(r) bitx8(r, 3, 2) 531*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_CKDS_ODT(r) bitx8(r, 1, 0) 532*8119dad8SRobert Mustacchi 533*8119dad8SRobert Mustacchi /* 534*8119dad8SRobert Mustacchi * LRDIMM: F1RC11 / F1RC8 - Extended Delay for Clocks, QxCS_n and QxODT & QxCKE 535*8119dad8SRobert Mustacchi * 536*8119dad8SRobert Mustacchi * Delay measures are defined in terms of 1/128 clock cycles. 537*8119dad8SRobert Mustacchi */ 538*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_EXTD 0x45 539*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_EXTD_CKE(r) bitx8(r, 7, 6) 540*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_EXTD_ODT(r) bitx8(r, 5, 4) 541*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_EXTD_CS(r) bitx8(r, 3, 2) 542*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_EXTD_Y(r) bitx8(r, 1, 0) 543*8119dad8SRobert Mustacchi 544*8119dad8SRobert Mustacchi /* 545*8119dad8SRobert Mustacchi * LRDIMM: F1RC13 / F1RC12 - Additive Delay for QxCS and QxCA 546*8119dad8SRobert Mustacchi * 547*8119dad8SRobert Mustacchi * Values are shared between this and the next registers. The Y value delay 548*8119dad8SRobert Mustacchi * controls are bit 0 in SPD_DDR3_LRDIMM_TCDS_ACPL. 549*8119dad8SRobert Mustacchi */ 550*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ADDD_CSY 0x46 551*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ADDD_CSY_CS_EN(r) bitx8(r, 7, 7) 552*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ADDD_CSY_CS(r) bitx8(r, 6, 4) 553*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ADDD_CSY_Y(r) bitx8(r, 2, 0) 554*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ADD_BASE 8 555*8119dad8SRobert Mustacchi 556*8119dad8SRobert Mustacchi /* 557*8119dad8SRobert Mustacchi * LRDIMM: F1RC15 / F1RC14 - Additive Delay for QxODT and QxCKE 558*8119dad8SRobert Mustacchi */ 559*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ADDD_ODT 0x47 560*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ADDD_ODT_CKE_EN(r) bitx8(r, 7, 7) 561*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ADDD_ODT_CKE(r) bitx8(r, 6, 4) 562*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ADDD_ODT_ODT_EN(r) bitx8(r, 3, 3) 563*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ADDD_ODT_ODT(r) bitx8(r, 2, 0) 564*8119dad8SRobert Mustacchi 565*8119dad8SRobert Mustacchi /* 566*8119dad8SRobert Mustacchi * This constant represents the gap between a register and its corresponding 567*8119dad8SRobert Mustacchi * speed variants. This section of LRDIMM data has a version for 800, 133, and 568*8119dad8SRobert Mustacchi * 1866 which are all 6 registers apart. 569*8119dad8SRobert Mustacchi */ 570*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_STRIDE 6 571*8119dad8SRobert Mustacchi 572*8119dad8SRobert Mustacchi /* 573*8119dad8SRobert Mustacchi * LRDIMM: F3RC9 / F3RC8 - DRAM Interface MDQ Termination and Drive Strength 574*8119dad8SRobert Mustacchi * <= 1066 575*8119dad8SRobert Mustacchi * LRDIMM: F3RC9 / F3RC8 - DRAM Interface MDQ Termination and Drive Strength 576*8119dad8SRobert Mustacchi * >= 1333 <= 1600 577*8119dad8SRobert Mustacchi * LRDIMM: F3RC9 / F3RC8 - DRAM Interface MDQ Termination and Drive Strength 578*8119dad8SRobert Mustacchi * >= 1866 <= 2133 579*8119dad8SRobert Mustacchi */ 580*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_800 0x48 581*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_1333 0x4e 582*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_1866 0x54 583*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_DS(r) bitx8(r, 6, 4) 584*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_DS_40R 0 585*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_DS_34R 1 586*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_DS_48R 2 587*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_DS_27R 3 588*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_DS_20R 4 589*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_ODT(r) bitx8(r, 2, 0) 590*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_ODT_DIS 0 591*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_ODT_60R 1 592*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_ODT_120R 2 593*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_ODT_40R 3 594*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_ODT_30R 5 595*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_ODT_240R 6 596*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MDQ_ODT_80R 7 597*8119dad8SRobert Mustacchi 598*8119dad8SRobert Mustacchi /* 599*8119dad8SRobert Mustacchi * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 0/1 R/W QxODT Control <= 1066 600*8119dad8SRobert Mustacchi * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 2/3 R/W QxODT Control <= 1066 601*8119dad8SRobert Mustacchi * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 4/5 R/W QxODT Control <= 1066 602*8119dad8SRobert Mustacchi * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 6/7 R/W QxODT Control <= 1066 603*8119dad8SRobert Mustacchi * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 0/1 R/W QxODT Control >= 1333 <= 1600 604*8119dad8SRobert Mustacchi * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 2/3 R/W QxODT Control >= 1333 <= 1600 605*8119dad8SRobert Mustacchi * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 4/5 R/W QxODT Control >= 1333 <= 1600 606*8119dad8SRobert Mustacchi * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 6/7 R/W QxODT Control >= 1333 <= 1600 607*8119dad8SRobert Mustacchi * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 0/1 R/W QxODT Control >= 1866 <= 2133 608*8119dad8SRobert Mustacchi * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 2/3 R/W QxODT Control >= 1866 <= 2133 609*8119dad8SRobert Mustacchi * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 4/5 R/W QxODT Control >= 1866 <= 2133 610*8119dad8SRobert Mustacchi * LRDIMM: F[3,4]RC11 / F[3,4]RC10 - Rank 6/7 R/W QxODT Control >= 1866 <= 2133 611*8119dad8SRobert Mustacchi * 612*8119dad8SRobert Mustacchi * These registers all have the same layout, just different targeted ranks. 613*8119dad8SRobert Mustacchi */ 614*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R0_800 0x49 615*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R2_800 0x4a 616*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R4_800 0x4b 617*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R6_800 0x4c 618*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R0_1333 0x4f 619*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R2_1333 0x50 620*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R4_1333 0x51 621*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R6_1333 0x52 622*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R0_1866 0x55 623*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R2_1866 0x56 624*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R4_1866 0x57 625*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R6_1866 0x58 626*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R1_ODT1_WR(r) bitx8(r, 7, 7) 627*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R1_ODT0_WR(r) bitx8(r, 6, 6) 628*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R0_ODT1_WR(r) bitx8(r, 5, 5) 629*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R0_ODT0_WR(r) bitx8(r, 4, 4) 630*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R1_ODT1_RD(r) bitx8(r, 3, 3) 631*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R1_ODT0_RD(r) bitx8(r, 2, 2) 632*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R0_ODT1_RD(r) bitx8(r, 1, 1) 633*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_ODT_R0_ODT0_RD(r) bitx8(r, 0, 0) 634*8119dad8SRobert Mustacchi 635*8119dad8SRobert Mustacchi /* 636*8119dad8SRobert Mustacchi * LRDIMM: MR1,2 <= 1066 637*8119dad8SRobert Mustacchi * LRDIMM: MR1,2 >= 1333 <= 1600 638*8119dad8SRobert Mustacchi * LRDIMM: MR1,2 >= 1866 <= 2133 639*8119dad8SRobert Mustacchi */ 640*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_800 0x4d 641*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_1333 0x53 642*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_1866 0x59 643*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_WR(r) bitx8(r, 7, 6) 644*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_WR_DIS 0 645*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_WR_60R 1 646*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_WR_120R 2 647*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_NOM(r) bitx8(r, 4, 2) 648*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_NOM_DIS 0 649*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_NOM_60R 1 650*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_NOM_120R 2 651*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_NOM_40R 3 652*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_NOM_20R 4 653*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_NOM_30R 5 654*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_IMP(r) bitx8(r, 1, 0) 655*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_IMP_40R 0 656*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_RTT_IMP_34R 1 657*8119dad8SRobert Mustacchi 658*8119dad8SRobert Mustacchi /* 659*8119dad8SRobert Mustacchi * LRDIMM: Minimum Module Delay Time for 1.5V 660*8119dad8SRobert Mustacchi * LRDIMM: Maximum Module Delay Time for 1.5V 661*8119dad8SRobert Mustacchi * LRDIMM: Minimum Module Delay Time for 1.35V 662*8119dad8SRobert Mustacchi * LRDIMM: Maximum Module Delay Time for 1.35V 663*8119dad8SRobert Mustacchi * LRDIMM: Minimum Module Delay Time for 1.25V 664*8119dad8SRobert Mustacchi * LRDIMM: Maximum Module Delay Time for 1.25V 665*8119dad8SRobert Mustacchi */ 666*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MIN_DELAY_1V5 0x5a 667*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MAX_DELAY_1V5 0x5b 668*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MIN_DELAY_1V35 0x5c 669*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MAX_DELAY_1V35 0x5d 670*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MIN_DELAY_1V25 0x5e 671*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_MAX_DELAY_1V25 0x5f 672*8119dad8SRobert Mustacchi 673*8119dad8SRobert Mustacchi /* 674*8119dad8SRobert Mustacchi * LRDIMM: Memory Buffer Personality Bytes 675*8119dad8SRobert Mustacchi */ 676*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_PERS 0x66 677*8119dad8SRobert Mustacchi #define SPD_DDR3_LRDIMM_PERS_NBYTES 15 678*8119dad8SRobert Mustacchi 679*8119dad8SRobert Mustacchi 680*8119dad8SRobert Mustacchi /* 681*8119dad8SRobert Mustacchi * S2.3 Unique Module ID Bytes. This is a two byte JEP-108 style ID. 682*8119dad8SRobert Mustacchi */ 683*8119dad8SRobert Mustacchi #define SPD_DDR3_MFG_MOD_ID0 0x75 684*8119dad8SRobert Mustacchi #define SPD_DDR3_MFG_MOD_ID1 0x76 685*8119dad8SRobert Mustacchi 686*8119dad8SRobert Mustacchi /* 687*8119dad8SRobert Mustacchi * Module Manufacturing Location 688*8119dad8SRobert Mustacchi */ 689*8119dad8SRobert Mustacchi #define SPD_DDR3_MFG_LOC 0x77 690*8119dad8SRobert Mustacchi 691*8119dad8SRobert Mustacchi /* 692*8119dad8SRobert Mustacchi * Module Manufacturing Date. Encoded as two BCD bytes for the year and week. 693*8119dad8SRobert Mustacchi */ 694*8119dad8SRobert Mustacchi #define SPD_DDR3_MFG_YEAR 0x78 695*8119dad8SRobert Mustacchi #define SPD_DDR3_MFG_WEEK 0x79 696*8119dad8SRobert Mustacchi 697*8119dad8SRobert Mustacchi /* 698*8119dad8SRobert Mustacchi * Module Serial Number 699*8119dad8SRobert Mustacchi */ 700*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_SN 0x7a 701*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_SN_LEN 4 702*8119dad8SRobert Mustacchi 703*8119dad8SRobert Mustacchi /* 704*8119dad8SRobert Mustacchi * SPD Cyclical Redundancy Code (CRC) 705*8119dad8SRobert Mustacchi */ 706*8119dad8SRobert Mustacchi #define SPD_DDR3_CRC_LSB 0x7e 707*8119dad8SRobert Mustacchi #define SPD_DDR3_CRC_MSB 0x7f 708*8119dad8SRobert Mustacchi 709*8119dad8SRobert Mustacchi /* 710*8119dad8SRobert Mustacchi * Module Part Number 711*8119dad8SRobert Mustacchi */ 712*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_PN 0x80 713*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_PN_LEN 18 714*8119dad8SRobert Mustacchi 715*8119dad8SRobert Mustacchi /* 716*8119dad8SRobert Mustacchi * Module Revision Code 717*8119dad8SRobert Mustacchi */ 718*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_REV 0x92 719*8119dad8SRobert Mustacchi #define SPD_DDR3_MOD_REV_LEN 2 720*8119dad8SRobert Mustacchi 721*8119dad8SRobert Mustacchi /* 722*8119dad8SRobert Mustacchi * DRAM Manufacturer ID Code. This is a two byte JEP-108 style ID. 723*8119dad8SRobert Mustacchi */ 724*8119dad8SRobert Mustacchi #define SPD_DDR3_MFG_DRAM_ID0 0x94 725*8119dad8SRobert Mustacchi #define SPD_DDR3_MFG_DRAM_ID1 0x95 726*8119dad8SRobert Mustacchi 727*8119dad8SRobert Mustacchi /* 728*8119dad8SRobert Mustacchi * The remaining portions of this are defined for the manufacturer's and end 729*8119dad8SRobert Mustacchi * user's use. 730*8119dad8SRobert Mustacchi */ 731*8119dad8SRobert Mustacchi 732*8119dad8SRobert Mustacchi #ifdef __cplusplus 733*8119dad8SRobert Mustacchi } 734*8119dad8SRobert Mustacchi #endif 735*8119dad8SRobert Mustacchi 736*8119dad8SRobert Mustacchi #endif /* _SPD_DDR3_H */ 737