exynos5420/kirby: necessary updates for DRAM

This updates DRAM usage for Kirby so that we can actually
use the available 3.5GB:

- The chips on Kirby have 16 row address lines.
- CONFIG_DRAM_SIZE_MB should be 3584 (4096-512).
- We use 2 DMC channels on Kirby (each with 2GB).

Signed-off-by: David Hendricks <dhendrix@chromium.org>
BUG=chrome-os-partner:22144
BRANCH=none
TEST=built and booted (sorta) on Kirby, mem test succeeds

Change-Id: I86d1a96d0d1a028587f7655f8de5a2e52165e9d2
Reviewed-on: https://chromium-review.googlesource.com/167489
Commit-Queue: David Hendricks <dhendrix@chromium.org>
Tested-by: David Hendricks <dhendrix@chromium.org>
Reviewed-by: ron minnich <rminnich@chromium.org>
diff --git a/src/cpu/samsung/exynos5420/setup.h b/src/cpu/samsung/exynos5420/setup.h
index 0179f3d..950c2c6 100644
--- a/src/cpu/samsung/exynos5420/setup.h
+++ b/src/cpu/samsung/exynos5420/setup.h
@@ -136,6 +136,7 @@
 #define DMC_MEMCONFIGx_CHIP_COL_10              (3 << 8)
 #define DMC_MEMCONFIGx_CHIP_ROW_14              (2 << 4)
 #define DMC_MEMCONFIGx_CHIP_ROW_15              (3 << 4)
+#define DMC_MEMCONFIGx_CHIP_ROW_16              (4 << 4)
 #define DMC_MEMCONFIGx_CHIP_BANK_8              (3 << 0)
 
 #define DMC_MEMBASECONFIGx_CHIP_BASE(x)         (x << 16)
diff --git a/src/mainboard/google/kirby/Kconfig b/src/mainboard/google/kirby/Kconfig
index d7cd6d8..a756078 100644
--- a/src/mainboard/google/kirby/Kconfig
+++ b/src/mainboard/google/kirby/Kconfig
@@ -43,9 +43,8 @@
 
 config DRAM_SIZE_MB
 	int
-	# FIXME(dhendrix): This should be 4096, but due to DRAM
-	# issues it seems only <2GB is stable.
-	default 2048
+	# 4096MB minus 512MB due to address space limitation
+	default 3584
 
 config EC_GOOGLE_CHROMEEC_SPI_BUS
 	hex
diff --git a/src/mainboard/google/kirby/memory.c b/src/mainboard/google/kirby/memory.c
index bd4af93..0b83375 100644
--- a/src/mainboard/google/kirby/memory.c
+++ b/src/mainboard/google/kirby/memory.c
@@ -66,7 +66,9 @@
 
 		.rd_fetch = 0x3,
 
-		.zq_mode_dds = 0x6,
+		/* SLSI recommended using 30-ohm drive strength instead of
+		 * 34-ohm suggested by the SDRAM datasheet. */
+		.zq_mode_dds = 0x7,
 		.zq_mode_term = 0x1,
 		.zq_mode_noterm = 1,
 
@@ -99,7 +101,7 @@
 		.membaseconfig0 = (0x10 << 16) | DMC_CHIP_MASK_2GB,
 		.memconfig = DMC_MEMCONFIG_CHIP_MAP_SPLIT |
 			DMC_MEMCONFIGx_CHIP_COL_10 |
-			DMC_MEMCONFIGx_CHIP_ROW_15 |
+			DMC_MEMCONFIGx_CHIP_ROW_16 |
 			DMC_MEMCONFIGx_CHIP_BANK_8,
 		.prechconfig_tp_cnt = 0xff,
 		.dpwrdn_cyc = 0xff,
@@ -110,7 +112,7 @@
 			DMC_CONCONTROL_EMPTY_DISABLE |
 			DMC_CONCONTROL_AREF_EN_DISABLE |
 			DMC_CONCONTROL_IO_PD_CON_DISABLE,
-		.dmc_channels = 1,
+		.dmc_channels = 2,
 		.chips_per_channel = 1,
 		.chips_to_configure = 1,
 		.send_zq_init = 1,