NetBSD/sys/arch/sparc/sparc/memeccreg.h
pk b3c7ebb7cd Handle ECC memory control found on a number of machines.
Also defines an entry point for memory errors reported by module interrupts.
1998-09-18 20:18:10 +00:00

101 lines
4.1 KiB
C

/* $NetBSD: memeccreg.h,v 1.1 1998/09/18 20:18:10 pk Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Paul Kranenburg.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 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 NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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 SUCH DAMAGE.
*/
/*
* ECC memory control.
*/
/* Register offsets */
#define ECC_EN_REG 0
#define ECC_FSR_REG 8
#define ECC_AFR0_REG 16
#define ECC_AFR1_REG 20
#define ECC_DIAG_REG 24
/* ECC Memory Enable register */
#define ECC_EN_EE 0x00000001 /* Enable ECC checking */
#define ECC_EN_EI 0x00000002 /* Interrupt on correctable error */
#define ECC_EN_VER 0x0f000000 /* Version */
#define ECC_EN_IMPL 0xf0000000 /* Implementation Id */
/* ECC Memory Fault Status register */
#define ECC_FSR_CE 0x00000001 /* Correctable error */
#define ECC_FSR_TO 0x00000004 /* Timeout on write */
#define ECC_FSR_UE 0x00000008 /* Uncorrectable error */
#define ECC_FSR_DW 0x000000f0 /* Index of double word in block */
#define ECC_FSR_SYND 0x0000ff00 /* Syndrome for correctable error */
#define ECC_FSR_ME 0x00010000 /* Multiple errors */
#define ECC_FSR_BITS "\177\020" \
"b\0CE\0b\2TO\0b\3UE\0" \
"f\4\4DW\0f\10\10SYNDROME\0b\20ME\0"
/*
* ECC Memory Fault Address registers
* There are two of these. The first has bits 32-35 of the faulting
* physical address and assorted MBus bits. The second has bits
* 0-31 of the faulting physical address.
*/
#define ECC_AFR_PAH 0x0000000f /* PA[31-35] */
#define ECC_AFR_TYPE 0x000000f0 /* Transaction type */
#define ECC_AFR_SIZE 0x00000700 /* Transaction size */
#define ECC_AFR_C 0x00000800 /* Mapped cacheable */
#define ECC_AFR_LOCK 0x00001000 /* Error occurred in atomic cycle */
#define ECC_AFR_MBL 0x00002000 /* Boot mode */
#define ECC_AFR_VA 0x003fc000 /* VA[12-19] (superset bits) */
#define ECC_AFR_S 0x08000000 /* Access was in supervisor mode */
#define ECC_AFR_MID 0xf0000000 /* Module code */
#define ECC_AFR_BITS "\177\020" \
"f\0\4VAH\0f\4\4TYPE\0f\10\3SIZE\0" \
"b\13C\0b\14LOCK\0b\15MBL\0" \
"f\16\10VA\0b\33S\0f\34\4MID\0"
/* ECC Diagnostic register */
#define ECC_DR_CBX 0x00000001
#define ECC_DR_CB0 0x00000002
#define ECC_DR_CB1 0x00000004
#define ECC_DR_CB2 0x00000008
#define ECC_DR_CB4 0x00000010
#define ECC_DR_CB8 0x00000020
#define ECC_DR_CB16 0x00000040
#define ECC_DR_CB32 0x00000080
#define ECC_DR_DMODE 0x00000c00
#define ECC_DR_BITS "\177\020" \
"f\12\2DMODE\0=\0NORMAL\0=\1GEN\0=\2DETECT\0" \
"f\0\8CHECK BITS\0"