[coreboot-gerrit] New patch to review for coreboot: nb/intel/i945/raminit: Don't hardcode B2B read/write Command Spacing
Arthur Heymans (arthur@aheymans.xyz)
gerrit at coreboot.org
Mon Feb 13 01:16:55 CET 2017
Arthur Heymans (arthur at aheymans.xyz) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/18355
-gerrit
commit d91548a3941704bd92e9bbc306724b77c781492b
Author: Arthur Heymans <arthur at aheymans.xyz>
Date: Mon Feb 13 01:12:02 2017 +0100
nb/intel/i945/raminit: Don't hardcode B2B read/write Command Spacing
This programs these timings according to "Mobile Intel® 945 Express
Chipset Family Datasheet".
UNTESTED!!
Change-Id: I2888496c0467512411f57cbc5cfb75c50907b44f
Signed-off-by: Arthur Heymans <arthur at aheymans.xyz>
---
src/northbridge/intel/i945/raminit.c | 58 +++++++++++++++++++++++++++++++-----
1 file changed, 51 insertions(+), 7 deletions(-)
diff --git a/src/northbridge/intel/i945/raminit.c b/src/northbridge/intel/i945/raminit.c
index 1f79cf6..93d46e8 100644
--- a/src/northbridge/intel/i945/raminit.c
+++ b/src/northbridge/intel/i945/raminit.c
@@ -1720,7 +1720,7 @@ static void sdram_program_odt_tristate(struct sys_info *sysinfo)
static void sdram_set_timing_and_control(struct sys_info *sysinfo)
{
- u32 reg32, tRD_min;
+ u32 reg32, tRD_min, ta;
u32 tWTR;
u32 temp_drt;
int i, page_size;
@@ -1774,9 +1774,6 @@ static void sdram_set_timing_and_control(struct sys_info *sysinfo)
reg32 = (sysinfo->cas - 1) + (BURSTLENGTH / 2) + tWTR;
temp_drt |= (reg32 << 24);
- /* CxDRT0 [23:22], [21:20], [19:18] [16] have fixed values */
- temp_drt |= ( (1 << 22) | (3 << 20) | (1 << 18) | (0 << 16) );
-
tRD_min = sysinfo->cas;
switch (sysinfo->fsb_frequency) {
case 533: break;
@@ -1787,6 +1784,56 @@ static void sdram_set_timing_and_control(struct sys_info *sysinfo)
temp_drt |= (tRD_min << 11);
+ ta = sysinfo->twr - tRD_min;
+
+ /* B2B Write-Read Command Spacing (Different Rank) */
+ reg32 = BURSTLENGTH / 2 + ta - 1;
+ switch (reg32) {
+ case 6:
+ temp_drt |= (0 << 22);
+ break;
+ case 5:
+ default:
+ temp_drt |= (1 << 22);
+ break;
+ case 4:
+ temp_drt |= (2 << 22);
+ break;
+ }
+
+ /* B2B Write-Read Command Spacing for BURSTLENGTH 8 */
+ reg32 = BURSTLENGTH / 2 + ta + 1;
+ switch (reg32) {
+ case 9:
+ temp_drt |= (0 << 20);
+ break;
+ case 8:
+ temp_drt |= (1 << 20);
+ break;
+ case 7:
+ temp_drt |= (2 << 20);
+ break;
+ case 6:
+ default:
+ temp_drt |= (3 << 20);
+ break;
+
+ }
+
+ /* B2B Write Command Spacing */
+ reg32 = BURSTLENGTH / 2 + ta;
+ switch (reg32) {
+ case 6:
+ temp_drt |= (0 << 18);
+ break;
+ case 5:
+ temp_drt |= (1 << 18);
+ break;
+ case 4:
+ temp_drt |= (2 << 18);
+ break;
+ }
+
/* Read Auto Precharge to Activate */
temp_drt |= (8 << 0);
@@ -1813,9 +1860,6 @@ static void sdram_set_timing_and_control(struct sys_info *sysinfo)
/* Pre-All to Activate Delay */
temp_drt |= (0 << 16);
- /* Precharge to Precharge Delay stays at 1 clock */
- temp_drt |= (0 << 18);
-
/* Activate to Precharge Delay */
temp_drt |= (sysinfo->tras << 19);
More information about the coreboot-gerrit
mailing list