#ifndef _SYS_OPL_OLYMPUS_REGS_H
#define _SYS_OPL_OLYMPUS_REGS_H
#include <sys/machasi.h>
#include <sys/cpu_impl.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _ASM
#undef INT64_C
#define INT64_C(x) (x)
#undef UINT64_C
#define UINT64_C(x) (x)
#endif
#define OPL_MMU_SFPAR 0x78
#define ASI_MCNTL 0x45
#define LSU_MCNTL 0x8
#define MCNTL_FW_FDTLB INT64_C(0x0000000000004000)
#define MCNTL_FW_FITLB INT64_C(0x0000000000008000)
#define MCNTL_JPS1_TSBP INT64_C(0x0000000000000100)
#define MCNTL_MPG_SITLB INT64_C(0x0000000000000080)
#define MCNTL_MPG_SDTLB INT64_C(0x0000000000000040)
#define MCNTL_SPECULATIVE_SHIFT 41
#define ASI_UGERSR 0x8
#define UGESR_IAUG_CRE INT64_C(0x0000000000400000)
#define UGESR_IAUG_TSBCTXT INT64_C(0x0000000000200000)
#define UGESR_IUG_TSBP INT64_C(0x0000000000100000)
#define UGESR_IUG_PSTATE INT64_C(0x0000000000080000)
#define UGESR_IUG_TSTATE INT64_C(0x0000000000040000)
#define UGESR_IUG_F INT64_C(0x0000000000020000)
#define UGESR_IUG_R INT64_C(0x0000000000010000)
#define UGESR_AUG_SDC INT64_C(0x0000000000008000)
#define UGESR_IUG_WDT INT64_C(0x0000000000004000)
#define UGESR_IUG_DTLB INT64_C(0x0000000000000400)
#define UGESR_IUG_ITLB INT64_C(0x0000000000000200)
#define UGESR_IUG_COREERR INT64_C(0x0000000000000100)
#define UGESR_PRIV INT64_C(0x0000000000000008)
#define UGESR_MULTI_DAE INT64_C(0x0000000000000004)
#define UGESR_MULTI_IAE INT64_C(0x0000000000000002)
#define UGESR_MULTI_UGE INT64_C(0x0000000000000001)
#define UGESR_CAN_RECOVER (UGESR_IUG_DTLB | \
UGESR_IUG_ITLB | \
UGESR_IUG_COREERR)
#define UGESR_MULTI (UGESR_MULTI_DAE | \
UGESR_MULTI_IAE | \
UGESR_MULTI_UGE)
#define UGESR_NOSYNC_PANIC (UGESR_IAUG_CRE | \
UGESR_AUG_SDC | \
UGESR_MULTI_DAE | \
UGESR_MULTI_IAE | \
UGESR_MULTI_UGE)
#define OPL_UGER_STICK_DIFF 10000
#define ASI_ECR ASI_AFSR
#define AFSR_ECR 0x10
#define ASI_ECR_RTE_UE INT64_C(0x0000000000000200)
#define ASI_ECR_RTE_CEDG INT64_C(0x0000000000000100)
#define ASI_ECR_WEAK_ED INT64_C(0x0000000000000002)
#define ASI_ECR_UGE_HANDLER INT64_C(0x0000000000000001)
#define ASI_L2_CTRL 0x6A
#define ASI_L2_CTRL_RW_ADDR 0x10
#define ASI_L2_CTRL_UGE_TRAP INT64_C(0x0000000001000000)
#define ASI_L2_CTRL_NUMINSWAY_MASK INT64_C(0x0000000000070000)
#define ASI_L2_CTRL_U2_FLUSH INT64_C(0x0000000000000001)
#define SFSR_MK_UE INT64_C(0x0000400000000000)
#define SFSR_EID_MOD INT64_C(0x0000300000000000)
#define SFSR_EID_SID INT64_C(0x00000FFF00000000)
#define SFSR_UE INT64_C(0x0000000080000000)
#define SFSR_BERR INT64_C(0x0000000040000000)
#define SFSR_TO INT64_C(0x0000000020000000)
#define SFSR_TLB_MUL INT64_C(0x0000000008000000)
#define SFSR_TLB_PRT INT64_C(0x0000000004000000)
#define SFSR_EID_MOD_SHIFT 44
#define SFSR_EID_SID_SHIFT 32
#define OPL_ERRID_MEM 0
#define OPL_ERRID_CHANNEL 1
#define OPL_ERRID_CPU 2
#define OPL_ERRID_PATH 3
#define SFSR_ERRS (SFSR_UE | SFSR_BERR | \
SFSR_TO | SFSR_TLB_MUL | \
SFSR_TLB_PRT)
#define SFSR_MEMORY (SFSR_UE | \
SFSR_BERR | \
SFSR_TO)
#define ASI_IIU_INST_TRAP 0x60
#define ASI_ALL_FLUSH_L1I 0x67
#define ASI_L2_TAG_READ 0x6B
#define ASI_L2_TAG_READ_REG 0x6C
#define ASI_EIDR 0x6E
#define ASI_CACHE_INV 0x74
#define ASI_ERR_INJCT 0x76
#define OPL_SCRATCHPAD_SAVE_AG1 0x00
#define OPL_SCRATCHPAD_SAVE_AG2 0x08
#define OPL_SCRATCHPAD_SAVE_AG3 0x10
#define OPL_SCRATCHPAD_ERRLOG 0x18
#define OPL_SCRATCHPAD_UTSBREG4 0x20
#define OPL_SCRATCHPAD_UTSBREG5 0x28
#define OPL_SCRATCHPAD_UTSBREG6 0x30
#define OPL_SCRATCHPAD_UNUSED7 0x38
#define ERRLOG_REG_LOGPA_MASK INT64_C(0x0003ffffffffffc0)
#define ERRLOG_REG_NUMERR_MASK INT64_C(0x000000000000003f)
#define ERRLOG_REG_EIDR_MASK INT64_C(0x0000000000003fff)
#define ERRLOG_REG_EIDR_SHIFT 50
#define ERRLOG_REG_ERR_SHIFT 6
#define ERRLOG_REG_EIDR(reg) ((reg >> ERRLOG_REG_EIDR_SHIFT) & \
ERRLOG_REG_EIDR_MASK)
#define ERRLOG_REG_LOGPA(reg) (reg & ERRLOG_REG_LOGPA_MASK)
#define ERRLOG_REG_NUMERR(reg) (reg & ERRLOG_REG_NUMERR_MASK)
#define ERRLOG_BUFSZ 0x2000
#define ERRLOG_SZ (1 << ERRLOG_REG_ERR_SHIFT)
#define ERRLOG_ALLOC_SZ (ERRLOG_BUFSZ * 512)
#define OPL_DCACHE_SIZE 0x20000
#define OPL_DCACHE_LSIZE 0x40
#define OPL_ICACHE_SIZE 0x20000
#define OPL_ICACHE_LSIZE 0x40
#define OPL_ECACHE_SIZE 0x600000
#define OPL_ECACHE_LSIZE 0x100
#define OPL_ECACHE_NWAY 12
#define OPL_ECACHE_SETSIZE 0x80000
#define OPL_VAC_SIZE 0x2000
#define LOG_STICK_OFF 0x0
#define LOG_TL_OFF 0x8
#define LOG_ASI3_OFF 0x10
#define LOG_SFSR_OFF 0x18
#define LOG_SFAR_OFF 0x20
#define LOG_UGER_OFF 0x18
#define LOG_TSTATE_OFF 0x20
#define LOG_TPC_OFF 0x28
#ifndef _ASM
typedef struct opl_errlog {
uint64_t stick;
uint32_t tl;
uint32_t tt;
uint64_t asi3;
union {
struct {
uint64_t sfsr;
union {
uint64_t sfar;
uint64_t sfpar;
} sync_addr;
} sync;
struct {
uint64_t ugesr;
uint64_t tstate;
} ugesr;
} reg;
uint64_t tpc;
} opl_errlog_t;
#endif
#ifdef __cplusplus
}
#endif
#endif