xref: /linux/drivers/pci/controller/dwc/pcie-designware.h (revision 40286d6379aacfcc053253ef78dc78b09addffda)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Synopsys DesignWare PCIe host controller driver
4  *
5  * Copyright (C) 2013 Samsung Electronics Co., Ltd.
6  *		https://www.samsung.com
7  *
8  * Author: Jingoo Han <jg1.han@samsung.com>
9  */
10 
11 #ifndef _PCIE_DESIGNWARE_H
12 #define _PCIE_DESIGNWARE_H
13 
14 #include <linux/bitfield.h>
15 #include <linux/bitops.h>
16 #include <linux/clk.h>
17 #include <linux/dma-mapping.h>
18 #include <linux/dma/edma.h>
19 #include <linux/gpio/consumer.h>
20 #include <linux/irq.h>
21 #include <linux/msi.h>
22 #include <linux/pci.h>
23 #include <linux/pci-ecam.h>
24 #include <linux/reset.h>
25 
26 #include <linux/pci-epc.h>
27 #include <linux/pci-epf.h>
28 
29 #include "../../pci.h"
30 
31 /* DWC PCIe IP-core versions (native support since v4.70a) */
32 #define DW_PCIE_VER_365A		0x3336352a
33 #define DW_PCIE_VER_460A		0x3436302a
34 #define DW_PCIE_VER_470A		0x3437302a
35 #define DW_PCIE_VER_480A		0x3438302a
36 #define DW_PCIE_VER_490A		0x3439302a
37 #define DW_PCIE_VER_500A		0x3530302a
38 #define DW_PCIE_VER_520A		0x3532302a
39 #define DW_PCIE_VER_540A		0x3534302a
40 #define DW_PCIE_VER_562A		0x3536322a
41 
42 #define __dw_pcie_ver_cmp(_pci, _ver, _op) \
43 	((_pci)->version _op DW_PCIE_VER_ ## _ver)
44 
45 #define dw_pcie_ver_is(_pci, _ver) __dw_pcie_ver_cmp(_pci, _ver, ==)
46 
47 #define dw_pcie_ver_is_ge(_pci, _ver) __dw_pcie_ver_cmp(_pci, _ver, >=)
48 
49 #define dw_pcie_ver_type_is(_pci, _ver, _type) \
50 	(__dw_pcie_ver_cmp(_pci, _ver, ==) && \
51 	 __dw_pcie_ver_cmp(_pci, TYPE_ ## _type, ==))
52 
53 #define dw_pcie_ver_type_is_ge(_pci, _ver, _type) \
54 	(__dw_pcie_ver_cmp(_pci, _ver, ==) && \
55 	 __dw_pcie_ver_cmp(_pci, TYPE_ ## _type, >=))
56 
57 /* DWC PCIe controller capabilities */
58 #define DW_PCIE_CAP_REQ_RES		0
59 #define DW_PCIE_CAP_IATU_UNROLL		1
60 #define DW_PCIE_CAP_CDM_CHECK		2
61 
62 #define dw_pcie_cap_is(_pci, _cap) \
63 	test_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps)
64 
65 #define dw_pcie_cap_set(_pci, _cap) \
66 	set_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps)
67 
68 /* Parameters for the waiting for iATU enabled routine */
69 #define LINK_WAIT_MAX_IATU_RETRIES	5
70 #define LINK_WAIT_IATU			9
71 
72 /* Synopsys-specific PCIe configuration registers */
73 #define PCIE_PORT_FORCE			0x708
74 #define PORT_FORCE_DO_DESKEW_FOR_SRIS	BIT(23)
75 
76 #define PCIE_PORT_AFR			0x70C
77 #define PORT_AFR_N_FTS_MASK		GENMASK(15, 8)
78 #define PORT_AFR_N_FTS(n)		FIELD_PREP(PORT_AFR_N_FTS_MASK, n)
79 #define PORT_AFR_CC_N_FTS_MASK		GENMASK(23, 16)
80 #define PORT_AFR_CC_N_FTS(n)		FIELD_PREP(PORT_AFR_CC_N_FTS_MASK, n)
81 #define PORT_AFR_ENTER_ASPM		BIT(30)
82 #define PORT_AFR_L0S_ENTRANCE_LAT_SHIFT	24
83 #define PORT_AFR_L0S_ENTRANCE_LAT_MASK	GENMASK(26, 24)
84 #define PORT_AFR_L1_ENTRANCE_LAT_SHIFT	27
85 #define PORT_AFR_L1_ENTRANCE_LAT_MASK	GENMASK(29, 27)
86 
87 #define PCIE_PORT_LINK_CONTROL		0x710
88 #define PORT_LINK_DLL_LINK_EN		BIT(5)
89 #define PORT_LINK_FAST_LINK_MODE	BIT(7)
90 #define PORT_LINK_MODE_MASK		GENMASK(21, 16)
91 #define PORT_LINK_MODE(n)		FIELD_PREP(PORT_LINK_MODE_MASK, n)
92 #define PORT_LINK_MODE_1_LANES		PORT_LINK_MODE(0x1)
93 #define PORT_LINK_MODE_2_LANES		PORT_LINK_MODE(0x3)
94 #define PORT_LINK_MODE_4_LANES		PORT_LINK_MODE(0x7)
95 #define PORT_LINK_MODE_8_LANES		PORT_LINK_MODE(0xf)
96 #define PORT_LINK_MODE_16_LANES		PORT_LINK_MODE(0x1f)
97 
98 #define PCIE_PORT_LANE_SKEW		0x714
99 #define PORT_LANE_SKEW_INSERT_MASK	GENMASK(23, 0)
100 
101 #define PCIE_PORT_DEBUG0		0x728
102 #define PORT_LOGIC_LTSSM_STATE_MASK	0x3f
103 #define PORT_LOGIC_LTSSM_STATE_L0	0x11
104 #define PCIE_PORT_DEBUG1		0x72C
105 #define PCIE_PORT_DEBUG1_LINK_UP		BIT(4)
106 #define PCIE_PORT_DEBUG1_LINK_IN_TRAINING	BIT(29)
107 
108 #define PCIE_LINK_WIDTH_SPEED_CONTROL	0x80C
109 #define PORT_LOGIC_N_FTS_MASK		GENMASK(7, 0)
110 #define PORT_LOGIC_SPEED_CHANGE		BIT(17)
111 #define PORT_LOGIC_LINK_WIDTH_MASK	GENMASK(12, 8)
112 #define PORT_LOGIC_LINK_WIDTH(n)	FIELD_PREP(PORT_LOGIC_LINK_WIDTH_MASK, n)
113 #define PORT_LOGIC_LINK_WIDTH_1_LANES	PORT_LOGIC_LINK_WIDTH(0x1)
114 #define PORT_LOGIC_LINK_WIDTH_2_LANES	PORT_LOGIC_LINK_WIDTH(0x2)
115 #define PORT_LOGIC_LINK_WIDTH_4_LANES	PORT_LOGIC_LINK_WIDTH(0x4)
116 #define PORT_LOGIC_LINK_WIDTH_8_LANES	PORT_LOGIC_LINK_WIDTH(0x8)
117 
118 #define PCIE_MSI_ADDR_LO		0x820
119 #define PCIE_MSI_ADDR_HI		0x824
120 #define PCIE_MSI_INTR0_ENABLE		0x828
121 #define PCIE_MSI_INTR0_MASK		0x82C
122 #define PCIE_MSI_INTR0_STATUS		0x830
123 
124 #define GEN3_RELATED_OFF			0x890
125 #define GEN3_RELATED_OFF_GEN3_ZRXDC_NONCOMPL	BIT(0)
126 #define GEN3_RELATED_OFF_EQ_PHASE_2_3		BIT(9)
127 #define GEN3_RELATED_OFF_RXEQ_RGRDLESS_RXTS	BIT(13)
128 #define GEN3_RELATED_OFF_GEN3_EQ_DISABLE	BIT(16)
129 #define GEN3_RELATED_OFF_RATE_SHADOW_SEL_SHIFT	24
130 #define GEN3_RELATED_OFF_RATE_SHADOW_SEL_MASK	GENMASK(25, 24)
131 
132 #define GEN3_EQ_CONTROL_OFF			0x8A8
133 #define GEN3_EQ_CONTROL_OFF_FB_MODE		GENMASK(3, 0)
134 #define GEN3_EQ_CONTROL_OFF_PHASE23_EXIT_MODE	BIT(4)
135 #define GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC	GENMASK(23, 8)
136 #define GEN3_EQ_CONTROL_OFF_FOM_INC_INITIAL_EVAL	BIT(24)
137 
138 #define GEN3_EQ_FB_MODE_DIR_CHANGE_OFF		0x8AC
139 #define GEN3_EQ_FMDC_T_MIN_PHASE23		GENMASK(4, 0)
140 #define GEN3_EQ_FMDC_N_EVALS			GENMASK(9, 5)
141 #define GEN3_EQ_FMDC_MAX_PRE_CURSOR_DELTA	GENMASK(13, 10)
142 #define GEN3_EQ_FMDC_MAX_POST_CURSOR_DELTA	GENMASK(17, 14)
143 
144 #define COHERENCY_CONTROL_1_OFF			0x8E0
145 #define CFG_MEMTYPE_BOUNDARY_LOW_ADDR_MASK	GENMASK(31, 2)
146 #define CFG_MEMTYPE_VALUE			BIT(0)
147 
148 #define COHERENCY_CONTROL_2_OFF			0x8E4
149 #define COHERENCY_CONTROL_3_OFF			0x8E8
150 
151 #define PCIE_PORT_MULTI_LANE_CTRL	0x8C0
152 #define PORT_MLTI_UPCFG_SUPPORT		BIT(7)
153 
154 #define PCIE_VERSION_NUMBER		0x8F8
155 #define PCIE_VERSION_TYPE		0x8FC
156 
157 /*
158  * iATU inbound and outbound windows CSRs. Before the IP-core v4.80a each
159  * iATU region CSRs had been indirectly accessible by means of the dedicated
160  * viewport selector. The iATU/eDMA CSRs space was re-designed in DWC PCIe
161  * v4.80a in a way so the viewport was unrolled into the directly accessible
162  * iATU/eDMA CSRs space.
163  */
164 #define PCIE_ATU_VIEWPORT		0x900
165 #define PCIE_ATU_REGION_DIR_IB		BIT(31)
166 #define PCIE_ATU_REGION_DIR_OB		0
167 #define PCIE_ATU_VIEWPORT_BASE		0x904
168 #define PCIE_ATU_UNROLL_BASE(dir, index) \
169 	(((index) << 9) | ((dir == PCIE_ATU_REGION_DIR_IB) ? BIT(8) : 0))
170 #define PCIE_ATU_VIEWPORT_SIZE		0x2C
171 #define PCIE_ATU_REGION_CTRL1		0x000
172 #define PCIE_ATU_INCREASE_REGION_SIZE	BIT(13)
173 #define PCIE_ATU_TYPE_MEM		0x0
174 #define PCIE_ATU_TYPE_IO		0x2
175 #define PCIE_ATU_TYPE_CFG0		0x4
176 #define PCIE_ATU_TYPE_CFG1		0x5
177 #define PCIE_ATU_TYPE_MSG		0x10
178 #define PCIE_ATU_TD			BIT(8)
179 #define PCIE_ATU_FUNC_NUM(pf)           ((pf) << 20)
180 #define PCIE_ATU_REGION_CTRL2		0x004
181 #define PCIE_ATU_ENABLE			BIT(31)
182 #define PCIE_ATU_BAR_MODE_ENABLE	BIT(30)
183 #define PCIE_ATU_CFG_SHIFT_MODE_ENABLE	BIT(28)
184 #define PCIE_ATU_INHIBIT_PAYLOAD	BIT(22)
185 #define PCIE_ATU_FUNC_NUM_MATCH_EN      BIT(19)
186 #define PCIE_ATU_LOWER_BASE		0x008
187 #define PCIE_ATU_UPPER_BASE		0x00C
188 #define PCIE_ATU_LIMIT			0x010
189 #define PCIE_ATU_LOWER_TARGET		0x014
190 #define PCIE_ATU_BUS(x)			FIELD_PREP(GENMASK(31, 24), x)
191 #define PCIE_ATU_DEV(x)			FIELD_PREP(GENMASK(23, 19), x)
192 #define PCIE_ATU_FUNC(x)		FIELD_PREP(GENMASK(18, 16), x)
193 #define PCIE_ATU_UPPER_TARGET		0x018
194 #define PCIE_ATU_UPPER_LIMIT		0x020
195 
196 #define PCIE_MISC_CONTROL_1_OFF		0x8BC
197 #define PCIE_DBI_RO_WR_EN		BIT(0)
198 
199 #define PCIE_MSIX_DOORBELL		0x948
200 #define PCIE_MSIX_DOORBELL_PF_SHIFT	24
201 
202 /*
203  * eDMA CSRs. DW PCIe IP-core v4.70a and older had the eDMA registers accessible
204  * over the Port Logic registers space. Afterwards the unrolled mapping was
205  * introduced so eDMA and iATU could be accessed via a dedicated registers
206  * space.
207  */
208 #define PCIE_DMA_VIEWPORT_BASE		0x970
209 #define PCIE_DMA_UNROLL_BASE		0x80000
210 #define PCIE_DMA_CTRL			0x008
211 #define PCIE_DMA_NUM_WR_CHAN		GENMASK(3, 0)
212 #define PCIE_DMA_NUM_RD_CHAN		GENMASK(19, 16)
213 
214 #define PCIE_PL_CHK_REG_CONTROL_STATUS			0xB20
215 #define PCIE_PL_CHK_REG_CHK_REG_START			BIT(0)
216 #define PCIE_PL_CHK_REG_CHK_REG_CONTINUOUS		BIT(1)
217 #define PCIE_PL_CHK_REG_CHK_REG_COMPARISON_ERROR	BIT(16)
218 #define PCIE_PL_CHK_REG_CHK_REG_LOGIC_ERROR		BIT(17)
219 #define PCIE_PL_CHK_REG_CHK_REG_COMPLETE		BIT(18)
220 
221 #define PCIE_PL_CHK_REG_ERR_ADDR			0xB28
222 
223 /*
224  * 16.0 GT/s (Gen 4) lane margining register definitions
225  */
226 #define GEN4_LANE_MARGINING_1_OFF		0xB80
227 #define MARGINING_MAX_VOLTAGE_OFFSET		GENMASK(29, 24)
228 #define MARGINING_NUM_VOLTAGE_STEPS		GENMASK(22, 16)
229 #define MARGINING_MAX_TIMING_OFFSET		GENMASK(13, 8)
230 #define MARGINING_NUM_TIMING_STEPS		GENMASK(5, 0)
231 
232 #define GEN4_LANE_MARGINING_2_OFF		0xB84
233 #define MARGINING_IND_ERROR_SAMPLER		BIT(28)
234 #define MARGINING_SAMPLE_REPORTING_METHOD	BIT(27)
235 #define MARGINING_IND_LEFT_RIGHT_TIMING		BIT(26)
236 #define MARGINING_IND_UP_DOWN_VOLTAGE		BIT(25)
237 #define MARGINING_VOLTAGE_SUPPORTED		BIT(24)
238 #define MARGINING_MAXLANES			GENMASK(20, 16)
239 #define MARGINING_SAMPLE_RATE_TIMING		GENMASK(13, 8)
240 #define MARGINING_SAMPLE_RATE_VOLTAGE		GENMASK(5, 0)
241 /*
242  * iATU Unroll-specific register definitions
243  * From 4.80 core version the address translation will be made by unroll
244  */
245 #define PCIE_ATU_UNR_REGION_CTRL1	0x00
246 #define PCIE_ATU_UNR_REGION_CTRL2	0x04
247 #define PCIE_ATU_UNR_LOWER_BASE		0x08
248 #define PCIE_ATU_UNR_UPPER_BASE		0x0C
249 #define PCIE_ATU_UNR_LOWER_LIMIT	0x10
250 #define PCIE_ATU_UNR_LOWER_TARGET	0x14
251 #define PCIE_ATU_UNR_UPPER_TARGET	0x18
252 #define PCIE_ATU_UNR_UPPER_LIMIT	0x20
253 
254 /*
255  * RAS-DES register definitions
256  */
257 #define PCIE_RAS_DES_EVENT_COUNTER_CONTROL	0x8
258 #define EVENT_COUNTER_ALL_CLEAR		0x3
259 #define EVENT_COUNTER_ENABLE_ALL	0x7
260 #define EVENT_COUNTER_ENABLE_SHIFT	2
261 #define EVENT_COUNTER_EVENT_SEL_MASK	GENMASK(7, 0)
262 #define EVENT_COUNTER_EVENT_SEL_SHIFT	16
263 #define EVENT_COUNTER_EVENT_Tx_L0S	0x2
264 #define EVENT_COUNTER_EVENT_Rx_L0S	0x3
265 #define EVENT_COUNTER_EVENT_L1		0x5
266 #define EVENT_COUNTER_EVENT_L1_1	0x7
267 #define EVENT_COUNTER_EVENT_L1_2	0x8
268 #define EVENT_COUNTER_GROUP_SEL_SHIFT	24
269 #define EVENT_COUNTER_GROUP_5		0x5
270 
271 #define PCIE_RAS_DES_EVENT_COUNTER_DATA		0xc
272 
273 /* PTM register definitions */
274 #define PTM_RES_REQ_CTRL		0x8
275 #define PTM_RES_CCONTEXT_VALID		BIT(0)
276 #define PTM_REQ_AUTO_UPDATE_ENABLED	BIT(0)
277 #define PTM_REQ_START_UPDATE		BIT(1)
278 
279 #define PTM_LOCAL_LSB			0x10
280 #define PTM_LOCAL_MSB			0x14
281 #define PTM_T1_T2_LSB			0x18
282 #define PTM_T1_T2_MSB			0x1c
283 #define PTM_T3_T4_LSB			0x28
284 #define PTM_T3_T4_MSB			0x2c
285 #define PTM_MASTER_LSB			0x38
286 #define PTM_MASTER_MSB			0x3c
287 
288 /*
289  * The default address offset between dbi_base and atu_base. Root controller
290  * drivers are not required to initialize atu_base if the offset matches this
291  * default; the driver core automatically derives atu_base from dbi_base using
292  * this offset, if atu_base not set.
293  */
294 #define DEFAULT_DBI_ATU_OFFSET (0x3 << 20)
295 #define DEFAULT_DBI_DMA_OFFSET PCIE_DMA_UNROLL_BASE
296 
297 #define MAX_MSI_IRQS			256
298 #define MAX_MSI_IRQS_PER_CTRL		32
299 #define MAX_MSI_CTRLS			(MAX_MSI_IRQS / MAX_MSI_IRQS_PER_CTRL)
300 #define MSI_REG_CTRL_BLOCK_SIZE		12
301 #define MSI_DEF_NUM_VECTORS		32
302 
303 /* Maximum number of inbound/outbound iATUs */
304 #define MAX_IATU_IN			256
305 #define MAX_IATU_OUT			256
306 
307 /* Default eDMA LLP memory size */
308 #define DMA_LLP_MEM_SIZE		PAGE_SIZE
309 
310 /* Common struct pci_epc_feature bits among DWC EP glue drivers */
311 #define DWC_EPC_COMMON_FEATURES		.dynamic_inbound_mapping = true, \
312 					.subrange_mapping = true
313 
314 struct dw_pcie;
315 struct dw_pcie_rp;
316 struct dw_pcie_ep;
317 
318 enum dw_pcie_device_mode {
319 	DW_PCIE_UNKNOWN_TYPE,
320 	DW_PCIE_EP_TYPE,
321 	DW_PCIE_LEG_EP_TYPE,
322 	DW_PCIE_RC_TYPE,
323 };
324 
325 enum dw_pcie_app_clk {
326 	DW_PCIE_DBI_CLK,
327 	DW_PCIE_MSTR_CLK,
328 	DW_PCIE_SLV_CLK,
329 	DW_PCIE_NUM_APP_CLKS
330 };
331 
332 enum dw_pcie_core_clk {
333 	DW_PCIE_PIPE_CLK,
334 	DW_PCIE_CORE_CLK,
335 	DW_PCIE_AUX_CLK,
336 	DW_PCIE_REF_CLK,
337 	DW_PCIE_NUM_CORE_CLKS
338 };
339 
340 enum dw_pcie_app_rst {
341 	DW_PCIE_DBI_RST,
342 	DW_PCIE_MSTR_RST,
343 	DW_PCIE_SLV_RST,
344 	DW_PCIE_NUM_APP_RSTS
345 };
346 
347 enum dw_pcie_core_rst {
348 	DW_PCIE_NON_STICKY_RST,
349 	DW_PCIE_STICKY_RST,
350 	DW_PCIE_CORE_RST,
351 	DW_PCIE_PIPE_RST,
352 	DW_PCIE_PHY_RST,
353 	DW_PCIE_HOT_RST,
354 	DW_PCIE_PWR_RST,
355 	DW_PCIE_NUM_CORE_RSTS
356 };
357 
358 enum dw_pcie_ltssm {
359 	/* Need to align with PCIE_PORT_DEBUG0 bits 0:5 */
360 	DW_PCIE_LTSSM_DETECT_QUIET = 0x0,
361 	DW_PCIE_LTSSM_DETECT_ACT = 0x1,
362 	DW_PCIE_LTSSM_POLL_ACTIVE = 0x2,
363 	DW_PCIE_LTSSM_POLL_COMPLIANCE = 0x3,
364 	DW_PCIE_LTSSM_POLL_CONFIG = 0x4,
365 	DW_PCIE_LTSSM_PRE_DETECT_QUIET = 0x5,
366 	DW_PCIE_LTSSM_DETECT_WAIT = 0x6,
367 	DW_PCIE_LTSSM_CFG_LINKWD_START = 0x7,
368 	DW_PCIE_LTSSM_CFG_LINKWD_ACEPT = 0x8,
369 	DW_PCIE_LTSSM_CFG_LANENUM_WAI = 0x9,
370 	DW_PCIE_LTSSM_CFG_LANENUM_ACEPT = 0xa,
371 	DW_PCIE_LTSSM_CFG_COMPLETE = 0xb,
372 	DW_PCIE_LTSSM_CFG_IDLE = 0xc,
373 	DW_PCIE_LTSSM_RCVRY_LOCK = 0xd,
374 	DW_PCIE_LTSSM_RCVRY_SPEED = 0xe,
375 	DW_PCIE_LTSSM_RCVRY_RCVRCFG = 0xf,
376 	DW_PCIE_LTSSM_RCVRY_IDLE = 0x10,
377 	DW_PCIE_LTSSM_L0 = 0x11,
378 	DW_PCIE_LTSSM_L0S = 0x12,
379 	DW_PCIE_LTSSM_L123_SEND_EIDLE = 0x13,
380 	DW_PCIE_LTSSM_L1_IDLE = 0x14,
381 	DW_PCIE_LTSSM_L2_IDLE = 0x15,
382 	DW_PCIE_LTSSM_L2_WAKE = 0x16,
383 	DW_PCIE_LTSSM_DISABLED_ENTRY = 0x17,
384 	DW_PCIE_LTSSM_DISABLED_IDLE = 0x18,
385 	DW_PCIE_LTSSM_DISABLED = 0x19,
386 	DW_PCIE_LTSSM_LPBK_ENTRY = 0x1a,
387 	DW_PCIE_LTSSM_LPBK_ACTIVE = 0x1b,
388 	DW_PCIE_LTSSM_LPBK_EXIT = 0x1c,
389 	DW_PCIE_LTSSM_LPBK_EXIT_TIMEOUT = 0x1d,
390 	DW_PCIE_LTSSM_HOT_RESET_ENTRY = 0x1e,
391 	DW_PCIE_LTSSM_HOT_RESET = 0x1f,
392 	DW_PCIE_LTSSM_RCVRY_EQ0 = 0x20,
393 	DW_PCIE_LTSSM_RCVRY_EQ1 = 0x21,
394 	DW_PCIE_LTSSM_RCVRY_EQ2 = 0x22,
395 	DW_PCIE_LTSSM_RCVRY_EQ3 = 0x23,
396 
397 	/* Vendor glue drivers provide pseudo L1 substates from get_ltssm() */
398 	DW_PCIE_LTSSM_L1_1 = 0x141,
399 	DW_PCIE_LTSSM_L1_2 = 0x142,
400 
401 	DW_PCIE_LTSSM_UNKNOWN = 0xFFFFFFFF,
402 };
403 
404 struct dw_pcie_ob_atu_cfg {
405 	int index;
406 	int type;
407 	u8 func_no;
408 	u8 code;
409 	u8 routing;
410 	u32 ctrl2;
411 	u64 parent_bus_addr;
412 	u64 pci_addr;
413 	u64 size;
414 };
415 
416 struct dw_pcie_host_ops {
417 	int (*init)(struct dw_pcie_rp *pp);
418 	void (*deinit)(struct dw_pcie_rp *pp);
419 	void (*post_init)(struct dw_pcie_rp *pp);
420 	int (*msi_init)(struct dw_pcie_rp *pp);
421 	void (*pme_turn_off)(struct dw_pcie_rp *pp);
422 };
423 
424 struct dw_pcie_rp {
425 	bool			use_imsi_rx:1;
426 	bool			keep_rp_msi_en:1;
427 	bool			cfg0_io_shared:1;
428 	u64			cfg0_base;
429 	void __iomem		*va_cfg0_base;
430 	u32			cfg0_size;
431 	resource_size_t		io_base;
432 	phys_addr_t		io_bus_addr;
433 	u32			io_size;
434 	int			irq;
435 	const struct dw_pcie_host_ops *ops;
436 	int			msi_irq[MAX_MSI_CTRLS];
437 	struct irq_domain	*irq_domain;
438 	dma_addr_t		msi_data;
439 	struct irq_chip		*msi_irq_chip;
440 	u32			num_vectors;
441 	u32			irq_mask[MAX_MSI_CTRLS];
442 	struct pci_host_bridge  *bridge;
443 	raw_spinlock_t		lock;
444 	DECLARE_BITMAP(msi_irq_in_use, MAX_MSI_IRQS);
445 	bool			use_atu_msg;
446 	int			msg_atu_index;
447 	struct resource		*msg_res;
448 	struct pci_eq_presets	presets;
449 	struct pci_config_window *cfg;
450 	bool			ecam_enabled;
451 	bool			native_ecam;
452 	bool                    skip_l23_ready;
453 };
454 
455 struct dw_pcie_ep_ops {
456 	void	(*pre_init)(struct dw_pcie_ep *ep);
457 	void	(*init)(struct dw_pcie_ep *ep);
458 	int	(*raise_irq)(struct dw_pcie_ep *ep, u8 func_no,
459 			     unsigned int type, u16 interrupt_num);
460 	const struct pci_epc_features* (*get_features)(struct dw_pcie_ep *ep);
461 	/*
462 	 * Provide a method to implement the different func config space
463 	 * access for different platform, if different func have different
464 	 * offset, return the offset of func. if use write a register way
465 	 * return a 0, and implement code in callback function of platform
466 	 * driver.
467 	 */
468 	unsigned int (*get_dbi_offset)(struct dw_pcie_ep *ep, u8 func_no);
469 	unsigned int (*get_dbi2_offset)(struct dw_pcie_ep *ep, u8 func_no);
470 };
471 
472 struct dw_pcie_ep_func {
473 	struct list_head	list;
474 	u8			func_no;
475 	u8			msi_cap;	/* MSI capability offset */
476 	u8			msix_cap;	/* MSI-X capability offset */
477 	u8			bar_to_atu[PCI_STD_NUM_BARS];
478 	struct pci_epf_bar	*epf_bar[PCI_STD_NUM_BARS];
479 
480 	/* Only for Address Match Mode inbound iATU */
481 	u32			*ib_atu_indexes[PCI_STD_NUM_BARS];
482 	unsigned int		num_ib_atu_indexes[PCI_STD_NUM_BARS];
483 };
484 
485 struct dw_pcie_ep {
486 	struct pci_epc		*epc;
487 	struct list_head	func_list;
488 	const struct dw_pcie_ep_ops *ops;
489 	phys_addr_t		phys_base;
490 	size_t			addr_size;
491 	size_t			page_size;
492 	phys_addr_t		*outbound_addr;
493 	unsigned long		*ib_window_map;
494 	unsigned long		*ob_window_map;
495 	void __iomem		*msi_mem;
496 	phys_addr_t		msi_mem_phys;
497 
498 	/* MSI outbound iATU state */
499 	bool			msi_iatu_mapped;
500 	u64			msi_msg_addr;
501 	size_t			msi_map_size;
502 };
503 
504 struct dw_pcie_ops {
505 	u64	(*cpu_addr_fixup)(struct dw_pcie *pcie, u64 cpu_addr);
506 	u32	(*read_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
507 			    size_t size);
508 	void	(*write_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
509 			     size_t size, u32 val);
510 	void    (*write_dbi2)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
511 			      size_t size, u32 val);
512 	bool	(*link_up)(struct dw_pcie *pcie);
513 	enum dw_pcie_ltssm (*get_ltssm)(struct dw_pcie *pcie);
514 	int	(*start_link)(struct dw_pcie *pcie);
515 	void	(*stop_link)(struct dw_pcie *pcie);
516 };
517 
518 struct debugfs_info {
519 	struct dentry		*debug_dir;
520 	void			*rasdes_info;
521 };
522 
523 struct dw_pcie {
524 	struct device		*dev;
525 	void __iomem		*dbi_base;
526 	resource_size_t		dbi_phys_addr;
527 	void __iomem		*dbi_base2;
528 	void __iomem		*atu_base;
529 	void __iomem		*elbi_base;
530 	resource_size_t		atu_phys_addr;
531 	size_t			atu_size;
532 	resource_size_t		parent_bus_offset;
533 	u32			num_ib_windows;
534 	u32			num_ob_windows;
535 	u32			region_align;
536 	u64			region_limit;
537 	struct dw_pcie_rp	pp;
538 	struct dw_pcie_ep	ep;
539 	const struct dw_pcie_ops *ops;
540 	u32			version;
541 	u32			type;
542 	unsigned long		caps;
543 	int			num_lanes;
544 	int			max_link_speed;
545 	u8			n_fts[2];
546 	struct dw_edma_chip	edma;
547 	bool			l1ss_support;	/* L1 PM Substates support */
548 	struct clk_bulk_data	app_clks[DW_PCIE_NUM_APP_CLKS];
549 	struct clk_bulk_data	core_clks[DW_PCIE_NUM_CORE_CLKS];
550 	struct reset_control_bulk_data	app_rsts[DW_PCIE_NUM_APP_RSTS];
551 	struct reset_control_bulk_data	core_rsts[DW_PCIE_NUM_CORE_RSTS];
552 	struct gpio_desc		*pe_rst;
553 	bool			suspended;
554 	struct debugfs_info	*debugfs;
555 	enum			dw_pcie_device_mode mode;
556 	u16			ptm_vsec_offset;
557 	struct pci_ptm_debugfs	*ptm_debugfs;
558 
559 	/*
560 	 * If iATU input addresses are offset from CPU physical addresses,
561 	 * we previously required .cpu_addr_fixup() to convert them.  We
562 	 * now rely on the devicetree instead.  If .cpu_addr_fixup()
563 	 * exists, we compare its results with devicetree.
564 	 *
565 	 * If .cpu_addr_fixup() does not exist, we assume the offset is
566 	 * zero and warn if devicetree claims otherwise.  If we know all
567 	 * devicetrees correctly describe the offset, set
568 	 * use_parent_dt_ranges to true to avoid this warning.
569 	 */
570 	bool			use_parent_dt_ranges;
571 };
572 
573 #define to_dw_pcie_from_pp(port) container_of((port), struct dw_pcie, pp)
574 
575 #define to_dw_pcie_from_ep(endpoint)   \
576 		container_of((endpoint), struct dw_pcie, ep)
577 
578 int dw_pcie_get_resources(struct dw_pcie *pci);
579 
580 void dw_pcie_version_detect(struct dw_pcie *pci);
581 
582 u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap);
583 u16 dw_pcie_find_ext_capability(struct dw_pcie *pci, u8 cap);
584 void dw_pcie_remove_capability(struct dw_pcie *pci, u8 cap);
585 void dw_pcie_remove_ext_capability(struct dw_pcie *pci, u8 cap);
586 u16 dw_pcie_find_rasdes_capability(struct dw_pcie *pci);
587 u16 dw_pcie_find_ptm_capability(struct dw_pcie *pci);
588 
589 int dw_pcie_read(void __iomem *addr, int size, u32 *val);
590 int dw_pcie_write(void __iomem *addr, int size, u32 val);
591 
592 u32 dw_pcie_read_dbi(struct dw_pcie *pci, u32 reg, size_t size);
593 void dw_pcie_write_dbi(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
594 void dw_pcie_write_dbi2(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
595 bool dw_pcie_link_up(struct dw_pcie *pci);
596 void dw_pcie_upconfig_setup(struct dw_pcie *pci);
597 int dw_pcie_wait_for_link(struct dw_pcie *pci);
598 int dw_pcie_link_get_max_link_width(struct dw_pcie *pci);
599 int dw_pcie_prog_outbound_atu(struct dw_pcie *pci,
600 			      const struct dw_pcie_ob_atu_cfg *atu);
601 int dw_pcie_prog_inbound_atu(struct dw_pcie *pci, int index, int type,
602 			     u64 parent_bus_addr, u64 pci_addr, u64 size);
603 int dw_pcie_prog_ep_inbound_atu(struct dw_pcie *pci, u8 func_no, int index,
604 				int type, u64 parent_bus_addr,
605 				u8 bar, size_t size);
606 void dw_pcie_disable_atu(struct dw_pcie *pci, u32 dir, int index);
607 void dw_pcie_hide_unsupported_l1ss(struct dw_pcie *pci);
608 void dw_pcie_setup(struct dw_pcie *pci);
609 void dw_pcie_iatu_detect(struct dw_pcie *pci);
610 int dw_pcie_edma_detect(struct dw_pcie *pci);
611 void dw_pcie_edma_remove(struct dw_pcie *pci);
612 resource_size_t dw_pcie_parent_bus_offset(struct dw_pcie *pci,
613 					  const char *reg_name,
614 					  resource_size_t cpu_phy_addr);
615 
616 static inline void dw_pcie_writel_dbi(struct dw_pcie *pci, u32 reg, u32 val)
617 {
618 	dw_pcie_write_dbi(pci, reg, 0x4, val);
619 }
620 
621 static inline u32 dw_pcie_readl_dbi(struct dw_pcie *pci, u32 reg)
622 {
623 	return dw_pcie_read_dbi(pci, reg, 0x4);
624 }
625 
626 static inline void dw_pcie_writew_dbi(struct dw_pcie *pci, u32 reg, u16 val)
627 {
628 	dw_pcie_write_dbi(pci, reg, 0x2, val);
629 }
630 
631 static inline u16 dw_pcie_readw_dbi(struct dw_pcie *pci, u32 reg)
632 {
633 	return dw_pcie_read_dbi(pci, reg, 0x2);
634 }
635 
636 static inline void dw_pcie_writeb_dbi(struct dw_pcie *pci, u32 reg, u8 val)
637 {
638 	dw_pcie_write_dbi(pci, reg, 0x1, val);
639 }
640 
641 static inline u8 dw_pcie_readb_dbi(struct dw_pcie *pci, u32 reg)
642 {
643 	return dw_pcie_read_dbi(pci, reg, 0x1);
644 }
645 
646 static inline void dw_pcie_writel_dbi2(struct dw_pcie *pci, u32 reg, u32 val)
647 {
648 	dw_pcie_write_dbi2(pci, reg, 0x4, val);
649 }
650 
651 static inline int dw_pcie_read_cfg_byte(struct dw_pcie *pci, int where,
652 					u8 *val)
653 {
654 	*val = dw_pcie_readb_dbi(pci, where);
655 	return PCIBIOS_SUCCESSFUL;
656 }
657 
658 static inline int dw_pcie_read_cfg_word(struct dw_pcie *pci, int where,
659 					u16 *val)
660 {
661 	*val = dw_pcie_readw_dbi(pci, where);
662 	return PCIBIOS_SUCCESSFUL;
663 }
664 
665 static inline int dw_pcie_read_cfg_dword(struct dw_pcie *pci, int where,
666 					 u32 *val)
667 {
668 	*val = dw_pcie_readl_dbi(pci, where);
669 	return PCIBIOS_SUCCESSFUL;
670 }
671 
672 static inline unsigned int dw_pcie_ep_get_dbi_offset(struct dw_pcie_ep *ep,
673 						     u8 func_no)
674 {
675 	unsigned int dbi_offset = 0;
676 
677 	if (ep->ops->get_dbi_offset)
678 		dbi_offset = ep->ops->get_dbi_offset(ep, func_no);
679 
680 	return dbi_offset;
681 }
682 
683 static inline u32 dw_pcie_ep_read_dbi(struct dw_pcie_ep *ep, u8 func_no,
684 				      u32 reg, size_t size)
685 {
686 	unsigned int offset = dw_pcie_ep_get_dbi_offset(ep, func_no);
687 	struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
688 
689 	return dw_pcie_read_dbi(pci, offset + reg, size);
690 }
691 
692 static inline void dw_pcie_ep_write_dbi(struct dw_pcie_ep *ep, u8 func_no,
693 					u32 reg, size_t size, u32 val)
694 {
695 	unsigned int offset = dw_pcie_ep_get_dbi_offset(ep, func_no);
696 	struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
697 
698 	dw_pcie_write_dbi(pci, offset + reg, size, val);
699 }
700 
701 static inline void dw_pcie_ep_writel_dbi(struct dw_pcie_ep *ep, u8 func_no,
702 					 u32 reg, u32 val)
703 {
704 	dw_pcie_ep_write_dbi(ep, func_no, reg, 0x4, val);
705 }
706 
707 static inline u32 dw_pcie_ep_readl_dbi(struct dw_pcie_ep *ep, u8 func_no,
708 				       u32 reg)
709 {
710 	return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x4);
711 }
712 
713 static inline void dw_pcie_ep_writew_dbi(struct dw_pcie_ep *ep, u8 func_no,
714 					 u32 reg, u16 val)
715 {
716 	dw_pcie_ep_write_dbi(ep, func_no, reg, 0x2, val);
717 }
718 
719 static inline u16 dw_pcie_ep_readw_dbi(struct dw_pcie_ep *ep, u8 func_no,
720 				       u32 reg)
721 {
722 	return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x2);
723 }
724 
725 static inline void dw_pcie_ep_writeb_dbi(struct dw_pcie_ep *ep, u8 func_no,
726 					 u32 reg, u8 val)
727 {
728 	dw_pcie_ep_write_dbi(ep, func_no, reg, 0x1, val);
729 }
730 
731 static inline u8 dw_pcie_ep_readb_dbi(struct dw_pcie_ep *ep, u8 func_no,
732 				      u32 reg)
733 {
734 	return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x1);
735 }
736 
737 static inline int dw_pcie_ep_read_cfg_byte(struct dw_pcie_ep *ep, u8 func_no,
738 					   int where, u8 *val)
739 {
740 	*val = dw_pcie_ep_readb_dbi(ep, func_no, where);
741 	return PCIBIOS_SUCCESSFUL;
742 }
743 
744 static inline int dw_pcie_ep_read_cfg_word(struct dw_pcie_ep *ep, u8 func_no,
745 					   int where, u16 *val)
746 {
747 	*val = dw_pcie_ep_readw_dbi(ep, func_no, where);
748 	return PCIBIOS_SUCCESSFUL;
749 }
750 
751 static inline int dw_pcie_ep_read_cfg_dword(struct dw_pcie_ep *ep, u8 func_no,
752 					    int where, u32 *val)
753 {
754 	*val = dw_pcie_ep_readl_dbi(ep, func_no, where);
755 	return PCIBIOS_SUCCESSFUL;
756 }
757 
758 static inline unsigned int dw_pcie_ep_get_dbi2_offset(struct dw_pcie_ep *ep,
759 						      u8 func_no)
760 {
761 	unsigned int dbi2_offset = 0;
762 
763 	if (ep->ops->get_dbi2_offset)
764 		dbi2_offset = ep->ops->get_dbi2_offset(ep, func_no);
765 	else if (ep->ops->get_dbi_offset)     /* for backward compatibility */
766 		dbi2_offset = ep->ops->get_dbi_offset(ep, func_no);
767 
768 	return dbi2_offset;
769 }
770 
771 static inline void dw_pcie_ep_write_dbi2(struct dw_pcie_ep *ep, u8 func_no,
772 					 u32 reg, size_t size, u32 val)
773 {
774 	unsigned int offset = dw_pcie_ep_get_dbi2_offset(ep, func_no);
775 	struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
776 
777 	dw_pcie_write_dbi2(pci, offset + reg, size, val);
778 }
779 
780 static inline void dw_pcie_ep_writel_dbi2(struct dw_pcie_ep *ep, u8 func_no,
781 					  u32 reg, u32 val)
782 {
783 	dw_pcie_ep_write_dbi2(ep, func_no, reg, 0x4, val);
784 }
785 
786 static inline void dw_pcie_dbi_ro_wr_en(struct dw_pcie *pci)
787 {
788 	u32 reg;
789 	u32 val;
790 
791 	reg = PCIE_MISC_CONTROL_1_OFF;
792 	val = dw_pcie_readl_dbi(pci, reg);
793 	val |= PCIE_DBI_RO_WR_EN;
794 	dw_pcie_writel_dbi(pci, reg, val);
795 }
796 
797 static inline void dw_pcie_dbi_ro_wr_dis(struct dw_pcie *pci)
798 {
799 	u32 reg;
800 	u32 val;
801 
802 	reg = PCIE_MISC_CONTROL_1_OFF;
803 	val = dw_pcie_readl_dbi(pci, reg);
804 	val &= ~PCIE_DBI_RO_WR_EN;
805 	dw_pcie_writel_dbi(pci, reg, val);
806 }
807 
808 static inline int dw_pcie_start_link(struct dw_pcie *pci)
809 {
810 	if (pci->ops && pci->ops->start_link)
811 		return pci->ops->start_link(pci);
812 
813 	return 0;
814 }
815 
816 static inline void dw_pcie_stop_link(struct dw_pcie *pci)
817 {
818 	if (pci->ops && pci->ops->stop_link)
819 		pci->ops->stop_link(pci);
820 }
821 
822 static inline enum dw_pcie_ltssm dw_pcie_get_ltssm(struct dw_pcie *pci)
823 {
824 	u32 val;
825 
826 	if (pci->ops && pci->ops->get_ltssm)
827 		return pci->ops->get_ltssm(pci);
828 
829 	val = dw_pcie_readl_dbi(pci, PCIE_PORT_DEBUG0);
830 
831 	return (enum dw_pcie_ltssm)FIELD_GET(PORT_LOGIC_LTSSM_STATE_MASK, val);
832 }
833 
834 const char *dw_pcie_ltssm_status_string(enum dw_pcie_ltssm ltssm);
835 
836 #ifdef CONFIG_PCIE_DW_HOST
837 int dw_pcie_suspend_noirq(struct dw_pcie *pci);
838 int dw_pcie_resume_noirq(struct dw_pcie *pci);
839 void dw_handle_msi_irq(struct dw_pcie_rp *pp);
840 void dw_pcie_msi_init(struct dw_pcie_rp *pp);
841 int dw_pcie_msi_host_init(struct dw_pcie_rp *pp);
842 void dw_pcie_free_msi(struct dw_pcie_rp *pp);
843 int dw_pcie_setup_rc(struct dw_pcie_rp *pp);
844 int dw_pcie_host_init(struct dw_pcie_rp *pp);
845 void dw_pcie_host_deinit(struct dw_pcie_rp *pp);
846 int dw_pcie_allocate_domains(struct dw_pcie_rp *pp);
847 void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus, unsigned int devfn,
848 				       int where);
849 #else
850 static inline int dw_pcie_suspend_noirq(struct dw_pcie *pci)
851 {
852 	return 0;
853 }
854 
855 static inline int dw_pcie_resume_noirq(struct dw_pcie *pci)
856 {
857 	return 0;
858 }
859 
860 static inline void dw_handle_msi_irq(struct dw_pcie_rp *pp) { }
861 
862 static inline void dw_pcie_msi_init(struct dw_pcie_rp *pp)
863 { }
864 
865 static inline int dw_pcie_msi_host_init(struct dw_pcie_rp *pp)
866 {
867 	return -ENODEV;
868 }
869 
870 static inline void dw_pcie_free_msi(struct dw_pcie_rp *pp)
871 { }
872 
873 static inline int dw_pcie_setup_rc(struct dw_pcie_rp *pp)
874 {
875 	return 0;
876 }
877 
878 static inline int dw_pcie_host_init(struct dw_pcie_rp *pp)
879 {
880 	return 0;
881 }
882 
883 static inline void dw_pcie_host_deinit(struct dw_pcie_rp *pp)
884 {
885 }
886 
887 static inline int dw_pcie_allocate_domains(struct dw_pcie_rp *pp)
888 {
889 	return 0;
890 }
891 static inline void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus,
892 						     unsigned int devfn,
893 						     int where)
894 {
895 	return NULL;
896 }
897 #endif
898 
899 #ifdef CONFIG_PCIE_DW_EP
900 void dw_pcie_ep_linkup(struct dw_pcie_ep *ep);
901 void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep);
902 int dw_pcie_ep_init(struct dw_pcie_ep *ep);
903 int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep);
904 void dw_pcie_ep_deinit(struct dw_pcie_ep *ep);
905 void dw_pcie_ep_cleanup(struct dw_pcie_ep *ep);
906 int dw_pcie_ep_raise_intx_irq(struct dw_pcie_ep *ep, u8 func_no);
907 int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
908 			     u8 interrupt_num);
909 int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
910 			     u16 interrupt_num);
911 int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep, u8 func_no,
912 				       u16 interrupt_num);
913 void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar);
914 struct dw_pcie_ep_func *
915 dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no);
916 #else
917 static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep)
918 {
919 }
920 
921 static inline void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep)
922 {
923 }
924 
925 static inline int dw_pcie_ep_init(struct dw_pcie_ep *ep)
926 {
927 	return 0;
928 }
929 
930 static inline int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep)
931 {
932 	return 0;
933 }
934 
935 static inline void dw_pcie_ep_deinit(struct dw_pcie_ep *ep)
936 {
937 }
938 
939 static inline void dw_pcie_ep_cleanup(struct dw_pcie_ep *ep)
940 {
941 }
942 
943 static inline int dw_pcie_ep_raise_intx_irq(struct dw_pcie_ep *ep, u8 func_no)
944 {
945 	return 0;
946 }
947 
948 static inline int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
949 					   u8 interrupt_num)
950 {
951 	return 0;
952 }
953 
954 static inline int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
955 					   u16 interrupt_num)
956 {
957 	return 0;
958 }
959 
960 static inline int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep,
961 						     u8 func_no,
962 						     u16 interrupt_num)
963 {
964 	return 0;
965 }
966 
967 static inline void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar)
968 {
969 }
970 
971 static inline struct dw_pcie_ep_func *
972 dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no)
973 {
974 	return NULL;
975 }
976 #endif
977 
978 #ifdef CONFIG_PCIE_DW_DEBUGFS
979 void dwc_pcie_debugfs_init(struct dw_pcie *pci, enum dw_pcie_device_mode mode);
980 void dwc_pcie_debugfs_deinit(struct dw_pcie *pci);
981 #else
982 static inline void dwc_pcie_debugfs_init(struct dw_pcie *pci,
983 					 enum dw_pcie_device_mode mode)
984 {
985 }
986 static inline void dwc_pcie_debugfs_deinit(struct dw_pcie *pci)
987 {
988 }
989 #endif
990 
991 #endif /* _PCIE_DESIGNWARE_H */
992