10 volatile uint8 val8[4];
11 volatile uint16 val16[2];
12 volatile uint32 val32[1];
22 static int check_val(volatile val_t *p, volatile val_t *wval)
26 p->u.val8[0] = wval->u.val8[0]; p->u.val8[1] = wval->u.val8[1];
27 p->u.val8[2] = wval->u.val8[2]; p->u.val8[3] = wval->u.val8[3];
28 rval.u.val8[0] = p->u.val8[0]; rval.u.val8[1] = p->u.val8[1];
29 rval.u.val8[2] = p->u.val8[2]; rval.u.val8[3] = p->u.val8[3];
31 if (rval.u.val32[0] != wval->u.val32[0])
34 p->u.val16[0] = wval->u.val16[0]; p->u.val16[1] = wval->u.val16[1];
35 rval.u.val16[0] = p->u.val16[0]; rval.u.val16[1] = p->u.val16[1];
37 if (rval.u.val32[0] != wval->u.val32[0])
40 p->u.val32[0] = wval->u.val32[0];
41 rval.u.val32[0] = p->u.val32[0];
43 if (rval.u.val32[0] != wval->u.val32[0])
55 puts("DRAM checking...\n");
57 for (p = (uint32 *)DRAM_START; p < (uint32 *)DRAM_END; p++) {
58 putxval((unsigned long)p, 8);
61 val.u.val32[0] = (uint32)p;
62 if (check_val((val_t *)p, &val) < 0)
66 if (check_val((val_t *)p, &val) < 0)
69 val.u.val32[0] = 0xffffffffUL;
70 if (check_val((val_t *)p, &val) < 0)
73 puts("\x08\x08\x08\x08\x08\x08\x08\x08");
75 puts("\nall check OK.\n");
80 putxval((unsigned long)*p, 8);
85 static uint32 dram_check2_val0(uint32 *addr) { return 0x55555555UL; }
86 static uint32 dram_check2_val1(uint32 *addr) { return 0xaaaaaaaaUL; }
87 static uint32 dram_check2_val2(uint32 *addr) { return 0x00000000UL; }
88 static uint32 dram_check2_val3(uint32 *addr) { return 0xffffffffUL; }
89 static uint32 dram_check2_val4(uint32 *addr) { return (uint32)addr; }
90 static uint32 dram_check2_val5(uint32 *addr) { return ~(uint32)addr; }
96 uint32 (*getval[])(uint32 *) = {
106 for (i = 0; getval[i]; i++) {
108 puts("DRAM check pattern: ");
111 puts("\nDRAM setting...\n");
113 for (p = (uint32 *)DRAM_START; p < (uint32 *)DRAM_END; p++) {
115 if (!((uint32)p & 0xfff)) {
116 putxval((unsigned long)p, 8);
117 puts("\x08\x08\x08\x08\x08\x08\x08\x08");
121 puts("\nDRAM checking...\n");
123 for (p = (uint32 *)DRAM_START; p < (uint32 *)DRAM_END; p++) {
124 if (*p != getval[i](p)) {
126 putxval((unsigned long)p, 8);
128 putxval((unsigned long)*p, 8);
132 if (!((uint32)p & 0xfff)) {
133 putxval((unsigned long)p, 8);
134 puts("\x08\x08\x08\x08\x08\x08\x08\x08");
143 puts("\nall check OK.\n");
153 puts("DRAM clearing...\n");
155 for (p = (uint32 *)DRAM_START; p < (uint32 *)DRAM_END; p++)
158 puts("DRAM cleared.\n");