* Copyright (c) 1982, 1986, 1988 The Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* @(#)ka750.c 7.4 (Berkeley) 5/9/91
#include "../include/cpu.h"
#include "../include/mtpr.h"
int mc_err
; /* error bits */
int mc_inh
; /* inhibit crd */
#define M750_ICRD 0x10000000 /* inhibit crd interrupts, in [1] */
#define M750_UNCORR 0xc0000000 /* uncorrectable error, in [0] */
#define M750_CORERR 0x20000000 /* correctable error, in [0] */
#define M750_INH(mcr) ((mcr)->mc_inh = 0)
#define M750_ENA(mcr) ((mcr)->mc_err = (M750_UNCORR|M750_CORERR), \
(mcr)->mc_inh = M750_ICRD)
#define M750_ERR(mcr) ((mcr)->mc_err & (M750_UNCORR|M750_CORERR))
#define M750_SYN(err) ((err) & 0x7f)
#define M750_ADDR(err) (((err) >> 9) & 0x7fff)
/* enable crd interrupts */
M750_ENA((struct mcr750
*)mcraddr
[0]);
register struct mcr750
*mcr
= (struct mcr750
*)mcraddr
[0];
err
= mcr
->mc_err
; /* careful with i/o space refs */
printf("mcr0: %s", err
& M750_UNCORR
?
"hard error" : "soft ecc");
printf(" addr %x syn %x\n", M750_ADDR(err
), M750_SYN(err
));
int mc5_bcnt
; /* byte count == 0x28 */
int mc5_summary
; /* summary parameter (as above) */
int mc5_va
; /* virtual address register */
int mc5_errpc
; /* error pc */
int mc5_svmode
; /* saved mode register */
int mc5_rdtimo
; /* read lock timeout */
int mc5_tbgpar
; /* tb group parity error register */
int mc5_cacherr
; /* cache error register */
int mc5_buserr
; /* bus error register */
int mc5_mcesr
; /* machine check status register */
int mc5_pc
; /* trapped pc */
int mc5_psl
; /* trapped psl */
#define MC750_TBERR 2 /* type code of cp tbuf par */
#define MC750_TBPAR 4 /* tbuf par bit in mcesr */
register struct mc750frame
*mcf
= (struct mc750frame
*)cmcf
;
register int type
= mcf
->mc5_summary
;
printf("machine check %x: %s%s\n", type
, mc780750
[type
&0xf],
(type
&0xf0) ? " abort" : " fault");
"\tva %x errpc %x mdr %x smr %x rdtimo %x tbgpar %x cacherr %x\n",
mcf
->mc5_va
, mcf
->mc5_errpc
, mcf
->mc5_mdr
, mcf
->mc5_svmode
,
mcf
->mc5_rdtimo
, mcf
->mc5_tbgpar
, mcf
->mc5_cacherr
);
printf("\tbuserr %x mcesr %x pc %x psl %x mcsr %x\n",
mcf
->mc5_buserr
, mcf
->mc5_mcesr
, mcf
->mc5_pc
, mcf
->mc5_psl
,
if (type
== MC750_TBERR
&& (mcf
->mc5_mcesr
&0xe) == MC750_TBPAR
) {
printf("tbuf par: flushing and returning\n");