Annotation of cci/d/mem/test6.c, revision 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.