xref: /dpdk/drivers/raw/ntb/ntb_hw_intel.h (revision 834d99f388ca99507b124d1fb49059c265dfa18e)
1034c328eSXiaoyun Li /* SPDX-License-Identifier: BSD-3-Clause
2034c328eSXiaoyun Li  * Copyright(c) 2019 Intel Corporation.
3034c328eSXiaoyun Li  */
4034c328eSXiaoyun Li 
5034c328eSXiaoyun Li #ifndef _NTB_HW_INTEL_H_
6034c328eSXiaoyun Li #define _NTB_HW_INTEL_H_
7034c328eSXiaoyun Li 
8*834d99f3SJunfeng Guo /* Supported PCI device revision ID range for ICX */
9*834d99f3SJunfeng Guo #define NTB_PCI_DEV_REVISION_ICX_MIN	0x02
10*834d99f3SJunfeng Guo #define NTB_PCI_DEV_REVISION_ICX_MAX	0x0F
11*834d99f3SJunfeng Guo 
12*834d99f3SJunfeng Guo #define NTB_PCI_DEV_REVISION_ID_REG	0x08
13*834d99f3SJunfeng Guo #define NTB_PCI_DEV_REVISION_ID_LEN	1
14*834d99f3SJunfeng Guo 
15034c328eSXiaoyun Li /* Ntb control and link status */
16034c328eSXiaoyun Li #define NTB_CTL_CFG_LOCK		1
17034c328eSXiaoyun Li #define NTB_CTL_DISABLE			2
18034c328eSXiaoyun Li #define NTB_CTL_S2P_BAR2_SNOOP		(1 << 2)
19034c328eSXiaoyun Li #define NTB_CTL_P2S_BAR2_SNOOP		(1 << 4)
20034c328eSXiaoyun Li #define NTB_CTL_S2P_BAR4_SNOOP		(1 << 6)
21034c328eSXiaoyun Li #define NTB_CTL_P2S_BAR4_SNOOP		(1 << 8)
22034c328eSXiaoyun Li #define NTB_CTL_S2P_BAR5_SNOOP		(1 << 12)
23034c328eSXiaoyun Li #define NTB_CTL_P2S_BAR5_SNOOP		(1 << 14)
24034c328eSXiaoyun Li 
25034c328eSXiaoyun Li #define NTB_LNK_STA_ACTIVE_BIT		0x2000
26034c328eSXiaoyun Li #define NTB_LNK_STA_SPEED_MASK		0x000f
27034c328eSXiaoyun Li #define NTB_LNK_STA_WIDTH_MASK		0x03f0
28034c328eSXiaoyun Li #define NTB_LNK_STA_ACTIVE(x)		(!!((x) & NTB_LNK_STA_ACTIVE_BIT))
29034c328eSXiaoyun Li #define NTB_LNK_STA_SPEED(x)		((x) & NTB_LNK_STA_SPEED_MASK)
30034c328eSXiaoyun Li #define NTB_LNK_STA_WIDTH(x)		(((x) & NTB_LNK_STA_WIDTH_MASK) >> 4)
31034c328eSXiaoyun Li 
32f5057be3SXiaoyun Li /* Intel Xeon hardware */
33034c328eSXiaoyun Li #define XEON_IMBAR1SZ_OFFSET		0x00d0
34034c328eSXiaoyun Li #define XEON_IMBAR2SZ_OFFSET		0x00d1
35034c328eSXiaoyun Li #define XEON_EMBAR1SZ_OFFSET		0x00d2
36034c328eSXiaoyun Li #define XEON_EMBAR2SZ_OFFSET		0x00d3
37034c328eSXiaoyun Li #define XEON_DEVCTRL_OFFSET		0x0098
38034c328eSXiaoyun Li #define XEON_DEVSTS_OFFSET		0x009a
39034c328eSXiaoyun Li #define XEON_UNCERRSTS_OFFSET		0x014c
40034c328eSXiaoyun Li #define XEON_CORERRSTS_OFFSET		0x0158
41f5057be3SXiaoyun Li #define XEON_GEN3_LINK_STATUS_OFFSET	0x01a2
42f5057be3SXiaoyun Li /* Link status and PPD are in MMIO but not config space for Gen4 NTB */
43f5057be3SXiaoyun Li #define XEON_GEN4_PPD0_OFFSET		0xb0d4
44f5057be3SXiaoyun Li #define XEON_GEN4_PPD1_OFFSET		0xb4c0
45f5057be3SXiaoyun Li #define XEON_GEN4_LINK_CTRL_OFFSET	0xb050
46f5057be3SXiaoyun Li #define XEON_GEN4_LINK_STATUS_OFFSET	0xb052
47f5057be3SXiaoyun Li #define XEON_GEN4_LINK_CTRL_LINK_DIS	0x0010
48034c328eSXiaoyun Li 
49034c328eSXiaoyun Li #define XEON_NTBCNTL_OFFSET		0x0000
50034c328eSXiaoyun Li #define XEON_BAR_INTERVAL_OFFSET	0x0010
51034c328eSXiaoyun Li #define XEON_IMBAR1XBASE_OFFSET		0x0010		/* SBAR2XLAT */
52034c328eSXiaoyun Li #define XEON_IMBAR1XLMT_OFFSET		0x0018		/* SBAR2LMT */
53034c328eSXiaoyun Li #define XEON_IMBAR2XBASE_OFFSET		0x0020		/* SBAR4XLAT */
54034c328eSXiaoyun Li #define XEON_IMBAR2XLMT_OFFSET		0x0028		/* SBAR4LMT */
55f5057be3SXiaoyun Li #define XEON_GEN4_XBASEIDX_INTERVAL	0x0002
56f5057be3SXiaoyun Li #define XEON_GEN4_IM1XBASEIDX_OFFSET	0x0074
57f5057be3SXiaoyun Li #define XEON_GEN4_IM2XBASEIDX_OFFSET	0x0076
58034c328eSXiaoyun Li #define XEON_IM_INT_STATUS_OFFSET	0x0040
59034c328eSXiaoyun Li #define XEON_IM_INT_DISABLE_OFFSET	0x0048
60034c328eSXiaoyun Li #define XEON_IM_SPAD_OFFSET		0x0080		/* SPAD */
61f5057be3SXiaoyun Li #define XEON_GEN3_B2B_SPAD_OFFSET	0x0180		/* GEN3 B2B SPAD */
62f5057be3SXiaoyun Li #define XEON_GEN4_B2B_SPAD_OFFSET	0x8080		/* GEN4 B2B SPAD */
63034c328eSXiaoyun Li #define XEON_USMEMMISS_OFFSET		0x0070
64f5057be3SXiaoyun Li #define XEON_GEN3_INTVEC_OFFSET		0x00d0
65f5057be3SXiaoyun Li #define XEON_GEN4_INTVEC_OFFSET		0x0050
66034c328eSXiaoyun Li #define XEON_IM_DOORBELL_OFFSET		0x0100		/* SDOORBELL0 */
67034c328eSXiaoyun Li #define XEON_EMBAR0XBASE_OFFSET		0x4008		/* B2B_XLAT */
68034c328eSXiaoyun Li #define XEON_EMBAR1XBASE_OFFSET		0x4010		/* PBAR2XLAT */
69034c328eSXiaoyun Li #define XEON_EMBAR1XLMT_OFFSET		0x4018		/* PBAR2LMT */
70034c328eSXiaoyun Li #define XEON_EMBAR2XBASE_OFFSET		0x4020		/* PBAR4XLAT */
71034c328eSXiaoyun Li #define XEON_EMBAR2XLMT_OFFSET		0x4028		/* PBAR4LMT */
72034c328eSXiaoyun Li #define XEON_EM_INT_STATUS_OFFSET	0x4040
73034c328eSXiaoyun Li #define XEON_EM_INT_DISABLE_OFFSET	0x4048
74034c328eSXiaoyun Li #define XEON_EM_SPAD_OFFSET		0x4080		/* remote SPAD */
75034c328eSXiaoyun Li #define XEON_EM_DOORBELL_OFFSET		0x4100		/* PDOORBELL0 */
76034c328eSXiaoyun Li #define XEON_SPCICMD_OFFSET		0x4504		/* SPCICMD */
77034c328eSXiaoyun Li #define XEON_EMBAR0_OFFSET		0x4510		/* SBAR0BASE */
78034c328eSXiaoyun Li #define XEON_EMBAR1_OFFSET		0x4518		/* SBAR23BASE */
79034c328eSXiaoyun Li #define XEON_EMBAR2_OFFSET		0x4520		/* SBAR45BASE */
80034c328eSXiaoyun Li 
81034c328eSXiaoyun Li #define XEON_PPD_OFFSET			0x00d4
82034c328eSXiaoyun Li #define XEON_PPD_CONN_MASK		0x03
83034c328eSXiaoyun Li #define XEON_PPD_CONN_TRANSPARENT	0x00
84034c328eSXiaoyun Li #define XEON_PPD_CONN_B2B		0x01
85034c328eSXiaoyun Li #define XEON_PPD_CONN_RP		0x02
86034c328eSXiaoyun Li #define XEON_PPD_DEV_MASK		0x10
87034c328eSXiaoyun Li #define XEON_PPD_DEV_USD		0x00
88034c328eSXiaoyun Li #define XEON_PPD_DEV_DSD		0x10
89034c328eSXiaoyun Li #define XEON_PPD_SPLIT_BAR_MASK		0x40
90034c328eSXiaoyun Li 
91f5057be3SXiaoyun Li #define XEON_GEN4_PPD_CONN_MASK		0x0300
92f5057be3SXiaoyun Li #define XEON_GEN4_PPD_CONN_B2B		0x0200
93f5057be3SXiaoyun Li #define XEON_GEN4_PPD_DEV_MASK		0x1000
94f5057be3SXiaoyun Li #define XEON_GEN4_PPD_DEV_DSD		0x1000
95f5057be3SXiaoyun Li #define XEON_GEN4_PPD_DEV_USD		0x0000
96f5057be3SXiaoyun Li #define XEON_GEN4_PPD_LINKTRN		0x0008
97f5057be3SXiaoyun Li #define XEON_GEN4_SLOTSTS		0xb05a
98f5057be3SXiaoyun Li #define XEON_GEN4_SLOTSTS_DLLSCS	0x100
99034c328eSXiaoyun Li 
100*834d99f3SJunfeng Guo #define XEON_SPR_PPD_CONN_MASK		0x0700
101*834d99f3SJunfeng Guo #define XEON_SPR_PPD_CONN_B2B		0x0200
102*834d99f3SJunfeng Guo #define XEON_SPR_PPD_DEV_MASK		0x4000
103*834d99f3SJunfeng Guo #define XEON_SPR_PPD_DEV_DSD		0x4000
104*834d99f3SJunfeng Guo #define XEON_SPR_PPD_DEV_USD		0x0000
105*834d99f3SJunfeng Guo 
106034c328eSXiaoyun Li #define XEON_MW_COUNT			2
107034c328eSXiaoyun Li 
108034c328eSXiaoyun Li #define XEON_DB_COUNT			32
109034c328eSXiaoyun Li #define XEON_DB_LINK			32
110034c328eSXiaoyun Li #define XEON_DB_LINK_BIT		(1ULL << XEON_DB_LINK)
111034c328eSXiaoyun Li #define XEON_DB_MSIX_VECTOR_COUNT	33
112034c328eSXiaoyun Li #define XEON_DB_MSIX_VECTOR_SHIFT	1
113034c328eSXiaoyun Li #define XEON_DB_TOTAL_SHIFT		33
114034c328eSXiaoyun Li #define XEON_SPAD_COUNT			16
115034c328eSXiaoyun Li 
116034c328eSXiaoyun Li extern const struct ntb_dev_ops intel_ntb_ops;
117034c328eSXiaoyun Li 
118034c328eSXiaoyun Li #endif /* _NTB_HW_INTEL_H_ */
119