Vax 730 memory ecc error reporting

Rich Altmaier richa at ios.UUCP
Fri Mar 23 14:04:59 AEST 1984


Regarding memory ecc error reporting, for the Vax 730, corrections
similar to the 750 as posted by Bill Sebok are of course required.
However there is additional trouble in the code generated for the 730.
The 'if (M730_ERR(mcr)&M730_UNCORR)' statement generates a 'bbc' instruction
which causes a further machine check as this instruction is
not valid for io space (not permitted by the Hardware Handbook,
I/O Space Restrictions appendix).
So I revised things to just read the memory controller registers, then
test bits.  Changes as follows, for 4.1 at least.

sys/machdep.c, changes as shown under #ifdef IOS for memerr().

		case VAX_730:
		    if (M730_ERR(mcr)) {
			struct mcr amcr;
			amcr.mc_reg[0] = mcr->mc_reg[0];
#ifdef IOS  our change
			amcr.mc_reg[1] = mcr->mc_reg[1]; /* Must insure valid instruction is
			    generated for io space access.  Not extzv or bbc. */
			printf("mcr%d: %s syn %x\n",
			    m, ((M730_ERR(&amcr) & M730_UNCORR) ? "HARD ecc" : "soft ecc"),
			    M730_SYN(&amcr));
			       /* don't bother to print M730_ADDR(&amcr)
				  as Hardware Handbook claims bits are undefined,
				  so (conveniently) one can't tell what board is bad.*/
#else  as done in 4.1
			printf("mcr%d: soft ecc addr %x syn %x\n",
			    m, M730_ADDR(&amcr), M730_SYN(&amcr));
#endif IOS
			M730_INH(mcr);
		    }
			break;

h/mem.h changes:
add
    #define M730_UNCORR     0x80000000      /* Read Data Substitute, uncorrectable err in [1] */
change M730_ERR to
    #define M730_ERR(mcr)   ((mcr)->mc_reg[1] & (M730_CRD|M730_UNCORR))


Rich Altmaier, Integrated Office Systems, 408 257-0171
	{decwrl,qubix}!ios!richa



More information about the Comp.unix.wizards mailing list