ecc/e3: Split it into two drivers, coremctl(4) and ecc(4)
[dragonfly.git] / sys / dev / misc / coremctl / coremctl_reg.h
1 #ifndef _COREMCTL_REG_H_
2 #define _COREMCTL_REG_H_
3
4 #ifndef _SYS_BITOPS_H_
5 #include <sys/bitops.h>
6 #endif
7
8 #define PCI_CORE_MEMCTL_VID             0x8086
9 #define PCI_E3V1_MEMCTL_DID             0x0108
10 #define PCI_E3V2_MEMCTL_DID             0x0158
11 #define PCI_E3V3_MEMCTL_DID             0x0c08
12 #define PCI_COREV3_MEMCTL_DID           0x0c00
13
14 #define PCI_CORE_MCHBAR_LO              0x48
15 #define PCI_CORE_MCHBAR_LO_EN           0x1
16 #define PCI_CORE_MCHBAR_HI              0x4c
17
18 #define PCI_E3_ERRSTS                   0xc8
19 #define PCI_E3_ERRSTS_DMERR             __BIT(1)
20 #define PCI_E3_ERRSTS_DSERR             __BIT(0)
21
22 #define PCI_CORE_CAPID0_A               0xe4
23 #define PCI_CORE_CAPID0_A_DMFC  __BITS(0, 2)    /* v1 */
24 #define PCI_CORE_CAPID0_A_ECCDIS        __BIT(25)
25
26 #define PCI_CORE_CAPID0_B               0xe8
27 #define PCI_CORE_CAPID0_B_DMFC          __BITS(4, 6)    /* v2/v3 */
28
29 #define PCI_CORE_CAPID0_DMFC_V1_ALL     0x0     /* v1 */
30 #define PCI_CORE_CAPID0_DMFC_2933       0x0     /* v2/v3 */
31 #define PCI_CORE_CAPID0_DMFC_2667       0x1     /* v2/v3 */
32 #define PCI_CORE_CAPID0_DMFC_2400       0x2     /* v2/v3 */
33 #define PCI_CORE_CAPID0_DMFC_2133       0x3     /* v2/v3 */
34 #define PCI_CORE_CAPID0_DMFC_1867       0x4     /* v2/v3 */
35 #define PCI_CORE_CAPID0_DMFC_1600       0x5     /* v2/v3 */
36 #define PCI_CORE_CAPID0_DMFC_1333       0x6
37 #define PCI_CORE_CAPID0_DMFC_1067       0x7
38
39 #define PCI_CORE_MCHBAR_ADDRMASK        __BITS64(15, 38)
40
41 #define MCH_CORE_SIZE                   (32 * 1024)
42
43 #define MCH_E3_ERRLOG0_C0               0x40c8
44 #define MCH_E3_ERRLOG1_C0               0x40cc
45
46 #define MCH_E3_ERRLOG0_C1               0x44c8
47 #define MCH_E3_ERRLOG1_C1               0x44cc
48
49 #define MCH_E3_ERRLOG0_CERRSTS          __BIT(0)
50 #define MCH_E3_ERRLOG0_MERRSTS          __BIT(1)
51 #define MCH_E3_ERRLOG0_ERRSYND          __BITS(16, 23)
52 #define MCH_E3_ERRLOG0_ERRCHUNK         __BITS(24, 26)
53 #define MCH_E3_ERRLOG0_ERRRANK          __BITS(27, 28)
54 #define MCH_E3_ERRLOG0_ERRBANK          __BITS(29, 31)
55
56 #define MCH_E3_ERRLOG1_ERRROW           __BITS(0, 15)
57 #define MCH_E3_ERRLOG1_ERRCOL           __BITS(16, 31)
58
59 #define MCH_CORE_DIMM_CH0               0x5004
60 #define MCH_CORE_DIMM_CH1               0x5008
61
62 #define MCH_CORE_DIMM_SIZE_UNIT 256             /* MB */
63 #define MCH_CORE_DIMM_A_SIZE            __BITS(0, 7)
64 #define MCH_CORE_DIMM_B_SIZE            __BITS(8, 15)
65 #define MCH_CORE_DIMM_A_SELECT          __BIT(16)
66 #define MCH_CORE_DIMM_A_DUAL_RANK       __BIT(17)
67 #define MCH_CORE_DIMM_B_DUAL_RANK       __BIT(18)
68 #define MCH_CORE_DIMM_A_X16             __BIT(19)
69 #define MCH_CORE_DIMM_B_X16             __BIT(20)
70 #define MCH_CORE_DIMM_RI                __BIT(21)       /* rank interleave */
71 /* enchanced interleave */
72 #define MCH_CORE_DIMM_ENHI              __BIT(22)
73 #define MCH_E3_DIMM_ECC                 __BITS(24, 25)
74 #define MCH_E3_DIMM_ECC_NONE            0x0
75 #define MCH_E3_DIMM_ECC_IO              0x1
76 #define MCH_E3_DIMM_ECC_LOGIC           0x2
77 #define MCH_E3_DIMM_ECC_ALL             0x3
78 /* high order rank interleave */
79 #define MCH_CORE_DIMM_HORI              __BIT(26)       /* v3 */
80 /* high order rank interleave address (addr bits [20,27]) */
81 #define MCH_CORE_DIMM_HORIADDR          __BITS(27, 29)  /* v3 */
82
83 #endif  /* !_COREMCTL_REG_H_ */