1
0
Files
2022-09-29 17:59:04 +03:00

201 lines
6.6 KiB
C

#ifndef _SYS_CRIME_H__
#define _SYS_CRIME_H__
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
#include <sys/types.h>
#include <sys/reg.h>
typedef unsigned long long _crmreg_t;
unsigned long long read_reg64(__psunsigned_t);
void write_reg64(long long, __psunsigned_t);
#endif /* _LANGUAGE_C || _LANGUAGE_C_PLUS_PLUS */
/*
* Crime memory/cpu control status registers
*/
#define CRM_BASEADDR 0x14000000
#define CRM_ID (CRM_BASEADDR + 0x00000000)
#define CRM_ID_MSK 0xffLL /* 8-bit register */
/*
* CRIME ID register bits
*/
#define CRM_ID_IDBITS 0xf0
#define CRM_ID_IDVALUE 0xa0
#define CRM_ID_REV 0x0f
#define CRM_CONTROL (CRM_BASEADDR + 0x8)
#define CRM_CONTROL_MSK 0x3fffLL /* 14-bit registers */
/*
* CRIME control register bits
*/
#define CRM_CONTROL_TRITON_SYSADC 0x2000
#define CRM_CONTROL_CRIME_SYSADC 0x1000
#define CRM_CONTROL_HARD_RESET 0x0800
#define CRM_CONTROL_SOFT_RESET 0x0400
#define CRM_CONTROL_DOG_ENA 0x0200
#define CRM_CONTROL_ENDIANESS 0x0100
/* values for CRM_CONTROL_ENDIANESS */
#define CRM_CONTROL_ENDIAN_BIG 0x0100
#define CRM_CONTROL_ENDIAN_LITTLE 0x0000
#define CRM_CONTROL_CQUEUE_HWM 0x000f
#define CRM_CONTROL_CQUEUE_SHFT 0
#define CRM_CONTROL_WBUF_HWM 0x00f0
#define CRM_CONTROL_WBUF_SHFT 8
/*
* macros to manipulate CRIME High Water Mark bits in
* the CRIME control register. Examples:
*
* foo = CRM_CONTROL_GET_CQUEUE_HWM(*(__uint64_t *)CRM_CONTROL)
* CRM_CONTROL_SET_CQUEUE_HWM(*(__uint64_t *)CRM_CONTROL, 4)
*
* foo = CRM_CONTROL_GET_WBUF_HWM(*(__uint64_t *)CRM_CONTROL)
* CRM_CONTROL_SET_WBUF_HWM(*(__uint64_t *)CRM_CONTROL, 4)
*/
#define CRM_CONTROL_GET_CQUEUE_HWM(x) \
(((x) & CRM_CONTROL_CQUEUE_HWM) >> CRM_CONTROL_CQUEUE_SHFT)
#define CRM_CONTROL_SET_CQUEUE_HWM(x,v) \
(((v) << CRM_CONTROL_CQUEUE_SHFT) | ((x) & ~CRM_CONTROL_CQUEUE_HWM))
#define CRM_CONTROL_GET_WBUF_HWM(x) \
(((x) & CRM_CONTROL_WBUF_HWM) >> CRM_CONTROL_WBUF_SHFT)
#define CRM_CONTROL_SET_WBUF_HWM(x,v) \
(((v) << CRM_CONTROL_WBUF_SHFT) | ((x) & ~CRM_CONTROL_WBUF_HWM))
#define CRM_INTSTAT (CRM_BASEADDR + 0x10)
#define CRM_INTSTAT_MSK 0xffffffffLL /* all intr registers are 32 bit */
#define CRM_INTMASK (CRM_BASEADDR + 0x18)
#define CRM_INTMASK_MSK 0xffffffffLL /* all intr registers are 32 bit */
#define CRM_SOFTINT (CRM_BASEADDR + 0x20)
#define CRM_SOFTINT_MSK 0xffffffffLL /* all intr registers are 32 bit */
#define CRM_HARDINT (CRM_BASEADDR + 0x28)
#define CRM_HARDINT_MSK 0xf0ffffffLL /* all intr registers are 32 bit */
/*
* CRIME interrupt register bits.
*/
#define CRM_INT_VICE 0x80000000LL
#define CRM_INT_SOFT5 0x40000000LL
#define CRM_INT_SOFT4 0x20000000LL
#define CRM_INT_SOFT3 0x10000000LL
#define CRM_INT_SOFT2 0x08000000LL
#define CRM_INT_SOFT1 0x04000000LL
#define CRM_INT_SOFT0 0x02000000LL
#define CRM_INT_RE3 0x01000000LL
#define CRM_INT_RE1 0x00800000LL
#define CRM_INT_RE0 0x00400000LL
#define CRM_INT_MEMERR 0x00200000LL
#define CRM_INT_CRMERR 0x00100000LL
#define CRM_INT_GBE3 0x00080000LL
#define CRM_INT_GBE2 0x00040000LL
#define CRM_INT_GBE1 0x00020000LL
#define CRM_INT_GBE0 0x00010000LL
#define CRM_INT_GBEx CRM_INT_GBE0|CRM_INT_GBE1|CRM_INT_GBE2|CRM_INT_GBE3
#define CRM_INT_MACE(i) ((long long)(1 << (i)))
#define NCRMINTS 32 /* number of interrupt sources in CRIME */
#define NCRMGANG 16 /* number of interrupts which can be ganged */
#define CRM_DOG (CRM_BASEADDR + 0x30)
#define McGriff CRM_DOG
#define CRM_DOG_MSK 0x1fffffLL
#define CRM_DOG_POWER_ON_RESET 0x10000LL
#define CRM_DOG_WARM_RESET 0x080000LL
#define CRM_DOG_TIMEOUT (CRM_DOG_POWER_ON_RESET|CRM_DOG_WARM_RESET)
#define CRM_DOG_VALUE 0x7fffLL
#define CRM_TIME (CRM_BASEADDR + 0x38)
#define CRM_TIME_MSK 0xffffffffffffLL
#define CRM_CPU_ERROR_ADDR (CRM_BASEADDR + 0x40)
#define CRM_CPU_ERROR_ADDR_SHFT 0
#define CRM_CPU_ERROR_ADDR_MSK 0x3ffffffffLL
#define CRM_CPU_ERROR_STAT (CRM_BASEADDR + 0x48)
#define CRM_CPU_ERROR_ENA (CRM_BASEADDR + 0x50)
/*
* bit definitions for CRIME/VICE error status and enable registers
*/
#define CRM_CPU_ERROR_MSK 0x3ffLL /* cpu error stat is 9 bits */
#define CRM_CPU_ERROR_CPU_INV_ADDR_RD 0x200
#define CRM_CPU_ERROR_VICE_II 0x100
#define CRM_CPU_ERROR_VICE_SYSAD 0x80
#define CRM_CPU_ERROR_VICE_SYSCMD 0x40
#define CRM_CPU_ERROR_VICE_INV_ADDR 0x20
#define CRM_CPU_ERROR_CPU_II 0x10
#define CRM_CPU_ERROR_CPU_SYSAD 0x8
#define CRM_CPU_ERROR_CPU_SYSCMD 0x4
#define CRM_CPU_ERROR_CPU_INV_ADDR_WR 0x2
#define CRM_CPU_ERROR_CPU_INV_REG_ADDR 0x1
#define CRM_VICE_ERROR_ADDR (CRM_BASEADDR + 0x58)
#define CRM_VICE_ERROR_ADDR_MSK 0x3fffffff
#define CRM_MEM_CONTROL (CRM_BASEADDR + 0x200)
#define CRM_MEM_CONTROL_MSK 0x3LL /* 2 bit register */
#define CRM_MEM_CONTROL_ECC_ENA 0x10
#define CRM_MEM_CONTROL_USE_ECC_REPL 0x20
/*
* macros for CRIME memory bank control registers.
*/
#define CRM_MAXBANKS 8
#define CRM_MEM_BANK_CTRL(x) (CRM_BASEADDR + (0x208 + ((x) * 8)))
#define CRM_MEM_BANK_CTRL_MSK 0x11fLL /* 9 bits 7:5 reserved */
#define CRM_MEM_BANK_CTRL_ADDR 0x1f
#define CRM_MEM_BANK_CTRL_SDRAM_SIZE 0x100
#define CRM_MEM_BANK_CTRL_ADDR_SHFT 0
#define CRM_MEM_BANK_CTRL_BANK_TO_ADDR(x) \
(((x) & CRM_MEM_BANK_CTRL_ADDR) << 25)
#define CRM_MEM_REFRESH_CNTR (CRM_BASEADDR + 0x248)
#define CRM_MEM_REFRESH_CNTR_MSK 0x7ffLL /* 11-bit register */
/*
* CRIME Memory error status register bit definitions
*/
#define CRM_MEM_ERROR_STAT (CRM_BASEADDR + 0x250)
#define CRM_MEM_ERROR_STAT_MSK 0x0ff7ffffLL /* 28-bit register */
#define CRM_MEM_ERROR_MACE_ID 0x0000007f
#define CRM_MEM_ERROR_MACE_ACCESS 0x00000080
#define CRM_MEM_ERROR_RE_ID 0x00007f00
#define CRM_MEM_ERROR_RE_ACC 0x00008000
#define CRM_MEM_ERROR_GBE_ACCESS 0x00010000
#define CRM_MEM_ERROR_VICE_ACCESS 0x00020000
#define CRM_MEM_ERROR_CPU_ACCESS 0x00040000
#define CRM_MEM_ERROR_RESERVED 0x00080000
#define CRM_MEM_ERROR_SOFT_ERR 0x00100000
#define CRM_MEM_ERROR_HARD_ERR 0x00200000
#define CRM_MEM_ERROR_MULTIPLE 0x00400000
#define CRM_MEM_ERROR_MEM_ECC_RD 0x00800000
#define CRM_MEM_ERROR_MEM_ECC_RMW 0x01000000
#define CRM_MEM_ERROR_INV_MEM_ADDR_RD 0x02000000
#define CRM_MEM_ERROR_INV_MEM_ADDR_WR 0x04000000
#define CRM_MEM_ERROR_INV_MEM_ADDR_RMW 0x08000000
#define CRM_MEM_ERROR_ADDR (CRM_BASEADDR + 0x258)
#define CRM_MEM_ERROR_ADDR_MSK 0x3fffffffLL
#define CRM_MEM_ERROR_ADDR_SHFT 0
#define CRM_MEM_ERROR_ECC_SYN (CRM_BASEADDR + 0x260)
#define CRM_MEM_ERROR_ECC_SYN_MSK 0xffffffffLL
#define CRM_MEM_ERROR_ECC_SYN_SHFT 0
#define CRM_MEM_ERROR_ECC_CHK (CRM_BASEADDR + 0x268)
#define CRM_MEM_ERROR_ECC_CHK_MSK 0xffffffffLL
#define CRM_MEM_ERROR_ECC_CHK_SHFT 0
#define CRM_MEM_ERROR_ECC_REPL (CRM_BASEADDR + 0x270)
#define CRM_MEM_ERROR_ECC_REPL_MSK 0xffffffffLL
#define CRM_MEM_ERROR_ECC_REPL_SHFT 0
#endif /* _SYS_CRIME_H__ */