|
|
1.1 root 1: /*
2: This test Ecc Memory bits Test
3: */
4: #include "definitions"
5: #define BEVEC 128 /* offset in scb block for Bus error*/
6: #define ecczero 0x00000028
7: #define eccone 0x0000012d
8: #define MEMUNIT 64 * 1024
9: #include "test4.h"
10:
11: extern struct OPTIONS OPTIONS;
12: extern long maxmem,endprog,scb;
13: extern long eccloc(), cycle,test_no,errcnt;
14: extern long loop_flg,hlt_flg,prt_flg;
15: extern long ber1, ber2;
16:
17: subtest6()
18: {
19: register long *mcr = (long *)0xffffb000;
20: register long *mer = (long *)0xffffb020;
21: register long *mcbr = (long *)0xffffb008;
22: register long *addr, bit, delay;
23: long counter, oldstatus, data, code, wcnt, cnt, actual, eccloc();
24: char *msg;
25:
26: if (OPTIONS.header)
27: writes("\n** Subtest6 : ECC single (check) bit error detection.");
28: oldstatus = *mcr; /* save old status */
29: data = ecczero; /* data to force a zero ecc */
30: addr = (long *)(((int )endprog + MEMUNIT) & 0xffff0000);
31: counter = 0;
32: for(wcnt=0;addr <= (long *)maxmem;addr++, wcnt++)
33: {
34: if (++counter == 5120) {
35: counter = 0;
36: writes(".");
37: }
38: for(bit=1,cnt=7;(cnt--); bit <<= 1) {
39: repeat:
40: *mcr = 4; /* Turn ON diag_write */
41: *mcbr = 0; /* Clear check bits in MCBR */
42: *addr = data; /* Write Data with check */
43: /* bits taken from MCBR */
44: *mcr = 0x1; /* Turn ON ECC detection */
45: delay = *mcr;
46: actual = *addr; /* Read data back */
47: *mcr = 0x80; /* Turn OFF ECC,clear error */
48: delay = *mcr;
49: if (actual != data) { /* check data */
50: msg = "\nData Bits Test with ECC diagnostic Write enable";
51: error4(msg,addr,data,actual);
52: if (loop_flg) goto repeat;
53: else if (hlt_flg) Halt();
54: }
55: *mcbr = bit; /* Set check bits in MCBR */
56: *mcr = 4; /* Turn ON diag_write */
57: delay = *mcr;
58: *addr = data; /* Write data with check */
59: /* bits from MCBR */
60: *mcr = 0; /* Turn OFF diag_write */
61: delay = *mcr;
62: code = eccloc(addr); /* Read back data, exp. buser */
63:
64: if (!code) {
65: *mcr = 0; /* Turn OFF ECC logic */
66: writes("\nExpected BUSER didnot happen");
67: if (loop_flg) goto repeat;
68: else if (hlt_flg) Halt();
69: else continue;
70: }
71: if (code == -2) {
72: *mcr = 0; /* Turn OFF ECC logic */
73: writes("\nWrong Buser parameter,DCE expected");
74: wr_mibreg();
75: if (loop_flg) goto repeat;
76: else if (hlt_flg) Halt();
77: else continue;
78: }
79: actual = (tmp_mcbr >> 23) & 0x7f;
80: if ((actual != bit) && prt_flg ) {
81: *mcr = 0; /* Turn OFF ECC logic */
82: msg = "\nSyndrome Bits error <Check Bits>";
83: wr_mibreg();
84: error4(msg,addr,bit,actual);
85: writes("\nNumber Lwords passed ");
86: writed(wcnt); writes("\n");
87: if (loop_flg) goto repeat;
88: else if (hlt_flg) Halt();
89: }
90: *addr = data; /* reset test cell */
91: for(delay=0x100;(delay>0);--delay);
92: }
93: }
94: *mcr = oldstatus; /* old status */
95: }
96:
97:
98: error4(msg,addr,exp,actual)
99: char *msg;
100: long addr, actual;
101: {
102: writes(msg);
103: writes("\n Test Address Expected Actual Count Cycle \n");
104: writes(" ");
105: pt_hex(test_no,8);writes(" ");
106: pt_hex(addr,8);writes(" ");
107: pt_hex(exp,8);writes(" ");
108: pt_hex(actual,8);writes(" ");
109: pt_hex(errcnt++,8);writes(" ");
110: pt_hex(cycle,8);
111: locate(addr,exp,actual);
112: }
113:
114: Halt()
115: {
116: asm("halt");
117: }
118:
119: /*
120: Routine to Init. memory + ECC
121: */
122: long I_ecc = 0;
123: i_ecc()
124: {
125: register long *mcr = (long *)0xffffb000;
126: register long *mcbr = (long *)0xffffb008;
127: register long *addr, delay;
128:
129: if (I_ecc) return;
130: else I_ecc=1;
131: writes("\nInitializing memory + ECC..\n");
132: addr = (long *)(((int )endprog + MEMUNIT) & 0xffff0000);
133: for(;addr <= (long *)maxmem;addr++) {
134: *mcbr = 0xc; /* Valid check bits for data 0 */
135: *mcr = 4; /* Turn ON diag_write */
136: *addr = 0; /* Write Data with check bit from MCBR */
137: *mcr = 0; /* Turn OFF diag_write */
138: for(delay=0x5;(delay>0);--delay);
139: }
140: *mcr = 0; /* Turn OFF diag_write */
141: writes("Done..\n");
142: }
143:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.