Commit | Line | Data |
---|---|---|
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. | |
6 | * http://www.samsung.com | |
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 | ||
b90dc392 KVA |
23 | /* Parameters for the waiting for link up routine */ |
24 | #define LINK_WAIT_MAX_RETRIES 10 | |
25 | #define LINK_WAIT_USLEEP_MIN 90000 | |
26 | #define LINK_WAIT_USLEEP_MAX 100000 | |
27 | ||
28 | /* Parameters for the waiting for iATU enabled routine */ | |
29 | #define LINK_WAIT_MAX_IATU_RETRIES 5 | |
9024143e | 30 | #define LINK_WAIT_IATU 9 |
b90dc392 KVA |
31 | |
32 | /* Synopsys-specific PCIe configuration registers */ | |
ed22aaae DK |
33 | #define PCIE_PORT_AFR 0x70C |
34 | #define PORT_AFR_N_FTS_MASK GENMASK(15, 8) | |
35 | #define PORT_AFR_CC_N_FTS_MASK GENMASK(23, 16) | |
36 | ||
b90dc392 | 37 | #define PCIE_PORT_LINK_CONTROL 0x710 |
ed22aaae | 38 | #define PORT_LINK_DLL_LINK_EN BIT(5) |
a991f748 AS |
39 | #define PORT_LINK_MODE_MASK GENMASK(21, 16) |
40 | #define PORT_LINK_MODE(n) FIELD_PREP(PORT_LINK_MODE_MASK, n) | |
41 | #define PORT_LINK_MODE_1_LANES PORT_LINK_MODE(0x1) | |
42 | #define PORT_LINK_MODE_2_LANES PORT_LINK_MODE(0x3) | |
43 | #define PORT_LINK_MODE_4_LANES PORT_LINK_MODE(0x7) | |
44 | #define PORT_LINK_MODE_8_LANES PORT_LINK_MODE(0xf) | |
b90dc392 | 45 | |
23fe5bd4 KVA |
46 | #define PCIE_PORT_DEBUG0 0x728 |
47 | #define PORT_LOGIC_LTSSM_STATE_MASK 0x1f | |
48 | #define PORT_LOGIC_LTSSM_STATE_L0 0x11 | |
60ef4b07 AS |
49 | #define PCIE_PORT_DEBUG1 0x72C |
50 | #define PCIE_PORT_DEBUG1_LINK_UP BIT(4) | |
51 | #define PCIE_PORT_DEBUG1_LINK_IN_TRAINING BIT(29) | |
23fe5bd4 | 52 | |
b90dc392 | 53 | #define PCIE_LINK_WIDTH_SPEED_CONTROL 0x80C |
ed22aaae | 54 | #define PORT_LOGIC_N_FTS_MASK GENMASK(7, 0) |
0e11faa4 | 55 | #define PORT_LOGIC_SPEED_CHANGE BIT(17) |
a991f748 AS |
56 | #define PORT_LOGIC_LINK_WIDTH_MASK GENMASK(12, 8) |
57 | #define PORT_LOGIC_LINK_WIDTH(n) FIELD_PREP(PORT_LOGIC_LINK_WIDTH_MASK, n) | |
58 | #define PORT_LOGIC_LINK_WIDTH_1_LANES PORT_LOGIC_LINK_WIDTH(0x1) | |
59 | #define PORT_LOGIC_LINK_WIDTH_2_LANES PORT_LOGIC_LINK_WIDTH(0x2) | |
60 | #define PORT_LOGIC_LINK_WIDTH_4_LANES PORT_LOGIC_LINK_WIDTH(0x4) | |
61 | #define PORT_LOGIC_LINK_WIDTH_8_LANES PORT_LOGIC_LINK_WIDTH(0x8) | |
b90dc392 KVA |
62 | |
63 | #define PCIE_MSI_ADDR_LO 0x820 | |
64 | #define PCIE_MSI_ADDR_HI 0x824 | |
65 | #define PCIE_MSI_INTR0_ENABLE 0x828 | |
66 | #define PCIE_MSI_INTR0_MASK 0x82C | |
67 | #define PCIE_MSI_INTR0_STATUS 0x830 | |
68 | ||
ed22aaae DK |
69 | #define PCIE_PORT_MULTI_LANE_CTRL 0x8C0 |
70 | #define PORT_MLTI_UPCFG_SUPPORT BIT(7) | |
71 | ||
b90dc392 | 72 | #define PCIE_ATU_VIEWPORT 0x900 |
0e11faa4 AS |
73 | #define PCIE_ATU_REGION_INBOUND BIT(31) |
74 | #define PCIE_ATU_REGION_OUTBOUND 0 | |
44ddb77b AS |
75 | #define PCIE_ATU_REGION_INDEX2 0x2 |
76 | #define PCIE_ATU_REGION_INDEX1 0x1 | |
77 | #define PCIE_ATU_REGION_INDEX0 0x0 | |
b90dc392 | 78 | #define PCIE_ATU_CR1 0x904 |
44ddb77b AS |
79 | #define PCIE_ATU_TYPE_MEM 0x0 |
80 | #define PCIE_ATU_TYPE_IO 0x2 | |
81 | #define PCIE_ATU_TYPE_CFG0 0x4 | |
82 | #define PCIE_ATU_TYPE_CFG1 0x5 | |
b90dc392 | 83 | #define PCIE_ATU_CR2 0x908 |
0e11faa4 AS |
84 | #define PCIE_ATU_ENABLE BIT(31) |
85 | #define PCIE_ATU_BAR_MODE_ENABLE BIT(30) | |
b90dc392 KVA |
86 | #define PCIE_ATU_LOWER_BASE 0x90C |
87 | #define PCIE_ATU_UPPER_BASE 0x910 | |
88 | #define PCIE_ATU_LIMIT 0x914 | |
89 | #define PCIE_ATU_LOWER_TARGET 0x918 | |
a991f748 AS |
90 | #define PCIE_ATU_BUS(x) FIELD_PREP(GENMASK(31, 24), x) |
91 | #define PCIE_ATU_DEV(x) FIELD_PREP(GENMASK(23, 19), x) | |
92 | #define PCIE_ATU_FUNC(x) FIELD_PREP(GENMASK(18, 16), x) | |
b90dc392 KVA |
93 | #define PCIE_ATU_UPPER_TARGET 0x91C |
94 | ||
e44abfed | 95 | #define PCIE_MISC_CONTROL_1_OFF 0x8BC |
0e11faa4 | 96 | #define PCIE_DBI_RO_WR_EN BIT(0) |
e44abfed | 97 | |
07f123de VS |
98 | #define PCIE_PL_CHK_REG_CONTROL_STATUS 0xB20 |
99 | #define PCIE_PL_CHK_REG_CHK_REG_START BIT(0) | |
100 | #define PCIE_PL_CHK_REG_CHK_REG_CONTINUOUS BIT(1) | |
101 | #define PCIE_PL_CHK_REG_CHK_REG_COMPARISON_ERROR BIT(16) | |
102 | #define PCIE_PL_CHK_REG_CHK_REG_LOGIC_ERROR BIT(17) | |
103 | #define PCIE_PL_CHK_REG_CHK_REG_COMPLETE BIT(18) | |
104 | ||
105 | #define PCIE_PL_CHK_REG_ERR_ADDR 0xB28 | |
106 | ||
b90dc392 KVA |
107 | /* |
108 | * iATU Unroll-specific register definitions | |
109 | * From 4.80 core version the address translation will be made by unroll | |
110 | */ | |
111 | #define PCIE_ATU_UNR_REGION_CTRL1 0x00 | |
112 | #define PCIE_ATU_UNR_REGION_CTRL2 0x04 | |
113 | #define PCIE_ATU_UNR_LOWER_BASE 0x08 | |
114 | #define PCIE_ATU_UNR_UPPER_BASE 0x0C | |
115 | #define PCIE_ATU_UNR_LIMIT 0x10 | |
116 | #define PCIE_ATU_UNR_LOWER_TARGET 0x14 | |
117 | #define PCIE_ATU_UNR_UPPER_TARGET 0x18 | |
118 | ||
6d6b05e3 SW |
119 | /* |
120 | * The default address offset between dbi_base and atu_base. Root controller | |
121 | * drivers are not required to initialize atu_base if the offset matches this | |
122 | * default; the driver core automatically derives atu_base from dbi_base using | |
123 | * this offset, if atu_base not set. | |
124 | */ | |
125 | #define DEFAULT_DBI_ATU_OFFSET (0x3 << 20) | |
126 | ||
b90dc392 | 127 | /* Register address builder */ |
6d6b05e3 SW |
128 | #define PCIE_GET_ATU_OUTB_UNR_REG_OFFSET(region) \ |
129 | ((region) << 9) | |
b90dc392 | 130 | |
6d6b05e3 | 131 | #define PCIE_GET_ATU_INB_UNR_REG_OFFSET(region) \ |
0e11faa4 | 132 | (((region) << 9) | BIT(8)) |
f8aed6ec | 133 | |
1f319cb0 GP |
134 | #define MAX_MSI_IRQS 256 |
135 | #define MAX_MSI_IRQS_PER_CTRL 32 | |
136 | #define MAX_MSI_CTRLS (MAX_MSI_IRQS / MAX_MSI_IRQS_PER_CTRL) | |
76cbf066 | 137 | #define MSI_REG_CTRL_BLOCK_SIZE 12 |
7c5925af | 138 | #define MSI_DEF_NUM_VECTORS 32 |
f342d940 | 139 | |
ad4a5bec NC |
140 | /* Maximum number of inbound/outbound iATUs */ |
141 | #define MAX_IATU_IN 256 | |
142 | #define MAX_IATU_OUT 256 | |
143 | ||
442ec4c0 KVA |
144 | struct pcie_port; |
145 | struct dw_pcie; | |
f8aed6ec KVA |
146 | struct dw_pcie_ep; |
147 | ||
148 | enum dw_pcie_region_type { | |
149 | DW_PCIE_REGION_UNKNOWN, | |
150 | DW_PCIE_REGION_INBOUND, | |
151 | DW_PCIE_REGION_OUTBOUND, | |
152 | }; | |
442ec4c0 | 153 | |
608793e2 KVA |
154 | enum dw_pcie_device_mode { |
155 | DW_PCIE_UNKNOWN_TYPE, | |
156 | DW_PCIE_EP_TYPE, | |
157 | DW_PCIE_LEG_EP_TYPE, | |
158 | DW_PCIE_RC_TYPE, | |
159 | }; | |
160 | ||
442ec4c0 KVA |
161 | struct dw_pcie_host_ops { |
162 | int (*rd_own_conf)(struct pcie_port *pp, int where, int size, u32 *val); | |
163 | int (*wr_own_conf)(struct pcie_port *pp, int where, int size, u32 val); | |
164 | int (*rd_other_conf)(struct pcie_port *pp, struct pci_bus *bus, | |
165 | unsigned int devfn, int where, int size, u32 *val); | |
166 | int (*wr_other_conf)(struct pcie_port *pp, struct pci_bus *bus, | |
167 | unsigned int devfn, int where, int size, u32 val); | |
4a301766 | 168 | int (*host_init)(struct pcie_port *pp); |
442ec4c0 | 169 | void (*scan_bus)(struct pcie_port *pp); |
7c5925af | 170 | void (*set_num_vectors)(struct pcie_port *pp); |
3f43ccc4 | 171 | int (*msi_host_init)(struct pcie_port *pp); |
442ec4c0 KVA |
172 | }; |
173 | ||
4b1ced84 | 174 | struct pcie_port { |
4b1ced84 | 175 | u8 root_bus_nr; |
4b1ced84 JH |
176 | u64 cfg0_base; |
177 | void __iomem *va_cfg0_base; | |
adf70fc0 | 178 | u32 cfg0_size; |
4b1ced84 JH |
179 | u64 cfg1_base; |
180 | void __iomem *va_cfg1_base; | |
adf70fc0 | 181 | u32 cfg1_size; |
0021d22b | 182 | resource_size_t io_base; |
adf70fc0 PA |
183 | phys_addr_t io_bus_addr; |
184 | u32 io_size; | |
4b1ced84 | 185 | u64 mem_base; |
adf70fc0 PA |
186 | phys_addr_t mem_bus_addr; |
187 | u32 mem_size; | |
0021d22b ZW |
188 | struct resource *cfg; |
189 | struct resource *io; | |
190 | struct resource *mem; | |
191 | struct resource *busn; | |
4b1ced84 | 192 | int irq; |
4ab2e7c0 | 193 | const struct dw_pcie_host_ops *ops; |
f342d940 | 194 | int msi_irq; |
904d0e78 | 195 | struct irq_domain *irq_domain; |
7c5925af | 196 | struct irq_domain *msi_domain; |
111111a7 | 197 | dma_addr_t msi_data; |
dc69a3d5 | 198 | struct page *msi_page; |
9f67437b | 199 | struct irq_chip *msi_irq_chip; |
7c5925af | 200 | u32 num_vectors; |
a348d015 | 201 | u32 irq_mask[MAX_MSI_CTRLS]; |
fe23274f | 202 | struct pci_bus *root_bus; |
7c5925af | 203 | raw_spinlock_t lock; |
f342d940 | 204 | DECLARE_BITMAP(msi_irq_in_use, MAX_MSI_IRQS); |
4b1ced84 JH |
205 | }; |
206 | ||
f8aed6ec KVA |
207 | enum dw_pcie_as_type { |
208 | DW_PCIE_AS_UNKNOWN, | |
209 | DW_PCIE_AS_MEM, | |
210 | DW_PCIE_AS_IO, | |
211 | }; | |
212 | ||
213 | struct dw_pcie_ep_ops { | |
214 | void (*ep_init)(struct dw_pcie_ep *ep); | |
16093362 | 215 | int (*raise_irq)(struct dw_pcie_ep *ep, u8 func_no, |
d3c70a98 | 216 | enum pci_epc_irq_type type, u16 interrupt_num); |
fee35cb7 | 217 | const struct pci_epc_features* (*get_features)(struct dw_pcie_ep *ep); |
f8aed6ec KVA |
218 | }; |
219 | ||
220 | struct dw_pcie_ep { | |
221 | struct pci_epc *epc; | |
626961dd | 222 | const struct dw_pcie_ep_ops *ops; |
f8aed6ec KVA |
223 | phys_addr_t phys_base; |
224 | size_t addr_size; | |
a937fe08 | 225 | size_t page_size; |
c9c13ba4 | 226 | u8 bar_to_atu[PCI_STD_NUM_BARS]; |
f8aed6ec | 227 | phys_addr_t *outbound_addr; |
ad4a5bec NC |
228 | unsigned long *ib_window_map; |
229 | unsigned long *ob_window_map; | |
f8aed6ec KVA |
230 | u32 num_ib_windows; |
231 | u32 num_ob_windows; | |
2fd0c9d9 NC |
232 | void __iomem *msi_mem; |
233 | phys_addr_t msi_mem_phys; | |
beb4641a GP |
234 | u8 msi_cap; /* MSI capability offset */ |
235 | u8 msix_cap; /* MSI-X capability offset */ | |
f8aed6ec KVA |
236 | }; |
237 | ||
442ec4c0 | 238 | struct dw_pcie_ops { |
b6900aeb | 239 | u64 (*cpu_addr_fixup)(struct dw_pcie *pcie, u64 cpu_addr); |
a509d7d9 KVA |
240 | u32 (*read_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg, |
241 | size_t size); | |
242 | void (*write_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg, | |
243 | size_t size, u32 val); | |
ddf567e3 KVA |
244 | u32 (*read_dbi2)(struct dw_pcie *pcie, void __iomem *base, u32 reg, |
245 | size_t size); | |
246 | void (*write_dbi2)(struct dw_pcie *pcie, void __iomem *base, u32 reg, | |
247 | size_t size, u32 val); | |
442ec4c0 | 248 | int (*link_up)(struct dw_pcie *pcie); |
f8aed6ec KVA |
249 | int (*start_link)(struct dw_pcie *pcie); |
250 | void (*stop_link)(struct dw_pcie *pcie); | |
4b1ced84 JH |
251 | }; |
252 | ||
442ec4c0 KVA |
253 | struct dw_pcie { |
254 | struct device *dev; | |
255 | void __iomem *dbi_base; | |
f8aed6ec | 256 | void __iomem *dbi_base2; |
6d6b05e3 SW |
257 | /* Used when iatu_unroll_enabled is true */ |
258 | void __iomem *atu_base; | |
442ec4c0 KVA |
259 | u32 num_viewport; |
260 | u8 iatu_unroll_enabled; | |
261 | struct pcie_port pp; | |
f8aed6ec | 262 | struct dw_pcie_ep ep; |
442ec4c0 | 263 | const struct dw_pcie_ops *ops; |
2aadcb0c | 264 | unsigned int version; |
442ec4c0 KVA |
265 | }; |
266 | ||
267 | #define to_dw_pcie_from_pp(port) container_of((port), struct dw_pcie, pp) | |
268 | ||
f8aed6ec KVA |
269 | #define to_dw_pcie_from_ep(endpoint) \ |
270 | container_of((endpoint), struct dw_pcie, ep) | |
271 | ||
7a6854f6 | 272 | u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap); |
5b0841fa | 273 | u16 dw_pcie_find_ext_capability(struct dw_pcie *pci, u8 cap); |
7a6854f6 | 274 | |
19ce01cc KVA |
275 | int dw_pcie_read(void __iomem *addr, int size, u32 *val); |
276 | int dw_pcie_write(void __iomem *addr, int size, u32 val); | |
18edf451 | 277 | |
7bc082d7 VS |
278 | u32 dw_pcie_read_dbi(struct dw_pcie *pci, u32 reg, size_t size); |
279 | void dw_pcie_write_dbi(struct dw_pcie *pci, u32 reg, size_t size, u32 val); | |
280 | u32 dw_pcie_read_dbi2(struct dw_pcie *pci, u32 reg, size_t size); | |
281 | void dw_pcie_write_dbi2(struct dw_pcie *pci, u32 reg, size_t size, u32 val); | |
282 | u32 dw_pcie_read_atu(struct dw_pcie *pci, u32 reg, size_t size); | |
283 | void dw_pcie_write_atu(struct dw_pcie *pci, u32 reg, size_t size, u32 val); | |
442ec4c0 | 284 | int dw_pcie_link_up(struct dw_pcie *pci); |
ed22aaae DK |
285 | void dw_pcie_upconfig_setup(struct dw_pcie *pci); |
286 | void dw_pcie_link_set_max_speed(struct dw_pcie *pci, u32 link_gen); | |
287 | void dw_pcie_link_set_n_fts(struct dw_pcie *pci, u32 n_fts); | |
442ec4c0 | 288 | int dw_pcie_wait_for_link(struct dw_pcie *pci); |
feb85d9b KVA |
289 | void dw_pcie_prog_outbound_atu(struct dw_pcie *pci, int index, |
290 | int type, u64 cpu_addr, u64 pci_addr, | |
291 | u32 size); | |
f8aed6ec KVA |
292 | int dw_pcie_prog_inbound_atu(struct dw_pcie *pci, int index, int bar, |
293 | u64 cpu_addr, enum dw_pcie_as_type as_type); | |
294 | void dw_pcie_disable_atu(struct dw_pcie *pci, int index, | |
295 | enum dw_pcie_region_type type); | |
feb85d9b | 296 | void dw_pcie_setup(struct dw_pcie *pci); |
a0560209 | 297 | |
b50b2db2 KVA |
298 | static inline void dw_pcie_writel_dbi(struct dw_pcie *pci, u32 reg, u32 val) |
299 | { | |
7bc082d7 | 300 | dw_pcie_write_dbi(pci, reg, 0x4, val); |
b50b2db2 KVA |
301 | } |
302 | ||
303 | static inline u32 dw_pcie_readl_dbi(struct dw_pcie *pci, u32 reg) | |
304 | { | |
7bc082d7 | 305 | return dw_pcie_read_dbi(pci, reg, 0x4); |
b50b2db2 KVA |
306 | } |
307 | ||
f8aed6ec KVA |
308 | static inline void dw_pcie_writew_dbi(struct dw_pcie *pci, u32 reg, u16 val) |
309 | { | |
7bc082d7 | 310 | dw_pcie_write_dbi(pci, reg, 0x2, val); |
f8aed6ec KVA |
311 | } |
312 | ||
313 | static inline u16 dw_pcie_readw_dbi(struct dw_pcie *pci, u32 reg) | |
314 | { | |
7bc082d7 | 315 | return dw_pcie_read_dbi(pci, reg, 0x2); |
f8aed6ec KVA |
316 | } |
317 | ||
318 | static inline void dw_pcie_writeb_dbi(struct dw_pcie *pci, u32 reg, u8 val) | |
319 | { | |
7bc082d7 | 320 | dw_pcie_write_dbi(pci, reg, 0x1, val); |
f8aed6ec KVA |
321 | } |
322 | ||
323 | static inline u8 dw_pcie_readb_dbi(struct dw_pcie *pci, u32 reg) | |
324 | { | |
7bc082d7 | 325 | return dw_pcie_read_dbi(pci, reg, 0x1); |
f8aed6ec KVA |
326 | } |
327 | ||
328 | static inline void dw_pcie_writel_dbi2(struct dw_pcie *pci, u32 reg, u32 val) | |
329 | { | |
7bc082d7 | 330 | dw_pcie_write_dbi2(pci, reg, 0x4, val); |
f8aed6ec KVA |
331 | } |
332 | ||
333 | static inline u32 dw_pcie_readl_dbi2(struct dw_pcie *pci, u32 reg) | |
334 | { | |
7bc082d7 | 335 | return dw_pcie_read_dbi2(pci, reg, 0x4); |
f8aed6ec KVA |
336 | } |
337 | ||
6d6b05e3 SW |
338 | static inline void dw_pcie_writel_atu(struct dw_pcie *pci, u32 reg, u32 val) |
339 | { | |
7bc082d7 | 340 | dw_pcie_write_atu(pci, reg, 0x4, val); |
6d6b05e3 SW |
341 | } |
342 | ||
343 | static inline u32 dw_pcie_readl_atu(struct dw_pcie *pci, u32 reg) | |
344 | { | |
7bc082d7 | 345 | return dw_pcie_read_atu(pci, reg, 0x4); |
6d6b05e3 SW |
346 | } |
347 | ||
e44abfed HZ |
348 | static inline void dw_pcie_dbi_ro_wr_en(struct dw_pcie *pci) |
349 | { | |
350 | u32 reg; | |
351 | u32 val; | |
352 | ||
353 | reg = PCIE_MISC_CONTROL_1_OFF; | |
354 | val = dw_pcie_readl_dbi(pci, reg); | |
355 | val |= PCIE_DBI_RO_WR_EN; | |
356 | dw_pcie_writel_dbi(pci, reg, val); | |
357 | } | |
358 | ||
359 | static inline void dw_pcie_dbi_ro_wr_dis(struct dw_pcie *pci) | |
360 | { | |
361 | u32 reg; | |
362 | u32 val; | |
363 | ||
364 | reg = PCIE_MISC_CONTROL_1_OFF; | |
365 | val = dw_pcie_readl_dbi(pci, reg); | |
366 | val &= ~PCIE_DBI_RO_WR_EN; | |
367 | dw_pcie_writel_dbi(pci, reg, val); | |
368 | } | |
369 | ||
a0560209 KVA |
370 | #ifdef CONFIG_PCIE_DW_HOST |
371 | irqreturn_t dw_handle_msi_irq(struct pcie_port *pp); | |
372 | void dw_pcie_msi_init(struct pcie_port *pp); | |
7c5925af | 373 | void dw_pcie_free_msi(struct pcie_port *pp); |
a0560209 KVA |
374 | void dw_pcie_setup_rc(struct pcie_port *pp); |
375 | int dw_pcie_host_init(struct pcie_port *pp); | |
9d071cad | 376 | void dw_pcie_host_deinit(struct pcie_port *pp); |
7c5925af | 377 | int dw_pcie_allocate_domains(struct pcie_port *pp); |
a0560209 KVA |
378 | #else |
379 | static inline irqreturn_t dw_handle_msi_irq(struct pcie_port *pp) | |
380 | { | |
381 | return IRQ_NONE; | |
382 | } | |
383 | ||
384 | static inline void dw_pcie_msi_init(struct pcie_port *pp) | |
385 | { | |
386 | } | |
387 | ||
7c5925af GP |
388 | static inline void dw_pcie_free_msi(struct pcie_port *pp) |
389 | { | |
390 | } | |
391 | ||
a0560209 KVA |
392 | static inline void dw_pcie_setup_rc(struct pcie_port *pp) |
393 | { | |
394 | } | |
395 | ||
396 | static inline int dw_pcie_host_init(struct pcie_port *pp) | |
397 | { | |
398 | return 0; | |
399 | } | |
7c5925af | 400 | |
9d071cad VS |
401 | static inline void dw_pcie_host_deinit(struct pcie_port *pp) |
402 | { | |
403 | } | |
404 | ||
7c5925af GP |
405 | static inline int dw_pcie_allocate_domains(struct pcie_port *pp) |
406 | { | |
407 | return 0; | |
408 | } | |
a0560209 | 409 | #endif |
f8aed6ec KVA |
410 | |
411 | #ifdef CONFIG_PCIE_DW_EP | |
412 | void dw_pcie_ep_linkup(struct dw_pcie_ep *ep); | |
413 | int dw_pcie_ep_init(struct dw_pcie_ep *ep); | |
e966f739 | 414 | int dw_pcie_ep_init_complete(struct dw_pcie_ep *ep); |
ac37dde7 | 415 | void dw_pcie_ep_init_notify(struct dw_pcie_ep *ep); |
f8aed6ec | 416 | void dw_pcie_ep_exit(struct dw_pcie_ep *ep); |
cb22d40b | 417 | int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no); |
16093362 BH |
418 | int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no, |
419 | u8 interrupt_num); | |
beb4641a GP |
420 | int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no, |
421 | u16 interrupt_num); | |
9e718119 | 422 | void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar); |
f8aed6ec KVA |
423 | #else |
424 | static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) | |
425 | { | |
426 | } | |
427 | ||
428 | static inline int dw_pcie_ep_init(struct dw_pcie_ep *ep) | |
429 | { | |
430 | return 0; | |
431 | } | |
432 | ||
e966f739 VS |
433 | static inline int dw_pcie_ep_init_complete(struct dw_pcie_ep *ep) |
434 | { | |
435 | return 0; | |
436 | } | |
437 | ||
ac37dde7 VS |
438 | static inline void dw_pcie_ep_init_notify(struct dw_pcie_ep *ep) |
439 | { | |
440 | } | |
441 | ||
f8aed6ec KVA |
442 | static inline void dw_pcie_ep_exit(struct dw_pcie_ep *ep) |
443 | { | |
444 | } | |
9e718119 | 445 | |
cb22d40b GP |
446 | static inline int dw_pcie_ep_raise_legacy_irq(struct dw_pcie_ep *ep, u8 func_no) |
447 | { | |
448 | return 0; | |
449 | } | |
450 | ||
16093362 | 451 | static inline int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no, |
6f6d7873 NC |
452 | u8 interrupt_num) |
453 | { | |
454 | return 0; | |
455 | } | |
456 | ||
beb4641a GP |
457 | static inline int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no, |
458 | u16 interrupt_num) | |
459 | { | |
460 | return 0; | |
461 | } | |
462 | ||
9e718119 NC |
463 | static inline void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar) |
464 | { | |
465 | } | |
f8aed6ec | 466 | #endif |
18edf451 | 467 | #endif /* _PCIE_DESIGNWARE_H */ |