blob: fa8a5ec9899ceaf178ba46847a34716eaaea335b [file] [log] [blame]
Angel Pons118a9c72020-04-02 23:48:34 +02001/* SPDX-License-Identifier: GPL-2.0-only */
David Hendricks560c6432014-02-13 13:07:50 -08002
Jacob Garber5cf9ccc2019-08-08 13:35:31 -06003#include <stdint.h>
David Hendricks560c6432014-02-13 13:07:50 -08004#include <lib.h>
5#include <console/console.h>
6
7int primitive_memtest(uintptr_t base, uintptr_t size)
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);
Lee Leahy45fde702017-03-08 18:02:24 -080015 for (i = base; i < base + (size - 1) - sizeof(p); i += sizeof(p)) {
David Hendricks560c6432014-02-13 13:07:50 -080016 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");
Lee Leahy45fde702017-03-08 18:02:24 -080028 for (i = base; i < base + (size - 1) - sizeof(p); i += sizeof(p)) {
David Hendricks560c6432014-02-13 13:07:50 -080029 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}