nyan: Add Kingston memory module info

BUG=chrome-os-partner:29894
BRANCH=nyan
TEST=Locally forced memory type to 2G Kingston, compiled
and ran "mosys memory spd print all":

localhost ~ # /tmp/mosys -k memory spd print all
dimm="0" dram="DDR3" module="SO-DIMM"
dimm="1" dram="DDR3" module="SO-DIMM"
dimm="2" dram="DDR3" module="SO-DIMM"
dimm="3" dram="DDR3" module="SO-DIMM"
dimm="0" module_mfg="2-24: Kingston" serial_number="00000000" part_number="D2516EC4BXGGB"
dimm="1" module_mfg="2-24: Kingston" serial_number="00000000" part_number="D2516EC4BXGGB"
dimm="2" module_mfg="2-24: Kingston" serial_number="00000000" part_number="D2516EC4BXGGB"
dimm="3" module_mfg="2-24: Kingston" serial_number="00000000" part_number="D2516EC4BXGGB"
dimm="0" size_mb="512" ranks="1" width="16"
dimm="1" size_mb="512" ranks="1" width="16"
dimm="2" size_mb="512" ranks="1" width="16"
dimm="3" size_mb="512" ranks="1" width="16"
dimm="0" speeds="DDR3-800, DDR3-1066, DDR3-1333, DDR3-1600"
dimm="1" speeds="DDR3-800, DDR3-1066, DDR3-1333, DDR3-1600"
dimm="2" speeds="DDR3-800, DDR3-1066, DDR3-1333, DDR3-1600"
dimm="3" speeds="DDR3-800, DDR3-1066, DDR3-1333, DDR3-1600"

Change-Id: Ia3af0572bf9287cf7e8260d7d64df1c378e4c508
Reviewed-on: https://chromium-review.googlesource.com/205314
Commit-Queue: David Hendricks <dhendrix@chromium.org>
Tested-by: David Hendricks <dhendrix@chromium.org>
Reviewed-by: Neil Chen <neilc@nvidia.com>
Tested-by: Neil Chen <neilc@nvidia.com>
Reviewed-by: Stefan Reinauer <reinauer@google.com>
Reviewed-on: https://chromium-review.googlesource.com/215900
Tested-by: AlexWS Lee <alexws_lee@compal.com>
Reviewed-by: David Hendricks <dhendrix@chromium.org>
diff --git a/platform/experimental/nyan/memory.c b/platform/experimental/nyan/memory.c
index f42304e..90136d1 100644
--- a/platform/experimental/nyan/memory.c
+++ b/platform/experimental/nyan/memory.c
@@ -318,6 +318,55 @@
 	[DDR3_SPD_REG_MODULE_PART_NUM_17] = 0,
 };
 
