Annotation of researchv10dc/sys/md/mcrmfair.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * MicroVAX III memory errors
                      3:  * bus errors too, as they come through the same trap
                      4:  */
                      5: 
                      6: #include "sys/param.h"
                      7: #include "sys/systm.h" /* just for bloody HZ */
                      8: #include "sys/qbio.h"
                      9: 
                     10: extern char *iospace;
                     11: time_t mcrtime;                /* one or more */
                     12: 
                     13: int mcrtimeout = 60;           /* seconds between soft error reports */
                     14: 
                     15: /*
                     16:  * csr16
                     17:  */
                     18: #define        HARDERR 0x80000000      /* uncorrectable error */
                     19: #define        HARDLST 0x40000000      /* nested hard error */
                     20: #define        SOFTERR 0x20000000      /* corrected error */
                     21: 
                     22: /*
                     23:  * csr17
                     24:  */
                     25: #define        CRDENB  0x1000          /* enable reporting soft errors */
                     26: 
                     27: /*
                     28:  * mser
                     29:  */
                     30: #define        MSER    39
                     31: #define        C2ERR   0x60            /* second level cache or CDAL parity error */
                     32: #define        C1ERR   0x13            /* first level cache parity error */
                     33: 
                     34: /*
                     35:  * dser
                     36:  */
                     37: #define        QBERR   0xa0            /* cpu-to-qbus error */
                     38: #define        DMAERR  0x11            /* dma error */ 
                     39: 
                     40: mcrinit()
                     41: {
                     42:        register struct iomfair *m;
                     43: 
                     44:        m = (struct iomfair *)iospace;
                     45:        m->c.memcsr16 = m->c.memcsr16;  /* clear error latches */
                     46:        m->c.memcsr17 = CRDENB;
                     47: }
                     48: 
                     49: mcrenable(junk)
                     50: caddr_t junk;
                     51: {
                     52:        ((struct iomfair *)iospace)->c.memcsr17 = CRDENB;
                     53: }
                     54: 
                     55: /*
                     56:  * here on trap:
                     57:  * crd or rds interrupt
                     58:  * machine check type 0x80-0x83
                     59:  * we might be about to crash,
                     60:  * so chat just a little bit
                     61:  */
                     62: 
                     63: memerr()
                     64: {
                     65:        register struct iomfair *m;
                     66:        long csr16, csr17, ms, ds, qba, da;
                     67: 
                     68:        if ((m = (struct iomfair *)iospace) == NULL) {
                     69:                printf("mem err\n");
                     70:                return;
                     71:        }
                     72:        csr16 = m->c.memcsr16;
                     73:        csr17 = m->c.memcsr17;
                     74:        ms = mfpr(MSER);
                     75:        ds = m->c.dser;
                     76:        qba = m->c.qbear;
                     77:        da = m->c.dear;
                     78:        machreset();
                     79:        printf("mem trap mser %x dser %x csr16 %x\n", ms, ds, csr16);
                     80:        if (csr16 & (HARDERR|SOFTERR)) {
                     81:                printf("mem %s err; csr17 %x\n",
                     82:                        csr16 & HARDERR ? "hard" : "soft", csr17);
                     83:                if (mcrtime != time)
                     84:                        mcrtime = time;
                     85:                else {
                     86:                        m->c.memcsr17 = 0;
                     87:                        timeout(mcrenable, (caddr_t)0, mcrtimeout*HZ);
                     88:                }
                     89:        }
                     90:        if (ms & C2ERR)
                     91:                printf("cdal/2cache\n");
                     92:        if (ms & C1ERR)
                     93:                printf("1cache\n");
                     94:        if (ds & QBERR)
                     95:                printf("qbus addr %x\n", qba << 9);
                     96:        if (ds & DMAERR)
                     97:                printf("dma addr %x\n", da << 9);
                     98:        if (csr16 & HARDERR)
                     99:                panic("memerr");
                    100: }
                    101: 
                    102: /*
                    103:  * reset processor error registers
                    104:  */
                    105: 
                    106: machreset()
                    107: {
                    108:        register struct iomfair *q;
                    109: 
                    110:        mtpr(MSER, mfpr(MSER));
                    111:        if (iospace == 0)
                    112:                return;
                    113:        q = (struct iomfair *)iospace;
                    114:        q->c.dser = q->c.dser;
                    115:        q->d.cacr = q->d.cacr;
                    116:        q->c.memcsr16 = q->c.memcsr16;
                    117: }

unix.superglobalmegacorp.com

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