Move calls to quick_ram_check() before CBMEM init

After raminit completes, do a read-modify-write test
just below CBMEM top address. If test fails, die().

Change-Id: I33d4153a5ce0908b8889517394afb46f1ca28f92
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/31978
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-by: Werner Zeh <werner.zeh@siemens.com>
diff --git a/src/lib/imd_cbmem.c b/src/lib/imd_cbmem.c
index c458e5e..1a67ad5 100644
--- a/src/lib/imd_cbmem.c
+++ b/src/lib/imd_cbmem.c
@@ -18,6 +18,7 @@
 #include <console/console.h>
 #include <cbmem.h>
 #include <imd.h>
+#include <lib.h>
 #include <stdlib.h>
 #include <arch/early_variables.h>
 
@@ -119,6 +120,10 @@
 		return;
 
 	cbmem_top_init();
+
+	/* The test is only effective on X86 and when address hits UC memory. */
+	if (ENV_X86)
+		quick_ram_check_or_die((uintptr_t)cbmem_top() - sizeof(u32));
 }
 
 void cbmem_initialize_empty_id_size(u32 id, u64 size)
diff --git a/src/lib/ramtest.c b/src/lib/ramtest.c
index eb58c30..489ca28 100644
--- a/src/lib/ramtest.c
+++ b/src/lib/ramtest.c
@@ -171,7 +171,10 @@
 	return failures;
 }
 
-static void __quick_ram_check(uintptr_t dst)
+/* Assumption is 32-bit addressable UC memory at dst. This also executes
+ * on S3 resume path so target memory must be restored.
+ */
+void quick_ram_check_or_die(uintptr_t dst)
 {
 	int fail = 0;
 	u32 backup;
@@ -200,8 +203,3 @@
 	}
 	phys_memory_barrier();
 }
-
-void quick_ram_check(void)
-{
-	__quick_ram_check(0x100000);
-}