+static uint8_t kingston_ddr3_1600_256x16_spd[SPD_MAX_LENGTH] = {
+	[DDR3_SPD_REG_SIZE_CRC]		= 0x92,
+	[DDR3_SPD_REG_REVISION]		= 0x12,
+	[DDR3_SPD_REG_DEVICE_TYPE]	= 0x0b,
+	[DDR3_SPD_REG_MODULE_TYPE]	= 0x03,
+	[DDR3_SPD_REG_DENSITY_BANKS]	= 0x04,	/* 8 banks * 256MB = 2GBytes */
+	[DDR3_SPD_REG_ADDRESSING]	= 0x19,	/* 15 rows, 10 cols */
+	[DDR3_SPD_REG_VOLTAGE]		= 0x02,	/* 1.35V */
+	[DDR3_SPD_REG_MODULE_ORG]	= 0x02,	/* 1 rank, x8 */
+	[DDR3_SPD_REG_MODULE_BUS_WIDTH]	= 0x01,
+
+	/* DDR3-1600 = (1/8)ns * 10 = 1.25ns */
+	[DDR3_SPD_REG_FTB_DIVIDEND_DIVSOR]	= 0x11,	/* granularity of 1ps */
+	[DDR3_SPD_REG_MTB_DIVIDEND]		= 1,
+	[DDR3_SPD_REG_MTB_DIVISOR]		= 8,
+	[DDR3_SPD_REG_TCK_MIN]			= 10,
+
+	/* 5, 6, 7, 8, 9, 10, 11 */
+	[DDR3_SPD_REG_CAS_LAT_LSB]	= 0xfe,
+	[DDR3_SPD_REG_CAS_LAT_MSB]	= 0x00,
+
+	[DDR3_SPD_REG_TAA_MIN]		= 0x69,	/* 13.125ns */
+	[DDR3_SPD_REG_TWR_MIN]		= 0x78,	/* 15ns */
+	[DDR3_SPD_REG_TRCD_MIN]		= 0x69,	/* 13.125ns */
+
+	/* Kingston is bank 2, number 24 (JEP-106) */
+	[DDR3_SPD_REG_MODULE_MANUF_JEDEC_ID_LSB] = 1,
+	[DDR3_SPD_REG_MODULE_MANUF_JEDEC_ID_MSB] = 0x98,
+
+	[DDR3_SPD_REG_MODULE_MANUF_SERIAL_0] = 0x00000000,
+	[DDR3_SPD_REG_MODULE_MANUF_SERIAL_1] = 0x00000000,
+	[DDR3_SPD_REG_MODULE_MANUF_SERIAL_2] = 0x00000000,
+	[DDR3_SPD_REG_MODULE_MANUF_SERIAL_3] = 0x00000000,
+
+	[DDR3_SPD_REG_MODULE_PART_NUM_0] = 'D',
+	[DDR3_SPD_REG_MODULE_PART_NUM_1] = '2',
+	[DDR3_SPD_REG_MODULE_PART_NUM_2] = '5',
+	[DDR3_SPD_REG_MODULE_PART_NUM_3] = '1',
+	[DDR3_SPD_REG_MODULE_PART_NUM_4] = '6',
+	[DDR3_SPD_REG_MODULE_PART_NUM_5] = 'E',
+	[DDR3_SPD_REG_MODULE_PART_NUM_6] = 'C',
+	[DDR3_SPD_REG_MODULE_PART_NUM_7] = '4',
+	[DDR3_SPD_REG_MODULE_PART_NUM_8] = 'B',
+	[DDR3_SPD_REG_MODULE_PART_NUM_9] = 'X',
+	[DDR3_SPD_REG_MODULE_PART_NUM_10] = 'G',
+	[DDR3_SPD_REG_MODULE_PART_NUM_11] = 'G',
+	[DDR3_SPD_REG_MODULE_PART_NUM_12] = 'B',
+};
+
 /*
  * dimm_count  -  return total number of dimm slots
  *
@@ -364,6 +413,8 @@
 	SAMSUNG_DDR3_1600_4G,
 	ELPIDA_DDR3_1600_2G,
 	ELPIDA_DDR3_1600_4G,
+	KINGSTON_DDR3_1600_2G,
+	KINGSTON_DDR3_1600_4G,
 	MEM_UNKNOWN,
 };
 
@@ -407,6 +458,8 @@
 			memory_config = HYNIX_DDR3_1600_4G;
 		else if (ramcode == 0x5)
 			memory_config = ELPIDA_DDR3_1600_4G;
+		else if (ramcode == 0x6)
+			memory_config = KINGSTON_DDR3_1600_2G;
 		else
 			memory_config = MEM_UNKNOWN;
 		break;
@@ -539,6 +592,9 @@
 		p[DDR3_SPD_REG_MODULE_PART_NUM_9] = 'M';
 		p[DDR3_SPD_REG_MODULE_PART_NUM_10] = 'B';
 		break;
+	case KINGSTON_DDR3_1600_2G:
+		p = kingston_ddr3_1600_256x16_spd;
+		break;
 	default:
 		return -1;
 	}