mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-20 03:38:43 +00:00
91 lines
2.5 KiB
C
91 lines
2.5 KiB
C
#ifdef ECC_TEST
|
|
static inline void ecc_off(void)
|
|
{
|
|
*(volatile int *)(INTERNAL_REG_BASE_ADDR+0x4b4) &= ~0x00200000;
|
|
}
|
|
|
|
static inline void ecc_on(void)
|
|
{
|
|
*(volatile int *)(INTERNAL_REG_BASE_ADDR+0x4b4) |= 0x00200000;
|
|
}
|
|
|
|
static int putshex(const char *buf, int len)
|
|
{
|
|
int i;
|
|
for (i=0;i<len;i++) {
|
|
printf("%02x", buf[i]);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int char_memcpy(void *d, const void *s, int len)
|
|
{
|
|
int i;
|
|
char *cd=d;
|
|
const char *cs=s;
|
|
for(i=0;i<len;i++) {
|
|
*(cd++)=*(cs++);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int memory_test(char *buf)
|
|
{
|
|
const char src[][16]={
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
|
{0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01},
|
|
{0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02},
|
|
{0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04},
|
|
{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},
|
|
{0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10},
|
|
{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20},
|
|
{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40},
|
|
{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},
|
|
{0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55},
|
|
{0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa},
|
|
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}
|
|
};
|
|
const int foo[] = {0};
|
|
int i,j,a;
|
|
|
|
printf("\ntest @ %d %p\n", foo[0], buf);
|
|
for(i=0;i<12;i++) {
|
|
for(a=0;a<8;a++) {
|
|
const char *s=src[i]+a;
|
|
int align=(unsigned)(s)&0x7;
|
|
/* ecc_off(); */
|
|
memcpy(buf,s,8);
|
|
/* ecc_on(); */
|
|
putshex(s,8);
|
|
if(memcmp(buf,s,8)) {
|
|
putc('\n');
|
|
putshex(buf,8);
|
|
printf(" [FAIL] (%p) align=%d\n", s, align);
|
|
for(j=0;j<8;j++) {
|
|
s[j]==buf[j]?puts(" "):printf("%02x", (s[j])^(buf[j]));
|
|
}
|
|
putc('\n');
|
|
} else {
|
|
printf(" [PASS] (%p) align=%d\n", s, align);
|
|
}
|
|
/* ecc_off(); */
|
|
char_memcpy(buf,s,8);
|
|
/* ecc_on(); */
|
|
putshex(s,8);
|
|
if(memcmp(buf,s,8)) {
|
|
putc('\n');
|
|
putshex(buf,8);
|
|
printf(" [FAIL] (%p) align=%d\n", s, align);
|
|
for(j=0;j<8;j++) {
|
|
s[j]==buf[j]?puts(" "):printf("%02x", (s[j])^(buf[j]));
|
|
}
|
|
putc('\n');
|
|
} else {
|
|
printf(" [PASS] (%p) align=%d\n", s, align);
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
#endif
|