[coreboot-gerrit] New patch to review for coreboot: 79d6b70 nehalem sandy ivy: Check cbmem_add() result for MRC data

Kyösti Mälkki (kyosti.malkki@gmail.com) gerrit at coreboot.org
Sun Jun 15 17:52:04 CEST 2014


Kyösti Mälkki (kyosti.malkki at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6033

-gerrit

commit 79d6b70b3086bd1c4d32d1b96212af1af6c1d048
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date:   Sun Jun 15 15:59:44 2014 +0300

    nehalem sandy ivy: Check cbmem_add() result for MRC data
    
    In theory we could run out of CBMEM space so check the entry was added.
    There is no interest to support builds without EARLY_CBMEM_INIT.
    
    Change-Id: I68dd7c20e3d3692331aaafa2a692c5c0dfce95d5
    Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
 src/northbridge/intel/nehalem/raminit.c     | 28 +++++++++++++-------------
 src/northbridge/intel/sandybridge/raminit.c | 31 ++++++++++++++---------------
 2 files changed, 29 insertions(+), 30 deletions(-)

diff --git a/src/northbridge/intel/nehalem/raminit.c b/src/northbridge/intel/nehalem/raminit.c
index 21cc987..a2960f6 100644
--- a/src/northbridge/intel/nehalem/raminit.c
+++ b/src/northbridge/intel/nehalem/raminit.c
@@ -1687,7 +1687,6 @@ static void dump_timings(struct raminfo *info)
  */
 static void save_timings(struct raminfo *info)
 {
-#if CONFIG_EARLY_CBMEM_INIT
 	struct ram_training train;
 	struct mrc_data_container *mrcdata;
 	int output_len = ALIGN(sizeof(train), 16);
@@ -1722,22 +1721,23 @@ static void save_timings(struct raminfo *info)
 	mrcdata = cbmem_add
 	    (CBMEM_ID_MRCDATA, output_len + sizeof(struct mrc_data_container));
 
-	printk(BIOS_DEBUG, "Relocate MRC DATA from %p to %p (%u bytes)\n",
-	       &train, mrcdata, output_len);
+	if (mrcdata != NULL) {
+		printk(BIOS_DEBUG, "Relocate MRC DATA from %p to %p (%u bytes)\n",
+			&train, mrcdata, output_len);
 
-	mrcdata->mrc_signature = MRC_DATA_SIGNATURE;
-	mrcdata->mrc_data_size = output_len;
-	mrcdata->reserved = 0;
-	memcpy(mrcdata->mrc_data, &train, sizeof(train));
+		mrcdata->mrc_signature = MRC_DATA_SIGNATURE;
+		mrcdata->mrc_data_size = output_len;
+		mrcdata->reserved = 0;
+		memcpy(mrcdata->mrc_data, &train, sizeof(train));
 
-	/* Zero the unused space in aligned buffer. */
-	if (output_len > sizeof(train))
-		memset(mrcdata->mrc_data + sizeof(train), 0,
-		       output_len - sizeof(train));
+		/* Zero the unused space in aligned buffer. */
+		if (output_len > sizeof(train))
+			memset(mrcdata->mrc_data + sizeof(train), 0,
+				output_len - sizeof(train));
 
-	mrcdata->mrc_checksum = compute_ip_checksum(mrcdata->mrc_data,
-						    mrcdata->mrc_data_size);
-#endif
+		mrcdata->mrc_checksum = compute_ip_checksum(mrcdata->mrc_data,
+						mrcdata->mrc_data_size);
+	}
 }
 
 #if REAL
diff --git a/src/northbridge/intel/sandybridge/raminit.c b/src/northbridge/intel/sandybridge/raminit.c
index 5384996..d2ae4b0 100644
--- a/src/northbridge/intel/sandybridge/raminit.c
+++ b/src/northbridge/intel/sandybridge/raminit.c
@@ -54,8 +54,6 @@
 void save_mrc_data(struct pei_data *pei_data)
 {
 	u16 c1, c2, checksum;
-
-#if CONFIG_EARLY_CBMEM_INIT
 	struct mrc_data_container *mrcdata;
 	int output_len = ALIGN(pei_data->mrc_output_len, 16);
 
@@ -64,23 +62,24 @@ void save_mrc_data(struct pei_data *pei_data)
 		(CBMEM_ID_MRCDATA,
 		 output_len + sizeof(struct mrc_data_container));
 
-	printk(BIOS_DEBUG, "Relocate MRC DATA from %p to %p (%u bytes)\n",
-	       pei_data->mrc_output, mrcdata, output_len);
+	if (mrcdata != NULL) {
+		printk(BIOS_DEBUG, "Relocate MRC DATA from %p to %p (%u bytes)\n",
+			pei_data->mrc_output, mrcdata, output_len);
 
-	mrcdata->mrc_signature = MRC_DATA_SIGNATURE;
-	mrcdata->mrc_data_size = output_len;
-	mrcdata->reserved = 0;
-	memcpy(mrcdata->mrc_data, pei_data->mrc_output,
-	       pei_data->mrc_output_len);
+		mrcdata->mrc_signature = MRC_DATA_SIGNATURE;
+		mrcdata->mrc_data_size = output_len;
+		mrcdata->reserved = 0;
+		memcpy(mrcdata->mrc_data, pei_data->mrc_output,
+			pei_data->mrc_output_len);
 
-	/* Zero the unused space in aligned buffer. */
-	if (output_len > pei_data->mrc_output_len)
-		memset(mrcdata->mrc_data+pei_data->mrc_output_len, 0,
-		       output_len - pei_data->mrc_output_len);
+		/* Zero the unused space in aligned buffer. */
+		if (output_len > pei_data->mrc_output_len)
+			memset(mrcdata->mrc_data+pei_data->mrc_output_len, 0,
+			output_len - pei_data->mrc_output_len);
 
-	mrcdata->mrc_checksum = compute_ip_checksum(mrcdata->mrc_data,
-						    mrcdata->mrc_data_size);
-#endif
+		mrcdata->mrc_checksum = compute_ip_checksum(mrcdata->mrc_data,
+						mrcdata->mrc_data_size);
+	}
 
 	/* Save the MRC seed values to CMOS */
 	cmos_write32(CMOS_OFFSET_MRC_SEED, pei_data->scrambler_seed);



More information about the coreboot-gerrit mailing list