|
|
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.