1*fe82ebb0SRobert Mustacchi /* 2*fe82ebb0SRobert Mustacchi * This file and its contents are supplied under the terms of the 3*fe82ebb0SRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0. 4*fe82ebb0SRobert Mustacchi * You may only use this file in accordance with the terms of version 5*fe82ebb0SRobert Mustacchi * 1.0 of the CDDL. 6*fe82ebb0SRobert Mustacchi * 7*fe82ebb0SRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this 8*fe82ebb0SRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at 9*fe82ebb0SRobert Mustacchi * http://www.illumos.org/license/CDDL. 10*fe82ebb0SRobert Mustacchi */ 11*fe82ebb0SRobert Mustacchi 12*fe82ebb0SRobert Mustacchi /* 13*fe82ebb0SRobert Mustacchi * Copyright 2023 Oxide Computer Company 14*fe82ebb0SRobert Mustacchi */ 15*fe82ebb0SRobert Mustacchi 16*fe82ebb0SRobert Mustacchi #ifndef _SPD_DDR4_H 17*fe82ebb0SRobert Mustacchi #define _SPD_DDR4_H 18*fe82ebb0SRobert Mustacchi 19*fe82ebb0SRobert Mustacchi /* 20*fe82ebb0SRobert Mustacchi * Definitions for use in DDR4 Serial Presence Detect decoding based on JEDEC 21*fe82ebb0SRobert Mustacchi * Standard 21-C Annex L: Serial Presence Detect (SPD) for DDR4 SDRAM Modules 22*fe82ebb0SRobert Mustacchi * Release 6. 23*fe82ebb0SRobert Mustacchi * 24*fe82ebb0SRobert Mustacchi * DDR4 modules are organized into a few main regions: 25*fe82ebb0SRobert Mustacchi * 26*fe82ebb0SRobert Mustacchi * o Base Configuration and DRAM parameters (bytes 0x00-0x7f) 27*fe82ebb0SRobert Mustacchi * o Standard Module Parameters (bytes 0x80-0xbf) these vary on whether 28*fe82ebb0SRobert Mustacchi * something is considered an RDIMM, UDIMM, LRDIMM, etc. 29*fe82ebb0SRobert Mustacchi * o Hybrid Module Parameters (bytes 0xc0-0xff) 30*fe82ebb0SRobert Mustacchi * o Hybrid Module Extended Parameters (bytes 0x100-0x13f). 31*fe82ebb0SRobert Mustacchi * o Manufacturing Information (bytes 0x140-0x17f) 32*fe82ebb0SRobert Mustacchi * o End User Programmable data (0x180-0x1ff). 33*fe82ebb0SRobert Mustacchi * 34*fe82ebb0SRobert Mustacchi * This does not currently provide definitions for DDR4 NVDIMMs. 35*fe82ebb0SRobert Mustacchi */ 36*fe82ebb0SRobert Mustacchi 37*fe82ebb0SRobert Mustacchi #include <sys/bitext.h> 38*fe82ebb0SRobert Mustacchi #include "spd_common.h" 39*fe82ebb0SRobert Mustacchi 40*fe82ebb0SRobert Mustacchi #ifdef __cplusplus 41*fe82ebb0SRobert Mustacchi extern "C" { 42*fe82ebb0SRobert Mustacchi #endif 43*fe82ebb0SRobert Mustacchi 44*fe82ebb0SRobert Mustacchi /* 45*fe82ebb0SRobert Mustacchi * S8.1.1 Number of Bytes Used / Number of Bytes in SPD Device. 46*fe82ebb0SRobert Mustacchi */ 47*fe82ebb0SRobert Mustacchi #define SPD_DDR4_NBYTES 0x000 48*fe82ebb0SRobert Mustacchi #define SPD_DDR4_NBYTES_USED(r) bitx8(r, 3, 0) 49*fe82ebb0SRobert Mustacchi #define SPD_DDR4_NBYTES_USED_UNDEF 0 50*fe82ebb0SRobert Mustacchi #define SPD_DDR4_NBYTES_USED_128 1 51*fe82ebb0SRobert Mustacchi #define SPD_DDR4_NBYTES_USED_256 2 52*fe82ebb0SRobert Mustacchi #define SPD_DDR4_NBYTES_USED_384 3 53*fe82ebb0SRobert Mustacchi #define SPD_DDR4_NBYTES_USED_512 4 54*fe82ebb0SRobert Mustacchi #define SPD_DDR4_NBYTES_TOTAL(r) bitx8(r, 6, 4) 55*fe82ebb0SRobert Mustacchi #define SPD_DDR4_NBYTES_TOTAL_UNDEF 0 56*fe82ebb0SRobert Mustacchi #define SPD_DDR4_NBYTES_TOTAL_256 1 57*fe82ebb0SRobert Mustacchi #define SPD_DDR4_NBYTES_TOTAL_512 2 58*fe82ebb0SRobert Mustacchi 59*fe82ebb0SRobert Mustacchi /* 60*fe82ebb0SRobert Mustacchi * S8.1.2: SPD Revision. The SPD revision is split into two 4-bit fields. There 61*fe82ebb0SRobert Mustacchi * is an encoding level and an additions level. This can be somewhat thought of 62*fe82ebb0SRobert Mustacchi * like a major and minor version. The upper 4-bit encoding level tells us 63*fe82ebb0SRobert Mustacchi * whether or not we can parse it. The additions level just says what's been 64*fe82ebb0SRobert Mustacchi * added, but it doesn't reset across major versions. 65*fe82ebb0SRobert Mustacchi * 66*fe82ebb0SRobert Mustacchi * Currently all DDR4 devices are at encoding revision 1. The additions level 67*fe82ebb0SRobert Mustacchi * varies based on the type of DDR4 device (RDIMM, UDIMM, etc.). 68*fe82ebb0SRobert Mustacchi */ 69*fe82ebb0SRobert Mustacchi #define SPD_DDR4_SPD_REV 0x001 70*fe82ebb0SRobert Mustacchi #define SPD_DDR4_SPD_REV_ENC(r) bitx8(r, 7, 4) 71*fe82ebb0SRobert Mustacchi #define SPD_DDR4_SPD_REV_ADD(r) bitx8(r, 3, 0) 72*fe82ebb0SRobert Mustacchi #define SPD_DDR4_SPD_REV_V1 1 73*fe82ebb0SRobert Mustacchi 74*fe82ebb0SRobert Mustacchi /* 75*fe82ebb0SRobert Mustacchi * S8.1.3: Key Byte / DRAM Device Type. This field identifies the type of DDR 76*fe82ebb0SRobert Mustacchi * device and is actually consistent across all SPD versions. Known values are 77*fe82ebb0SRobert Mustacchi * in the spd_dram_type_t enumeration. 78*fe82ebb0SRobert Mustacchi */ 79*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DRAM_TYPE 0x002 80*fe82ebb0SRobert Mustacchi 81*fe82ebb0SRobert Mustacchi /* 82*fe82ebb0SRobert Mustacchi * S8.1.4: Key Byte / Module type. This is used to describe what kind of DDR 83*fe82ebb0SRobert Mustacchi * module it is, which tell us what the module-specific section contents are. 84*fe82ebb0SRobert Mustacchi * These bits, unlike the one above are device specific. 85*fe82ebb0SRobert Mustacchi */ 86*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE 0x003 87*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_ISHYBRID(r) bitx8(r, 7, 7) 88*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_HYBRID(r) bitx8(r, 6, 4) 89*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_HYBRID_NONE 0 90*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_HYBRID_NVDIMM_NF 1 91*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_HYBRID_NVDIMM_P 2 92*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_HYBRID_NVDIMM_H 3 93*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_TYPE(r) bitx8(r, 3, 0) 94*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_TYPE_EXT 0 95*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_TYPE_RDIMM 1 96*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_TYPE_UDIMM 2 97*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_TYPE_SODIMM 3 98*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_TYPE_LRDIMM 4 99*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_TYPE_MINI_RDIMM 5 100*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_TYPE_MINI_UDIMM 6 101*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_TYPE_72b_SORDIMM 8 102*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_TYPE_72b_SOUDIMM 9 103*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_TYPE_16b_SODIMM 12 104*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_TYPE_TYPE_32b_SODIMM 13 105*fe82ebb0SRobert Mustacchi 106*fe82ebb0SRobert Mustacchi /* 107*fe82ebb0SRobert Mustacchi * S8.1.5 SDRAM Density and Banks. 108*fe82ebb0SRobert Mustacchi */ 109*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY 0x004 110*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_NBG_BITS(r) bitx8(r, 7, 6) 111*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_NBG_BITS_MAX 2 112*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_NBA_BITS(r) bitx8(r, 5, 4) 113*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_NBA_BITS_BASE 2 114*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_NBA_BITS_MAX 3 115*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_DENSITY(r) bitx8(r, 3, 0) 116*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_DENSITY_256Mb 0 117*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_DENSITY_512Mb 1 118*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_DENSITY_1Gb 2 119*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_DENSITY_2Gb 3 120*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_DENSITY_4Gb 4 121*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_DENSITY_8Gb 5 122*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_DENSITY_16Gb 6 123*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_DENSITY_32Gb 7 124*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_DENSITY_12Gb 8 125*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DENSITY_DENSITY_24Gb 9 126*fe82ebb0SRobert Mustacchi 127*fe82ebb0SRobert Mustacchi /* 128*fe82ebb0SRobert Mustacchi * S8.1.6 SDRAM Addressing. 129*fe82ebb0SRobert Mustacchi */ 130*fe82ebb0SRobert Mustacchi #define SPD_DDR4_ADDR 0x005 131*fe82ebb0SRobert Mustacchi #define SPD_DDR4_ADDR_NROWS(r) bitx8(r, 5, 3) 132*fe82ebb0SRobert Mustacchi #define SPD_DDR4_ADDR_NROWS_BASE 12 133*fe82ebb0SRobert Mustacchi #define SPD_DDR4_ADDR_NROWS_MAX 18 134*fe82ebb0SRobert Mustacchi #define SPD_DDR4_ADDR_NCOLS(r) bitx8(r, 2, 0) 135*fe82ebb0SRobert Mustacchi #define SPD_DDR4_ADDR_NCOLS_BASE 9 136*fe82ebb0SRobert Mustacchi #define SPD_DDR4_ADDR_NCOLS_MAX 12 137*fe82ebb0SRobert Mustacchi 138*fe82ebb0SRobert Mustacchi /* 139*fe82ebb0SRobert Mustacchi * S8.1.7 Primary SDRAM Package Type 140*fe82ebb0SRobert Mustacchi * S8.1.11 Secondary SDRAM Package Type 141*fe82ebb0SRobert Mustacchi * 142*fe82ebb0SRobert Mustacchi * This contains information about the package types that are present. The 143*fe82ebb0SRobert Mustacchi * secondary is only used when asymmetrical SDRAM types are present. These are 144*fe82ebb0SRobert Mustacchi * generally the same bits and meanings, with the one exception that the bits 145*fe82ebb0SRobert Mustacchi * 3:2 must be 0 in the primary. As such, we try to reuse definitions. In the 146*fe82ebb0SRobert Mustacchi * ratio macros, the 1S and 2S refer to the fact that they are 1 and 2 module 147*fe82ebb0SRobert Mustacchi * densities smaller. 148*fe82ebb0SRobert Mustacchi */ 149*fe82ebb0SRobert Mustacchi #define SPD_DDR4_PRI_PKG 0x006 150*fe82ebb0SRobert Mustacchi #define SPD_DDR4_SEC_PKG 0x00a 151*fe82ebb0SRobert Mustacchi #define SPD_DDR4_PKG_TYPE(r) bitx8(r, 7, 7) 152*fe82ebb0SRobert Mustacchi #define SPD_DDR4_PKG_TYPE_MONO 0 153*fe82ebb0SRobert Mustacchi #define SPD_DDR4_PKG_TYPE_NOT 1 154*fe82ebb0SRobert Mustacchi #define SPD_DDR4_PKG_DIE_CNT(r) bitx8(r, 6, 4) 155*fe82ebb0SRobert Mustacchi #define SPD_DDR4_PKG_DIE_CNT_BASE 1 156*fe82ebb0SRobert Mustacchi #define SPD_DDR4_SEC_PKG_RATIO(r) bitx8(r, 3, 2) 157*fe82ebb0SRobert Mustacchi #define SPD_DDR4_SEC_PKG_RATIO_EQ 0 158*fe82ebb0SRobert Mustacchi #define SPD_DDR4_SEC_PKG_RATIO_1S 1 159*fe82ebb0SRobert Mustacchi #define SPD_DDR4_SEC_PKG_RATIO_2S 2 160*fe82ebb0SRobert Mustacchi #define SPD_DDR4_PKG_SIG_LOAD(r) bitx8(r, 1, 0) 161*fe82ebb0SRobert Mustacchi #define SPD_DDR4_PKG_SIG_LOAD_UNSPEC 0 162*fe82ebb0SRobert Mustacchi #define SPD_DDR4_PKG_SIG_LOAD_MULTI 1 163*fe82ebb0SRobert Mustacchi #define SPD_DDR4_PKG_SIG_LOAD_SINGLE 2 164*fe82ebb0SRobert Mustacchi 165*fe82ebb0SRobert Mustacchi /* 166*fe82ebb0SRobert Mustacchi * S8.1.8 SDRAM Optional Features. 167*fe82ebb0SRobert Mustacchi */ 168*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT 0x007 169*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT_MAW(r) bitx8(r, 5, 4) 170*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT_MAW_8192X 0 171*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT_MAW_4096X 1 172*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT_MAW_2048X 2 173*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT_MAC(r) bitx8(r, 3, 0) 174*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT_MAC_UNTESTED 0 175*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT_MAC_700K 1 176*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT_MAC_600K 2 177*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT_MAC_500K 3 178*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT_MAC_400K 4 179*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT_MAC_300K 5 180*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT_MAC_200K 6 181*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT_MAC_UNLIMITED 8 182*fe82ebb0SRobert Mustacchi 183*fe82ebb0SRobert Mustacchi /* 184*fe82ebb0SRobert Mustacchi * S8.1.9 SDRAM Thermal and Refresh Options. This in theory is supposed to have 185*fe82ebb0SRobert Mustacchi * additional information from a data sheet; however, this field is noted as 186*fe82ebb0SRobert Mustacchi * reserved as zero. Therefore we entirely ignore this byte. 187*fe82ebb0SRobert Mustacchi */ 188*fe82ebb0SRobert Mustacchi 189*fe82ebb0SRobert Mustacchi /* 190*fe82ebb0SRobert Mustacchi * S8.1.10 Other SDRAM Optional Features. These are even more that aren't in the 191*fe82ebb0SRobert Mustacchi * first set of optional features. 192*fe82ebb0SRobert Mustacchi */ 193*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT2 0x009 194*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT2_PPR(r) bitx8(r, 7, 6) 195*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT2_PPR_NOTSUP 0 196*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT2_PPR_1RPBG 1 197*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT2_SOFT_PPR(r) bitx8(r, 5, 5) 198*fe82ebb0SRobert Mustacchi #define SPD_DDR4_OPT_FEAT2_MBIST_PPR(r) bitx8(r, 4, 4) 199*fe82ebb0SRobert Mustacchi 200*fe82ebb0SRobert Mustacchi /* 201*fe82ebb0SRobert Mustacchi * S8.1.12 Module Nominal Voltage, VDD. 202*fe82ebb0SRobert Mustacchi */ 203*fe82ebb0SRobert Mustacchi #define SPD_DDR4_VOLT 0x00b 204*fe82ebb0SRobert Mustacchi #define SPD_DDR4_VOLT_V1P2_ENDUR(r) bitx8(r, 1, 1) 205*fe82ebb0SRobert Mustacchi #define SPD_DDR4_VOLT_V1P2_OPER(r) bitx8(r, 0, 0) 206*fe82ebb0SRobert Mustacchi 207*fe82ebb0SRobert Mustacchi /* 208*fe82ebb0SRobert Mustacchi * S8.1.13 Module Organization 209*fe82ebb0SRobert Mustacchi */ 210*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_ORG 0x00c 211*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_ORG_RANK_MIX(r) bitx8(r, 6, 6) 212*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_ORG_RANK_MIX_SYM 0 213*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_ORG_RANK_MIX_ASYM 1 214*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_ORG_NPKG_RANK(r) bitx8(r, 5, 3) 215*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_ORG_NPKG_RANK_BASE 1 216*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_ORG_WIDTH(r) bitx8(r, 2, 0) 217*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_ORG_WIDTH_4b 0 218*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_ORG_WIDTH_8b 1 219*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_ORG_WIDTH_16b 2 220*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_ORG_WIDTH_32b 3 221*fe82ebb0SRobert Mustacchi 222*fe82ebb0SRobert Mustacchi /* 223*fe82ebb0SRobert Mustacchi * S8.1.14 Module Memory Bus Width. The extensions here are generally used for 224*fe82ebb0SRobert Mustacchi * ECC. 225*fe82ebb0SRobert Mustacchi */ 226*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_BUS_WIDTH 0x00d 227*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_BUS_WIDTH_EXT(r) bitx8(r, 4, 3) 228*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_BUS_WIDTH_EXT_NONE 0 229*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_BUS_WIDTH_EXT_8b 1 230*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_BUS_WIDTH_PRI(r) bitx8(r, 2, 0) 231*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_BUS_WIDTH_PRI_8b 0 232*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_BUS_WIDTH_PRI_16b 1 233*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_BUS_WIDTH_PRI_32b 2 234*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_BUS_WIDTH_PRI_64b 3 235*fe82ebb0SRobert Mustacchi 236*fe82ebb0SRobert Mustacchi /* 237*fe82ebb0SRobert Mustacchi * S8.1.15 Module Thermal Sensor. 238*fe82ebb0SRobert Mustacchi */ 239*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_THERM 0x00e 240*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_THERM_PRES(r) bitx8(r, 7, 7) 241*fe82ebb0SRobert Mustacchi 242*fe82ebb0SRobert Mustacchi /* 243*fe82ebb0SRobert Mustacchi * S8.1.16 Extended Module Type. This contains a 4-bit extended module type; 244*fe82ebb0SRobert Mustacchi * however, none are defined for DDR4. We do not bother with a definition for 245*fe82ebb0SRobert Mustacchi * it. S8.1.17 Byte 16 is just reserved as must be zero. 246*fe82ebb0SRobert Mustacchi */ 247*fe82ebb0SRobert Mustacchi 248*fe82ebb0SRobert Mustacchi /* 249*fe82ebb0SRobert Mustacchi * S8.1.18 Timebases. These values are used throughout all other calculations to 250*fe82ebb0SRobert Mustacchi * describe various values that are present throughout many of the subsequent 251*fe82ebb0SRobert Mustacchi * bytes. There are two defined entities: the Median Time Base (MTB) and the 252*fe82ebb0SRobert Mustacchi * Fine Time Base (FTB). There is only one MTB and FTB defined for DDR4. These 253*fe82ebb0SRobert Mustacchi * are 125ps and 1ps respectively. 254*fe82ebb0SRobert Mustacchi * 255*fe82ebb0SRobert Mustacchi * Many of the timing values are split into two registers. One which contains a 256*fe82ebb0SRobert Mustacchi * value in MTB and one which has an adjustment in FTB. This is used when there 257*fe82ebb0SRobert Mustacchi * would otherwise be a fractional value that could not be rounded up to an even 258*fe82ebb0SRobert Mustacchi * number of MTB. We represent the FTB values by appending '_FINE' to them. 259*fe82ebb0SRobert Mustacchi */ 260*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TIMEBASE 0x011 261*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TIMEBASE_MTB(r) bitx8(r, 3, 2) 262*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TIMEBASE_MTB_125ps 0 263*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TIMEBASE_FTB(r) bitx8(r, 1, 0) 264*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TIMEBASE_FTB_1ps 0 265*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MTB_PS 125 266*fe82ebb0SRobert Mustacchi #define SPD_DDR4_FTB_PS 1 267*fe82ebb0SRobert Mustacchi 268*fe82ebb0SRobert Mustacchi /* 269*fe82ebb0SRobert Mustacchi * S8.1.19 SDRAM Minimum Cycle Time t~ckavg~min. 270*fe82ebb0SRobert Mustacchi * S8.1.52 Fine Offset for ^ 271*fe82ebb0SRobert Mustacchi * S8.1.20 SDRAM Maximum Cycle Time t~ckavg~max. 272*fe82ebb0SRobert Mustacchi * S8.1.51 Fine Offset for ^ 273*fe82ebb0SRobert Mustacchi */ 274*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TCKAVG_MIN 0x012 275*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TCKAVG_MIN_FINE 0x07d 276*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TCKAVG_MAX 0x013 277*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TCKAVG_MAX_FINE 0x07c 278*fe82ebb0SRobert Mustacchi 279*fe82ebb0SRobert Mustacchi /* 280*fe82ebb0SRobert Mustacchi * S8.1.21 CAS Latencies. There are four bytes that are used to get at this and 281*fe82ebb0SRobert Mustacchi * show what is supported. These either start at CL7 or CL23 depending on the 282*fe82ebb0SRobert Mustacchi * top bit of the last CAS byte. 283*fe82ebb0SRobert Mustacchi */ 284*fe82ebb0SRobert Mustacchi #define SPD_DDR4_CAS_SUP0 0x014 285*fe82ebb0SRobert Mustacchi #define SPD_DDR4_CAS_SUP1 0x015 286*fe82ebb0SRobert Mustacchi #define SPD_DDR4_CAS_SUP2 0x016 287*fe82ebb0SRobert Mustacchi #define SPD_DDR4_CAS_SUP3 0x017 288*fe82ebb0SRobert Mustacchi #define SPD_DDR4_CAS_SUP3_RANGE(r) bitx8(r, 7, 7) 289*fe82ebb0SRobert Mustacchi #define SPD_DDR4_CAS_SUP3_RANGE_7 0 290*fe82ebb0SRobert Mustacchi #define SPD_DDR4_CAS_SUP3_RANGE_23 1 291*fe82ebb0SRobert Mustacchi 292*fe82ebb0SRobert Mustacchi /* 293*fe82ebb0SRobert Mustacchi * S8.1.22 Minimum CAS Latency Time t~AA~min. This uses the MTB. 294*fe82ebb0SRobert Mustacchi * S8.1.50 Fine Offset for ^ 295*fe82ebb0SRobert Mustacchi */ 296*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TAA_MIN 0x018 297*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TAA_MIN_FINE 0x07b 298*fe82ebb0SRobert Mustacchi 299*fe82ebb0SRobert Mustacchi /* 300*fe82ebb0SRobert Mustacchi * S8.1.23 Minimum RAS to CAS Delay Time t~RCD~min. 301*fe82ebb0SRobert Mustacchi * S8.1.49 Fine Offset for ^ 302*fe82ebb0SRobert Mustacchi */ 303*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRCD_MIN 0x019 304*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRCD_MIN_FINE 0x07a 305*fe82ebb0SRobert Mustacchi 306*fe82ebb0SRobert Mustacchi /* 307*fe82ebb0SRobert Mustacchi * S8.1.24 Minimum Row Precharge Delay Time t~RP~min. 308*fe82ebb0SRobert Mustacchi * S8.1.48 Fine Offset for ^ 309*fe82ebb0SRobert Mustacchi */ 310*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRP_MIN 0x01a 311*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRP_MIN_FINE 0x079 312*fe82ebb0SRobert Mustacchi 313*fe82ebb0SRobert Mustacchi /* 314*fe82ebb0SRobert Mustacchi * S8.1.25 Upper Nibbles for t~RAS~min and t~RC~min. These are bits 11:9 of 315*fe82ebb0SRobert Mustacchi * these values. The lower byte is in subsequent values. 316*fe82ebb0SRobert Mustacchi * S8.1.26 Minimum Active to Precharge Delay Time t~RAS~min. 317*fe82ebb0SRobert Mustacchi * S8.1.27 Minimum Active to Active/Refresh Delay Time t~RC~min. 318*fe82ebb0SRobert Mustacchi * S8.1.47 Fine Offset for ^ 319*fe82ebb0SRobert Mustacchi */ 320*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RAS_RC_UPPER 0x01b 321*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RAS_RC_UPPER_RC(r) bitx8(r, 7, 4) 322*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RAS_RC_UPPER_RAS(r) bitx8(r, 3, 0) 323*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRAS_MIN 0x01c 324*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRC_MIN 0x01d 325*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRC_MIN_FINE 0x078 326*fe82ebb0SRobert Mustacchi 327*fe82ebb0SRobert Mustacchi /* 328*fe82ebb0SRobert Mustacchi * S8.1.28: Minimum Refresh Recovery Delay Time t~RFC1~min. 329*fe82ebb0SRobert Mustacchi * S8.1.29: Minimum Refresh Recovery Delay Time t~RFC2~min. 330*fe82ebb0SRobert Mustacchi * S8.1.30: Minimum Refresh Recovery Delay Time t~RFC4~min. 331*fe82ebb0SRobert Mustacchi * 332*fe82ebb0SRobert Mustacchi * These are all different minimum refresh times. They are all two byte values 333*fe82ebb0SRobert Mustacchi * in units of MTB. 334*fe82ebb0SRobert Mustacchi */ 335*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRFC1_MIN_LSB 0x01e 336*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRFC1_MIN_MSB 0x01f 337*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRFC2_MIN_LSB 0x020 338*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRFC2_MIN_MSB 0x021 339*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRFC4_MIN_LSB 0x022 340*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRFC4_MIN_MSB 0x023 341*fe82ebb0SRobert Mustacchi 342*fe82ebb0SRobert Mustacchi /* 343*fe82ebb0SRobert Mustacchi * S8.1.31 Upper nibble for t~FAW~ 344*fe82ebb0SRobert Mustacchi * S8.1.32 Minimum Four Activate Window Delay t~FAW~min. 345*fe82ebb0SRobert Mustacchi * 346*fe82ebb0SRobert Mustacchi * This is another 12-bit MTB-unit field. 347*fe82ebb0SRobert Mustacchi */ 348*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TFAW_UPPER 0x024 349*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TFAW_UPPER_FAW(r) bitx8(r, 3, 0) 350*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TFAW 0x025 351*fe82ebb0SRobert Mustacchi 352*fe82ebb0SRobert Mustacchi /* 353*fe82ebb0SRobert Mustacchi * S8.1.33 Minimum Activate to Activate Delay Time t~RRD_S~min, different bank 354*fe82ebb0SRobert Mustacchi * group. 355*fe82ebb0SRobert Mustacchi * S8.1.46 Fine Offset for ^ 356*fe82ebb0SRobert Mustacchi * 357*fe82ebb0SRobert Mustacchi * S8.1.34 Minimum Activate to Activate Delay Time t~RRD_L~min, same bank group. 358*fe82ebb0SRobert Mustacchi * S8.1.45 Fine Offset for ^ 359*fe82ebb0SRobert Mustacchi * 360*fe82ebb0SRobert Mustacchi * S8.1.35 Minimum CAS to CAS Delay Time t~CCD_L~min, same bank group. 361*fe82ebb0SRobert Mustacchi * S8.1.44 Fine Offset for ^ 362*fe82ebb0SRobert Mustacchi * group. 363*fe82ebb0SRobert Mustacchi */ 364*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRRDS_MIN 0x026 365*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRRDS_MIN_FINE 0x077 366*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRRDL_MIN 0x027 367*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TRRDL_MIN_FINE 0x076 368*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TCCDL_MIN 0x028 369*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TCCDL_MIN_FINE 0x075 370*fe82ebb0SRobert Mustacchi 371*fe82ebb0SRobert Mustacchi /* 372*fe82ebb0SRobert Mustacchi * S8.1.36 Upper Nibble for t~WR~min. 373*fe82ebb0SRobert Mustacchi * S8.1.37 Minimum Write Recovery Time t~WR~min. 374*fe82ebb0SRobert Mustacchi */ 375*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TWR_MIN_UPPER 0x029 376*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TWR_MIN_UPPER_TWR(r) bitx8(r, 3, 0) 377*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TWR_MIN 0x02a 378*fe82ebb0SRobert Mustacchi 379*fe82ebb0SRobert Mustacchi /* 380*fe82ebb0SRobert Mustacchi * S 8.1.38 Upper Nibbles for t~WTR~min 381*fe82ebb0SRobert Mustacchi * S8.1.39 Minimum Write to Read Time t~WTR_S~min, different bank group. 382*fe82ebb0SRobert Mustacchi * S8.1.40 Minimum Write to Read Time t~WTR_L~min, same bank group. 383*fe82ebb0SRobert Mustacchi * 384*fe82ebb0SRobert Mustacchi * Note, the referenced version of the spec has a typo here and refers to this 385*fe82ebb0SRobert Mustacchi * as byte 0x29, but that already exists with a different meaning. 386*fe82ebb0SRobert Mustacchi */ 387*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TWRT_UPPER 0x02b 388*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TWRT_UPPER_TWRL(r) bitx8(r, 7, 4) 389*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TWRT_UPPER_TWRS(r) bitx8(r, 3, 0) 390*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TWTRS_MIN 0x02c 391*fe82ebb0SRobert Mustacchi #define SPD_DDR4_TWTRL_MIN 0x02d 392*fe82ebb0SRobert Mustacchi 393*fe82ebb0SRobert Mustacchi /* 394*fe82ebb0SRobert Mustacchi * Bytes 0x2e to 0x3b are all reserved. 395*fe82ebb0SRobert Mustacchi */ 396*fe82ebb0SRobert Mustacchi 397*fe82ebb0SRobert Mustacchi /* 398*fe82ebb0SRobert Mustacchi * S8.1.42 Connector to SDRAM bit mapping. Each of the bytes defines a different 399*fe82ebb0SRobert Mustacchi * set of pins here. These all have a fairly standard set of transformations 400*fe82ebb0SRobert Mustacchi * that can be applied. These include a package rank map which only has a single 401*fe82ebb0SRobert Mustacchi * identity transformation applied and a separate nibble map encoding. 402*fe82ebb0SRobert Mustacchi */ 403*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ0 0x03c 404*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ4 0x03d 405*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ8 0x03e 406*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ12 0x03f 407*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ16 0x040 408*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ20 0x041 409*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ24 0x042 410*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ28 0x043 411*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_CB0 0x044 412*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_CB4 0x045 413*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ32 0x046 414*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ36 0x047 415*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ40 0x048 416*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ44 0x049 417*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ48 0x04a 418*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ52 0x04b 419*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ56 0x04c 420*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_DQ60 0x04d 421*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_PKG(r) bitx8(r, 7, 6) 422*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_PKG_FLIP 0 423*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_NIBBLE(r) bitx8(r, 5, 5) 424*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_IDX(r) bitx8(r, 4, 0) 425*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MAP_IDX_UNSPEC 0 426*fe82ebb0SRobert Mustacchi 427*fe82ebb0SRobert Mustacchi /* 428*fe82ebb0SRobert Mustacchi * Bytes 0x4e-0x74 are reserved. Bytes 75-7D are fine offsets that are laid out 429*fe82ebb0SRobert Mustacchi * with their base counterparts. 430*fe82ebb0SRobert Mustacchi */ 431*fe82ebb0SRobert Mustacchi 432*fe82ebb0SRobert Mustacchi /* 433*fe82ebb0SRobert Mustacchi * S8.1.53 CRC For Base Configuration Section. This is a CRC that covers bytes 434*fe82ebb0SRobert Mustacchi * 0x00 to 0x7D using a specific CRC16. 435*fe82ebb0SRobert Mustacchi */ 436*fe82ebb0SRobert Mustacchi #define SPD_DDR4_CRC_LSB 0x07e 437*fe82ebb0SRobert Mustacchi #define SPD_DDR4_CRC_MSB 0x07f 438*fe82ebb0SRobert Mustacchi 439*fe82ebb0SRobert Mustacchi /* 440*fe82ebb0SRobert Mustacchi * We jump ahead to another common region which contains the common 441*fe82ebb0SRobert Mustacchi * manufacturing information which is shared across all module types. 442*fe82ebb0SRobert Mustacchi */ 443*fe82ebb0SRobert Mustacchi 444*fe82ebb0SRobert Mustacchi /* 445*fe82ebb0SRobert Mustacchi * S8.5.1 Module Manufacturer ID Code. This is a two byte JEP-108 style MFG ID. 446*fe82ebb0SRobert Mustacchi * S8.5.7 DRAM Manufacturer ID code. 447*fe82ebb0SRobert Mustacchi */ 448*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_MFG_ID0 0x140 449*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_MFG_ID1 0x141 450*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DRAM_MFG_ID0 0x15e 451*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DRAM_MFG_ID1 0x15f 452*fe82ebb0SRobert Mustacchi 453*fe82ebb0SRobert Mustacchi /* 454*fe82ebb0SRobert Mustacchi * S8.5.2 Module Manufacturing Location. This byte is manufacturer specific. 455*fe82ebb0SRobert Mustacchi */ 456*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_MFG_LOC 0x142 457*fe82ebb0SRobert Mustacchi 458*fe82ebb0SRobert Mustacchi /* 459*fe82ebb0SRobert Mustacchi * S8.5.3 module Manufacturing Date. Encoded as two BCD bytes for the year and 460*fe82ebb0SRobert Mustacchi * week. 461*fe82ebb0SRobert Mustacchi */ 462*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_MFG_YEAR 0x143 463*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_MFG_WEEK 0x144 464*fe82ebb0SRobert Mustacchi 465*fe82ebb0SRobert Mustacchi /* 466*fe82ebb0SRobert Mustacchi * S8.5.4 Module Serial Number. 467*fe82ebb0SRobert Mustacchi * S8.5.5 Module Part Number 468*fe82ebb0SRobert Mustacchi * S8.5.6 Module Revision Code 469*fe82ebb0SRobert Mustacchi */ 470*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_SN 0x145 471*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_SN_LEN 4 472*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_PN 0x149 473*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_PN_LEN 20 474*fe82ebb0SRobert Mustacchi #define SPD_DDR4_MOD_REV 0x15d 475*fe82ebb0SRobert Mustacchi 476*fe82ebb0SRobert Mustacchi /* 477*fe82ebb0SRobert Mustacchi * S8.5.8 DRAM Stepping 478*fe82ebb0SRobert Mustacchi */ 479*fe82ebb0SRobert Mustacchi #define SPD_DDR4_DRAM_STEP 0x160 480*fe82ebb0SRobert Mustacchi 481*fe82ebb0SRobert Mustacchi /* 482*fe82ebb0SRobert Mustacchi * Bytes 0x161-0x17d are left for Manufacturer specific data while bytes 483*fe82ebb0SRobert Mustacchi * 0x17e-0x17f are reserved. 484*fe82ebb0SRobert Mustacchi */ 485*fe82ebb0SRobert Mustacchi 486*fe82ebb0SRobert Mustacchi /* 487*fe82ebb0SRobert Mustacchi * The next region of bytes in the range 0x80-0xbf. We have specific definitions 488*fe82ebb0SRobert Mustacchi * for RDIMMs, LRDIMMs, and UDIMMs. While these often are very similar, they are 489*fe82ebb0SRobert Mustacchi * subtlety different. 490*fe82ebb0SRobert Mustacchi */ 491*fe82ebb0SRobert Mustacchi 492*fe82ebb0SRobert Mustacchi /* 493*fe82ebb0SRobert Mustacchi * S9.2.1 RDIMM: Raw Card Extension, Module Nominal Height. Bits 7-5 here have a 494*fe82ebb0SRobert Mustacchi * raw card revision. The revision extension, bits 7:5, are only valid when the 495*fe82ebb0SRobert Mustacchi * value of the normal reference card used in byte 0x82 is set to 0b11 (3). 496*fe82ebb0SRobert Mustacchi */ 497*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_HEIGHT 0x080 498*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_HEIGHT_REV(r) bitx8(r, 7, 5) 499*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_HEIGHT_MM(r) bitx8(r, 4, 0) 500*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_HEIGHT_LT15MM 0 501*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_HEIGHT_BASE 15 502*fe82ebb0SRobert Mustacchi 503*fe82ebb0SRobert Mustacchi /* 504*fe82ebb0SRobert Mustacchi * S9.2.2 RDIMM: Module Maximum Thickness. These measure thicknesses in mm, with 505*fe82ebb0SRobert Mustacchi * zero value meaning less than or equal to 1mm. 506*fe82ebb0SRobert Mustacchi */ 507*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_THICK 0x081 508*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_THICK_BACK(r) bitx8(r, 7, 4) 509*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_THICK_FRONT(r) bitx8(r, 3, 0) 510*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_THICK_BASE 1 511*fe82ebb0SRobert Mustacchi 512*fe82ebb0SRobert Mustacchi /* 513*fe82ebb0SRobert Mustacchi * S9.2.3 RDIMM: Reference Raw Card Used. Bit 7 is used as basically another bit 514*fe82ebb0SRobert Mustacchi * for bits 4-0. We do not define each meaning of these bit combinations in this 515*fe82ebb0SRobert Mustacchi * header, that is left for tables in the library. When bits 6:5 are 0b11 (3) 516*fe82ebb0SRobert Mustacchi * then we must add in the reference card value in byte 0x80 to bits 6:5. 517*fe82ebb0SRobert Mustacchi */ 518*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_REF 0x082 519*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_REF_EXT(r) bitx8(r, 7, 7) 520*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_REF_REV(r) bitx8(r, 6, 5) 521*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_REV_USE_HEIGHT 3 522*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_REF_CARD(r) bitx8(r, 4, 0) 523*fe82ebb0SRobert Mustacchi 524*fe82ebb0SRobert Mustacchi /* 525*fe82ebb0SRobert Mustacchi * S9.2.4 RDIMM: DIMM Attributes. 526*fe82ebb0SRobert Mustacchi */ 527*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ATTR 0x083 528*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ATTR_TYPE(r) bitx8(r, 7, 4) 529*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ATTR_TYPE_RCD01 0 530*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ATTR_TYPE_RCD02 1 531*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ATTR_NROWS(r) bitx8(r, 3, 2) 532*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ATTR_NREGS(r) bitx8(r, 1, 0) 533*fe82ebb0SRobert Mustacchi 534*fe82ebb0SRobert Mustacchi /* 535*fe82ebb0SRobert Mustacchi * S9.2.5 RDIMM: Thermal Heat Spreader Solution 536*fe82ebb0SRobert Mustacchi */ 537*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_THERM 0x084 538*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_THERM_IMPL(r) bitx8(r, 7, 7) 539*fe82ebb0SRobert Mustacchi 540*fe82ebb0SRobert Mustacchi /* 541*fe82ebb0SRobert Mustacchi * S9.2.6 RDIMM: Register Manufacturer JEDEC ID. This contains the JEDEC ID for 542*fe82ebb0SRobert Mustacchi * the manufacturer encoded as the number of continuation bytes and then the 543*fe82ebb0SRobert Mustacchi * actual code. This works with libjedec_vendor_string. 544*fe82ebb0SRobert Mustacchi */ 545*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_REG_MFG_ID0 0x085 546*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_REG_MFG_ID1 0x086 547*fe82ebb0SRobert Mustacchi 548*fe82ebb0SRobert Mustacchi /* 549*fe82ebb0SRobert Mustacchi * S9.2.7 RDIMM: Register Revision Number. This value is just a straight up hex 550*fe82ebb0SRobert Mustacchi * encoded value. It's a bit arbitrary. For example, they say 0x31 can be rev 551*fe82ebb0SRobert Mustacchi * 3.1, while 0x01 is just revision 1, and 0xB1 is revision B1. 552*fe82ebb0SRobert Mustacchi */ 553*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_REV 0x087 554*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_REV_UNDEF 0xff 555*fe82ebb0SRobert Mustacchi 556*fe82ebb0SRobert Mustacchi /* 557*fe82ebb0SRobert Mustacchi * S9.2.8 RDIMM: Address Mapping from Register to DRAM. This covers how the 558*fe82ebb0SRobert Mustacchi * register maps ranks 1 and 3 between the register and the actual modules. 559*fe82ebb0SRobert Mustacchi * Ranks 0/2 are always standard. 560*fe82ebb0SRobert Mustacchi */ 561*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_MAP 0x88 562*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_MAP_R1(r) bitx8(r, 0, 0) 563*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_MAP_R1_STD 0 564*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_MAP_R1_MIRROR 1 565*fe82ebb0SRobert Mustacchi 566*fe82ebb0SRobert Mustacchi /* 567*fe82ebb0SRobert Mustacchi * S9.2.9 RDIMM: Register Output Drive Strength for Control and Command/Address 568*fe82ebb0SRobert Mustacchi * S9.2.10 RDIMM: Register Output Drive Strength for Clock 569*fe82ebb0SRobert Mustacchi */ 570*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS0 0x89 571*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS0_CS(r) bitx8(r, 7, 6) 572*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS0_CA(r) bitx8(r, 5, 4) 573*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS0_ODT(r) bitx8(r, 3, 2) 574*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS0_CKE(r) bitx8(r, 1, 0) 575*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS0_LIGHT 0 576*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS0_MODERATE 1 577*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS0_STRONG 2 578*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS0_VERY_STRONG 3 579*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS1 0x8a 580*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS1_SLEW_SUP(r) bitx8(r, 6, 6) 581*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS1_Y1(r) bitx8(r, 3, 2) 582*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS1_Y0(r) bitx8(r, 1, 0) 583*fe82ebb0SRobert Mustacchi 584*fe82ebb0SRobert Mustacchi /* 585*fe82ebb0SRobert Mustacchi * S9.2.12 CRC for SPD Block 1. 586*fe82ebb0SRobert Mustacchi */ 587*fe82ebb0SRobert Mustacchi #define SPD_DDR4_BLK1_CRC_START 0x80 588*fe82ebb0SRobert Mustacchi #define SPD_DDR4_BLK1_CRC_LSB 0xfe 589*fe82ebb0SRobert Mustacchi #define SPD_DDR4_BLK1_CRC_MSB 0xff 590*fe82ebb0SRobert Mustacchi 591*fe82ebb0SRobert Mustacchi /* 592*fe82ebb0SRobert Mustacchi * S9.1.1 UDIMM: Raw Card Extension, Module Nominal Height. 593*fe82ebb0SRobert Mustacchi * S9.1.2 UDIMM: Module Maximum Thickness. 594*fe82ebb0SRobert Mustacchi * S9.1.3 UDIMM: Reference Raw Card Used. 595*fe82ebb0SRobert Mustacchi * 596*fe82ebb0SRobert Mustacchi * These definitions are the same as for RDIMMs. 597*fe82ebb0SRobert Mustacchi */ 598*fe82ebb0SRobert Mustacchi #define SPD_DDR4_UDIMM_HEIGHT 0x080 599*fe82ebb0SRobert Mustacchi #define SPD_DDR4_UDIMM_THICK 0x081 600*fe82ebb0SRobert Mustacchi #define SPD_DDR4_UDIMM_REF 0x082 601*fe82ebb0SRobert Mustacchi 602*fe82ebb0SRobert Mustacchi /* 603*fe82ebb0SRobert Mustacchi * S9.1.4 UDIMM: Address Mapping from Edge Connector to DRAM. This is similar to 604*fe82ebb0SRobert Mustacchi * SPD_DDR4_RDIMM_MAP; however it doesn't take into account the register. 605*fe82ebb0SRobert Mustacchi */ 606*fe82ebb0SRobert Mustacchi #define SPD_DDR4_UDIMM_MAP 0x83 607*fe82ebb0SRobert Mustacchi 608*fe82ebb0SRobert Mustacchi /* 609*fe82ebb0SRobert Mustacchi * Everything else in UDIMMs is reserved, aside from the CRC, which is the same 610*fe82ebb0SRobert Mustacchi * as RDIMMs. 611*fe82ebb0SRobert Mustacchi */ 612*fe82ebb0SRobert Mustacchi 613*fe82ebb0SRobert Mustacchi /* 614*fe82ebb0SRobert Mustacchi * S9.3.1 LRDIMM: Raw Card Extension, Module Nominal Height 615*fe82ebb0SRobert Mustacchi * S9.3.2 LRDIMM: Module Maximum Thickness 616*fe82ebb0SRobert Mustacchi * S9.3.3 LRDIMM: Reference Raw Card Used 617*fe82ebb0SRobert Mustacchi * 618*fe82ebb0SRobert Mustacchi * These are the same as the corresponding UDIMM / RDIMM values. 619*fe82ebb0SRobert Mustacchi */ 620*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_HEIGHT 0x080 621*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_THICK 0x081 622*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_REF 0x082 623*fe82ebb0SRobert Mustacchi 624*fe82ebb0SRobert Mustacchi /* 625*fe82ebb0SRobert Mustacchi * S9.3.4 LRDIMM: DIMM Attributes. 626*fe82ebb0SRobert Mustacchi */ 627*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ATTR 0x083 628*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ATTR_TYPE(r) bitx8(r, 7, 4) 629*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ATTR_TYPE_RCD01_DB01 0 630*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ATTR_TYPE_RCD02_DB02 1 631*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ATTR_NROWS(r) bitx8(r, 3, 2) 632*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ATTR_NREGS(r) bitx8(r, 1, 0) 633*fe82ebb0SRobert Mustacchi 634*fe82ebb0SRobert Mustacchi /* 635*fe82ebb0SRobert Mustacchi * S9.3.5 LRDIMM: Thermal Heat Spreader. See RDIMM version. 636*fe82ebb0SRobert Mustacchi */ 637*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_THERM 0x084 638*fe82ebb0SRobert Mustacchi 639*fe82ebb0SRobert Mustacchi /* 640*fe82ebb0SRobert Mustacchi * S9.3.6 LRDIMM: Register and Data Buffer Manufacturer. See RDIMM version. 641*fe82ebb0SRobert Mustacchi */ 642*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_REG_MFG_ID0 0x085 643*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_REG_MFG_ID1 0x086 644*fe82ebb0SRobert Mustacchi 645*fe82ebb0SRobert Mustacchi /* 646*fe82ebb0SRobert Mustacchi * S9.3.7 LRDIMM: Register Revision Number. See RDIMM for more info. 647*fe82ebb0SRobert Mustacchi */ 648*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_REV 0x087 649*fe82ebb0SRobert Mustacchi 650*fe82ebb0SRobert Mustacchi /* 651*fe82ebb0SRobert Mustacchi * S9.3.8 LRDIMM: Address Mapping from Register to DRAM. See RDIMM. 652*fe82ebb0SRobert Mustacchi */ 653*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MAP 0x88 654*fe82ebb0SRobert Mustacchi 655*fe82ebb0SRobert Mustacchi /* 656*fe82ebb0SRobert Mustacchi * S9.3.9 LRDIMM: Register Output Drive Strength for Control and 657*fe82ebb0SRobert Mustacchi * Command/Address. 658*fe82ebb0SRobert Mustacchi * S9.3.10: LRDIMM: Register Output Drive Strength for Clock and Data Buffer 659*fe82ebb0SRobert Mustacchi * Control. 660*fe82ebb0SRobert Mustacchi * See RDIMM for valid drive strength values and ODS0. 661*fe82ebb0SRobert Mustacchi */ 662*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODS0 0x89 663*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODS1 0x8a 664*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODS1_OSRC_SUP(r) bitx8(r, 6, 6) 665*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODS1_BCK(r) bitx8(r, 5, 5) 666*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODS1_BCOM(r) bitx8(r, 4, 4) 667*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODS1_MODERATE 0 668*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODS1_STRONG 1 669*fe82ebb0SRobert Mustacchi /* 670*fe82ebb0SRobert Mustacchi * The above two bit ranges use a single bit drive strength while the following 671*fe82ebb0SRobert Mustacchi * two use the same two-bit version as RDIMMs. 672*fe82ebb0SRobert Mustacchi */ 673*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS1_Y1(r) bitx8(r, 3, 2) 674*fe82ebb0SRobert Mustacchi #define SPD_DDR4_RDIMM_ODS1_Y0(r) bitx8(r, 1, 0) 675*fe82ebb0SRobert Mustacchi 676*fe82ebb0SRobert Mustacchi /* 677*fe82ebb0SRobert Mustacchi * S9.3.7 LRDIMM: Data Buffer Revision Number. 678*fe82ebb0SRobert Mustacchi */ 679*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_DB_REV 0x08b 680*fe82ebb0SRobert Mustacchi 681*fe82ebb0SRobert Mustacchi /* 682*fe82ebb0SRobert Mustacchi * S9.3.12 LRDIMM: DRAM VrefDQ for Package Rank 0 683*fe82ebb0SRobert Mustacchi * S9.3.13 LRDIMM: DRAM VrefDQ for Package Rank 1 684*fe82ebb0SRobert Mustacchi * S9.3.14 LRDIMM: DRAM VrefDQ for Package Rank 2 685*fe82ebb0SRobert Mustacchi * S9.3.15 LRDIMM: DRAM VrefDQ for Package Rank 3 686*fe82ebb0SRobert Mustacchi * 687*fe82ebb0SRobert Mustacchi * These are all encoded with a value from MR6 in JESD79-4 apparently. 688*fe82ebb0SRobert Mustacchi */ 689*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VREFDQ0 0x08c 690*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VREFDQ1 0x08d 691*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VREFDQ2 0x08e 692*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VREFDQ3 0x08f 693*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VREFDQ_V(r) bitx8(r, 5, 0) 694*fe82ebb0SRobert Mustacchi 695*fe82ebb0SRobert Mustacchi /* 696*fe82ebb0SRobert Mustacchi * S9.3.16 LRDIMM: Data Buffer VrefDQ for DRAM Interface. The entire byte is 697*fe82ebb0SRobert Mustacchi * used to match the encoding from the DDR4DB01 spec. 698*fe82ebb0SRobert Mustacchi */ 699*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VREFDQ_DB 0x090 700*fe82ebb0SRobert Mustacchi 701*fe82ebb0SRobert Mustacchi /* 702*fe82ebb0SRobert Mustacchi * S9.3.17 LRDIMM: Data Buffer MDQ Drive Strength and RTT for data rate <= 1866 703*fe82ebb0SRobert Mustacchi * S9.3.18 LRDIMM: Data Buffer MDQ Drive Strength and RTT for 1866 < data rate 704*fe82ebb0SRobert Mustacchi * <= 2400 705*fe82ebb0SRobert Mustacchi * S9.3.19 LRDIMM: Data Buffer MDQ Drive Strength and RTT for 2400 < data rate 706*fe82ebb0SRobert Mustacchi * <= 3200 707*fe82ebb0SRobert Mustacchi * 708*fe82ebb0SRobert Mustacchi * These three registers all share the same bit values and register extraction. 709*fe82ebb0SRobert Mustacchi */ 710*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_1866 0x091 711*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_2400 0x092 712*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_3200 0x093 713*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_DS(r) bitx8(r, 6, 4) 714*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_DS_40R 0 715*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_DS_34R 1 716*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_DS_48R 2 717*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_DS_60R 5 718*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_RTT(r) bitx8(r, 2, 0) 719*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_RTT_DIS 0 720*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_RTT_60R 1 721*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_RTT_120R 2 722*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_RTT_40R 3 723*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_RTT_240R 4 724*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_RTT_48R 5 725*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_RTT_80R 6 726*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_MDQ_RTT_34R 7 727*fe82ebb0SRobert Mustacchi 728*fe82ebb0SRobert Mustacchi /* 729*fe82ebb0SRobert Mustacchi * S9.3.20: LRDIMM: DRAM Drive Strength. One byte covers all data rates, which 730*fe82ebb0SRobert Mustacchi * share the same resistance values. 731*fe82ebb0SRobert Mustacchi */ 732*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_DRAM_DS 0x094 733*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_DRAM_DS_3200(r) bitx8(r, 5, 4) 734*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_DRAM_DS_2400(r) bitx8(r, 3, 2) 735*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_DRAM_DS_1866(r) bitx8(r, 1, 0) 736*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_DRAM_DS_34R 0 737*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_DRAM_DS_48R 1 738*fe82ebb0SRobert Mustacchi 739*fe82ebb0SRobert Mustacchi /* 740*fe82ebb0SRobert Mustacchi * S9.3.21 LRDIMM: DRAM ODT (RTT_WR and RTT_NOM) for data rate <= 1866 741*fe82ebb0SRobert Mustacchi * S9.3.22 LRDIMM: DRAM ODT (RTT_WR and RTT_NOM) for 1866 < data rate <= 2400 742*fe82ebb0SRobert Mustacchi * S9.3.23 LRDIMM: DRAM ODT (RTT_WR and RTT_NOM) for 2400 < data rate <= 3200 743*fe82ebb0SRobert Mustacchi */ 744*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_1866 0x095 745*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_2400 0x096 746*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_3200 0x097 747*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_WR(r) bitx8(r, 5, 3) 748*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_WR_DYN_OFF 0 749*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_WR_120R 1 750*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_WR_240R 2 751*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_WR_HIZ 3 752*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_WR_80R 4 753*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_NOM(r) bitx8(r, 2, 0) 754*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_NOM_DIS 0 755*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_NOM_60R 1 756*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_NOM_120R 2 757*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_NOM_40R 3 758*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_NOM_240R 4 759*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_NOM_48R 5 760*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_NOM_80R 6 761*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_ODT_NOM_34R 7 762*fe82ebb0SRobert Mustacchi 763*fe82ebb0SRobert Mustacchi /* 764*fe82ebb0SRobert Mustacchi * S9.3.24 LRDIMM: DRAM ODT (RTT_PARK) for data rate <= 1866 765*fe82ebb0SRobert Mustacchi * S9.3.25 LRDIMM: DRAM ODT (RTT_PARK) for 1866 < data rate <= 2400 766*fe82ebb0SRobert Mustacchi * S9.3.26 LRDIMM: DRAM ODT (RTT_PARK) for 2400 < data rate <= 3200 767*fe82ebb0SRobert Mustacchi */ 768*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_PARK_1866 0x098 769*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_PARK_2400 0x099 770*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_PARK_3200 0x09a 771*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_PARK_R23(r) bitx8(r, 5, 3) 772*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_PARK_R01(r) bitx8(r, 2, 0) 773*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_PARK_DIS 0 774*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_PARK_60R 1 775*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_PARK_120R 2 776*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_PARK_40R 3 777*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_PARK_240R 4 778*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_PARK_48R 5 779*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_PARK_80R 6 780*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_PARK_34R 7 781*fe82ebb0SRobert Mustacchi 782*fe82ebb0SRobert Mustacchi /* 783*fe82ebb0SRobert Mustacchi * S9.3.27: Data Buffer VrefDQ for DRAM Interface Range. 784*fe82ebb0SRobert Mustacchi */ 785*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VREFDQ_RNG 0x09b 786*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VREFDQ_RNG_DB(r) bitx8(r, 4, 4) 787*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VREFDQ_RNG_R3(r) bitx8(r, 3, 3) 788*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VREFDQ_RNG_R2(r) bitx8(r, 2, 2) 789*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VREFDQ_RNG_R1(r) bitx8(r, 1, 1) 790*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VREFDQ_RNG_R0(r) bitx8(r, 0, 0) 791*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VERFDQ_RNG_1 0 792*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_VERFDQ_RNG_2 1 793*fe82ebb0SRobert Mustacchi 794*fe82ebb0SRobert Mustacchi /* 795*fe82ebb0SRobert Mustacchi * S9.3.28: Data Buffer DQ Decision Feedback Equalization 796*fe82ebb0SRobert Mustacchi */ 797*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_EQ 0x09c 798*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_EQ_DFE_SUP(r) bitx8(r, 1, 1) 799*fe82ebb0SRobert Mustacchi #define SPD_DDR4_LRDIMM_EQ_GA_SUP(r) bitx8(r, 0, 0) 800*fe82ebb0SRobert Mustacchi 801*fe82ebb0SRobert Mustacchi #ifdef __cplusplus 802*fe82ebb0SRobert Mustacchi } 803*fe82ebb0SRobert Mustacchi #endif 804*fe82ebb0SRobert Mustacchi 805*fe82ebb0SRobert Mustacchi #endif /* _SPD_DDR4_H */ 806