[coreboot-gerrit] Change in coreboot[master]: soc/intel/apollolake: Add support for LPDDR4 nWR setting

Ravishankar Sarawadi (Code Review) gerrit at coreboot.org
Sat Aug 4 01:08:55 CEST 2018


Ravishankar Sarawadi has uploaded this change for review. ( https://review.coreboot.org/27850


Change subject: soc/intel/apollolake: Add support for LPDDR4 nWR setting
......................................................................

soc/intel/apollolake: Add support for LPDDR4 nWR setting

nWR (Write-Recovery for AutoPre-charge commands), the programmed value of nWR
is the number of clock cycles the LPDDR4-SDRAM device uses to determine the
starting point of an internal Pre-charge operation after a Write burst with
AP (auto-pre-charge) enabled.

BUG=b:112062440
TEST= build test

Change-Id: I1147538f72f4e2f14e32f3657c05f1f505a56fbf
Signed-off-by: Ravi Sarawadi <ravishankar.sarawadi at intel.com>
---
M src/soc/intel/apollolake/include/soc/meminit.h
M src/soc/intel/apollolake/meminit.c
2 files changed, 19 insertions(+), 7 deletions(-)



  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/50/27850/1

diff --git a/src/soc/intel/apollolake/include/soc/meminit.h b/src/soc/intel/apollolake/include/soc/meminit.h
index 27b6556..adea59a 100644
--- a/src/soc/intel/apollolake/include/soc/meminit.h
+++ b/src/soc/intel/apollolake/include/soc/meminit.h
@@ -81,6 +81,7 @@
 enum {
 	ODT_A_B_HIGH_LOW = 0 << 1,
 	ODT_A_B_HIGH_HIGH = 1 << 1,
+	nWR = 1 << 5,
 };
 
 /* Provide bit swizzling per DQS and byte swapping within a channel. */
@@ -116,6 +117,7 @@
 	int ch1_dual_rank;
 	const char *part_num;
 	bool disable_periodic_retraining;
+	bool enable_nWR_24;
 };
 
 struct lpddr4_cfg {
diff --git a/src/soc/intel/apollolake/meminit.c b/src/soc/intel/apollolake/meminit.c
index b0a5f4a..8690040 100644
--- a/src/soc/intel/apollolake/meminit.c
+++ b/src/soc/intel/apollolake/meminit.c
@@ -119,13 +119,6 @@
 	cfg->Ch1_Option = 0x3;
 	cfg->Ch2_Option = 0x3;
 	cfg->Ch3_Option = 0x3;
-
-	/* Set CA ODT with default setting of ODT pins of LPDDR4 modules pulled
-	   up to 1.1V. */
-	cfg->Ch0_OdtConfig = ODT_A_B_HIGH_HIGH;
-	cfg->Ch1_OdtConfig = ODT_A_B_HIGH_HIGH;
-	cfg->Ch2_OdtConfig = ODT_A_B_HIGH_HIGH;
-	cfg->Ch3_OdtConfig = ODT_A_B_HIGH_HIGH;
 }
 
 struct speed_mapping {
@@ -326,6 +319,7 @@
 				const struct lpddr4_cfg *lpcfg, size_t sku_id)
 {
 	const struct lpddr4_sku *sku;
+	u8 odt_config;
 
 	if (sku_id >= lpcfg->num_skus) {
 		printk(BIOS_ERR, "Too few LPDDR4 SKUs: 0x%zx/0x%zx\n",
@@ -358,6 +352,22 @@
 	}
 
 	cfg->PeriodicRetrainingDisable = sku->disable_periodic_retraining;
+
+
+	/*
+	* Set CA ODT with default setting of ODT pins of LPDDR4 modules pulled
+	* up to 1.1V.
+	* Set bit 5 in Ch0_OdtConfig to enable nWR24.
+	*/
+	if (sku->enable_nWR_24 == 1)
+		odt_config = ODT_A_B_HIGH_HIGH | nWR;
+	else
+		odt_config = ODT_A_B_HIGH_HIGH;
+
+	cfg->Ch0_OdtConfig = odt_config;
+	cfg->Ch1_OdtConfig = odt_config;
+	cfg->Ch2_OdtConfig = odt_config;
+	cfg->Ch3_OdtConfig = odt_config;
 }
 
 uint8_t fsp_memory_soc_version(void)

-- 
To view, visit https://review.coreboot.org/27850
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1147538f72f4e2f14e32f3657c05f1f505a56fbf
Gerrit-Change-Number: 27850
Gerrit-PatchSet: 1
Gerrit-Owner: Ravishankar Sarawadi <ravishankar.sarawadi at intel.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180803/1fd52628/attachment.html>


More information about the coreboot-gerrit mailing list