/* A WOM March-C- algorithm. Put in the base address and # of address bits, returns 0 if ok or fault addr */ #define SZ_BYTE 0 #define SZ_WORD 1 #define SZ_LONG 2 unsigned char patterns_b[] = {0xff, 0x55, 0x33, 0x0f, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; unsigned short patterns_w[] = {0xffff, 0x5555, 0x3333, 0x0f0f, 0x00ff}; unsigned long patterns_l[] = {0xffffffff, 0x55555555, 0x33333333, 0x0f0f0f0f, 0x00ff00ff, 0x0000ffff}; unsigned march(void *base, int addrs, int sz) { volatile void *p = base; unsigned long i, pat[2]; int len = 1<<(addrs-sz); int r, m, k, q, j; int patlen[3] = {sizeof(patterns_b), sizeof(patterns_w)/2, sizeof(patterns_l)/4}; for (r=0; r