summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandru Gagniuc <mr.nuke.me@gmail.com>2013-06-08 11:32:36 -0500
committerRonald G. Minnich <rminnich@gmail.com>2013-06-10 22:30:39 +0200
commit5239ba2f8fd07806053ff864302ba905fc5f015d (patch)
tree24a85045fdc83497d0ceb2b3ba236de021ff304b
parent88a302346f35580f6ede166a9a0f3ee60343c482 (diff)
ramtest.c: Add silent ram_check
In some cases, we want a ram_check that does not die and does not clobber the terminal with useless output that slows us down a lot. Usage examples include Checking if the RAM is up at the start of raminit, or checking if each rank is accessible as it is being initialized. As with all other ram_checks, this is more of a "Is my DRAM properly configured?" test, which is exactly what we want for something to use during memory initialization. Change-Id: I95d8d9a2ce1e29c74ef97b90aba0773f88ae832c Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com> Reviewed-on: http://review.coreboot.org/3416 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
-rw-r--r--src/include/lib.h1
-rw-r--r--src/lib/ramtest.c25
2 files changed, 26 insertions, 0 deletions
diff --git a/src/include/lib.h b/src/include/lib.h
index 1f71d35880..2f27149095 100644
--- a/src/include/lib.h
+++ b/src/include/lib.h
@@ -37,6 +37,7 @@ void move_gdt(void);
/* Defined in src/lib/ramtest.c */
void ram_check(unsigned long start, unsigned long stop);
int ram_check_nodie(unsigned long start, unsigned long stop);
+int ram_check_noprint_nodie(unsigned long start, unsigned long stop);
void quick_ram_check(void);
/* Defined in src/lib/stack.c */
diff --git a/src/lib/ramtest.c b/src/lib/ramtest.c
index 3457210735..e9173fa7e6 100644
--- a/src/lib/ramtest.c
+++ b/src/lib/ramtest.c
@@ -223,6 +223,31 @@ int ram_check_nodie(unsigned long start, unsigned long stop)
return ret;
}
+int ram_check_noprint_nodie(unsigned long start, unsigned long stop)
+{
+ unsigned long addr, value, value2;
+ unsigned short int idx;
+ unsigned char failed, failures;
+
+ for (idx=0; idx<0x400; idx+=4) {
+ test_pattern(idx, &addr, &value);
+ write_phys(start + addr, value);
+ }
+
+ /* Make sure we don't read before we wrote */
+ phys_memory_barrier();
+
+ failures = 0;
+ for (idx=0; idx<0x400; idx+=4) {
+ test_pattern(idx, &addr, &value);
+ value2 = read_phys(start + addr);
+
+ failed = (value2 != value);
+ failures |= failed;
+ }
+ return failures;
+}
+
void quick_ram_check(void)
{
int fail = 0;