xref: /openbmc/linux/drivers/pci/controller/dwc/pcie-designware.h (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
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/reset.h>
24  
25  #include <linux/pci-epc.h>
26  #include <linux/pci-epf.h>
27  
28  /* DWC PCIe IP-core versions (native support since v4.70a) */
29  #define DW_PCIE_VER_365A		0x3336352a
30  #define DW_PCIE_VER_460A		0x3436302a
31  #define DW_PCIE_VER_470A		0x3437302a
32  #define DW_PCIE_VER_480A		0x3438302a
33  #define DW_PCIE_VER_490A		0x3439302a
34  #define DW_PCIE_VER_520A		0x3532302a
35  #define DW_PCIE_VER_540A		0x3534302a
36  
37  #define __dw_pcie_ver_cmp(_pci, _ver, _op) \
38  	((_pci)->version _op DW_PCIE_VER_ ## _ver)
39  
40  #define dw_pcie_ver_is(_pci, _ver) __dw_pcie_ver_cmp(_pci, _ver, ==)
41  
42  #define dw_pcie_ver_is_ge(_pci, _ver) __dw_pcie_ver_cmp(_pci, _ver, >=)
43  
44  #define dw_pcie_ver_type_is(_pci, _ver, _type) \
45  	(__dw_pcie_ver_cmp(_pci, _ver, ==) && \
46  	 __dw_pcie_ver_cmp(_pci, TYPE_ ## _type, ==))
47  
48  #define dw_pcie_ver_type_is_ge(_pci, _ver, _type) \
49  	(__dw_pcie_ver_cmp(_pci, _ver, ==) && \
50  	 __dw_pcie_ver_cmp(_pci, TYPE_ ## _type, >=))
51  
52  /* DWC PCIe controller capabilities */
53  #define DW_PCIE_CAP_REQ_RES		0
54  #define DW_PCIE_CAP_IATU_UNROLL		1
55  #define DW_PCIE_CAP_CDM_CHECK		2
56  
57  #define dw_pcie_cap_is(_pci, _cap) \
58  	test_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps)
59  
60  #define dw_pcie_cap_set(_pci, _cap) \
61  	set_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps)
62  
63  /* Parameters for the waiting for link up routine */
64  #define LINK_WAIT_MAX_RETRIES		10
65  #define LINK_WAIT_USLEEP_MIN		90000
66  #define LINK_WAIT_USLEEP_MAX		100000
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_AFR			0x70C
74  #define PORT_AFR_N_FTS_MASK		GENMASK(15, 8)
75  #define PORT_AFR_N_FTS(n)		FIELD_PREP(PORT_AFR_N_FTS_MASK, n)
76  #define PORT_AFR_CC_N_FTS_MASK		GENMASK(23, 16)
77  #define PORT_AFR_CC_N_FTS(n)		FIELD_PREP(PORT_AFR_CC_N_FTS_MASK, n)
78  #define PORT_AFR_ENTER_ASPM		BIT(30)
79  #define PORT_AFR_L0S_ENTRANCE_LAT_SHIFT	24
80  #define PORT_AFR_L0S_ENTRANCE_LAT_MASK	GENMASK(26, 24)
81  #define PORT_AFR_L1_ENTRANCE_LAT_SHIFT	27
82  #define PORT_AFR_L1_ENTRANCE_LAT_MASK	GENMASK(29, 27)
83  
84  #define PCIE_PORT_LINK_CONTROL		0x710
85  #define PORT_LINK_DLL_LINK_EN		BIT(5)
86  #define PORT_LINK_FAST_LINK_MODE	BIT(7)
87  #define PORT_LINK_MODE_MASK		GENMASK(21, 16)
88  #define PORT_LINK_MODE(n)		FIELD_PREP(PORT_LINK_MODE_MASK, n)
89  #define PORT_LINK_MODE_1_LANES		PORT_LINK_MODE(0x1)
90  #define PORT_LINK_MODE_2_LANES		PORT_LINK_MODE(0x3)
91  #define PORT_LINK_MODE_4_LANES		PORT_LINK_MODE(0x7)
92  #define PORT_LINK_MODE_8_LANES		PORT_LINK_MODE(0xf)
93  
94  #define PCIE_PORT_DEBUG0		0x728
95  #define PORT_LOGIC_LTSSM_STATE_MASK	0x1f
96  #define PORT_LOGIC_LTSSM_STATE_L0	0x11
97  #define PCIE_PORT_DEBUG1		0x72C
98  #define PCIE_PORT_DEBUG1_LINK_UP		BIT(4)
99  #define PCIE_PORT_DEBUG1_LINK_IN_TRAINING	BIT(29)
100  
101  #define PCIE_LINK_WIDTH_SPEED_CONTROL	0x80C
102  #define PORT_LOGIC_N_FTS_MASK		GENMASK(7, 0)
103  #define PORT_LOGIC_SPEED_CHANGE		BIT(17)
104  #define PORT_LOGIC_LINK_WIDTH_MASK	GENMASK(12, 8)
105  #define PORT_LOGIC_LINK_WIDTH(n)	FIELD_PREP(PORT_LOGIC_LINK_WIDTH_MASK, n)
106  #define PORT_LOGIC_LINK_WIDTH_1_LANES	PORT_LOGIC_LINK_WIDTH(0x1)
107  #define PORT_LOGIC_LINK_WIDTH_2_LANES	PORT_LOGIC_LINK_WIDTH(0x2)
108  #define PORT_LOGIC_LINK_WIDTH_4_LANES	PORT_LOGIC_LINK_WIDTH(0x4)
109  #define PORT_LOGIC_LINK_WIDTH_8_LANES	PORT_LOGIC_LINK_WIDTH(0x8)
110  
111  #define PCIE_MSI_ADDR_LO		0x820
112  #define PCIE_MSI_ADDR_HI		0x824
113  #define PCIE_MSI_INTR0_ENABLE		0x828
114  #define PCIE_MSI_INTR0_MASK		0x82C
115  #define PCIE_MSI_INTR0_STATUS		0x830
116  
117  #define GEN3_RELATED_OFF			0x890
118  #define GEN3_RELATED_OFF_GEN3_ZRXDC_NONCOMPL	BIT(0)
119  #define GEN3_RELATED_OFF_RXEQ_RGRDLESS_RXTS	BIT(13)
120  #define GEN3_RELATED_OFF_GEN3_EQ_DISABLE	BIT(16)
121  #define GEN3_RELATED_OFF_RATE_SHADOW_SEL_SHIFT	24
122  #define GEN3_RELATED_OFF_RATE_SHADOW_SEL_MASK	GENMASK(25, 24)
123  
124  #define PCIE_PORT_MULTI_LANE_CTRL	0x8C0
125  #define PORT_MLTI_UPCFG_SUPPORT		BIT(7)
126  
127  #define PCIE_VERSION_NUMBER		0x8F8
128  #define PCIE_VERSION_TYPE		0x8FC
129  
130  /*
131   * iATU inbound and outbound windows CSRs. Before the IP-core v4.80a each
132   * iATU region CSRs had been indirectly accessible by means of the dedicated
133   * viewport selector. The iATU/eDMA CSRs space was re-designed in DWC PCIe
134   * v4.80a in a way so the viewport was unrolled into the directly accessible
135   * iATU/eDMA CSRs space.
136   */
137  #define PCIE_ATU_VIEWPORT		0x900
138  #define PCIE_ATU_REGION_DIR_IB		BIT(31)
139  #define PCIE_ATU_REGION_DIR_OB		0
140  #define PCIE_ATU_VIEWPORT_BASE		0x904
141  #define PCIE_ATU_UNROLL_BASE(dir, index) \
142  	(((index) << 9) | ((dir == PCIE_ATU_REGION_DIR_IB) ? BIT(8) : 0))
143  #define PCIE_ATU_VIEWPORT_SIZE		0x2C
144  #define PCIE_ATU_REGION_CTRL1		0x000
145  #define PCIE_ATU_INCREASE_REGION_SIZE	BIT(13)
146  #define PCIE_ATU_TYPE_MEM		0x0
147  #define PCIE_ATU_TYPE_IO		0x2
148  #define PCIE_ATU_TYPE_CFG0		0x4
149  #define PCIE_ATU_TYPE_CFG1		0x5
150  #define PCIE_ATU_TD			BIT(8)
151  #define PCIE_ATU_FUNC_NUM(pf)           ((pf) << 20)
152  #define PCIE_ATU_REGION_CTRL2		0x004
153  #define PCIE_ATU_ENABLE			BIT(31)
154  #define PCIE_ATU_BAR_MODE_ENABLE	BIT(30)
155  #define PCIE_ATU_FUNC_NUM_MATCH_EN      BIT(19)
156  #define PCIE_ATU_LOWER_BASE		0x008
157  #define PCIE_ATU_UPPER_BASE		0x00C
158  #define PCIE_ATU_LIMIT			0x010
159  #define PCIE_ATU_LOWER_TARGET		0x014
160  #define PCIE_ATU_BUS(x)			FIELD_PREP(GENMASK(31, 24), x)
161  #define PCIE_ATU_DEV(x)			FIELD_PREP(GENMASK(23, 19), x)
162  #define PCIE_ATU_FUNC(x)		FIELD_PREP(GENMASK(18, 16), x)
163  #define PCIE_ATU_UPPER_TARGET		0x018
164  #define PCIE_ATU_UPPER_LIMIT		0x020
165  
166  #define PCIE_MISC_CONTROL_1_OFF		0x8BC
167  #define PCIE_DBI_RO_WR_EN		BIT(0)
168  
169  #define PCIE_MSIX_DOORBELL		0x948
170  #define PCIE_MSIX_DOORBELL_PF_SHIFT	24
171  
172  /*
173   * eDMA CSRs. DW PCIe IP-core v4.70a and older had the eDMA registers accessible
174   * over the Port Logic registers space. Afterwards the unrolled mapping was
175   * introduced so eDMA and iATU could be accessed via a dedicated registers
176   * space.
177   */
178  #define PCIE_DMA_VIEWPORT_BASE		0x970
179  #define PCIE_DMA_UNROLL_BASE		0x80000
180  #define PCIE_DMA_CTRL			0x008
181  #define PCIE_DMA_NUM_WR_CHAN		GENMASK(3, 0)
182  #define PCIE_DMA_NUM_RD_CHAN		GENMASK(19, 16)
183  
184  #define PCIE_PL_CHK_REG_CONTROL_STATUS			0xB20
185  #define PCIE_PL_CHK_REG_CHK_REG_START			BIT(0)
186  #define PCIE_PL_CHK_REG_CHK_REG_CONTINUOUS		BIT(1)
187  #define PCIE_PL_CHK_REG_CHK_REG_COMPARISON_ERROR	BIT(16)
188  #define PCIE_PL_CHK_REG_CHK_REG_LOGIC_ERROR		BIT(17)
189  #define PCIE_PL_CHK_REG_CHK_REG_COMPLETE		BIT(18)
190  
191  #define PCIE_PL_CHK_REG_ERR_ADDR			0xB28
192  
193  /*
194   * iATU Unroll-specific register definitions
195   * From 4.80 core version the address translation will be made by unroll
196   */
197  #define PCIE_ATU_UNR_REGION_CTRL1	0x00
198  #define PCIE_ATU_UNR_REGION_CTRL2	0x04
199  #define PCIE_ATU_UNR_LOWER_BASE		0x08
200  #define PCIE_ATU_UNR_UPPER_BASE		0x0C
201  #define PCIE_ATU_UNR_LOWER_LIMIT	0x10
202  #define PCIE_ATU_UNR_LOWER_TARGET	0x14
203  #define PCIE_ATU_UNR_UPPER_TARGET	0x18
204  #define PCIE_ATU_UNR_UPPER_LIMIT	0x20
205  
206  /*
207   * RAS-DES register definitions
208   */
209  #define PCIE_RAS_DES_EVENT_COUNTER_CONTROL	0x8
210  #define EVENT_COUNTER_ALL_CLEAR		0x3
211  #define EVENT_COUNTER_ENABLE_ALL	0x7
212  #define EVENT_COUNTER_ENABLE_SHIFT	2
213  #define EVENT_COUNTER_EVENT_SEL_MASK	GENMASK(7, 0)
214  #define EVENT_COUNTER_EVENT_SEL_SHIFT	16
215  #define EVENT_COUNTER_EVENT_Tx_L0S	0x2
216  #define EVENT_COUNTER_EVENT_Rx_L0S	0x3
217  #define EVENT_COUNTER_EVENT_L1		0x5
218  #define EVENT_COUNTER_EVENT_L1_1	0x7
219  #define EVENT_COUNTER_EVENT_L1_2	0x8
220  #define EVENT_COUNTER_GROUP_SEL_SHIFT	24
221  #define EVENT_COUNTER_GROUP_5		0x5
222  
223  #define PCIE_RAS_DES_EVENT_COUNTER_DATA		0xc
224  
225  /*
226   * The default address offset between dbi_base and atu_base. Root controller
227   * drivers are not required to initialize atu_base if the offset matches this
228   * default; the driver core automatically derives atu_base from dbi_base using
229   * this offset, if atu_base not set.
230   */
231  #define DEFAULT_DBI_ATU_OFFSET (0x3 << 20)
232  #define DEFAULT_DBI_DMA_OFFSET PCIE_DMA_UNROLL_BASE
233  
234  #define MAX_MSI_IRQS			256
235  #define MAX_MSI_IRQS_PER_CTRL		32
236  #define MAX_MSI_CTRLS			(MAX_MSI_IRQS / MAX_MSI_IRQS_PER_CTRL)
237  #define MSI_REG_CTRL_BLOCK_SIZE		12
238  #define MSI_DEF_NUM_VECTORS		32
239  
240  /* Maximum number of inbound/outbound iATUs */
241  #define MAX_IATU_IN			256
242  #define MAX_IATU_OUT			256
243  
244  /* Default eDMA LLP memory size */
245  #define DMA_LLP_MEM_SIZE		PAGE_SIZE
246  
247  struct dw_pcie;
248  struct dw_pcie_rp;
249  struct dw_pcie_ep;
250  
251  enum dw_pcie_device_mode {
252  	DW_PCIE_UNKNOWN_TYPE,
253  	DW_PCIE_EP_TYPE,
254  	DW_PCIE_LEG_EP_TYPE,
255  	DW_PCIE_RC_TYPE,
256  };
257  
258  enum dw_pcie_app_clk {
259  	DW_PCIE_DBI_CLK,
260  	DW_PCIE_MSTR_CLK,
261  	DW_PCIE_SLV_CLK,
262  	DW_PCIE_NUM_APP_CLKS
263  };
264  
265  enum dw_pcie_core_clk {
266  	DW_PCIE_PIPE_CLK,
267  	DW_PCIE_CORE_CLK,
268  	DW_PCIE_AUX_CLK,
269  	DW_PCIE_REF_CLK,
270  	DW_PCIE_NUM_CORE_CLKS
271  };
272  
273  enum dw_pcie_app_rst {
274  	DW_PCIE_DBI_RST,
275  	DW_PCIE_MSTR_RST,
276  	DW_PCIE_SLV_RST,
277  	DW_PCIE_NUM_APP_RSTS
278  };
279  
280  enum dw_pcie_core_rst {
281  	DW_PCIE_NON_STICKY_RST,
282  	DW_PCIE_STICKY_RST,
283  	DW_PCIE_CORE_RST,
284  	DW_PCIE_PIPE_RST,
285  	DW_PCIE_PHY_RST,
286  	DW_PCIE_HOT_RST,
287  	DW_PCIE_PWR_RST,
288  	DW_PCIE_NUM_CORE_RSTS
289  };
290  
291  enum dw_pcie_ltssm {
292  	/* Need to align with PCIE_PORT_DEBUG0 bits 0:5 */
293  	DW_PCIE_LTSSM_DETECT_QUIET = 0x0,
294  	DW_PCIE_LTSSM_DETECT_ACT = 0x1,
295  	DW_PCIE_LTSSM_L0 = 0x11,
296  	DW_PCIE_LTSSM_L2_IDLE = 0x15,
297  
298  	DW_PCIE_LTSSM_UNKNOWN = 0xFFFFFFFF,
299  };
300  
301  struct dw_pcie_host_ops {
302  	int (*host_init)(struct dw_pcie_rp *pp);
303  	void (*host_deinit)(struct dw_pcie_rp *pp);
304  	int (*msi_host_init)(struct dw_pcie_rp *pp);
305  	void (*pme_turn_off)(struct dw_pcie_rp *pp);
306  };
307  
308  struct dw_pcie_rp {
309  	bool			has_msi_ctrl:1;
310  	bool			cfg0_io_shared:1;
311  	u64			cfg0_base;
312  	void __iomem		*va_cfg0_base;
313  	u32			cfg0_size;
314  	resource_size_t		io_base;
315  	phys_addr_t		io_bus_addr;
316  	u32			io_size;
317  	int			irq;
318  	const struct dw_pcie_host_ops *ops;
319  	int			msi_irq[MAX_MSI_CTRLS];
320  	struct irq_domain	*irq_domain;
321  	struct irq_domain	*msi_domain;
322  	dma_addr_t		msi_data;
323  	struct irq_chip		*msi_irq_chip;
324  	u32			num_vectors;
325  	u32			irq_mask[MAX_MSI_CTRLS];
326  	struct pci_host_bridge  *bridge;
327  	raw_spinlock_t		lock;
328  	DECLARE_BITMAP(msi_irq_in_use, MAX_MSI_IRQS);
329  };
330  
331  struct dw_pcie_ep_ops {
332  	void	(*ep_init)(struct dw_pcie_ep *ep);
333  	int	(*raise_irq)(struct dw_pcie_ep *ep, u8 func_no,
334  			     enum pci_epc_irq_type type, u16 interrupt_num);
335  	const struct pci_epc_features* (*get_features)(struct dw_pcie_ep *ep);
336  	/*
337  	 * Provide a method to implement the different func config space
338  	 * access for different platform, if different func have different
339  	 * offset, return the offset of func. if use write a register way
340  	 * return a 0, and implement code in callback function of platform
341  	 * driver.
342  	 */
343  	unsigned int (*func_conf_select)(struct dw_pcie_ep *ep, u8 func_no);
344  };
345  
346  struct dw_pcie_ep_func {
347  	struct list_head	list;
348  	u8			func_no;
349  	u8			msi_cap;	/* MSI capability offset */
350  	u8			msix_cap;	/* MSI-X capability offset */
351  };
352  
353  struct dw_pcie_ep {
354  	struct pci_epc		*epc;
355  	struct list_head	func_list;
356  	const struct dw_pcie_ep_ops *ops;
357  	phys_addr_t		phys_base;
358  	size_t			addr_size;
359  	size_t			page_size;
360  	u8			bar_to_atu[PCI_STD_NUM_BARS];
361  	phys_addr_t		*outbound_addr;
362  	unsigned long		*ib_window_map;
363  	unsigned long		*ob_window_map;
364  	void __iomem		*msi_mem;
365  	phys_addr_t		msi_mem_phys;
366  	struct pci_epf_bar	*epf_bar[PCI_STD_NUM_BARS];
367  };
368  
369  struct dw_pcie_ops {
370  	u64	(*cpu_addr_fixup)(struct dw_pcie *pcie, u64 cpu_addr);
371  	u32	(*read_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
372  			    size_t size);
373  	void	(*write_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
374  			     size_t size, u32 val);
375  	void    (*write_dbi2)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
376  			      size_t size, u32 val);
377  	int	(*link_up)(struct dw_pcie *pcie);
378  	enum dw_pcie_ltssm (*get_ltssm)(struct dw_pcie *pcie);
379  	int	(*start_link)(struct dw_pcie *pcie);
380  	void	(*stop_link)(struct dw_pcie *pcie);
381  };
382  
383  struct dw_pcie {
384  	struct device		*dev;
385  	void __iomem		*dbi_base;
386  	void __iomem		*dbi_base2;
387  	void __iomem		*atu_base;
388  	size_t			atu_size;
389  	u32			num_ib_windows;
390  	u32			num_ob_windows;
391  	u32			region_align;
392  	u64			region_limit;
393  	struct dw_pcie_rp	pp;
394  	struct dw_pcie_ep	ep;
395  	const struct dw_pcie_ops *ops;
396  	u32			version;
397  	u32			type;
398  	unsigned long		caps;
399  	int			num_lanes;
400  	int			link_gen;
401  	u8			n_fts[2];
402  	struct dw_edma_chip	edma;
403  	struct clk_bulk_data	app_clks[DW_PCIE_NUM_APP_CLKS];
404  	struct clk_bulk_data	core_clks[DW_PCIE_NUM_CORE_CLKS];
405  	struct reset_control_bulk_data	app_rsts[DW_PCIE_NUM_APP_RSTS];
406  	struct reset_control_bulk_data	core_rsts[DW_PCIE_NUM_CORE_RSTS];
407  	struct gpio_desc		*pe_rst;
408  	bool			suspended;
409  };
410  
411  #define to_dw_pcie_from_pp(port) container_of((port), struct dw_pcie, pp)
412  
413  #define to_dw_pcie_from_ep(endpoint)   \
414  		container_of((endpoint), struct dw_pcie, ep)
415  
416  int dw_pcie_get_resources(struct dw_pcie *pci);
417  
418  void dw_pcie_version_detect(struct dw_pcie *pci);
419  
420  u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap);
421  u16 dw_pcie_find_ext_capability(struct dw_pcie *pci, u8 cap);
422  
423  int dw_pcie_read(void __iomem *addr, int size, u32 *val);
424  int dw_pcie_write(void __iomem *addr, int size, u32 val);
425  
426  u32 dw_pcie_read_dbi(struct dw_pcie *pci, u32 reg, size_t size);
427  void dw_pcie_write_dbi(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
428  void dw_pcie_write_dbi2(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
429  int dw_pcie_link_up(struct dw_pcie *pci);
430  void dw_pcie_upconfig_setup(struct dw_pcie *pci);
431  int dw_pcie_wait_for_link(struct dw_pcie *pci);
432  int dw_pcie_prog_outbound_atu(struct dw_pcie *pci, int index, int type,
433  			      u64 cpu_addr, u64 pci_addr, u64 size);
434  int dw_pcie_prog_ep_outbound_atu(struct dw_pcie *pci, u8 func_no, int index,
435  				 int type, u64 cpu_addr, u64 pci_addr, u64 size);
436  int dw_pcie_prog_inbound_atu(struct dw_pcie *pci, int index, int type,
437  			     u64 cpu_addr, u64 pci_addr, u64 size);
438  int dw_pcie_prog_ep_inbound_atu(struct dw_pcie *pci, u8 func_no, int index,
439  				int type, u64 cpu_addr, u8 bar);
440  void dw_pcie_disable_atu(struct dw_pcie *pci, u32 dir, int index);
441  void dw_pcie_setup(struct dw_pcie *pci);
442  void dw_pcie_iatu_detect(struct dw_pcie *pci);
443  int dw_pcie_edma_detect(struct dw_pcie *pci);
444  void dw_pcie_edma_remove(struct dw_pcie *pci);
445  
446  int dw_pcie_suspend_noirq(struct dw_pcie *pci);
447  int dw_pcie_resume_noirq(struct dw_pcie *pci);
448  
dw_pcie_writel_dbi(struct dw_pcie * pci,u32 reg,u32 val)449  static inline void dw_pcie_writel_dbi(struct dw_pcie *pci, u32 reg, u32 val)
450  {
451  	dw_pcie_write_dbi(pci, reg, 0x4, val);
452  }
453  
dw_pcie_readl_dbi(struct dw_pcie * pci,u32 reg)454  static inline u32 dw_pcie_readl_dbi(struct dw_pcie *pci, u32 reg)
455  {
456  	return dw_pcie_read_dbi(pci, reg, 0x4);
457  }
458  
dw_pcie_writew_dbi(struct dw_pcie * pci,u32 reg,u16 val)459  static inline void dw_pcie_writew_dbi(struct dw_pcie *pci, u32 reg, u16 val)
460  {
461  	dw_pcie_write_dbi(pci, reg, 0x2, val);
462  }
463  
dw_pcie_readw_dbi(struct dw_pcie * pci,u32 reg)464  static inline u16 dw_pcie_readw_dbi(struct dw_pcie *pci, u32 reg)
465  {
466  	return dw_pcie_read_dbi(pci, reg, 0x2);
467  }
468  
dw_pcie_writeb_dbi(struct dw_pcie * pci,u32 reg,u8 val)469  static inline void dw_pcie_writeb_dbi(struct dw_pcie *pci, u32 reg, u8 val)
470  {
471  	dw_pcie_write_dbi(pci, reg, 0x1, val);
472  }
473  
dw_pcie_readb_dbi(struct dw_pcie * pci,u32 reg)474  static inline u8 dw_pcie_readb_dbi(struct dw_pcie *pci, u32 reg)
475  {
476  	return dw_pcie_read_dbi(pci, reg, 0x1);
477  }
478  
dw_pcie_writel_dbi2(struct dw_pcie * pci,u32 reg,u32 val)479  static inline void dw_pcie_writel_dbi2(struct dw_pcie *pci, u32 reg, u32 val)
480  {
481  	dw_pcie_write_dbi2(pci, reg, 0x4, val);
482  }
483  
dw_pcie_dbi_ro_wr_en(struct dw_pcie * pci)484  static inline void dw_pcie_dbi_ro_wr_en(struct dw_pcie *pci)
485  {
486  	u32 reg;
487  	u32 val;
488  
489  	reg = PCIE_MISC_CONTROL_1_OFF;
490  	val = dw_pcie_readl_dbi(pci, reg);
491  	val |= PCIE_DBI_RO_WR_EN;
492  	dw_pcie_writel_dbi(pci, reg, val);
493  }
494  
dw_pcie_dbi_ro_wr_dis(struct dw_pcie * pci)495  static inline void dw_pcie_dbi_ro_wr_dis(struct dw_pcie *pci)
496  {
497  	u32 reg;
498  	u32 val;
499  
500  	reg = PCIE_MISC_CONTROL_1_OFF;
501  	val = dw_pcie_readl_dbi(pci, reg);
502  	val &= ~PCIE_DBI_RO_WR_EN;
503  	dw_pcie_writel_dbi(pci, reg, val);
504  }
505  
dw_pcie_start_link(struct dw_pcie * pci)506  static inline int dw_pcie_start_link(struct dw_pcie *pci)
507  {
508  	if (pci->ops && pci->ops->start_link)
509  		return pci->ops->start_link(pci);
510  
511  	return 0;
512  }
513  
dw_pcie_stop_link(struct dw_pcie * pci)514  static inline void dw_pcie_stop_link(struct dw_pcie *pci)
515  {
516  	if (pci->ops && pci->ops->stop_link)
517  		pci->ops->stop_link(pci);
518  }
519  
dw_pcie_get_ltssm(struct dw_pcie * pci)520  static inline enum dw_pcie_ltssm dw_pcie_get_ltssm(struct dw_pcie *pci)
521  {
522  	u32 val;
523  
524  	if (pci->ops && pci->ops->get_ltssm)
525  		return pci->ops->get_ltssm(pci);
526  
527  	val = dw_pcie_readl_dbi(pci, PCIE_PORT_DEBUG0);
528  
529  	return (enum dw_pcie_ltssm)FIELD_GET(PORT_LOGIC_LTSSM_STATE_MASK, val);
530  }
531  
532  #ifdef CONFIG_PCIE_DW_HOST
533  irqreturn_t dw_handle_msi_irq(struct dw_pcie_rp *pp);
534  int dw_pcie_setup_rc(struct dw_pcie_rp *pp);
535  int dw_pcie_host_init(struct dw_pcie_rp *pp);
536  void dw_pcie_host_deinit(struct dw_pcie_rp *pp);
537  int dw_pcie_allocate_domains(struct dw_pcie_rp *pp);
538  void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus, unsigned int devfn,
539  				       int where);
540  #else
dw_handle_msi_irq(struct dw_pcie_rp * pp)541  static inline irqreturn_t dw_handle_msi_irq(struct dw_pcie_rp *pp)
542  {
543  	return IRQ_NONE;
544  }
545  
dw_pcie_setup_rc(struct dw_pcie_rp * pp)546  static inline int dw_pcie_setup_rc(struct dw_pcie_rp *pp)
547  {
548  	return 0;
549  }
550  
dw_pcie_host_init(struct dw_pcie_rp * pp)551  static inline int dw_pcie_host_init(struct dw_pcie_rp *pp)
552  {
553  	return 0;
554  }
555  
dw_pcie_host_deinit(struct dw_pcie_rp * pp)556  static inline void dw_pcie_host_deinit(struct dw_pcie_rp *pp)
557  {
558  }
559  
dw_pcie_allocate_domains(struct dw_pcie_rp * pp)560  static inline int dw_pcie_allocate_domains(struct dw_pcie_rp *pp)
561  {
562  	return 0;
563  }
dw_pcie_own_conf_map_bus(struct pci_bus * bus,unsigned int devfn,int where)564  static inline void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus,
565  						     unsigned int devfn,
566  						     int where)
567  {
568  	return NULL;
569  }
570  #endif
571  
572  #ifdef CONFIG_PCIE_DW_EP
573  void dw_pcie_ep_linkup(struct dw_pcie_ep *ep);
574  int dw_pcie_ep_init(struct dw_pcie_ep *ep);
575  int dw_pcie_ep_init_complete(struct dw_pcie_ep *ep);
576  void dw_pcie_ep_init_notify(struct dw_pcie_ep *ep);
577  void dw_pcie_ep_exit(struct dw_pcie_ep *ep);
578  int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no);
579  int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
580  			     u8 interrupt_num);
581  int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
582  			     u16 interrupt_num);
583  int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep, u8 func_no,
584  				       u16 interrupt_num);
585  void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar);
586  struct dw_pcie_ep_func *
587  dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no);
588  #else
dw_pcie_ep_linkup(struct dw_pcie_ep * ep)589  static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep)
590  {
591  }
592  
dw_pcie_ep_init(struct dw_pcie_ep * ep)593  static inline int dw_pcie_ep_init(struct dw_pcie_ep *ep)
594  {
595  	return 0;
596  }
597  
dw_pcie_ep_init_complete(struct dw_pcie_ep * ep)598  static inline int dw_pcie_ep_init_complete(struct dw_pcie_ep *ep)
599  {
600  	return 0;
601  }
602  
dw_pcie_ep_init_notify(struct dw_pcie_ep * ep)603  static inline void dw_pcie_ep_init_notify(struct dw_pcie_ep *ep)
604  {
605  }
606  
dw_pcie_ep_exit(struct dw_pcie_ep * ep)607  static inline void dw_pcie_ep_exit(struct dw_pcie_ep *ep)
608  {
609  }
610  
dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep * ep,u8 func_no)611  static inline int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no)
612  {
613  	return 0;
614  }
615  
dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep * ep,u8 func_no,u8 interrupt_num)616  static inline int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
617  					   u8 interrupt_num)
618  {
619  	return 0;
620  }
621  
dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep * ep,u8 func_no,u16 interrupt_num)622  static inline int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
623  					   u16 interrupt_num)
624  {
625  	return 0;
626  }
627  
dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep * ep,u8 func_no,u16 interrupt_num)628  static inline int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep,
629  						     u8 func_no,
630  						     u16 interrupt_num)
631  {
632  	return 0;
633  }
634  
dw_pcie_ep_reset_bar(struct dw_pcie * pci,enum pci_barno bar)635  static inline void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar)
636  {
637  }
638  
639  static inline struct dw_pcie_ep_func *
dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep * ep,u8 func_no)640  dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no)
641  {
642  	return NULL;
643  }
644  #endif
645  #endif /* _PCIE_DESIGNWARE_H */
646