lib: add ram_check_nodie

The current implementation calls die() if memory checking fails.
This isn't always what we want: one might want to print error registers,
or do some other error handling. Introduce ram_check_nodie() for that
reason. It returns 0 if ram check succeeded, otherwise 1.

Change-Id: Ib9a9279120755cf63b5b3ba5e0646492c3c29ac2
Signed-off-by: Sven Schnelle <svens@stackframe.org>
Reviewed-on: http://review.coreboot.org/532
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
diff --git a/src/lib/ramtest.c b/src/lib/ramtest.c
index b35c36d..e118062 100644
--- a/src/lib/ramtest.c
+++ b/src/lib/ramtest.c
@@ -83,7 +83,7 @@
 #endif
 }
 
-static void ram_verify(unsigned long start, unsigned long stop)
+static int ram_verify_nodie(unsigned long start, unsigned long stop)
 {
 	unsigned long addr;
 	int i = 0;
@@ -146,15 +146,17 @@
 #else
 		print_debug("\nDRAM did _NOT_ verify!\n");
 #endif
-		die("DRAM ERROR");
+		return 1;
 	}
 	else {
 #if !defined(__ROMCC__)
 		printk(BIOS_DEBUG, "\nDRAM range verified.\n");
 #else
 		print_debug("\nDRAM range verified.\n");
+		return 0;
 #endif
 	}
+	return 0;
 }
 
 
@@ -177,7 +179,8 @@
 	ram_fill(start, stop);
 	/* Make sure we don't read before we wrote */
 	phys_memory_barrier();
-	ram_verify(start, stop);
+	if (ram_verify_nodie(start, stop))
+		die("DRAM ERROR");
 #if !defined(__ROMCC__)
 	printk(BIOS_DEBUG, "Done.\n");
 #else
@@ -185,6 +188,37 @@
 #endif
 }
 
+
+int ram_check_nodie(unsigned long start, unsigned long stop)
+{
+	int ret;
+	/*
+	 * This is much more of a "Is my DRAM properly configured?"
+	 * test than a "Is my DRAM faulty?" test.  Not all bits
+	 * are tested.   -Tyson
+	 */
+#if !defined(__ROMCC__)
+	printk(BIOS_DEBUG, "Testing DRAM : %08lx - %08lx\n", start, stop);
+#else
+	print_debug("Testing DRAM : ");
+	print_debug_hex32(start);
+	print_debug("-");
+	print_debug_hex32(stop);
+	print_debug("\n");
+#endif
+	ram_fill(start, stop);
+	/* Make sure we don't read before we wrote */
+	phys_memory_barrier();
+	ret = ram_verify_nodie(start, stop);
+
+#if !defined(__ROMCC__)
+	printk(BIOS_DEBUG, "Done.\n");
+#else
+	print_debug("Done.\n");
+#endif
+	return ret;
+}
+
 void quick_ram_check(void)
 {
 	int fail = 0;