Annotation of cci/d/mem/test6.c, revision 1.1.1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.