Update memtest code in libgram
[gram.git] / libgram / src / memtest.c
1 #include <gram.h>
2
3 static int memtest8(struct gramCtx *ctx, size_t length) {
4 volatile uint8_t *ram = (volatile uint8_t*)ctx->ddr_base;
5 size_t i;
6
7 for (i = 0; i < length; i++) {
8 ram[i] = 0xDE;
9 }
10
11 for (i = 0; i < length; i++) {
12 if (ram[i] != 0xDE) {
13 return GRAM_ERR_MEMTEST;
14 }
15 }
16
17 return GRAM_ERR_NONE;
18 }
19
20 static int memtest32(struct gramCtx *ctx, size_t length) {
21 volatile uint32_t *ram = (volatile uint32_t*)ctx->ddr_base;
22 size_t i;
23
24 for (i = 0; i < length; i++) {
25 ram[i] = 0xFEEDFACE;
26 }
27
28 for (i = 0; i < length; i++) {
29 if (ram[i] != 0xFEEDFACE) {
30 return GRAM_ERR_MEMTEST;
31 }
32 }
33
34 return GRAM_ERR_NONE;
35 }
36
37 int gram_memtest(struct gramCtx *ctx, size_t length, enum GramWidth width) {
38 if (width == GRAM_8B) {
39 return memtest8(ctx, length);
40 } else if (width == GRAM_32B) {
41 return memtest32(ctx, length);
42 }
43
44 return GRAM_ERR_UNDOCUMENTED;
45 }