xref: /linux/drivers/pci/controller/cadence/pcie-cadence-lga-regs.h (revision 43dfc13ca972988e620a6edb72956981b75ab6b0)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Cadence PCIe controller driver.
4  *
5  * Copyright (c) 2017 Cadence
6  * Author: Cyrille Pitchen <cyrille.pitchen@free-electrons.com>
7  */
8 #ifndef _PCIE_CADENCE_LGA_REGS_H
9 #define _PCIE_CADENCE_LGA_REGS_H
10 
11 #include <linux/bitfield.h>
12 
13 /* Parameters for the waiting for link up routine */
14 #define LINK_WAIT_MAX_RETRIES	10
15 #define LINK_WAIT_USLEEP_MIN	90000
16 #define LINK_WAIT_USLEEP_MAX	100000
17 
18 /* Local Management Registers */
19 #define CDNS_PCIE_LM_BASE	0x00100000
20 
21 /* Vendor ID Register */
22 #define CDNS_PCIE_LM_ID		(CDNS_PCIE_LM_BASE + 0x0044)
23 #define  CDNS_PCIE_LM_ID_VENDOR_MASK	GENMASK(15, 0)
24 #define  CDNS_PCIE_LM_ID_VENDOR_SHIFT	0
25 #define  CDNS_PCIE_LM_ID_VENDOR(vid) \
26 	(((vid) << CDNS_PCIE_LM_ID_VENDOR_SHIFT) & CDNS_PCIE_LM_ID_VENDOR_MASK)
27 #define  CDNS_PCIE_LM_ID_SUBSYS_MASK	GENMASK(31, 16)
28 #define  CDNS_PCIE_LM_ID_SUBSYS_SHIFT	16
29 #define  CDNS_PCIE_LM_ID_SUBSYS(sub) \
30 	(((sub) << CDNS_PCIE_LM_ID_SUBSYS_SHIFT) & CDNS_PCIE_LM_ID_SUBSYS_MASK)
31 
32 /* Root Port Requester ID Register */
33 #define  CDNS_PCIE_LM_RP_RID		(CDNS_PCIE_LM_BASE + 0x0228)
34 #define  CDNS_PCIE_LM_RP_RID_MASK	GENMASK(15, 0)
35 #define  CDNS_PCIE_LM_RP_RID_SHIFT	0
36 #define  CDNS_PCIE_LM_RP_RID_(rid) \
37 	(((rid) << CDNS_PCIE_LM_RP_RID_SHIFT) & CDNS_PCIE_LM_RP_RID_MASK)
38 
39 /* Endpoint Bus and Device Number Register */
40 #define  CDNS_PCIE_LM_EP_ID		(CDNS_PCIE_LM_BASE + 0x022C)
41 #define  CDNS_PCIE_LM_EP_ID_DEV_MASK	GENMASK(4, 0)
42 #define  CDNS_PCIE_LM_EP_ID_DEV_SHIFT	0
43 #define  CDNS_PCIE_LM_EP_ID_BUS_MASK	GENMASK(15, 8)
44 #define  CDNS_PCIE_LM_EP_ID_BUS_SHIFT	8
45 
46 /* Endpoint Function f BAR b Configuration Registers */
47 #define CDNS_PCIE_LM_EP_FUNC_BAR_CFG(bar, fn) \
48 	(((bar) < BAR_4) ? CDNS_PCIE_LM_EP_FUNC_BAR_CFG0(fn) : CDNS_PCIE_LM_EP_FUNC_BAR_CFG1(fn))
49 #define CDNS_PCIE_LM_EP_FUNC_BAR_CFG0(fn) \
50 	(CDNS_PCIE_LM_BASE + 0x0240 + (fn) * 0x0008)
51 #define CDNS_PCIE_LM_EP_FUNC_BAR_CFG1(fn) \
52 	(CDNS_PCIE_LM_BASE + 0x0244 + (fn) * 0x0008)
53 #define CDNS_PCIE_LM_EP_VFUNC_BAR_CFG(bar, fn) \
54 	(((bar) < BAR_4) ? CDNS_PCIE_LM_EP_VFUNC_BAR_CFG0(fn) : CDNS_PCIE_LM_EP_VFUNC_BAR_CFG1(fn))
55 #define CDNS_PCIE_LM_EP_VFUNC_BAR_CFG0(fn) \
56 	(CDNS_PCIE_LM_BASE + 0x0280 + (fn) * 0x0008)
57 #define CDNS_PCIE_LM_EP_VFUNC_BAR_CFG1(fn) \
58 	(CDNS_PCIE_LM_BASE + 0x0284 + (fn) * 0x0008)
59 #define  CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(b) \
60 	(GENMASK(4, 0) << ((b) * 8))
61 #define  CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE(b, a) \
62 	(((a) << ((b) * 8)) & CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_APERTURE_MASK(b))
63 #define  CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b) \
64 	(GENMASK(7, 5) << ((b) * 8))
65 #define  CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL(b, c) \
66 	(((c) << ((b) * 8 + 5)) & CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b))
67 
68 /* Endpoint Function Configuration Register */
69 #define CDNS_PCIE_LM_EP_FUNC_CFG	(CDNS_PCIE_LM_BASE + 0x02C0)
70 
71 /* Root Complex BAR Configuration Register */
72 #define CDNS_PCIE_LM_RC_BAR_CFG	(CDNS_PCIE_LM_BASE + 0x0300)
73 #define  CDNS_PCIE_LM_RC_BAR_CFG_BAR0_APERTURE_MASK	GENMASK(5, 0)
74 #define  CDNS_PCIE_LM_RC_BAR_CFG_BAR0_APERTURE(a) \
75 	(((a) << 0) & CDNS_PCIE_LM_RC_BAR_CFG_BAR0_APERTURE_MASK)
76 #define  CDNS_PCIE_LM_RC_BAR_CFG_BAR0_CTRL_MASK		GENMASK(8, 6)
77 #define  CDNS_PCIE_LM_RC_BAR_CFG_BAR0_CTRL(c) \
78 	(((c) << 6) & CDNS_PCIE_LM_RC_BAR_CFG_BAR0_CTRL_MASK)
79 #define  CDNS_PCIE_LM_RC_BAR_CFG_BAR1_APERTURE_MASK	GENMASK(13, 9)
80 #define  CDNS_PCIE_LM_RC_BAR_CFG_BAR1_APERTURE(a) \
81 	(((a) << 9) & CDNS_PCIE_LM_RC_BAR_CFG_BAR1_APERTURE_MASK)
82 #define  CDNS_PCIE_LM_RC_BAR_CFG_BAR1_CTRL_MASK		GENMASK(16, 14)
83 #define  CDNS_PCIE_LM_RC_BAR_CFG_BAR1_CTRL(c) \
84 	(((c) << 14) & CDNS_PCIE_LM_RC_BAR_CFG_BAR1_CTRL_MASK)
85 #define  CDNS_PCIE_LM_RC_BAR_CFG_PREFETCH_MEM_ENABLE	BIT(17)
86 #define  CDNS_PCIE_LM_RC_BAR_CFG_PREFETCH_MEM_32BITS	0
87 #define  CDNS_PCIE_LM_RC_BAR_CFG_PREFETCH_MEM_64BITS	BIT(18)
88 #define  CDNS_PCIE_LM_RC_BAR_CFG_IO_ENABLE		BIT(19)
89 #define  CDNS_PCIE_LM_RC_BAR_CFG_IO_16BITS		0
90 #define  CDNS_PCIE_LM_RC_BAR_CFG_IO_32BITS		BIT(20)
91 #define  CDNS_PCIE_LM_RC_BAR_CFG_CHECK_ENABLE		BIT(31)
92 
93 /* BAR control values applicable to both Endpoint Function and Root Complex */
94 #define  CDNS_PCIE_LM_BAR_CFG_CTRL_DISABLED		0x0
95 #define  CDNS_PCIE_LM_BAR_CFG_CTRL_IO_32BITS		0x1
96 #define  CDNS_PCIE_LM_BAR_CFG_CTRL_MEM_32BITS		0x4
97 #define  CDNS_PCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_32BITS	0x5
98 #define  CDNS_PCIE_LM_BAR_CFG_CTRL_MEM_64BITS		0x6
99 #define  CDNS_PCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_64BITS	0x7
100 
101 #define LM_RC_BAR_CFG_CTRL_DISABLED(bar)		\
102 		(CDNS_PCIE_LM_BAR_CFG_CTRL_DISABLED << (((bar) * 8) + 6))
103 #define LM_RC_BAR_CFG_CTRL_IO_32BITS(bar)		\
104 		(CDNS_PCIE_LM_BAR_CFG_CTRL_IO_32BITS << (((bar) * 8) + 6))
105 #define LM_RC_BAR_CFG_CTRL_MEM_32BITS(bar)		\
106 		(CDNS_PCIE_LM_BAR_CFG_CTRL_MEM_32BITS << (((bar) * 8) + 6))
107 #define LM_RC_BAR_CFG_CTRL_PREF_MEM_32BITS(bar)	\
108 	(CDNS_PCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_32BITS << (((bar) * 8) + 6))
109 #define LM_RC_BAR_CFG_CTRL_MEM_64BITS(bar)		\
110 		(CDNS_PCIE_LM_BAR_CFG_CTRL_MEM_64BITS << (((bar) * 8) + 6))
111 #define LM_RC_BAR_CFG_CTRL_PREF_MEM_64BITS(bar)	\
112 	(CDNS_PCIE_LM_BAR_CFG_CTRL_PREFETCH_MEM_64BITS << (((bar) * 8) + 6))
113 #define LM_RC_BAR_CFG_APERTURE(bar, aperture)		\
114 					(((aperture) - 2) << ((bar) * 8))
115 
116 /* PTM Control Register */
117 #define CDNS_PCIE_LM_PTM_CTRL		(CDNS_PCIE_LM_BASE + 0x0DA8)
118 #define CDNS_PCIE_LM_TPM_CTRL_PTMRSEN	BIT(17)
119 
120 /*
121  * Endpoint Function Registers (PCI configuration space for endpoint functions)
122  */
123 #define CDNS_PCIE_EP_FUNC_BASE(fn)	(((fn) << 12) & GENMASK(19, 12))
124 
125 #define CDNS_PCIE_EP_FUNC_MSI_CAP_OFFSET	0x90
126 #define CDNS_PCIE_EP_FUNC_MSIX_CAP_OFFSET	0xB0
127 #define CDNS_PCIE_EP_FUNC_DEV_CAP_OFFSET	0xC0
128 #define CDNS_PCIE_EP_FUNC_SRIOV_CAP_OFFSET	0x200
129 
130 /* Endpoint PF Registers */
131 #define CDNS_PCIE_CORE_PF_I_ARI_CAP_AND_CTRL(fn)	(0x144 + (fn) * 0x1000)
132 #define CDNS_PCIE_ARI_CAP_NFN_MASK			GENMASK(15, 8)
133 
134 /* Root Port Registers (PCI configuration space for the root port function) */
135 #define CDNS_PCIE_RP_BASE	0x00200000
136 #define CDNS_PCIE_RP_CAP_OFFSET 0xC0
137 
138 /* Address Translation Registers */
139 #define CDNS_PCIE_AT_BASE	0x00400000
140 
141 /* Region r Outbound AXI to PCIe Address Translation Register 0 */
142 #define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0(r) \
143 	(CDNS_PCIE_AT_BASE + 0x0000 + ((r) & 0x1F) * 0x0020)
144 #define  CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_NBITS_MASK	GENMASK(5, 0)
145 #define  CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_NBITS(nbits) \
146 	(((nbits) - 1) & CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_NBITS_MASK)
147 #define  CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_DEVFN_MASK	GENMASK(19, 12)
148 #define  CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_DEVFN(devfn) \
149 	(((devfn) << 12) & CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_DEVFN_MASK)
150 #define  CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_BUS_MASK	GENMASK(27, 20)
151 #define  CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_BUS(bus) \
152 	(((bus) << 20) & CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_BUS_MASK)
153 
154 /* Region r Outbound AXI to PCIe Address Translation Register 1 */
155 #define CDNS_PCIE_AT_OB_REGION_PCI_ADDR1(r) \
156 	(CDNS_PCIE_AT_BASE + 0x0004 + ((r) & 0x1F) * 0x0020)
157 
158 /* Region r Outbound PCIe Descriptor Register 0 */
159 #define CDNS_PCIE_AT_OB_REGION_DESC0(r) \
160 	(CDNS_PCIE_AT_BASE + 0x0008 + ((r) & 0x1F) * 0x0020)
161 #define  CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_MASK		GENMASK(3, 0)
162 #define  CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_MEM		0x2
163 #define  CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_IO		0x6
164 #define  CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_CONF_TYPE0	0xA
165 #define  CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_CONF_TYPE1	0xB
166 #define  CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_NORMAL_MSG	0xC
167 #define  CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_VENDOR_MSG	0xD
168 /* Bit 23 MUST be set in RC mode. */
169 #define  CDNS_PCIE_AT_OB_REGION_DESC0_HARDCODED_RID	BIT(23)
170 #define  CDNS_PCIE_AT_OB_REGION_DESC0_DEVFN_MASK	GENMASK(31, 24)
171 #define  CDNS_PCIE_AT_OB_REGION_DESC0_DEVFN(devfn) \
172 	(((devfn) << 24) & CDNS_PCIE_AT_OB_REGION_DESC0_DEVFN_MASK)
173 
174 /* Region r Outbound PCIe Descriptor Register 1 */
175 #define CDNS_PCIE_AT_OB_REGION_DESC1(r)	\
176 	(CDNS_PCIE_AT_BASE + 0x000C + ((r) & 0x1F) * 0x0020)
177 #define  CDNS_PCIE_AT_OB_REGION_DESC1_BUS_MASK	GENMASK(7, 0)
178 #define  CDNS_PCIE_AT_OB_REGION_DESC1_BUS(bus) \
179 	((bus) & CDNS_PCIE_AT_OB_REGION_DESC1_BUS_MASK)
180 
181 /* Region r AXI Region Base Address Register 0 */
182 #define CDNS_PCIE_AT_OB_REGION_CPU_ADDR0(r) \
183 	(CDNS_PCIE_AT_BASE + 0x0018 + ((r) & 0x1F) * 0x0020)
184 #define  CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS_MASK	GENMASK(5, 0)
185 #define  CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS(nbits) \
186 	(((nbits) - 1) & CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS_MASK)
187 
188 /* Region r AXI Region Base Address Register 1 */
189 #define CDNS_PCIE_AT_OB_REGION_CPU_ADDR1(r) \
190 	(CDNS_PCIE_AT_BASE + 0x001C + ((r) & 0x1F) * 0x0020)
191 
192 /* Root Port BAR Inbound PCIe to AXI Address Translation Register */
193 #define CDNS_PCIE_AT_IB_RP_BAR_ADDR0(bar) \
194 	(CDNS_PCIE_AT_BASE + 0x0800 + (bar) * 0x0008)
195 #define  CDNS_PCIE_AT_IB_RP_BAR_ADDR0_NBITS_MASK	GENMASK(5, 0)
196 #define  CDNS_PCIE_AT_IB_RP_BAR_ADDR0_NBITS(nbits) \
197 	(((nbits) - 1) & CDNS_PCIE_AT_IB_RP_BAR_ADDR0_NBITS_MASK)
198 #define CDNS_PCIE_AT_IB_RP_BAR_ADDR1(bar) \
199 	(CDNS_PCIE_AT_BASE + 0x0804 + (bar) * 0x0008)
200 
201 /* AXI link down register */
202 #define CDNS_PCIE_AT_LINKDOWN (CDNS_PCIE_AT_BASE + 0x0824)
203 
204 /* LTSSM Capabilities register */
205 #define CDNS_PCIE_LTSSM_CONTROL_CAP		(CDNS_PCIE_LM_BASE + 0x0054)
206 #define  CDNS_PCIE_DETECT_QUIET_MIN_DELAY_MASK	GENMASK(2, 1)
207 #define  CDNS_PCIE_DETECT_QUIET_MIN_DELAY_SHIFT 1
208 #define  CDNS_PCIE_DETECT_QUIET_MIN_DELAY(delay) \
209 	 (((delay) << CDNS_PCIE_DETECT_QUIET_MIN_DELAY_SHIFT) & \
210 	 CDNS_PCIE_DETECT_QUIET_MIN_DELAY_MASK)
211 
212 #define CDNS_PCIE_RP_MAX_IB	0x3
213 #define CDNS_PCIE_MAX_OB	32
214 
215 /* Endpoint Function BAR Inbound PCIe to AXI Address Translation Register */
216 #define CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR0(fn, bar) \
217 	(CDNS_PCIE_AT_BASE + 0x0840 + (fn) * 0x0040 + (bar) * 0x0008)
218 #define CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR1(fn, bar) \
219 	(CDNS_PCIE_AT_BASE + 0x0844 + (fn) * 0x0040 + (bar) * 0x0008)
220 
221 /* Normal/Vendor specific message access: offset inside some outbound region */
222 #define CDNS_PCIE_NORMAL_MSG_ROUTING_MASK	GENMASK(7, 5)
223 #define CDNS_PCIE_NORMAL_MSG_ROUTING(route) \
224 	(((route) << 5) & CDNS_PCIE_NORMAL_MSG_ROUTING_MASK)
225 #define CDNS_PCIE_NORMAL_MSG_CODE_MASK		GENMASK(15, 8)
226 #define CDNS_PCIE_NORMAL_MSG_CODE(code) \
227 	(((code) << 8) & CDNS_PCIE_NORMAL_MSG_CODE_MASK)
228 #define CDNS_PCIE_MSG_NO_DATA                   BIT(16)
229 
230 #endif /* _PCIE_CADENCE_LGA_REGS_H */
231