util/bincfg: Add DDR4 SPD spec
Additionally provide a simple script for decoding spd hex files using bincfg. BUG=b:148561711 TEST=Decoded spd files in zork BRANCH=None Change-Id: Ic62868d59e075fd6816d7be55cc935e3e3f82499 Signed-off-by: Rob Barnes <robbarnes@google.com> Reviewed-on: https://chromium-review.googlesource.com/2067697 Reviewed-by: Martin Roth <martinroth@google.com> Reviewed-by: Paul Fagerburg <pfagerburg@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/39621 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Michael Niewöhner
This commit is contained in:
		
							
								
								
									
										362
									
								
								util/bincfg/ddr4_registered_spd_512.spec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										362
									
								
								util/bincfg/ddr4_registered_spd_512.spec
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,362 @@
 | 
				
			|||||||
 | 
					# 4_01_02_AnnexL-R25_SPD_for_DDR4_SDRAM_Release_3_Sep2015.pdf
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# JEDEC Standard No. 21-C
 | 
				
			||||||
 | 
					# Page 4.1.2.12.3 – 1
 | 
				
			||||||
 | 
					# Annex L: Serial Presence Detect (SPD) for DDR4 SDRAM Modules
 | 
				
			||||||
 | 
					# DDR4 SPD Document Release 3
 | 
				
			||||||
 | 
					# UDIMM Revision 1.1
 | 
				
			||||||
 | 
					# RDIMM Revision 1.1
 | 
				
			||||||
 | 
					# LRDIMM Revision 1.1
 | 
				
			||||||
 | 
					# NVDIMM Revision 1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						# Byte 0: Number of Bytes Used / Number of Bytes in SPD Device /
 | 
				
			||||||
 | 
						#         CRC Coverage
 | 
				
			||||||
 | 
						"SPD_Bytes_Used"						: 4,
 | 
				
			||||||
 | 
						"SPD_Bytes_Total"						: 3,
 | 
				
			||||||
 | 
						"CRC_Coverage"							: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 1: SPD Revision
 | 
				
			||||||
 | 
						"SPD_Revision"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 2: Key Byte / DRAM Device Type
 | 
				
			||||||
 | 
						"DRAM_Device_Type"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 3: Key Byte / Module Type
 | 
				
			||||||
 | 
						"Base_Module_Type"						: 4,
 | 
				
			||||||
 | 
						"Hybrid_Media"							: 3,
 | 
				
			||||||
 | 
						"Is_Hybrid"							: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 4: SDRAM Density and Banks
 | 
				
			||||||
 | 
						"SDRAM_Capacity"						: 4,
 | 
				
			||||||
 | 
						"Bank_Address_Bits"						: 2,
 | 
				
			||||||
 | 
						"Bank_Group_Bits"						: 2,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 5: SDRAM Addressing
 | 
				
			||||||
 | 
						"Column_Address_Bits"						: 3,
 | 
				
			||||||
 | 
						"Row_Address_Bits"						: 3,
 | 
				
			||||||
 | 
						"Byte_5_reserved"						: 2,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 6:  SDRAM Package Type
 | 
				
			||||||
 | 
						"Signal_Loading"						: 2,
 | 
				
			||||||
 | 
						"Byte_6_reserved"						: 2,
 | 
				
			||||||
 | 
						"Die_Count"							: 3,
 | 
				
			||||||
 | 
						"SDRAM_Package_Type"						: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 7:  SDRAM Optional Features
 | 
				
			||||||
 | 
						"Maximum_Activate_Count"					: 4,
 | 
				
			||||||
 | 
						"Maximum_Activate_Window"					: 2,
 | 
				
			||||||
 | 
						"Byte_7_reserved"						: 2,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 8: SDRAM Thermal and Refresh Options
 | 
				
			||||||
 | 
						"Byte_8_reserved"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 9:  Other SDRAM Optional Features
 | 
				
			||||||
 | 
						"Byte_9_reserved"						: 5,
 | 
				
			||||||
 | 
						"Soft_PPR"							: 1,
 | 
				
			||||||
 | 
						"Post_Package_Repair"						: 2,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 10: Secondary SDRAM Package Type
 | 
				
			||||||
 | 
						"Secondary_Signal_Loading"					: 2,
 | 
				
			||||||
 | 
						"Secondary_DRAM_Densityt_Ratio"					: 2,
 | 
				
			||||||
 | 
						"Secondary_Die_Count"						: 3,
 | 
				
			||||||
 | 
						"Secondary_SDRAM_Package_Type"					: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 11:  Module Nominal Voltage, VDD
 | 
				
			||||||
 | 
						"DRAM_VDD_1_2_V"						: 2,
 | 
				
			||||||
 | 
						"Byte_11_reserved"						: 6,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 12: Module Organization
 | 
				
			||||||
 | 
						"SDRAM_Device_Width"						: 3,
 | 
				
			||||||
 | 
						"Number_of_Package_Ranks_per_DIMM"				: 3,
 | 
				
			||||||
 | 
						"Rank_Mix"							: 1,
 | 
				
			||||||
 | 
						"Byte_12_reserved"						: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 13: Module Memory Bus Width
 | 
				
			||||||
 | 
						"Primary_bus_width_in_bits"					: 3,
 | 
				
			||||||
 | 
						"Bus_width_extension_in_bits"					: 2,
 | 
				
			||||||
 | 
						"Byte_13_reserved"						: 3,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 14: Module Thermal Sensor
 | 
				
			||||||
 | 
						"Byte_14_reserved"						: 7,
 | 
				
			||||||
 | 
						"Thermal_Sensor"						: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 15:  Extended Module Type
 | 
				
			||||||
 | 
						"Extended_Base_Module_Type"					: 4,
 | 
				
			||||||
 | 
						"Byte_15_reserved"						: 4,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 16: Reserved
 | 
				
			||||||
 | 
						"Byte_16_reserved"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 17: Timebases
 | 
				
			||||||
 | 
						"Fine_Timebase"							: 2,
 | 
				
			||||||
 | 
						"Medium_Timebase"						: 2,
 | 
				
			||||||
 | 
						"Byte_17_reserved"						: 4,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 18:  SDRAM Minimum Cycle Time (tCKAVGmin)
 | 
				
			||||||
 | 
						"tCKAVGmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 19:  SDRAM Maximum Cycle Time (tCKAVGmax)
 | 
				
			||||||
 | 
						"tCKAVGmax"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 20 - 23: CAS Latencies Supported
 | 
				
			||||||
 | 
						"CL_7_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_8_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_9_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_10_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_11_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_12_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_13_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_14_Supported"						: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"CL_15_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_16_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_17_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_18_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_19_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_20_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_21_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_22_Supported"						: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"CL_23_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_24_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_25_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_26_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_27_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_28_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_29_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_30_Supported"						: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"CL_31_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_32_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_33_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_34_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_35_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_36_Supported"						: 1,
 | 
				
			||||||
 | 
						"Byte_23_reserved"						: 1,
 | 
				
			||||||
 | 
						"CL_range"							: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 24: Minimum CAS Latency Time (tAAmin)
 | 
				
			||||||
 | 
						"tAAmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 25: Minimum RAS to CAS Delay Time (tRCDmin)
 | 
				
			||||||
 | 
						"tRCDmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 26: Minimum Row Precharge Delay Time (tRPmin)
 | 
				
			||||||
 | 
						"tRPmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 27 - 29: Minimum Active to Precharge Delay Time (tRASmin)
 | 
				
			||||||
 | 
						#               / Minimum Active to Active/Refresh Delay Time
 | 
				
			||||||
 | 
						#               (tRCmin)
 | 
				
			||||||
 | 
						"tRASmin_MSN"							: 4,
 | 
				
			||||||
 | 
						"tRCmin_MSN"							: 4,
 | 
				
			||||||
 | 
						"tRASmin_LSB"							: 8,
 | 
				
			||||||
 | 
						"tRCmin_LSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 30 - 31: Minimum Refresh Recovery Delay Time (tRFC1min)
 | 
				
			||||||
 | 
						"tRFC1min_LSB"							: 8,
 | 
				
			||||||
 | 
						"tRFC1min_MSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 32 - 33: Minimum Refresh Recovery Delay Time (tRFC2min)
 | 
				
			||||||
 | 
						"tRFC2min_LSB"							: 8,
 | 
				
			||||||
 | 
						"tRFC2min_MSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 34 - 35: Minimum Refresh Recovery Delay Time (tRFC4min)
 | 
				
			||||||
 | 
						"tRFC4min_LSB"							: 8,
 | 
				
			||||||
 | 
						"tRFC4min_MSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 36 - 37:  Minimum Four Activate Window Delay Time
 | 
				
			||||||
 | 
						#               (tFAWmin)
 | 
				
			||||||
 | 
						"tFAWmin_MSN"							: 4,
 | 
				
			||||||
 | 
						"Byte_36_reserved"						: 4,
 | 
				
			||||||
 | 
						"tFAWmin_LSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 38: Minimum Activate to Activate Delay Time (tRRD_Smin),
 | 
				
			||||||
 | 
						#                different bank group
 | 
				
			||||||
 | 
						"tRRD_Smin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 39: Minimum Activate to Activate Delay Time (tRRD_Lmin),
 | 
				
			||||||
 | 
						#          same bank group
 | 
				
			||||||
 | 
						"tRRD_Lmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 40: Minimum CAS to CAS Delay Time (tCCD_Lmin), same bank
 | 
				
			||||||
 | 
						#          group
 | 
				
			||||||
 | 
						"tCCD_Lmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 41 - 42: Minimum Write Recovery Time (tWRmin)
 | 
				
			||||||
 | 
						"tWRmin_MSN"							: 4,
 | 
				
			||||||
 | 
						"Byte_41_reserved"						: 4,
 | 
				
			||||||
 | 
						"tWRmin_MSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 43-45: Minimum Write to Read Time (tWTR_Smin),
 | 
				
			||||||
 | 
						#	      different bank group / Minimum Write to Read Time
 | 
				
			||||||
 | 
						#	      (tWTR_Lmin), same bank group
 | 
				
			||||||
 | 
						"tWTR_Smin_MSN"							: 4,
 | 
				
			||||||
 | 
						"tWTR_Lmin_MSN"							: 4,
 | 
				
			||||||
 | 
						"tWTR_Smin_LSB"							: 8,
 | 
				
			||||||
 | 
						"tWTR_Lmin_LSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 46~59: Reserved, Base Configuration Section
 | 
				
			||||||
 | 
						"Byte_46_59_reserved" [14]					: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 60: Connector to SDRAM Bit Mapping (DQ0-3)
 | 
				
			||||||
 | 
						"DQ0_3"								: 8,
 | 
				
			||||||
 | 
						# Byte 61: Connector to SDRAM Bit Mapping (DQ4-7)
 | 
				
			||||||
 | 
						"DQ4_7"								: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 62: Connector to SDRAM Bit Mapping (DQ8-11)
 | 
				
			||||||
 | 
						"DQ8_11"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 63: Connector to SDRAM Bit Mapping (DQ12-15)
 | 
				
			||||||
 | 
						"DQ12_15"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 64: Connector to SDRAM Bit Mapping (DQ16-19)
 | 
				
			||||||
 | 
						"DQ16_19"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 65: Connector to SDRAM Bit Mapping (DQ20-23)
 | 
				
			||||||
 | 
						"DQ20_23"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 66: Connector to SDRAM Bit Mapping (DQ24-27)
 | 
				
			||||||
 | 
						"DQ24_27"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 67: Connector to SDRAM Bit Mapping (DQ28-31)
 | 
				
			||||||
 | 
						"DQ28_31"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 68: Connector to SDRAM Bit Mapping (CB0-3)
 | 
				
			||||||
 | 
						"CB0_3"								: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 69: Connector to SDRAM Bit Mapping (CB4-7)
 | 
				
			||||||
 | 
						"CB4_7"								: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 70: Connector to SDRAM Bit Mapping (DQ32-35)
 | 
				
			||||||
 | 
						"DQ32_35"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 71: Connector to SDRAM Bit Mapping (DQ36-39)
 | 
				
			||||||
 | 
						"DQ36_39"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 72: Connector to SDRAM Bit Mapping (DQ40-43)
 | 
				
			||||||
 | 
						"DQ40_43"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 73: Connector to SDRAM Bit Mapping (DQ44-47)
 | 
				
			||||||
 | 
						"DQ44_47"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 74: Connector to SDRAM Bit Mapping (DQ48-51)
 | 
				
			||||||
 | 
						"DQ48_51"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 75: Connector to SDRAM Bit Mapping (DQ52-55)
 | 
				
			||||||
 | 
						"DQ52_55"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 76: Connector to SDRAM Bit Mapping (DQ56-59)
 | 
				
			||||||
 | 
						"DQ56_59"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 77: Connector to SDRAM Bit Mapping (DQ60-63)
 | 
				
			||||||
 | 
						"DQ60_63"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 78~116: Reserved, Base Configuration Section
 | 
				
			||||||
 | 
						# Must be coded as 0x00
 | 
				
			||||||
 | 
						"Byte_78_116_reserved" [39]					: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 117: Fine Offset for Minimum CAS to CAS Delay Time
 | 
				
			||||||
 | 
						#           (tCCD_Lmin), same bank group
 | 
				
			||||||
 | 
						"tCCD_Lmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 118: Fine Offset for Minimum Activate to Activate Delay
 | 
				
			||||||
 | 
						#	    Time (tRRD_Lmin), same bank group
 | 
				
			||||||
 | 
						"tRRD_Lmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 119:  Fine Offset for Minimum Activate to Activate Delay
 | 
				
			||||||
 | 
						#	     Time (tRRD_Smin), different bank group
 | 
				
			||||||
 | 
						"tRRD_Smin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 120: Fine Offset for Minimum Active to Active/Refresh
 | 
				
			||||||
 | 
						#	    Delay Time (tRCmin)
 | 
				
			||||||
 | 
						"tRCmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 121: Fine Offset for Minimum Row Precharge Delay
 | 
				
			||||||
 | 
						#           Time (tRPmin)
 | 
				
			||||||
 | 
						"tRPmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 122: Fine Offset for Minimum RAS to CAS Delay
 | 
				
			||||||
 | 
						#	    Time (tRCDmin)
 | 
				
			||||||
 | 
						"tRCDmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 123: Fine Offset for Minimum CAS Latency Time (tAAmin)
 | 
				
			||||||
 | 
						"tAAmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 124: Fine Offset for SDRAM Maximum Cycle Time
 | 
				
			||||||
 | 
						#           (tCKAVGmax)
 | 
				
			||||||
 | 
						"tCKAVGmax"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 125: Fine Offset for SDRAM Minimum Cycle Time
 | 
				
			||||||
 | 
						#           (tCKAVGmin)
 | 
				
			||||||
 | 
						"tCKAVGmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 126 - 127: Cyclical Redundancy Code (CRC) for
 | 
				
			||||||
 | 
						#	    	  Base Configuration Section
 | 
				
			||||||
 | 
						"CRC_Base_Configuration"					: 16,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Standard Module Parameters - Overlay Bytes 128~191
 | 
				
			||||||
 | 
					#  Module Specific Bytes for Registered Memory Module Types
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 128: Raw Card Extension, Module Nominal Height
 | 
				
			||||||
 | 
						"Module_Nominal_Height_Max"					: 5,
 | 
				
			||||||
 | 
						"Raw_Card_Extension"						: 3,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 129: Module Maximum Thickness
 | 
				
			||||||
 | 
						"Module_Maximum_Thickness_Front"				: 4,
 | 
				
			||||||
 | 
						"Module_Maximum_Thickness_Back"					: 4,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 130: Reference Raw Card Used
 | 
				
			||||||
 | 
						"Reference_Raw_Card"						: 5,
 | 
				
			||||||
 | 
						"Reference_Raw_Card_Revision"					: 2,
 | 
				
			||||||
 | 
						"Reference_Raw_Card_Extension"					: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 131: DIMM Attributes
 | 
				
			||||||
 | 
						"Number_of_Registers_used_on_RDIMM"				: 2,
 | 
				
			||||||
 | 
						"Number_of_DRAMS_on_RDIMM"					: 2,
 | 
				
			||||||
 | 
						"Register_Type"							: 4,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 132: RDIMM Thermal Heat Spreader Solution
 | 
				
			||||||
 | 
						"Heat_Spreader_Thermal_Characteristics"				: 7,
 | 
				
			||||||
 | 
						"Heat_Spreader_Solution"					: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 133 - 134: Register Manufacturer ID Code
 | 
				
			||||||
 | 
						"Register_Manufacturer_ID_Code"					: 16,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 135: Register Revision Number
 | 
				
			||||||
 | 
						"Register_Revision_Number"					: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 136: Address Mapping from Register to DRAM
 | 
				
			||||||
 | 
						"Rank_1_Mapping"						: 1,
 | 
				
			||||||
 | 
						"Byte_136_Reserved"						: 7,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 137: Register Output Drive Strength for
 | 
				
			||||||
 | 
						#	    Control and Command/Address
 | 
				
			||||||
 | 
						"Register_Output_Drive_CKE"					: 2,
 | 
				
			||||||
 | 
						"Register_Output_Drive_ODT"					: 2,
 | 
				
			||||||
 | 
						"Register_Output_Drive_Command_Address"				: 2,
 | 
				
			||||||
 | 
						"Register_Output_Drive_Chip_Select"				: 2,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 138: Register Output Drive Strength for Clock
 | 
				
			||||||
 | 
						"Register_Output_Drive_Strength_Clock_Y0_Y2"			: 2,
 | 
				
			||||||
 | 
						"Register_Output_Drive_Strength_Clock_Y1_Y3"			: 2,
 | 
				
			||||||
 | 
						"Byte_138_reserved"						: 4,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 139 - 191: Reserved
 | 
				
			||||||
 | 
						"Byte_139_191" [53]						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Unused
 | 
				
			||||||
 | 
						# Byte 192 - 253: Unused
 | 
				
			||||||
 | 
						"Byte_192_255_unused" [62]					: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 254 - 255: CRC for SPD Block 1
 | 
				
			||||||
 | 
						"CRC_SPD_Block_1"						: 16,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Reserved
 | 
				
			||||||
 | 
						# Byte 256 - 319: Reserved
 | 
				
			||||||
 | 
						"Byte_256_319_reserved" [64]					: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End User Programmable
 | 
				
			||||||
 | 
						# Byte 384 - 511
 | 
				
			||||||
 | 
						"End_User_Programmable"	[128]					: 8
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										335
									
								
								util/bincfg/ddr4_unbuffered_spd_512.spec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										335
									
								
								util/bincfg/ddr4_unbuffered_spd_512.spec
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,335 @@
 | 
				
			|||||||
 | 
					# 4_01_02_AnnexL-R25_SPD_for_DDR4_SDRAM_Release_3_Sep2015.pdf
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# JEDEC Standard No. 21-C
 | 
				
			||||||
 | 
					# Page 4.1.2.12.3 – 1
 | 
				
			||||||
 | 
					# Annex L: Serial Presence Detect (SPD) for DDR4 SDRAM Modules
 | 
				
			||||||
 | 
					# DDR4 SPD Document Release 3
 | 
				
			||||||
 | 
					# UDIMM Revision 1.1
 | 
				
			||||||
 | 
					# RDIMM Revision 1.1
 | 
				
			||||||
 | 
					# LRDIMM Revision 1.1
 | 
				
			||||||
 | 
					# NVDIMM Revision 1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						# Byte 0: Number of Bytes Used / Number of Bytes in SPD Device /
 | 
				
			||||||
 | 
						#         CRC Coverage
 | 
				
			||||||
 | 
						"SPD_Bytes_Used"						: 4,
 | 
				
			||||||
 | 
						"SPD_Bytes_Total"						: 3,
 | 
				
			||||||
 | 
						"CRC_Coverage"							: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 1: SPD Revision
 | 
				
			||||||
 | 
						"SPD_Revision"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 2: Key Byte / DRAM Device Type
 | 
				
			||||||
 | 
						"DRAM_Device_Type"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 3: Key Byte / Module Type
 | 
				
			||||||
 | 
						"Base_Module_Type"						: 4,
 | 
				
			||||||
 | 
						"Hybrid_Media"							: 3,
 | 
				
			||||||
 | 
						"Is_Hybrid"							: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 4: SDRAM Density and Banks
 | 
				
			||||||
 | 
						"SDRAM_Capacity"						: 4,
 | 
				
			||||||
 | 
						"Bank_Address_Bits"						: 2,
 | 
				
			||||||
 | 
						"Bank_Group_Bits"						: 2,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 5: SDRAM Addressing
 | 
				
			||||||
 | 
						"Column_Address_Bits"						: 3,
 | 
				
			||||||
 | 
						"Row_Address_Bits"						: 3,
 | 
				
			||||||
 | 
						"Byte_5_reserved"						: 2,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 6:  SDRAM Package Type
 | 
				
			||||||
 | 
						"Signal_Loading"						: 2,
 | 
				
			||||||
 | 
						"Byte_6_reserved"						: 2,
 | 
				
			||||||
 | 
						"Die_Count"							: 3,
 | 
				
			||||||
 | 
						"SDRAM_Package_Type"						: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 7:  SDRAM Optional Features
 | 
				
			||||||
 | 
						"Maximum_Activate_Count"					: 4,
 | 
				
			||||||
 | 
						"Maximum_Activate_Window"					: 2,
 | 
				
			||||||
 | 
						"Byte_7_reserved"						: 2,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 8: SDRAM Thermal and Refresh Options
 | 
				
			||||||
 | 
						"Byte_8_reserved"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 9:  Other SDRAM Optional Features
 | 
				
			||||||
 | 
						"Byte_9_reserved"						: 5,
 | 
				
			||||||
 | 
						"Soft_PPR"							: 1,
 | 
				
			||||||
 | 
						"Post_Package_Repair"						: 2,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 10: Secondary SDRAM Package Type
 | 
				
			||||||
 | 
						"Secondary_Signal_Loading"					: 2,
 | 
				
			||||||
 | 
						"Secondary_DRAM_Densityt_Ratio"					: 2,
 | 
				
			||||||
 | 
						"Secondary_Die_Count"						: 3,
 | 
				
			||||||
 | 
						"Secondary_SDRAM_Package_Type"					: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 11:  Module Nominal Voltage, VDD
 | 
				
			||||||
 | 
						"DRAM_VDD_1_2_V"						: 2,
 | 
				
			||||||
 | 
						"Byte_11_reserved"						: 6,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 12: Module Organization
 | 
				
			||||||
 | 
						"SDRAM_Device_Width"						: 3,
 | 
				
			||||||
 | 
						"Number_of_Package_Ranks_per_DIMM"				: 3,
 | 
				
			||||||
 | 
						"Rank_Mix"							: 1,
 | 
				
			||||||
 | 
						"Byte_12_reserved"						: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 13: Module Memory Bus Width
 | 
				
			||||||
 | 
						"Primary_bus_width_in_bits"					: 3,
 | 
				
			||||||
 | 
						"Bus_width_extension_in_bits"					: 2,
 | 
				
			||||||
 | 
						"Byte_13_reserved"						: 3,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 14: Module Thermal Sensor
 | 
				
			||||||
 | 
						"Byte_14_reserved"						: 7,
 | 
				
			||||||
 | 
						"Thermal_Sensor"						: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 15:  Extended Module Type
 | 
				
			||||||
 | 
						"Extended_Base_Module_Type"					: 4,
 | 
				
			||||||
 | 
						"Byte_15_reserved"						: 4,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 16: Reserved
 | 
				
			||||||
 | 
						"Byte_16_reserved"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 17: Timebases
 | 
				
			||||||
 | 
						"Fine_Timebase"							: 2,
 | 
				
			||||||
 | 
						"Medium_Timebase"						: 2,
 | 
				
			||||||
 | 
						"Byte_17_reserved"						: 4,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 18:  SDRAM Minimum Cycle Time (tCKAVGmin)
 | 
				
			||||||
 | 
						"tCKAVGmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 19:  SDRAM Maximum Cycle Time (tCKAVGmax)
 | 
				
			||||||
 | 
						"tCKAVGmax"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 20 - 23: CAS Latencies Supported
 | 
				
			||||||
 | 
						"CL_7_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_8_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_9_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_10_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_11_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_12_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_13_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_14_Supported"						: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"CL_15_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_16_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_17_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_18_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_19_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_20_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_21_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_22_Supported"						: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"CL_23_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_24_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_25_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_26_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_27_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_28_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_29_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_30_Supported"						: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"CL_31_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_32_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_33_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_34_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_35_Supported"						: 1,
 | 
				
			||||||
 | 
						"CL_36_Supported"						: 1,
 | 
				
			||||||
 | 
						"Byte_23_reserved"						: 1,
 | 
				
			||||||
 | 
						"CL_range"							: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 24: Minimum CAS Latency Time (tAAmin)
 | 
				
			||||||
 | 
						"tAAmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 25: Minimum RAS to CAS Delay Time (tRCDmin)
 | 
				
			||||||
 | 
						"tRCDmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 26: Minimum Row Precharge Delay Time (tRPmin)
 | 
				
			||||||
 | 
						"tRPmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 27 - 29: Minimum Active to Precharge Delay Time (tRASmin)
 | 
				
			||||||
 | 
						#               / Minimum Active to Active/Refresh Delay Time
 | 
				
			||||||
 | 
						#               (tRCmin)
 | 
				
			||||||
 | 
						"tRASmin_MSN"							: 4,
 | 
				
			||||||
 | 
						"tRCmin_MSN"							: 4,
 | 
				
			||||||
 | 
						"tRASmin_LSB"							: 8,
 | 
				
			||||||
 | 
						"tRCmin_LSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 30 - 31: Minimum Refresh Recovery Delay Time (tRFC1min)
 | 
				
			||||||
 | 
						"tRFC1min_LSB"							: 8,
 | 
				
			||||||
 | 
						"tRFC1min_MSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 32 - 33: Minimum Refresh Recovery Delay Time (tRFC2min)
 | 
				
			||||||
 | 
						"tRFC2min_LSB"							: 8,
 | 
				
			||||||
 | 
						"tRFC2min_MSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 34 - 35: Minimum Refresh Recovery Delay Time (tRFC4min)
 | 
				
			||||||
 | 
						"tRFC4min_LSB"							: 8,
 | 
				
			||||||
 | 
						"tRFC4min_MSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 36 - 37:  Minimum Four Activate Window Delay Time
 | 
				
			||||||
 | 
						#               (tFAWmin)
 | 
				
			||||||
 | 
						"tFAWmin_MSN"							: 4,
 | 
				
			||||||
 | 
						"Byte_36_reserved"						: 4,
 | 
				
			||||||
 | 
						"tFAWmin_LSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 38: Minimum Activate to Activate Delay Time (tRRD_Smin),
 | 
				
			||||||
 | 
						#                different bank group
 | 
				
			||||||
 | 
						"tRRD_Smin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 39: Minimum Activate to Activate Delay Time (tRRD_Lmin),
 | 
				
			||||||
 | 
						#          same bank group
 | 
				
			||||||
 | 
						"tRRD_Lmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 40: Minimum CAS to CAS Delay Time (tCCD_Lmin), same bank
 | 
				
			||||||
 | 
						#          group
 | 
				
			||||||
 | 
						"tCCD_Lmin"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 41 - 42: Minimum Write Recovery Time (tWRmin)
 | 
				
			||||||
 | 
						"tWRmin_MSN"							: 4,
 | 
				
			||||||
 | 
						"Byte_41_reserved"						: 4,
 | 
				
			||||||
 | 
						"tWRmin_MSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 43-45: Minimum Write to Read Time (tWTR_Smin),
 | 
				
			||||||
 | 
						#	      different bank group / Minimum Write to Read Time
 | 
				
			||||||
 | 
						#	      (tWTR_Lmin), same bank group
 | 
				
			||||||
 | 
						"tWTR_Smin_MSN"							: 4,
 | 
				
			||||||
 | 
						"tWTR_Lmin_MSN"							: 4,
 | 
				
			||||||
 | 
						"tWTR_Smin_LSB"							: 8,
 | 
				
			||||||
 | 
						"tWTR_Lmin_LSB"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 46~59: Reserved, Base Configuration Section
 | 
				
			||||||
 | 
						"Byte_46_59_reserved" [14]					: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 60: Connector to SDRAM Bit Mapping (DQ0-3)
 | 
				
			||||||
 | 
						"DQ0_3"								: 8,
 | 
				
			||||||
 | 
						# Byte 61: Connector to SDRAM Bit Mapping (DQ4-7)
 | 
				
			||||||
 | 
						"DQ4_7"								: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 62: Connector to SDRAM Bit Mapping (DQ8-11)
 | 
				
			||||||
 | 
						"DQ8_11"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 63: Connector to SDRAM Bit Mapping (DQ12-15)
 | 
				
			||||||
 | 
						"DQ12_15"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 64: Connector to SDRAM Bit Mapping (DQ16-19)
 | 
				
			||||||
 | 
						"DQ16_19"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 65: Connector to SDRAM Bit Mapping (DQ20-23)
 | 
				
			||||||
 | 
						"DQ20_23"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 66: Connector to SDRAM Bit Mapping (DQ24-27)
 | 
				
			||||||
 | 
						"DQ24_27"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 67: Connector to SDRAM Bit Mapping (DQ28-31)
 | 
				
			||||||
 | 
						"DQ28_31"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 68: Connector to SDRAM Bit Mapping (CB0-3)
 | 
				
			||||||
 | 
						"CB0_3"								: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 69: Connector to SDRAM Bit Mapping (CB4-7)
 | 
				
			||||||
 | 
						"CB4_7"								: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 70: Connector to SDRAM Bit Mapping (DQ32-35)
 | 
				
			||||||
 | 
						"DQ32_35"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 71: Connector to SDRAM Bit Mapping (DQ36-39)
 | 
				
			||||||
 | 
						"DQ36_39"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 72: Connector to SDRAM Bit Mapping (DQ40-43)
 | 
				
			||||||
 | 
						"DQ40_43"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 73: Connector to SDRAM Bit Mapping (DQ44-47)
 | 
				
			||||||
 | 
						"DQ44_47"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 74: Connector to SDRAM Bit Mapping (DQ48-51)
 | 
				
			||||||
 | 
						"DQ48_51"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 75: Connector to SDRAM Bit Mapping (DQ52-55)
 | 
				
			||||||
 | 
						"DQ52_55"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 76: Connector to SDRAM Bit Mapping (DQ56-59)
 | 
				
			||||||
 | 
						"DQ56_59"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 77: Connector to SDRAM Bit Mapping (DQ60-63)
 | 
				
			||||||
 | 
						"DQ60_63"							: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Bytes 78~116: Reserved, Base Configuration Section
 | 
				
			||||||
 | 
						# Must be coded as 0x00
 | 
				
			||||||
 | 
						"Byte_78_116_reserved" [39]					: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 117: Fine Offset for Minimum CAS to CAS Delay Time
 | 
				
			||||||
 | 
						#           (tCCD_Lmin), same bank group
 | 
				
			||||||
 | 
						"tCCD_Lmin_Fine_Offset"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 118: Fine Offset for Minimum Activate to Activate Delay
 | 
				
			||||||
 | 
						#	    Time (tRRD_Lmin), same bank group
 | 
				
			||||||
 | 
						"tRRD_Lmin_Fine_Offset"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 119:  Fine Offset for Minimum Activate to Activate Delay
 | 
				
			||||||
 | 
						#	     Time (tRRD_Smin), different bank group
 | 
				
			||||||
 | 
						"tRRD_Smin_Fine_Offset"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 120: Fine Offset for Minimum Active to Active/Refresh
 | 
				
			||||||
 | 
						#	    Delay Time (tRCmin)
 | 
				
			||||||
 | 
						"tRCmin_Fine_Offset"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 121: Fine Offset for Minimum Row Precharge Delay
 | 
				
			||||||
 | 
						#           Time (tRPmin)
 | 
				
			||||||
 | 
						"tRPmin_Fine_Offset"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 122: Fine Offset for Minimum RAS to CAS Delay
 | 
				
			||||||
 | 
						#	    Time (tRCDmin)
 | 
				
			||||||
 | 
						"tRCDmin_Fine_Offset"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 123: Fine Offset for Minimum CAS Latency Time (tAAmin)
 | 
				
			||||||
 | 
						"tAAmin_Fine_Offset"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 124: Fine Offset for SDRAM Maximum Cycle Time
 | 
				
			||||||
 | 
						#           (tCKAVGmax)
 | 
				
			||||||
 | 
						"tCKAVGmax_Fine_Offset"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 125: Fine Offset for SDRAM Minimum Cycle Time
 | 
				
			||||||
 | 
						#           (tCKAVGmin)
 | 
				
			||||||
 | 
						"tCKAVGmin_Fine_Offset"						: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 126 - 127: Cyclical Redundancy Code (CRC) for
 | 
				
			||||||
 | 
						#	    	  Base Configuration Section
 | 
				
			||||||
 | 
						"CRC_Base_Configuration"					: 16,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Standard Module Parameters - Overlay Bytes 128~191
 | 
				
			||||||
 | 
					#  Module Specific Bytes for Unbuffered Memory Module Types
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 128: Raw Card Extension, Module Nominal Height
 | 
				
			||||||
 | 
						"Module_Nominal_Height_Max"					: 5,
 | 
				
			||||||
 | 
						"Raw_Card_Extension"						: 3,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 129: Module Maximum Thickness
 | 
				
			||||||
 | 
						"Module_Maximum_Thickness_Front"				: 4,
 | 
				
			||||||
 | 
						"Module_Maximum_Thickness_Back"					: 4,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 130: Reference Raw Card Used
 | 
				
			||||||
 | 
						"Reference_Raw_Card"						: 5,
 | 
				
			||||||
 | 
						"Reference_Raw_Card_Revision"					: 2,
 | 
				
			||||||
 | 
						"Reference_Raw_Card_Extension"					: 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 131: Address Mapping from Edge Connector to DRAM
 | 
				
			||||||
 | 
						"Rank_1_Mapping"						: 1,
 | 
				
			||||||
 | 
						"Byte_131_reserved"						: 7,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 132 - 191: Reserved
 | 
				
			||||||
 | 
						"Byte_132_191_reserved"	[60]					: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Unused
 | 
				
			||||||
 | 
						# Byte 192 - 253: Unused
 | 
				
			||||||
 | 
						"Byte_192_255_unused" [62]					: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Byte 254 - 255: CRC for SPD Block 1
 | 
				
			||||||
 | 
						"CRC_SPD_Block_1"						: 16,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Reserved
 | 
				
			||||||
 | 
						# Byte 256 - 319: Reserved
 | 
				
			||||||
 | 
						"Byte_256_319_reserved" [64]					: 8,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End User Programmable
 | 
				
			||||||
 | 
						# Byte 384 - 511
 | 
				
			||||||
 | 
						"End_User_Programmable"	[128]					: 8
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										76
									
								
								util/scripts/decode_spd.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										76
									
								
								util/scripts/decode_spd.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,76 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of the coreboot project.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation; version 2 of the License.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					# GNU General Public License for more details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Parses spd hex files and outputs the contents in various formats
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Outputs csv, set, and json in same folder as SPD_HEX_FILE
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Example:
 | 
				
			||||||
 | 
					# 	decode_spd.sh ../../src/mainboard/google/zork/spd/micron-MT40A512M16TB-062E-J.spd.hex
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Outputs ../../src/mainboard/google/zork/spd/micron-MT40A512M16TB-062E-J.spd.{json|csv|set}
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# TODO: This script assumes bincfg binary is at ../bincfg/bincfg (which is the
 | 
				
			||||||
 | 
					#	result of running the bincfg make), and the specs are at
 | 
				
			||||||
 | 
					#	../bincfg/*.spec. This dependency should be made more resilliant and
 | 
				
			||||||
 | 
					#	configurable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function read8 () {
 | 
				
			||||||
 | 
						echo $(( 16#$(xxd -s "${2}" -l 1 -p "${1}") ))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for file in "$@"
 | 
				
			||||||
 | 
					do
 | 
				
			||||||
 | 
						bintmp=$(mktemp)
 | 
				
			||||||
 | 
						outfile="${file%.hex}.set"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						echo "Decoding ${file}, outputting to ${outfile}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						grep -v '^#' "${file}" | xxd -r -p - "${bintmp}"
 | 
				
			||||||
 | 
						dram_type=$(read8 "${bintmp}" 2)
 | 
				
			||||||
 | 
						if [ ! "${dram_type}" -eq 12 ]
 | 
				
			||||||
 | 
						then
 | 
				
			||||||
 | 
							#TODO: Handle other dram types
 | 
				
			||||||
 | 
							printf "Error: Expecting dram4 (12), got %d\n" "${dram_type}"
 | 
				
			||||||
 | 
							continue
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						revision=$(read8 "${bintmp}" 1)
 | 
				
			||||||
 | 
						if [ ! "${revision}" -eq $((0x13)) ]
 | 
				
			||||||
 | 
						then
 | 
				
			||||||
 | 
							printf "Warning: Expecting revision 0x13, got 0x%x.\n" "${revision}"
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						module_type=$(read8 "${bintmp}" 3)
 | 
				
			||||||
 | 
						case "${module_type}" in
 | 
				
			||||||
 | 
						1) # RDIMM
 | 
				
			||||||
 | 
							spec="../bincfg/ddr4_registered_spd_512.spec"
 | 
				
			||||||
 | 
						;;
 | 
				
			||||||
 | 
						2 | 3) #UDIMM | SO-DIMM
 | 
				
			||||||
 | 
							spec="../bincfg/ddr4_unbuffered_spd_512.spec"
 | 
				
			||||||
 | 
						;;
 | 
				
			||||||
 | 
						* )
 | 
				
			||||||
 | 
							printf "Error: Unhandled module type %d.\n" "${module_type}"
 | 
				
			||||||
 | 
						;;
 | 
				
			||||||
 | 
						esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						../bincfg/bincfg -d "${spec}" "${bintmp}" "${outfile}"
 | 
				
			||||||
 | 
						grep -v '^#' "${outfile}" | sed -e 's/ = \([^,]\+\)/: "\1"/g' \
 | 
				
			||||||
 | 
							> "${file%.hex}.json"
 | 
				
			||||||
 | 
						grep -v -e '^#' -e '^{' -e '^}' "${outfile}" | sed -e 's/=/,/g' \
 | 
				
			||||||
 | 
							> "${file%.hex}.csv"
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
@@ -3,6 +3,8 @@ __scripts__
 | 
				
			|||||||
              line `Bash`
 | 
					              line `Bash`
 | 
				
			||||||
  * _cross-repo-cherrypick_ - Pull in patches from another tree from a
 | 
					  * _cross-repo-cherrypick_ - Pull in patches from another tree from a
 | 
				
			||||||
                              gerrit repository. `Shell`
 | 
					                              gerrit repository. `Shell`
 | 
				
			||||||
 | 
					  * _decode_spd.sh_ - Decodes Serial Presence Detect (SPD) files into
 | 
				
			||||||
 | 
					                      various human readable formats.
 | 
				
			||||||
  * _dts-to-fmd.sh_ -Converts a depthcharge fmap.dts into an fmaptool
 | 
					  * _dts-to-fmd.sh_ -Converts a depthcharge fmap.dts into an fmaptool
 | 
				
			||||||
                     compatible .fmd format `Bash`
 | 
					                     compatible .fmd format `Bash`
 | 
				
			||||||
  * _find-unused-kconfig-symbols.sh_ - Points out Kconfig variables
 | 
					  * _find-unused-kconfig-symbols.sh_ - Points out Kconfig variables
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user