coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
primitive_memtest.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <stdint.h>
4 #include <lib.h>
5 #include <console/console.h>
6 
8 {
9  uintptr_t *p;
10  uintptr_t i;
11  int bad = 0;
12 
13  printk(BIOS_SPEW, "Performing primitive memory test.\n");
14  printk(BIOS_SPEW, "DRAM start: 0x%08x, DRAM size: 0x%08x", base, size);
15  for (i = base; i < base + (size - 1) - sizeof(p); i += sizeof(p)) {
16  if (i % 0x100000 == 0) {
17  if ((i % 0x800000) == 0)
18  printk(BIOS_SPEW, "\n");
19  else if (i != 0)
20  printk(BIOS_SPEW, " ");
21  printk(BIOS_SPEW, "0x%08x", i);
22  }
23  p = (uintptr_t *)i;
24  *p = i;
25  }
26 
27  printk(BIOS_SPEW, "\n\nReading back DRAM content");
28  for (i = base; i < base + (size - 1) - sizeof(p); i += sizeof(p)) {
29  if (i % 0x100000 == 0) {
30  if ((i % 0x800000) == 0)
31  printk(BIOS_SPEW, "\n");
32  else if (i != 0)
33  printk(BIOS_SPEW, " ");
34  printk(BIOS_SPEW, "0x%08x", i);
35  }
36 
37  p = (uintptr_t *)i;
38  if (*p != i) {
39  printk(BIOS_SPEW, "\n0x%08zx: got 0x%zx\n", i, *p);
40  bad++;
41  }
42  }
43 
44  printk(BIOS_SPEW, "\n");
45  printk(BIOS_SPEW, "%d errors\n", bad);
46 
47  return bad;
48 }
#define printk(level,...)
Definition: stdlib.h:16
#define BIOS_SPEW
BIOS_SPEW - Excessively verbose output.
Definition: loglevel.h:142
int primitive_memtest(uintptr_t base, uintptr_t size)
uintptr_t base
Definition: uart.c:17
unsigned long uintptr_t
Definition: stdint.h:21