PCI: dwc: Add iATU regions size detection procedure
[linux-block.git] / drivers / pci / controller / dwc / pcie-designware.h
CommitLineData
8cfab3cf 1/* SPDX-License-Identifier: GPL-2.0 */
4b1ced84 2/*
96291d56 3 * Synopsys DesignWare PCIe host controller driver
4b1ced84
JH
4 *
5 * Copyright (C) 2013 Samsung Electronics Co., Ltd.
7ecd4a81 6 * https://www.samsung.com
4b1ced84
JH
7 *
8 * Author: Jingoo Han <jg1.han@samsung.com>
4b1ced84
JH
9 */
10
18edf451
SJ
11#ifndef _PCIE_DESIGNWARE_H
12#define _PCIE_DESIGNWARE_H
13
a991f748 14#include <linux/bitfield.h>
111111a7 15#include <linux/dma-mapping.h>
feb85d9b
KVA
16#include <linux/irq.h>
17#include <linux/msi.h>
18#include <linux/pci.h>
19
f8aed6ec
KVA
20#include <linux/pci-epc.h>
21#include <linux/pci-epf.h>
22
afe1c6d5
SS
23/* DWC PCIe IP-core versions (native support since v4.70a) */
24#define DW_PCIE_VER_365A 0x3336352a
25#define DW_PCIE_VER_460A 0x3436302a
26#define DW_PCIE_VER_470A 0x3437302a
27#define DW_PCIE_VER_480A 0x3438302a
28#define DW_PCIE_VER_490A 0x3439302a
29#define DW_PCIE_VER_520A 0x3532302a
30
0b0a780d
SS
31#define __dw_pcie_ver_cmp(_pci, _ver, _op) \
32 ((_pci)->version _op DW_PCIE_VER_ ## _ver)
33
34#define dw_pcie_ver_is(_pci, _ver) __dw_pcie_ver_cmp(_pci, _ver, ==)
35
36#define dw_pcie_ver_is_ge(_pci, _ver) __dw_pcie_ver_cmp(_pci, _ver, >=)
37
38#define dw_pcie_ver_type_is(_pci, _ver, _type) \
39 (__dw_pcie_ver_cmp(_pci, _ver, ==) && \
40 __dw_pcie_ver_cmp(_pci, TYPE_ ## _type, ==))
41
42#define dw_pcie_ver_type_is_ge(_pci, _ver, _type) \
43 (__dw_pcie_ver_cmp(_pci, _ver, ==) && \
44 __dw_pcie_ver_cmp(_pci, TYPE_ ## _type, >=))
45
b90dc392
KVA
46/* Parameters for the waiting for link up routine */
47#define LINK_WAIT_MAX_RETRIES 10
48#define LINK_WAIT_USLEEP_MIN 90000
49#define LINK_WAIT_USLEEP_MAX 100000
50
51/* Parameters for the waiting for iATU enabled routine */
52#define LINK_WAIT_MAX_IATU_RETRIES 5
9024143e 53#define LINK_WAIT_IATU 9
b90dc392
KVA
54
55/* Synopsys-specific PCIe configuration registers */
ed22aaae
DK
56#define PCIE_PORT_AFR 0x70C
57#define PORT_AFR_N_FTS_MASK GENMASK(15, 8)
84667a41 58#define PORT_AFR_N_FTS(n) FIELD_PREP(PORT_AFR_N_FTS_MASK, n)
ed22aaae 59#define PORT_AFR_CC_N_FTS_MASK GENMASK(23, 16)
aeaa0bfe 60#define PORT_AFR_CC_N_FTS(n) FIELD_PREP(PORT_AFR_CC_N_FTS_MASK, n)
84667a41
RH
61#define PORT_AFR_ENTER_ASPM BIT(30)
62#define PORT_AFR_L0S_ENTRANCE_LAT_SHIFT 24
63#define PORT_AFR_L0S_ENTRANCE_LAT_MASK GENMASK(26, 24)
64#define PORT_AFR_L1_ENTRANCE_LAT_SHIFT 27
65#define PORT_AFR_L1_ENTRANCE_LAT_MASK GENMASK(29, 27)
ed22aaae 66
b90dc392 67#define PCIE_PORT_LINK_CONTROL 0x710
ed22aaae 68#define PORT_LINK_DLL_LINK_EN BIT(5)
cff92444 69#define PORT_LINK_FAST_LINK_MODE BIT(7)
a991f748
AS
70#define PORT_LINK_MODE_MASK GENMASK(21, 16)
71#define PORT_LINK_MODE(n) FIELD_PREP(PORT_LINK_MODE_MASK, n)
72#define PORT_LINK_MODE_1_LANES PORT_LINK_MODE(0x1)
73#define PORT_LINK_MODE_2_LANES PORT_LINK_MODE(0x3)
74#define PORT_LINK_MODE_4_LANES PORT_LINK_MODE(0x7)
75#define PORT_LINK_MODE_8_LANES PORT_LINK_MODE(0xf)
b90dc392 76
23fe5bd4
KVA
77#define PCIE_PORT_DEBUG0 0x728
78#define PORT_LOGIC_LTSSM_STATE_MASK 0x1f
79#define PORT_LOGIC_LTSSM_STATE_L0 0x11
60ef4b07
AS
80#define PCIE_PORT_DEBUG1 0x72C
81#define PCIE_PORT_DEBUG1_LINK_UP BIT(4)
82#define PCIE_PORT_DEBUG1_LINK_IN_TRAINING BIT(29)
23fe5bd4 83
b90dc392 84#define PCIE_LINK_WIDTH_SPEED_CONTROL 0x80C
ed22aaae 85#define PORT_LOGIC_N_FTS_MASK GENMASK(7, 0)
0e11faa4 86#define PORT_LOGIC_SPEED_CHANGE BIT(17)
a991f748
AS
87#define PORT_LOGIC_LINK_WIDTH_MASK GENMASK(12, 8)
88#define PORT_LOGIC_LINK_WIDTH(n) FIELD_PREP(PORT_LOGIC_LINK_WIDTH_MASK, n)
89#define PORT_LOGIC_LINK_WIDTH_1_LANES PORT_LOGIC_LINK_WIDTH(0x1)
90#define PORT_LOGIC_LINK_WIDTH_2_LANES PORT_LOGIC_LINK_WIDTH(0x2)
91#define PORT_LOGIC_LINK_WIDTH_4_LANES PORT_LOGIC_LINK_WIDTH(0x4)
92#define PORT_LOGIC_LINK_WIDTH_8_LANES PORT_LOGIC_LINK_WIDTH(0x8)
b90dc392
KVA
93
94#define PCIE_MSI_ADDR_LO 0x820
95#define PCIE_MSI_ADDR_HI 0x824
96#define PCIE_MSI_INTR0_ENABLE 0x828
97#define PCIE_MSI_INTR0_MASK 0x82C
98#define PCIE_MSI_INTR0_STATUS 0x830
99
ed22aaae
DK
100#define PCIE_PORT_MULTI_LANE_CTRL 0x8C0
101#define PORT_MLTI_UPCFG_SUPPORT BIT(7)
102
13e9d390
SS
103#define PCIE_VERSION_NUMBER 0x8F8
104#define PCIE_VERSION_TYPE 0x8FC
105
5a163f59
SS
106/*
107 * iATU inbound and outbound windows CSRs. Before the IP-core v4.80a each
108 * iATU region CSRs had been indirectly accessible by means of the dedicated
109 * viewport selector. The iATU/eDMA CSRs space was re-designed in DWC PCIe
110 * v4.80a in a way so the viewport was unrolled into the directly accessible
111 * iATU/eDMA CSRs space.
112 */
b90dc392 113#define PCIE_ATU_VIEWPORT 0x900
38fe2723
SS
114#define PCIE_ATU_REGION_DIR_IB BIT(31)
115#define PCIE_ATU_REGION_DIR_OB 0
5a163f59
SS
116#define PCIE_ATU_VIEWPORT_BASE 0x904
117#define PCIE_ATU_UNROLL_BASE(dir, index) \
118 (((index) << 9) | ((dir == PCIE_ATU_REGION_DIR_IB) ? BIT(8) : 0))
119#define PCIE_ATU_VIEWPORT_SIZE 0x2C
120#define PCIE_ATU_REGION_CTRL1 0x000
74081de4 121#define PCIE_ATU_INCREASE_REGION_SIZE BIT(13)
44ddb77b
AS
122#define PCIE_ATU_TYPE_MEM 0x0
123#define PCIE_ATU_TYPE_IO 0x2
124#define PCIE_ATU_TYPE_CFG0 0x4
125#define PCIE_ATU_TYPE_CFG1 0x5
6104033b 126#define PCIE_ATU_TD BIT(8)
24ede430 127#define PCIE_ATU_FUNC_NUM(pf) ((pf) << 20)
5a163f59 128#define PCIE_ATU_REGION_CTRL2 0x004
0e11faa4
AS
129#define PCIE_ATU_ENABLE BIT(31)
130#define PCIE_ATU_BAR_MODE_ENABLE BIT(30)
24ede430 131#define PCIE_ATU_FUNC_NUM_MATCH_EN BIT(19)
5a163f59
SS
132#define PCIE_ATU_LOWER_BASE 0x008
133#define PCIE_ATU_UPPER_BASE 0x00C
134#define PCIE_ATU_LIMIT 0x010
135#define PCIE_ATU_LOWER_TARGET 0x014
a991f748
AS
136#define PCIE_ATU_BUS(x) FIELD_PREP(GENMASK(31, 24), x)
137#define PCIE_ATU_DEV(x) FIELD_PREP(GENMASK(23, 19), x)
138#define PCIE_ATU_FUNC(x) FIELD_PREP(GENMASK(18, 16), x)
5a163f59
SS
139#define PCIE_ATU_UPPER_TARGET 0x018
140#define PCIE_ATU_UPPER_LIMIT 0x020
b90dc392 141
e44abfed 142#define PCIE_MISC_CONTROL_1_OFF 0x8BC
0e11faa4 143#define PCIE_DBI_RO_WR_EN BIT(0)
e44abfed 144
2f7f7001
XB
145#define PCIE_MSIX_DOORBELL 0x948
146#define PCIE_MSIX_DOORBELL_PF_SHIFT 24
147
07f123de
VS
148#define PCIE_PL_CHK_REG_CONTROL_STATUS 0xB20
149#define PCIE_PL_CHK_REG_CHK_REG_START BIT(0)
150#define PCIE_PL_CHK_REG_CHK_REG_CONTINUOUS BIT(1)
151#define PCIE_PL_CHK_REG_CHK_REG_COMPARISON_ERROR BIT(16)
152#define PCIE_PL_CHK_REG_CHK_REG_LOGIC_ERROR BIT(17)
153#define PCIE_PL_CHK_REG_CHK_REG_COMPLETE BIT(18)
154
155#define PCIE_PL_CHK_REG_ERR_ADDR 0xB28
156
6d6b05e3
SW
157/*
158 * The default address offset between dbi_base and atu_base. Root controller
159 * drivers are not required to initialize atu_base if the offset matches this
160 * default; the driver core automatically derives atu_base from dbi_base using
161 * this offset, if atu_base not set.
162 */
163#define DEFAULT_DBI_ATU_OFFSET (0x3 << 20)
164
1f319cb0
GP
165#define MAX_MSI_IRQS 256
166#define MAX_MSI_IRQS_PER_CTRL 32
167#define MAX_MSI_CTRLS (MAX_MSI_IRQS / MAX_MSI_IRQS_PER_CTRL)
76cbf066 168#define MSI_REG_CTRL_BLOCK_SIZE 12
7c5925af 169#define MSI_DEF_NUM_VECTORS 32
f342d940 170
ad4a5bec
NC
171/* Maximum number of inbound/outbound iATUs */
172#define MAX_IATU_IN 256
173#define MAX_IATU_OUT 256
174
442ec4c0 175struct dw_pcie;
60b3c27f 176struct dw_pcie_rp;
f8aed6ec
KVA
177struct dw_pcie_ep;
178
608793e2
KVA
179enum dw_pcie_device_mode {
180 DW_PCIE_UNKNOWN_TYPE,
181 DW_PCIE_EP_TYPE,
182 DW_PCIE_LEG_EP_TYPE,
183 DW_PCIE_RC_TYPE,
184};
185
442ec4c0 186struct dw_pcie_host_ops {
60b3c27f 187 int (*host_init)(struct dw_pcie_rp *pp);
c6481d51 188 void (*host_deinit)(struct dw_pcie_rp *pp);
60b3c27f 189 int (*msi_host_init)(struct dw_pcie_rp *pp);
442ec4c0
KVA
190};
191
60b3c27f 192struct dw_pcie_rp {
f78f0263 193 bool has_msi_ctrl:1;
d6bdbcd8 194 bool cfg0_io_shared:1;
4b1ced84
JH
195 u64 cfg0_base;
196 void __iomem *va_cfg0_base;
adf70fc0 197 u32 cfg0_size;
0021d22b 198 resource_size_t io_base;
adf70fc0
PA
199 phys_addr_t io_bus_addr;
200 u32 io_size;
4b1ced84 201 int irq;
4ab2e7c0 202 const struct dw_pcie_host_ops *ops;
f342d940 203 int msi_irq;
904d0e78 204 struct irq_domain *irq_domain;
7c5925af 205 struct irq_domain *msi_domain;
07940c36 206 u16 msi_msg;
111111a7 207 dma_addr_t msi_data;
9f67437b 208 struct irq_chip *msi_irq_chip;
7c5925af 209 u32 num_vectors;
a348d015 210 u32 irq_mask[MAX_MSI_CTRLS];
444ddca5 211 struct pci_host_bridge *bridge;
7c5925af 212 raw_spinlock_t lock;
f342d940 213 DECLARE_BITMAP(msi_irq_in_use, MAX_MSI_IRQS);
4b1ced84
JH
214};
215
f8aed6ec
KVA
216struct dw_pcie_ep_ops {
217 void (*ep_init)(struct dw_pcie_ep *ep);
16093362 218 int (*raise_irq)(struct dw_pcie_ep *ep, u8 func_no,
d3c70a98 219 enum pci_epc_irq_type type, u16 interrupt_num);
fee35cb7 220 const struct pci_epc_features* (*get_features)(struct dw_pcie_ep *ep);
24ede430
XB
221 /*
222 * Provide a method to implement the different func config space
223 * access for different platform, if different func have different
224 * offset, return the offset of func. if use write a register way
225 * return a 0, and implement code in callback function of platform
226 * driver.
227 */
228 unsigned int (*func_conf_select)(struct dw_pcie_ep *ep, u8 func_no);
f8aed6ec
KVA
229};
230
47a06260
XB
231struct dw_pcie_ep_func {
232 struct list_head list;
233 u8 func_no;
234 u8 msi_cap; /* MSI capability offset */
235 u8 msix_cap; /* MSI-X capability offset */
236};
237
f8aed6ec
KVA
238struct dw_pcie_ep {
239 struct pci_epc *epc;
47a06260 240 struct list_head func_list;
626961dd 241 const struct dw_pcie_ep_ops *ops;
f8aed6ec
KVA
242 phys_addr_t phys_base;
243 size_t addr_size;
a937fe08 244 size_t page_size;
c9c13ba4 245 u8 bar_to_atu[PCI_STD_NUM_BARS];
f8aed6ec 246 phys_addr_t *outbound_addr;
ad4a5bec
NC
247 unsigned long *ib_window_map;
248 unsigned long *ob_window_map;
2fd0c9d9
NC
249 void __iomem *msi_mem;
250 phys_addr_t msi_mem_phys;
6f5e193b 251 struct pci_epf_bar *epf_bar[PCI_STD_NUM_BARS];
f8aed6ec
KVA
252};
253
442ec4c0 254struct dw_pcie_ops {
b6900aeb 255 u64 (*cpu_addr_fixup)(struct dw_pcie *pcie, u64 cpu_addr);
a509d7d9
KVA
256 u32 (*read_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
257 size_t size);
258 void (*write_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
259 size_t size, u32 val);
ddf567e3
KVA
260 void (*write_dbi2)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
261 size_t size, u32 val);
442ec4c0 262 int (*link_up)(struct dw_pcie *pcie);
f8aed6ec
KVA
263 int (*start_link)(struct dw_pcie *pcie);
264 void (*stop_link)(struct dw_pcie *pcie);
4b1ced84
JH
265};
266
442ec4c0
KVA
267struct dw_pcie {
268 struct device *dev;
269 void __iomem *dbi_base;
f8aed6ec 270 void __iomem *dbi_base2;
6d6b05e3 271 void __iomem *atu_base;
281f1f99 272 size_t atu_size;
9ca17af5
RH
273 u32 num_ib_windows;
274 u32 num_ob_windows;
89473aa9
SS
275 u32 region_align;
276 u64 region_limit;
60b3c27f 277 struct dw_pcie_rp pp;
f8aed6ec 278 struct dw_pcie_ep ep;
442ec4c0 279 const struct dw_pcie_ops *ops;
afe1c6d5 280 u32 version;
13e9d390 281 u32 type;
6ffc02d2 282 int num_lanes;
39bc5006 283 int link_gen;
aeaa0bfe 284 u8 n_fts[2];
9f9e59a4 285 bool iatu_unroll_enabled: 1;
442ec4c0
KVA
286};
287
288#define to_dw_pcie_from_pp(port) container_of((port), struct dw_pcie, pp)
289
f8aed6ec
KVA
290#define to_dw_pcie_from_ep(endpoint) \
291 container_of((endpoint), struct dw_pcie, ep)
292
13e9d390
SS
293void dw_pcie_version_detect(struct dw_pcie *pci);
294
7a6854f6 295u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap);
5b0841fa 296u16 dw_pcie_find_ext_capability(struct dw_pcie *pci, u8 cap);
7a6854f6 297
19ce01cc
KVA
298int dw_pcie_read(void __iomem *addr, int size, u32 *val);
299int dw_pcie_write(void __iomem *addr, int size, u32 val);
18edf451 300
7bc082d7
VS
301u32 dw_pcie_read_dbi(struct dw_pcie *pci, u32 reg, size_t size);
302void dw_pcie_write_dbi(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
7bc082d7 303void dw_pcie_write_dbi2(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
442ec4c0 304int dw_pcie_link_up(struct dw_pcie *pci);
ed22aaae 305void dw_pcie_upconfig_setup(struct dw_pcie *pci);
442ec4c0 306int dw_pcie_wait_for_link(struct dw_pcie *pci);
feb85d9b
KVA
307void dw_pcie_prog_outbound_atu(struct dw_pcie *pci, int index,
308 int type, u64 cpu_addr, u64 pci_addr,
74081de4 309 u64 size);
24ede430
XB
310void dw_pcie_prog_ep_outbound_atu(struct dw_pcie *pci, u8 func_no, int index,
311 int type, u64 cpu_addr, u64 pci_addr,
3856e1c5 312 u64 size);
24ede430 313int dw_pcie_prog_inbound_atu(struct dw_pcie *pci, u8 func_no, int index,
4859db9b 314 int type, u64 cpu_addr, u8 bar);
38fe2723 315void dw_pcie_disable_atu(struct dw_pcie *pci, u32 dir, int index);
feb85d9b 316void dw_pcie_setup(struct dw_pcie *pci);
8bcca265 317void dw_pcie_iatu_detect(struct dw_pcie *pci);
a0560209 318
b50b2db2
KVA
319static inline void dw_pcie_writel_dbi(struct dw_pcie *pci, u32 reg, u32 val)
320{
7bc082d7 321 dw_pcie_write_dbi(pci, reg, 0x4, val);
b50b2db2
KVA
322}
323
324static inline u32 dw_pcie_readl_dbi(struct dw_pcie *pci, u32 reg)
325{
7bc082d7 326 return dw_pcie_read_dbi(pci, reg, 0x4);
b50b2db2
KVA
327}
328
f8aed6ec
KVA
329static inline void dw_pcie_writew_dbi(struct dw_pcie *pci, u32 reg, u16 val)
330{
7bc082d7 331 dw_pcie_write_dbi(pci, reg, 0x2, val);
f8aed6ec
KVA
332}
333
334static inline u16 dw_pcie_readw_dbi(struct dw_pcie *pci, u32 reg)
335{
7bc082d7 336 return dw_pcie_read_dbi(pci, reg, 0x2);
f8aed6ec
KVA
337}
338
339static inline void dw_pcie_writeb_dbi(struct dw_pcie *pci, u32 reg, u8 val)
340{
7bc082d7 341 dw_pcie_write_dbi(pci, reg, 0x1, val);
f8aed6ec
KVA
342}
343
344static inline u8 dw_pcie_readb_dbi(struct dw_pcie *pci, u32 reg)
345{
7bc082d7 346 return dw_pcie_read_dbi(pci, reg, 0x1);
f8aed6ec
KVA
347}
348
349static inline void dw_pcie_writel_dbi2(struct dw_pcie *pci, u32 reg, u32 val)
350{
7bc082d7 351 dw_pcie_write_dbi2(pci, reg, 0x4, val);
f8aed6ec
KVA
352}
353
e44abfed
HZ
354static inline void dw_pcie_dbi_ro_wr_en(struct dw_pcie *pci)
355{
356 u32 reg;
357 u32 val;
358
359 reg = PCIE_MISC_CONTROL_1_OFF;
360 val = dw_pcie_readl_dbi(pci, reg);
361 val |= PCIE_DBI_RO_WR_EN;
362 dw_pcie_writel_dbi(pci, reg, val);
363}
364
365static inline void dw_pcie_dbi_ro_wr_dis(struct dw_pcie *pci)
366{
367 u32 reg;
368 u32 val;
369
370 reg = PCIE_MISC_CONTROL_1_OFF;
371 val = dw_pcie_readl_dbi(pci, reg);
372 val &= ~PCIE_DBI_RO_WR_EN;
373 dw_pcie_writel_dbi(pci, reg, val);
374}
375
a37beefb
SS
376static inline int dw_pcie_start_link(struct dw_pcie *pci)
377{
378 if (pci->ops && pci->ops->start_link)
379 return pci->ops->start_link(pci);
380
381 return 0;
382}
383
384static inline void dw_pcie_stop_link(struct dw_pcie *pci)
385{
386 if (pci->ops && pci->ops->stop_link)
387 pci->ops->stop_link(pci);
388}
389
a0560209 390#ifdef CONFIG_PCIE_DW_HOST
60b3c27f
SS
391irqreturn_t dw_handle_msi_irq(struct dw_pcie_rp *pp);
392void dw_pcie_setup_rc(struct dw_pcie_rp *pp);
393int dw_pcie_host_init(struct dw_pcie_rp *pp);
394void dw_pcie_host_deinit(struct dw_pcie_rp *pp);
395int dw_pcie_allocate_domains(struct dw_pcie_rp *pp);
27e7ed01
RH
396void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus, unsigned int devfn,
397 int where);
a0560209 398#else
60b3c27f 399static inline irqreturn_t dw_handle_msi_irq(struct dw_pcie_rp *pp)
a0560209
KVA
400{
401 return IRQ_NONE;
402}
403
60b3c27f 404static inline void dw_pcie_setup_rc(struct dw_pcie_rp *pp)
a0560209
KVA
405{
406}
407
60b3c27f 408static inline int dw_pcie_host_init(struct dw_pcie_rp *pp)
a0560209
KVA
409{
410 return 0;
411}
7c5925af 412
60b3c27f 413static inline void dw_pcie_host_deinit(struct dw_pcie_rp *pp)
9d071cad
VS
414{
415}
416
60b3c27f 417static inline int dw_pcie_allocate_domains(struct dw_pcie_rp *pp)
7c5925af
GP
418{
419 return 0;
420}
27e7ed01
RH
421static inline void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus,
422 unsigned int devfn,
423 int where)
424{
425 return NULL;
426}
a0560209 427#endif
f8aed6ec
KVA
428
429#ifdef CONFIG_PCIE_DW_EP
430void dw_pcie_ep_linkup(struct dw_pcie_ep *ep);
431int dw_pcie_ep_init(struct dw_pcie_ep *ep);
e966f739 432int dw_pcie_ep_init_complete(struct dw_pcie_ep *ep);
ac37dde7 433void dw_pcie_ep_init_notify(struct dw_pcie_ep *ep);
f8aed6ec 434void dw_pcie_ep_exit(struct dw_pcie_ep *ep);
cb22d40b 435int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no);
16093362
BH
436int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
437 u8 interrupt_num);
beb4641a
GP
438int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
439 u16 interrupt_num);
2f7f7001
XB
440int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep, u8 func_no,
441 u16 interrupt_num);
9e718119 442void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar);
47a06260
XB
443struct dw_pcie_ep_func *
444dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no);
f8aed6ec
KVA
445#else
446static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep)
447{
448}
449
450static inline int dw_pcie_ep_init(struct dw_pcie_ep *ep)
451{
452 return 0;
453}
454
e966f739
VS
455static inline int dw_pcie_ep_init_complete(struct dw_pcie_ep *ep)
456{
457 return 0;
458}
459
ac37dde7
VS
460static inline void dw_pcie_ep_init_notify(struct dw_pcie_ep *ep)
461{
462}
463
f8aed6ec
KVA
464static inline void dw_pcie_ep_exit(struct dw_pcie_ep *ep)
465{
466}
9e718119 467
cb22d40b
GP
468static inline int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no)
469{
470 return 0;
471}
472
16093362 473static inline int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
6f6d7873
NC
474 u8 interrupt_num)
475{
476 return 0;
477}
478
beb4641a
GP
479static inline int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
480 u16 interrupt_num)
481{
482 return 0;
483}
484
2f7f7001
XB
485static inline int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep,
486 u8 func_no,
487 u16 interrupt_num)
488{
489 return 0;
490}
491
9e718119
NC
492static inline void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar)
493{
494}
47a06260
XB
495
496static inline struct dw_pcie_ep_func *
497dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no)
498{
499 return NULL;
500}
f8aed6ec 501#endif
18edf451 502#endif /* _PCIE_DESIGNWARE_H */