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>
This commit is contained in:
Alexandru Gagniuc 2013-06-08 11:32:36 -05:00 committed by Ronald G. Minnich
parent 88a302346f
commit 5239ba2f8f
2 changed files with 26 additions and 0 deletions

View File

@ -37,6 +37,7 @@ void move_gdt(void);
/* Defined in src/lib/ramtest.c */ /* Defined in src/lib/ramtest.c */
void ram_check(unsigned long start, unsigned long stop); void ram_check(unsigned long start, unsigned long stop);
int ram_check_nodie(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); void quick_ram_check(void);
/* Defined in src/lib/stack.c */ /* Defined in src/lib/stack.c */

View File

@ -223,6 +223,31 @@ int ram_check_nodie(unsigned long start, unsigned long stop)
return ret; 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) void quick_ram_check(void)
{ {
int fail = 0; int fail = 0;