root/sys/dev/misc/coremctl/coremctl_reg.h
#ifndef _COREMCTL_REG_H_
#define _COREMCTL_REG_H_

#ifndef _SYS_BITOPS_H_
#include <sys/bitops.h>
#endif

#define PCI_CORE_MEMCTL_CHN_MAX         2
#define PCI_CORE_MEMCTL_CHN_DIMM_MAX    2

#define PCI_CORE_MEMCTL_VID             0x8086
#define PCI_E3V1_MEMCTL_DID             0x0108
#define PCI_E3V2_MEMCTL_DID             0x0158
#define PCI_E3V3_MEMCTL_DID             0x0c08
#define PCI_COREV3_MEMCTL_DID           0x0c00

#define PCI_CORE_MCHBAR_LO              0x48
#define PCI_CORE_MCHBAR_LO_EN           0x1
#define PCI_CORE_MCHBAR_HI              0x4c

#define PCI_E3_ERRSTS                   0xc8
#define PCI_E3_ERRSTS_DMERR             __BIT(1)
#define PCI_E3_ERRSTS_DSERR             __BIT(0)

#define PCI_CORE_CAPID0_A               0xe4
#define PCI_CORE_CAPID0_A_DMFC  __BITS(0, 2)    /* v1 */
#define PCI_CORE_CAPID0_A_ECCDIS        __BIT(25)

#define PCI_CORE_CAPID0_B               0xe8
#define PCI_CORE_CAPID0_B_DMFC          __BITS(4, 6)    /* v2/v3 */

#define PCI_CORE_CAPID0_DMFC_V1_ALL     0x0     /* v1 */
#define PCI_CORE_CAPID0_DMFC_2933       0x0     /* v2/v3 */
#define PCI_CORE_CAPID0_DMFC_2667       0x1     /* v2/v3 */
#define PCI_CORE_CAPID0_DMFC_2400       0x2     /* v2/v3 */
#define PCI_CORE_CAPID0_DMFC_2133       0x3     /* v2/v3 */
#define PCI_CORE_CAPID0_DMFC_1867       0x4     /* v2/v3 */
#define PCI_CORE_CAPID0_DMFC_1600       0x5     /* v2/v3 */
#define PCI_CORE_CAPID0_DMFC_1333       0x6
#define PCI_CORE_CAPID0_DMFC_1067       0x7

#define PCI_CORE_MCHBAR_ADDRMASK        __BITS64(15, 38)

#define MCH_CORE_SIZE                   (32 * 1024)

#define MCH_E3_ERRLOG0_C0               0x40c8
#define MCH_E3_ERRLOG1_C0               0x40cc

#define MCH_E3_ERRLOG0_C1               0x44c8
#define MCH_E3_ERRLOG1_C1               0x44cc

#define MCH_E3_ERRLOG0_CERRSTS          __BIT(0)
#define MCH_E3_ERRLOG0_MERRSTS          __BIT(1)
#define MCH_E3_ERRLOG0_ERRSYND          __BITS(16, 23)
#define MCH_E3_ERRLOG0_ERRCHUNK         __BITS(24, 26)
#define MCH_E3_ERRLOG0_ERRRANK          __BITS(27, 28)
#define MCH_E3_ERRLOG0_ERRBANK          __BITS(29, 31)

#define MCH_E3_ERRLOG1_ERRROW           __BITS(0, 15)
#define MCH_E3_ERRLOG1_ERRCOL           __BITS(16, 31)

#define MCH_CORE_DIMM_CH0               0x5004
#define MCH_CORE_DIMM_CH1               0x5008

#define MCH_CORE_DIMM_SIZE_UNIT 256             /* MB */
#define MCH_CORE_DIMM_A_SIZE            __BITS(0, 7)
#define MCH_CORE_DIMM_B_SIZE            __BITS(8, 15)
#define MCH_CORE_DIMM_A_SELECT          __BIT(16)
#define MCH_CORE_DIMM_A_DUAL_RANK       __BIT(17)
#define MCH_CORE_DIMM_B_DUAL_RANK       __BIT(18)
#define MCH_CORE_DIMM_A_X16             __BIT(19)
#define MCH_CORE_DIMM_B_X16             __BIT(20)
#define MCH_CORE_DIMM_RI                __BIT(21)       /* rank interleave */
/* enchanced interleave */
#define MCH_CORE_DIMM_ENHI              __BIT(22)
#define MCH_E3_DIMM_ECC                 __BITS(24, 25)
#define MCH_E3_DIMM_ECC_NONE            0x0
#define MCH_E3_DIMM_ECC_IO              0x1
#define MCH_E3_DIMM_ECC_LOGIC           0x2
#define MCH_E3_DIMM_ECC_ALL             0x3
/* high order rank interleave */
#define MCH_CORE_DIMM_HORI              __BIT(26)       /* v3 */
/* high order rank interleave address (addr bits [20,27]) */
#define MCH_CORE_DIMM_HORIADDR          __BITS(27, 29)  /* v3 */

#define MCH_CORE_DDR_PTM_CTL0           0x5880  /* v3 */
#define MCH_CORE_DDR_PTM_CTL0_EXTTS     __BIT(4)
#define MCH_CORE_DDR_PTM_CTL0_CLTM      __BIT(1)
#define MCH_CORE_DDR_PTM_CTL0_OLTM      __BIT(0)

#define MCH_CORE_DIMM_TEMP_CH0          0x58b0  /* v3 */
#define MCH_CORE_DIMM_TEMP_CH1          0x58b4  /* v3 */

#define MCH_CORE_DIMM_TEMP_DIMM0        __BITS(0, 7)
#define MCH_CORE_DIMM_TEMP_DIMM1        __BITS(8, 15)

#endif  /* !_COREMCTL_REG_H_ */