xref: /linux/drivers/pci/controller/pci-tegra.c (revision 6fdcba32711044c35c0e1b094cbd8f3f0b4472c9)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * PCIe host controller driver for Tegra SoCs
4  *
5  * Copyright (c) 2010, CompuLab, Ltd.
6  * Author: Mike Rapoport <mike@compulab.co.il>
7  *
8  * Based on NVIDIA PCIe driver
9  * Copyright (c) 2008-2009, NVIDIA Corporation.
10  *
11  * Bits taken from arch/arm/mach-dove/pcie.c
12  *
13  * Author: Thierry Reding <treding@nvidia.com>
14  */
15 
16 #include <linux/clk.h>
17 #include <linux/debugfs.h>
18 #include <linux/delay.h>
19 #include <linux/export.h>
20 #include <linux/gpio/consumer.h>
21 #include <linux/interrupt.h>
22 #include <linux/iopoll.h>
23 #include <linux/irq.h>
24 #include <linux/irqdomain.h>
25 #include <linux/kernel.h>
26 #include <linux/init.h>
27 #include <linux/module.h>
28 #include <linux/msi.h>
29 #include <linux/of_address.h>
30 #include <linux/of_pci.h>
31 #include <linux/of_platform.h>
32 #include <linux/pci.h>
33 #include <linux/phy/phy.h>
34 #include <linux/pinctrl/consumer.h>
35 #include <linux/platform_device.h>
36 #include <linux/reset.h>
37 #include <linux/sizes.h>
38 #include <linux/slab.h>
39 #include <linux/vmalloc.h>
40 #include <linux/regulator/consumer.h>
41 
42 #include <soc/tegra/cpuidle.h>
43 #include <soc/tegra/pmc.h>
44 
45 #include "../pci.h"
46 
47 #define INT_PCI_MSI_NR (8 * 32)
48 
49 /* register definitions */
50 
51 #define AFI_AXI_BAR0_SZ	0x00
52 #define AFI_AXI_BAR1_SZ	0x04
53 #define AFI_AXI_BAR2_SZ	0x08
54 #define AFI_AXI_BAR3_SZ	0x0c
55 #define AFI_AXI_BAR4_SZ	0x10
56 #define AFI_AXI_BAR5_SZ	0x14
57 
58 #define AFI_AXI_BAR0_START	0x18
59 #define AFI_AXI_BAR1_START	0x1c
60 #define AFI_AXI_BAR2_START	0x20
61 #define AFI_AXI_BAR3_START	0x24
62 #define AFI_AXI_BAR4_START	0x28
63 #define AFI_AXI_BAR5_START	0x2c
64 
65 #define AFI_FPCI_BAR0	0x30
66 #define AFI_FPCI_BAR1	0x34
67 #define AFI_FPCI_BAR2	0x38
68 #define AFI_FPCI_BAR3	0x3c
69 #define AFI_FPCI_BAR4	0x40
70 #define AFI_FPCI_BAR5	0x44
71 
72 #define AFI_CACHE_BAR0_SZ	0x48
73 #define AFI_CACHE_BAR0_ST	0x4c
74 #define AFI_CACHE_BAR1_SZ	0x50
75 #define AFI_CACHE_BAR1_ST	0x54
76 
77 #define AFI_MSI_BAR_SZ		0x60
78 #define AFI_MSI_FPCI_BAR_ST	0x64
79 #define AFI_MSI_AXI_BAR_ST	0x68
80 
81 #define AFI_MSI_VEC0		0x6c
82 #define AFI_MSI_VEC1		0x70
83 #define AFI_MSI_VEC2		0x74
84 #define AFI_MSI_VEC3		0x78
85 #define AFI_MSI_VEC4		0x7c
86 #define AFI_MSI_VEC5		0x80
87 #define AFI_MSI_VEC6		0x84
88 #define AFI_MSI_VEC7		0x88
89 
90 #define AFI_MSI_EN_VEC0		0x8c
91 #define AFI_MSI_EN_VEC1		0x90
92 #define AFI_MSI_EN_VEC2		0x94
93 #define AFI_MSI_EN_VEC3		0x98
94 #define AFI_MSI_EN_VEC4		0x9c
95 #define AFI_MSI_EN_VEC5		0xa0
96 #define AFI_MSI_EN_VEC6		0xa4
97 #define AFI_MSI_EN_VEC7		0xa8
98 
99 #define AFI_CONFIGURATION		0xac
100 #define  AFI_CONFIGURATION_EN_FPCI		(1 << 0)
101 #define  AFI_CONFIGURATION_CLKEN_OVERRIDE	(1 << 31)
102 
103 #define AFI_FPCI_ERROR_MASKS	0xb0
104 
105 #define AFI_INTR_MASK		0xb4
106 #define  AFI_INTR_MASK_INT_MASK	(1 << 0)
107 #define  AFI_INTR_MASK_MSI_MASK	(1 << 8)
108 
109 #define AFI_INTR_CODE			0xb8
110 #define  AFI_INTR_CODE_MASK		0xf
111 #define  AFI_INTR_INI_SLAVE_ERROR	1
112 #define  AFI_INTR_INI_DECODE_ERROR	2
113 #define  AFI_INTR_TARGET_ABORT		3
114 #define  AFI_INTR_MASTER_ABORT		4
115 #define  AFI_INTR_INVALID_WRITE		5
116 #define  AFI_INTR_LEGACY		6
117 #define  AFI_INTR_FPCI_DECODE_ERROR	7
118 #define  AFI_INTR_AXI_DECODE_ERROR	8
119 #define  AFI_INTR_FPCI_TIMEOUT		9
120 #define  AFI_INTR_PE_PRSNT_SENSE	10
121 #define  AFI_INTR_PE_CLKREQ_SENSE	11
122 #define  AFI_INTR_CLKCLAMP_SENSE	12
123 #define  AFI_INTR_RDY4PD_SENSE		13
124 #define  AFI_INTR_P2P_ERROR		14
125 
126 #define AFI_INTR_SIGNATURE	0xbc
127 #define AFI_UPPER_FPCI_ADDRESS	0xc0
128 #define AFI_SM_INTR_ENABLE	0xc4
129 #define  AFI_SM_INTR_INTA_ASSERT	(1 << 0)
130 #define  AFI_SM_INTR_INTB_ASSERT	(1 << 1)
131 #define  AFI_SM_INTR_INTC_ASSERT	(1 << 2)
132 #define  AFI_SM_INTR_INTD_ASSERT	(1 << 3)
133 #define  AFI_SM_INTR_INTA_DEASSERT	(1 << 4)
134 #define  AFI_SM_INTR_INTB_DEASSERT	(1 << 5)
135 #define  AFI_SM_INTR_INTC_DEASSERT	(1 << 6)
136 #define  AFI_SM_INTR_INTD_DEASSERT	(1 << 7)
137 
138 #define AFI_AFI_INTR_ENABLE		0xc8
139 #define  AFI_INTR_EN_INI_SLVERR		(1 << 0)
140 #define  AFI_INTR_EN_INI_DECERR		(1 << 1)
141 #define  AFI_INTR_EN_TGT_SLVERR		(1 << 2)
142 #define  AFI_INTR_EN_TGT_DECERR		(1 << 3)
143 #define  AFI_INTR_EN_TGT_WRERR		(1 << 4)
144 #define  AFI_INTR_EN_DFPCI_DECERR	(1 << 5)
145 #define  AFI_INTR_EN_AXI_DECERR		(1 << 6)
146 #define  AFI_INTR_EN_FPCI_TIMEOUT	(1 << 7)
147 #define  AFI_INTR_EN_PRSNT_SENSE	(1 << 8)
148 
149 #define AFI_PCIE_PME		0xf0
150 
151 #define AFI_PCIE_CONFIG					0x0f8
152 #define  AFI_PCIE_CONFIG_PCIE_DISABLE(x)		(1 << ((x) + 1))
153 #define  AFI_PCIE_CONFIG_PCIE_DISABLE_ALL		0xe
154 #define  AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_MASK	(0xf << 20)
155 #define  AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_SINGLE	(0x0 << 20)
156 #define  AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_420	(0x0 << 20)
157 #define  AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_X2_X1	(0x0 << 20)
158 #define  AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_401	(0x0 << 20)
159 #define  AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_DUAL	(0x1 << 20)
160 #define  AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_222	(0x1 << 20)
161 #define  AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_X4_X1	(0x1 << 20)
162 #define  AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_211	(0x1 << 20)
163 #define  AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_411	(0x2 << 20)
164 #define  AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_111	(0x2 << 20)
165 #define  AFI_PCIE_CONFIG_PCIE_CLKREQ_GPIO(x)		(1 << ((x) + 29))
166 #define  AFI_PCIE_CONFIG_PCIE_CLKREQ_GPIO_ALL		(0x7 << 29)
167 
168 #define AFI_FUSE			0x104
169 #define  AFI_FUSE_PCIE_T0_GEN2_DIS	(1 << 2)
170 
171 #define AFI_PEX0_CTRL			0x110
172 #define AFI_PEX1_CTRL			0x118
173 #define  AFI_PEX_CTRL_RST		(1 << 0)
174 #define  AFI_PEX_CTRL_CLKREQ_EN		(1 << 1)
175 #define  AFI_PEX_CTRL_REFCLK_EN		(1 << 3)
176 #define  AFI_PEX_CTRL_OVERRIDE_EN	(1 << 4)
177 
178 #define AFI_PLLE_CONTROL		0x160
179 #define  AFI_PLLE_CONTROL_BYPASS_PADS2PLLE_CONTROL (1 << 9)
180 #define  AFI_PLLE_CONTROL_PADS2PLLE_CONTROL_EN (1 << 1)
181 
182 #define AFI_PEXBIAS_CTRL_0		0x168
183 
184 #define RP_PRIV_XP_DL		0x00000494
185 #define  RP_PRIV_XP_DL_GEN2_UPD_FC_TSHOLD	(0x1ff << 1)
186 
187 #define RP_RX_HDR_LIMIT		0x00000e00
188 #define  RP_RX_HDR_LIMIT_PW_MASK	(0xff << 8)
189 #define  RP_RX_HDR_LIMIT_PW		(0x0e << 8)
190 
191 #define RP_ECTL_2_R1	0x00000e84
192 #define  RP_ECTL_2_R1_RX_CTLE_1C_MASK		0xffff
193 
194 #define RP_ECTL_4_R1	0x00000e8c
195 #define  RP_ECTL_4_R1_RX_CDR_CTRL_1C_MASK	(0xffff << 16)
196 #define  RP_ECTL_4_R1_RX_CDR_CTRL_1C_SHIFT	16
197 
198 #define RP_ECTL_5_R1	0x00000e90
199 #define  RP_ECTL_5_R1_RX_EQ_CTRL_L_1C_MASK	0xffffffff
200 
201 #define RP_ECTL_6_R1	0x00000e94
202 #define  RP_ECTL_6_R1_RX_EQ_CTRL_H_1C_MASK	0xffffffff
203 
204 #define RP_ECTL_2_R2	0x00000ea4
205 #define  RP_ECTL_2_R2_RX_CTLE_1C_MASK	0xffff
206 
207 #define RP_ECTL_4_R2	0x00000eac
208 #define  RP_ECTL_4_R2_RX_CDR_CTRL_1C_MASK	(0xffff << 16)
209 #define  RP_ECTL_4_R2_RX_CDR_CTRL_1C_SHIFT	16
210 
211 #define RP_ECTL_5_R2	0x00000eb0
212 #define  RP_ECTL_5_R2_RX_EQ_CTRL_L_1C_MASK	0xffffffff
213 
214 #define RP_ECTL_6_R2	0x00000eb4
215 #define  RP_ECTL_6_R2_RX_EQ_CTRL_H_1C_MASK	0xffffffff
216 
217 #define RP_VEND_XP	0x00000f00
218 #define  RP_VEND_XP_DL_UP			(1 << 30)
219 #define  RP_VEND_XP_OPPORTUNISTIC_ACK		(1 << 27)
220 #define  RP_VEND_XP_OPPORTUNISTIC_UPDATEFC	(1 << 28)
221 #define  RP_VEND_XP_UPDATE_FC_THRESHOLD_MASK	(0xff << 18)
222 
223 #define RP_VEND_CTL0	0x00000f44
224 #define  RP_VEND_CTL0_DSK_RST_PULSE_WIDTH_MASK	(0xf << 12)
225 #define  RP_VEND_CTL0_DSK_RST_PULSE_WIDTH	(0x9 << 12)
226 
227 #define RP_VEND_CTL1	0x00000f48
228 #define  RP_VEND_CTL1_ERPT	(1 << 13)
229 
230 #define RP_VEND_XP_BIST	0x00000f4c
231 #define  RP_VEND_XP_BIST_GOTO_L1_L2_AFTER_DLLP_DONE	(1 << 28)
232 
233 #define RP_VEND_CTL2 0x00000fa8
234 #define  RP_VEND_CTL2_PCA_ENABLE (1 << 7)
235 
236 #define RP_PRIV_MISC	0x00000fe0
237 #define  RP_PRIV_MISC_PRSNT_MAP_EP_PRSNT		(0xe << 0)
238 #define  RP_PRIV_MISC_PRSNT_MAP_EP_ABSNT		(0xf << 0)
239 #define  RP_PRIV_MISC_CTLR_CLK_CLAMP_THRESHOLD_MASK	(0x7f << 16)
240 #define  RP_PRIV_MISC_CTLR_CLK_CLAMP_THRESHOLD		(0xf << 16)
241 #define  RP_PRIV_MISC_CTLR_CLK_CLAMP_ENABLE		(1 << 23)
242 #define  RP_PRIV_MISC_TMS_CLK_CLAMP_THRESHOLD_MASK	(0x7f << 24)
243 #define  RP_PRIV_MISC_TMS_CLK_CLAMP_THRESHOLD		(0xf << 24)
244 #define  RP_PRIV_MISC_TMS_CLK_CLAMP_ENABLE		(1 << 31)
245 
246 #define RP_LINK_CONTROL_STATUS			0x00000090
247 #define  RP_LINK_CONTROL_STATUS_DL_LINK_ACTIVE	0x20000000
248 #define  RP_LINK_CONTROL_STATUS_LINKSTAT_MASK	0x3fff0000
249 
250 #define RP_LINK_CONTROL_STATUS_2		0x000000b0
251 
252 #define PADS_CTL_SEL		0x0000009c
253 
254 #define PADS_CTL		0x000000a0
255 #define  PADS_CTL_IDDQ_1L	(1 << 0)
256 #define  PADS_CTL_TX_DATA_EN_1L	(1 << 6)
257 #define  PADS_CTL_RX_DATA_EN_1L	(1 << 10)
258 
259 #define PADS_PLL_CTL_TEGRA20			0x000000b8
260 #define PADS_PLL_CTL_TEGRA30			0x000000b4
261 #define  PADS_PLL_CTL_RST_B4SM			(1 << 1)
262 #define  PADS_PLL_CTL_LOCKDET			(1 << 8)
263 #define  PADS_PLL_CTL_REFCLK_MASK		(0x3 << 16)
264 #define  PADS_PLL_CTL_REFCLK_INTERNAL_CML	(0 << 16)
265 #define  PADS_PLL_CTL_REFCLK_INTERNAL_CMOS	(1 << 16)
266 #define  PADS_PLL_CTL_REFCLK_EXTERNAL		(2 << 16)
267 #define  PADS_PLL_CTL_TXCLKREF_MASK		(0x1 << 20)
268 #define  PADS_PLL_CTL_TXCLKREF_DIV10		(0 << 20)
269 #define  PADS_PLL_CTL_TXCLKREF_DIV5		(1 << 20)
270 #define  PADS_PLL_CTL_TXCLKREF_BUF_EN		(1 << 22)
271 
272 #define PADS_REFCLK_CFG0			0x000000c8
273 #define PADS_REFCLK_CFG1			0x000000cc
274 #define PADS_REFCLK_BIAS			0x000000d0
275 
276 /*
277  * Fields in PADS_REFCLK_CFG*. Those registers form an array of 16-bit
278  * entries, one entry per PCIe port. These field definitions and desired
279  * values aren't in the TRM, but do come from NVIDIA.
280  */
281 #define PADS_REFCLK_CFG_TERM_SHIFT		2  /* 6:2 */
282 #define PADS_REFCLK_CFG_E_TERM_SHIFT		7
283 #define PADS_REFCLK_CFG_PREDI_SHIFT		8  /* 11:8 */
284 #define PADS_REFCLK_CFG_DRVI_SHIFT		12 /* 15:12 */
285 
286 #define PME_ACK_TIMEOUT 10000
287 #define LINK_RETRAIN_TIMEOUT 100000 /* in usec */
288 
289 struct tegra_msi {
290 	struct msi_controller chip;
291 	DECLARE_BITMAP(used, INT_PCI_MSI_NR);
292 	struct irq_domain *domain;
293 	struct mutex lock;
294 	void *virt;
295 	dma_addr_t phys;
296 	int irq;
297 };
298 
299 /* used to differentiate between Tegra SoC generations */
300 struct tegra_pcie_port_soc {
301 	struct {
302 		u8 turnoff_bit;
303 		u8 ack_bit;
304 	} pme;
305 };
306 
307 struct tegra_pcie_soc {
308 	unsigned int num_ports;
309 	const struct tegra_pcie_port_soc *ports;
310 	unsigned int msi_base_shift;
311 	unsigned long afi_pex2_ctrl;
312 	u32 pads_pll_ctl;
313 	u32 tx_ref_sel;
314 	u32 pads_refclk_cfg0;
315 	u32 pads_refclk_cfg1;
316 	u32 update_fc_threshold;
317 	bool has_pex_clkreq_en;
318 	bool has_pex_bias_ctrl;
319 	bool has_intr_prsnt_sense;
320 	bool has_cml_clk;
321 	bool has_gen2;
322 	bool force_pca_enable;
323 	bool program_uphy;
324 	bool update_clamp_threshold;
325 	bool program_deskew_time;
326 	bool raw_violation_fixup;
327 	bool update_fc_timer;
328 	bool has_cache_bars;
329 	struct {
330 		struct {
331 			u32 rp_ectl_2_r1;
332 			u32 rp_ectl_4_r1;
333 			u32 rp_ectl_5_r1;
334 			u32 rp_ectl_6_r1;
335 			u32 rp_ectl_2_r2;
336 			u32 rp_ectl_4_r2;
337 			u32 rp_ectl_5_r2;
338 			u32 rp_ectl_6_r2;
339 		} regs;
340 		bool enable;
341 	} ectl;
342 };
343 
344 static inline struct tegra_msi *to_tegra_msi(struct msi_controller *chip)
345 {
346 	return container_of(chip, struct tegra_msi, chip);
347 }
348 
349 struct tegra_pcie {
350 	struct device *dev;
351 
352 	void __iomem *pads;
353 	void __iomem *afi;
354 	void __iomem *cfg;
355 	int irq;
356 
357 	struct resource cs;
358 	struct resource io;
359 	struct resource pio;
360 	struct resource mem;
361 	struct resource prefetch;
362 	struct resource busn;
363 
364 	struct {
365 		resource_size_t mem;
366 		resource_size_t io;
367 	} offset;
368 
369 	struct clk *pex_clk;
370 	struct clk *afi_clk;
371 	struct clk *pll_e;
372 	struct clk *cml_clk;
373 
374 	struct reset_control *pex_rst;
375 	struct reset_control *afi_rst;
376 	struct reset_control *pcie_xrst;
377 
378 	bool legacy_phy;
379 	struct phy *phy;
380 
381 	struct tegra_msi msi;
382 
383 	struct list_head ports;
384 	u32 xbar_config;
385 
386 	struct regulator_bulk_data *supplies;
387 	unsigned int num_supplies;
388 
389 	const struct tegra_pcie_soc *soc;
390 	struct dentry *debugfs;
391 };
392 
393 struct tegra_pcie_port {
394 	struct tegra_pcie *pcie;
395 	struct device_node *np;
396 	struct list_head list;
397 	struct resource regs;
398 	void __iomem *base;
399 	unsigned int index;
400 	unsigned int lanes;
401 
402 	struct phy **phys;
403 
404 	struct gpio_desc *reset_gpio;
405 };
406 
407 struct tegra_pcie_bus {
408 	struct list_head list;
409 	unsigned int nr;
410 };
411 
412 static inline void afi_writel(struct tegra_pcie *pcie, u32 value,
413 			      unsigned long offset)
414 {
415 	writel(value, pcie->afi + offset);
416 }
417 
418 static inline u32 afi_readl(struct tegra_pcie *pcie, unsigned long offset)
419 {
420 	return readl(pcie->afi + offset);
421 }
422 
423 static inline void pads_writel(struct tegra_pcie *pcie, u32 value,
424 			       unsigned long offset)
425 {
426 	writel(value, pcie->pads + offset);
427 }
428 
429 static inline u32 pads_readl(struct tegra_pcie *pcie, unsigned long offset)
430 {
431 	return readl(pcie->pads + offset);
432 }
433 
434 /*
435  * The configuration space mapping on Tegra is somewhat similar to the ECAM
436  * defined by PCIe. However it deviates a bit in how the 4 bits for extended
437  * register accesses are mapped:
438  *
439  *    [27:24] extended register number
440  *    [23:16] bus number
441  *    [15:11] device number
442  *    [10: 8] function number
443  *    [ 7: 0] register number
444  *
445  * Mapping the whole extended configuration space would require 256 MiB of
446  * virtual address space, only a small part of which will actually be used.
447  *
448  * To work around this, a 4 KiB region is used to generate the required
449  * configuration transaction with relevant B:D:F and register offset values.
450  * This is achieved by dynamically programming base address and size of
451  * AFI_AXI_BAR used for end point config space mapping to make sure that the
452  * address (access to which generates correct config transaction) falls in
453  * this 4 KiB region.
454  */
455 static unsigned int tegra_pcie_conf_offset(u8 bus, unsigned int devfn,
456 					   unsigned int where)
457 {
458 	return ((where & 0xf00) << 16) | (bus << 16) | (PCI_SLOT(devfn) << 11) |
459 	       (PCI_FUNC(devfn) << 8) | (where & 0xff);
460 }
461 
462 static void __iomem *tegra_pcie_map_bus(struct pci_bus *bus,
463 					unsigned int devfn,
464 					int where)
465 {
466 	struct tegra_pcie *pcie = bus->sysdata;
467 	void __iomem *addr = NULL;
468 
469 	if (bus->number == 0) {
470 		unsigned int slot = PCI_SLOT(devfn);
471 		struct tegra_pcie_port *port;
472 
473 		list_for_each_entry(port, &pcie->ports, list) {
474 			if (port->index + 1 == slot) {
475 				addr = port->base + (where & ~3);
476 				break;
477 			}
478 		}
479 	} else {
480 		unsigned int offset;
481 		u32 base;
482 
483 		offset = tegra_pcie_conf_offset(bus->number, devfn, where);
484 
485 		/* move 4 KiB window to offset within the FPCI region */
486 		base = 0xfe100000 + ((offset & ~(SZ_4K - 1)) >> 8);
487 		afi_writel(pcie, base, AFI_FPCI_BAR0);
488 
489 		/* move to correct offset within the 4 KiB page */
490 		addr = pcie->cfg + (offset & (SZ_4K - 1));
491 	}
492 
493 	return addr;
494 }
495 
496 static int tegra_pcie_config_read(struct pci_bus *bus, unsigned int devfn,
497 				  int where, int size, u32 *value)
498 {
499 	if (bus->number == 0)
500 		return pci_generic_config_read32(bus, devfn, where, size,
501 						 value);
502 
503 	return pci_generic_config_read(bus, devfn, where, size, value);
504 }
505 
506 static int tegra_pcie_config_write(struct pci_bus *bus, unsigned int devfn,
507 				   int where, int size, u32 value)
508 {
509 	if (bus->number == 0)
510 		return pci_generic_config_write32(bus, devfn, where, size,
511 						  value);
512 
513 	return pci_generic_config_write(bus, devfn, where, size, value);
514 }
515 
516 static struct pci_ops tegra_pcie_ops = {
517 	.map_bus = tegra_pcie_map_bus,
518 	.read = tegra_pcie_config_read,
519 	.write = tegra_pcie_config_write,
520 };
521 
522 static unsigned long tegra_pcie_port_get_pex_ctrl(struct tegra_pcie_port *port)
523 {
524 	const struct tegra_pcie_soc *soc = port->pcie->soc;
525 	unsigned long ret = 0;
526 
527 	switch (port->index) {
528 	case 0:
529 		ret = AFI_PEX0_CTRL;
530 		break;
531 
532 	case 1:
533 		ret = AFI_PEX1_CTRL;
534 		break;
535 
536 	case 2:
537 		ret = soc->afi_pex2_ctrl;
538 		break;
539 	}
540 
541 	return ret;
542 }
543 
544 static void tegra_pcie_port_reset(struct tegra_pcie_port *port)
545 {
546 	unsigned long ctrl = tegra_pcie_port_get_pex_ctrl(port);
547 	unsigned long value;
548 
549 	/* pulse reset signal */
550 	if (port->reset_gpio) {
551 		gpiod_set_value(port->reset_gpio, 1);
552 	} else {
553 		value = afi_readl(port->pcie, ctrl);
554 		value &= ~AFI_PEX_CTRL_RST;
555 		afi_writel(port->pcie, value, ctrl);
556 	}
557 
558 	usleep_range(1000, 2000);
559 
560 	if (port->reset_gpio) {
561 		gpiod_set_value(port->reset_gpio, 0);
562 	} else {
563 		value = afi_readl(port->pcie, ctrl);
564 		value |= AFI_PEX_CTRL_RST;
565 		afi_writel(port->pcie, value, ctrl);
566 	}
567 }
568 
569 static void tegra_pcie_enable_rp_features(struct tegra_pcie_port *port)
570 {
571 	const struct tegra_pcie_soc *soc = port->pcie->soc;
572 	u32 value;
573 
574 	/* Enable AER capability */
575 	value = readl(port->base + RP_VEND_CTL1);
576 	value |= RP_VEND_CTL1_ERPT;
577 	writel(value, port->base + RP_VEND_CTL1);
578 
579 	/* Optimal settings to enhance bandwidth */
580 	value = readl(port->base + RP_VEND_XP);
581 	value |= RP_VEND_XP_OPPORTUNISTIC_ACK;
582 	value |= RP_VEND_XP_OPPORTUNISTIC_UPDATEFC;
583 	writel(value, port->base + RP_VEND_XP);
584 
585 	/*
586 	 * LTSSM will wait for DLLP to finish before entering L1 or L2,
587 	 * to avoid truncation of PM messages which results in receiver errors
588 	 */
589 	value = readl(port->base + RP_VEND_XP_BIST);
590 	value |= RP_VEND_XP_BIST_GOTO_L1_L2_AFTER_DLLP_DONE;
591 	writel(value, port->base + RP_VEND_XP_BIST);
592 
593 	value = readl(port->base + RP_PRIV_MISC);
594 	value |= RP_PRIV_MISC_CTLR_CLK_CLAMP_ENABLE;
595 	value |= RP_PRIV_MISC_TMS_CLK_CLAMP_ENABLE;
596 
597 	if (soc->update_clamp_threshold) {
598 		value &= ~(RP_PRIV_MISC_CTLR_CLK_CLAMP_THRESHOLD_MASK |
599 				RP_PRIV_MISC_TMS_CLK_CLAMP_THRESHOLD_MASK);
600 		value |= RP_PRIV_MISC_CTLR_CLK_CLAMP_THRESHOLD |
601 			RP_PRIV_MISC_TMS_CLK_CLAMP_THRESHOLD;
602 	}
603 
604 	writel(value, port->base + RP_PRIV_MISC);
605 }
606 
607 static void tegra_pcie_program_ectl_settings(struct tegra_pcie_port *port)
608 {
609 	const struct tegra_pcie_soc *soc = port->pcie->soc;
610 	u32 value;
611 
612 	value = readl(port->base + RP_ECTL_2_R1);
613 	value &= ~RP_ECTL_2_R1_RX_CTLE_1C_MASK;
614 	value |= soc->ectl.regs.rp_ectl_2_r1;
615 	writel(value, port->base + RP_ECTL_2_R1);
616 
617 	value = readl(port->base + RP_ECTL_4_R1);
618 	value &= ~RP_ECTL_4_R1_RX_CDR_CTRL_1C_MASK;
619 	value |= soc->ectl.regs.rp_ectl_4_r1 <<
620 				RP_ECTL_4_R1_RX_CDR_CTRL_1C_SHIFT;
621 	writel(value, port->base + RP_ECTL_4_R1);
622 
623 	value = readl(port->base + RP_ECTL_5_R1);
624 	value &= ~RP_ECTL_5_R1_RX_EQ_CTRL_L_1C_MASK;
625 	value |= soc->ectl.regs.rp_ectl_5_r1;
626 	writel(value, port->base + RP_ECTL_5_R1);
627 
628 	value = readl(port->base + RP_ECTL_6_R1);
629 	value &= ~RP_ECTL_6_R1_RX_EQ_CTRL_H_1C_MASK;
630 	value |= soc->ectl.regs.rp_ectl_6_r1;
631 	writel(value, port->base + RP_ECTL_6_R1);
632 
633 	value = readl(port->base + RP_ECTL_2_R2);
634 	value &= ~RP_ECTL_2_R2_RX_CTLE_1C_MASK;
635 	value |= soc->ectl.regs.rp_ectl_2_r2;
636 	writel(value, port->base + RP_ECTL_2_R2);
637 
638 	value = readl(port->base + RP_ECTL_4_R2);
639 	value &= ~RP_ECTL_4_R2_RX_CDR_CTRL_1C_MASK;
640 	value |= soc->ectl.regs.rp_ectl_4_r2 <<
641 				RP_ECTL_4_R2_RX_CDR_CTRL_1C_SHIFT;
642 	writel(value, port->base + RP_ECTL_4_R2);
643 
644 	value = readl(port->base + RP_ECTL_5_R2);
645 	value &= ~RP_ECTL_5_R2_RX_EQ_CTRL_L_1C_MASK;
646 	value |= soc->ectl.regs.rp_ectl_5_r2;
647 	writel(value, port->base + RP_ECTL_5_R2);
648 
649 	value = readl(port->base + RP_ECTL_6_R2);
650 	value &= ~RP_ECTL_6_R2_RX_EQ_CTRL_H_1C_MASK;
651 	value |= soc->ectl.regs.rp_ectl_6_r2;
652 	writel(value, port->base + RP_ECTL_6_R2);
653 }
654 
655 static void tegra_pcie_apply_sw_fixup(struct tegra_pcie_port *port)
656 {
657 	const struct tegra_pcie_soc *soc = port->pcie->soc;
658 	u32 value;
659 
660 	/*
661 	 * Sometimes link speed change from Gen2 to Gen1 fails due to
662 	 * instability in deskew logic on lane-0. Increase the deskew
663 	 * retry time to resolve this issue.
664 	 */
665 	if (soc->program_deskew_time) {
666 		value = readl(port->base + RP_VEND_CTL0);
667 		value &= ~RP_VEND_CTL0_DSK_RST_PULSE_WIDTH_MASK;
668 		value |= RP_VEND_CTL0_DSK_RST_PULSE_WIDTH;
669 		writel(value, port->base + RP_VEND_CTL0);
670 	}
671 
672 	/* Fixup for read after write violation. */
673 	if (soc->raw_violation_fixup) {
674 		value = readl(port->base + RP_RX_HDR_LIMIT);
675 		value &= ~RP_RX_HDR_LIMIT_PW_MASK;
676 		value |= RP_RX_HDR_LIMIT_PW;
677 		writel(value, port->base + RP_RX_HDR_LIMIT);
678 
679 		value = readl(port->base + RP_PRIV_XP_DL);
680 		value |= RP_PRIV_XP_DL_GEN2_UPD_FC_TSHOLD;
681 		writel(value, port->base + RP_PRIV_XP_DL);
682 
683 		value = readl(port->base + RP_VEND_XP);
684 		value &= ~RP_VEND_XP_UPDATE_FC_THRESHOLD_MASK;
685 		value |= soc->update_fc_threshold;
686 		writel(value, port->base + RP_VEND_XP);
687 	}
688 
689 	if (soc->update_fc_timer) {
690 		value = readl(port->base + RP_VEND_XP);
691 		value &= ~RP_VEND_XP_UPDATE_FC_THRESHOLD_MASK;
692 		value |= soc->update_fc_threshold;
693 		writel(value, port->base + RP_VEND_XP);
694 	}
695 
696 	/*
697 	 * PCIe link doesn't come up with few legacy PCIe endpoints if
698 	 * root port advertises both Gen-1 and Gen-2 speeds in Tegra.
699 	 * Hence, the strategy followed here is to initially advertise
700 	 * only Gen-1 and after link is up, retrain link to Gen-2 speed
701 	 */
702 	value = readl(port->base + RP_LINK_CONTROL_STATUS_2);
703 	value &= ~PCI_EXP_LNKSTA_CLS;
704 	value |= PCI_EXP_LNKSTA_CLS_2_5GB;
705 	writel(value, port->base + RP_LINK_CONTROL_STATUS_2);
706 }
707 
708 static void tegra_pcie_port_enable(struct tegra_pcie_port *port)
709 {
710 	unsigned long ctrl = tegra_pcie_port_get_pex_ctrl(port);
711 	const struct tegra_pcie_soc *soc = port->pcie->soc;
712 	unsigned long value;
713 
714 	/* enable reference clock */
715 	value = afi_readl(port->pcie, ctrl);
716 	value |= AFI_PEX_CTRL_REFCLK_EN;
717 
718 	if (soc->has_pex_clkreq_en)
719 		value |= AFI_PEX_CTRL_CLKREQ_EN;
720 
721 	value |= AFI_PEX_CTRL_OVERRIDE_EN;
722 
723 	afi_writel(port->pcie, value, ctrl);
724 
725 	tegra_pcie_port_reset(port);
726 
727 	if (soc->force_pca_enable) {
728 		value = readl(port->base + RP_VEND_CTL2);
729 		value |= RP_VEND_CTL2_PCA_ENABLE;
730 		writel(value, port->base + RP_VEND_CTL2);
731 	}
732 
733 	tegra_pcie_enable_rp_features(port);
734 
735 	if (soc->ectl.enable)
736 		tegra_pcie_program_ectl_settings(port);
737 
738 	tegra_pcie_apply_sw_fixup(port);
739 }
740 
741 static void tegra_pcie_port_disable(struct tegra_pcie_port *port)
742 {
743 	unsigned long ctrl = tegra_pcie_port_get_pex_ctrl(port);
744 	const struct tegra_pcie_soc *soc = port->pcie->soc;
745 	unsigned long value;
746 
747 	/* assert port reset */
748 	value = afi_readl(port->pcie, ctrl);
749 	value &= ~AFI_PEX_CTRL_RST;
750 	afi_writel(port->pcie, value, ctrl);
751 
752 	/* disable reference clock */
753 	value = afi_readl(port->pcie, ctrl);
754 
755 	if (soc->has_pex_clkreq_en)
756 		value &= ~AFI_PEX_CTRL_CLKREQ_EN;
757 
758 	value &= ~AFI_PEX_CTRL_REFCLK_EN;
759 	afi_writel(port->pcie, value, ctrl);
760 
761 	/* disable PCIe port and set CLKREQ# as GPIO to allow PLLE power down */
762 	value = afi_readl(port->pcie, AFI_PCIE_CONFIG);
763 	value |= AFI_PCIE_CONFIG_PCIE_DISABLE(port->index);
764 	value |= AFI_PCIE_CONFIG_PCIE_CLKREQ_GPIO(port->index);
765 	afi_writel(port->pcie, value, AFI_PCIE_CONFIG);
766 }
767 
768 static void tegra_pcie_port_free(struct tegra_pcie_port *port)
769 {
770 	struct tegra_pcie *pcie = port->pcie;
771 	struct device *dev = pcie->dev;
772 
773 	devm_iounmap(dev, port->base);
774 	devm_release_mem_region(dev, port->regs.start,
775 				resource_size(&port->regs));
776 	list_del(&port->list);
777 	devm_kfree(dev, port);
778 }
779 
780 /* Tegra PCIE root complex wrongly reports device class */
781 static void tegra_pcie_fixup_class(struct pci_dev *dev)
782 {
783 	dev->class = PCI_CLASS_BRIDGE_PCI << 8;
784 }
785 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, 0x0bf0, tegra_pcie_fixup_class);
786 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, 0x0bf1, tegra_pcie_fixup_class);
787 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, 0x0e1c, tegra_pcie_fixup_class);
788 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, 0x0e1d, tegra_pcie_fixup_class);
789 
790 /* Tegra20 and Tegra30 PCIE requires relaxed ordering */
791 static void tegra_pcie_relax_enable(struct pci_dev *dev)
792 {
793 	pcie_capability_set_word(dev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_RELAX_EN);
794 }
795 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0bf0, tegra_pcie_relax_enable);
796 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0bf1, tegra_pcie_relax_enable);
797 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0e1c, tegra_pcie_relax_enable);
798 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0e1d, tegra_pcie_relax_enable);
799 
800 static int tegra_pcie_request_resources(struct tegra_pcie *pcie)
801 {
802 	struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
803 	struct list_head *windows = &host->windows;
804 	struct device *dev = pcie->dev;
805 	int err;
806 
807 	pci_add_resource_offset(windows, &pcie->pio, pcie->offset.io);
808 	pci_add_resource_offset(windows, &pcie->mem, pcie->offset.mem);
809 	pci_add_resource_offset(windows, &pcie->prefetch, pcie->offset.mem);
810 	pci_add_resource(windows, &pcie->busn);
811 
812 	err = devm_request_pci_bus_resources(dev, windows);
813 	if (err < 0) {
814 		pci_free_resource_list(windows);
815 		return err;
816 	}
817 
818 	pci_remap_iospace(&pcie->pio, pcie->io.start);
819 
820 	return 0;
821 }
822 
823 static void tegra_pcie_free_resources(struct tegra_pcie *pcie)
824 {
825 	struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
826 	struct list_head *windows = &host->windows;
827 
828 	pci_unmap_iospace(&pcie->pio);
829 	pci_free_resource_list(windows);
830 }
831 
832 static int tegra_pcie_map_irq(const struct pci_dev *pdev, u8 slot, u8 pin)
833 {
834 	struct tegra_pcie *pcie = pdev->bus->sysdata;
835 	int irq;
836 
837 	tegra_cpuidle_pcie_irqs_in_use();
838 
839 	irq = of_irq_parse_and_map_pci(pdev, slot, pin);
840 	if (!irq)
841 		irq = pcie->irq;
842 
843 	return irq;
844 }
845 
846 static irqreturn_t tegra_pcie_isr(int irq, void *arg)
847 {
848 	const char *err_msg[] = {
849 		"Unknown",
850 		"AXI slave error",
851 		"AXI decode error",
852 		"Target abort",
853 		"Master abort",
854 		"Invalid write",
855 		"Legacy interrupt",
856 		"Response decoding error",
857 		"AXI response decoding error",
858 		"Transaction timeout",
859 		"Slot present pin change",
860 		"Slot clock request change",
861 		"TMS clock ramp change",
862 		"TMS ready for power down",
863 		"Peer2Peer error",
864 	};
865 	struct tegra_pcie *pcie = arg;
866 	struct device *dev = pcie->dev;
867 	u32 code, signature;
868 
869 	code = afi_readl(pcie, AFI_INTR_CODE) & AFI_INTR_CODE_MASK;
870 	signature = afi_readl(pcie, AFI_INTR_SIGNATURE);
871 	afi_writel(pcie, 0, AFI_INTR_CODE);
872 
873 	if (code == AFI_INTR_LEGACY)
874 		return IRQ_NONE;
875 
876 	if (code >= ARRAY_SIZE(err_msg))
877 		code = 0;
878 
879 	/*
880 	 * do not pollute kernel log with master abort reports since they
881 	 * happen a lot during enumeration
882 	 */
883 	if (code == AFI_INTR_MASTER_ABORT || code == AFI_INTR_PE_PRSNT_SENSE)
884 		dev_dbg(dev, "%s, signature: %08x\n", err_msg[code], signature);
885 	else
886 		dev_err(dev, "%s, signature: %08x\n", err_msg[code], signature);
887 
888 	if (code == AFI_INTR_TARGET_ABORT || code == AFI_INTR_MASTER_ABORT ||
889 	    code == AFI_INTR_FPCI_DECODE_ERROR) {
890 		u32 fpci = afi_readl(pcie, AFI_UPPER_FPCI_ADDRESS) & 0xff;
891 		u64 address = (u64)fpci << 32 | (signature & 0xfffffffc);
892 
893 		if (code == AFI_INTR_MASTER_ABORT)
894 			dev_dbg(dev, "  FPCI address: %10llx\n", address);
895 		else
896 			dev_err(dev, "  FPCI address: %10llx\n", address);
897 	}
898 
899 	return IRQ_HANDLED;
900 }
901 
902 /*
903  * FPCI map is as follows:
904  * - 0xfdfc000000: I/O space
905  * - 0xfdfe000000: type 0 configuration space
906  * - 0xfdff000000: type 1 configuration space
907  * - 0xfe00000000: type 0 extended configuration space
908  * - 0xfe10000000: type 1 extended configuration space
909  */
910 static void tegra_pcie_setup_translations(struct tegra_pcie *pcie)
911 {
912 	u32 fpci_bar, size, axi_address;
913 
914 	/* Bar 0: type 1 extended configuration space */
915 	size = resource_size(&pcie->cs);
916 	afi_writel(pcie, pcie->cs.start, AFI_AXI_BAR0_START);
917 	afi_writel(pcie, size >> 12, AFI_AXI_BAR0_SZ);
918 
919 	/* Bar 1: downstream IO bar */
920 	fpci_bar = 0xfdfc0000;
921 	size = resource_size(&pcie->io);
922 	axi_address = pcie->io.start;
923 	afi_writel(pcie, axi_address, AFI_AXI_BAR1_START);
924 	afi_writel(pcie, size >> 12, AFI_AXI_BAR1_SZ);
925 	afi_writel(pcie, fpci_bar, AFI_FPCI_BAR1);
926 
927 	/* Bar 2: prefetchable memory BAR */
928 	fpci_bar = (((pcie->prefetch.start >> 12) & 0x0fffffff) << 4) | 0x1;
929 	size = resource_size(&pcie->prefetch);
930 	axi_address = pcie->prefetch.start;
931 	afi_writel(pcie, axi_address, AFI_AXI_BAR2_START);
932 	afi_writel(pcie, size >> 12, AFI_AXI_BAR2_SZ);
933 	afi_writel(pcie, fpci_bar, AFI_FPCI_BAR2);
934 
935 	/* Bar 3: non prefetchable memory BAR */
936 	fpci_bar = (((pcie->mem.start >> 12) & 0x0fffffff) << 4) | 0x1;
937 	size = resource_size(&pcie->mem);
938 	axi_address = pcie->mem.start;
939 	afi_writel(pcie, axi_address, AFI_AXI_BAR3_START);
940 	afi_writel(pcie, size >> 12, AFI_AXI_BAR3_SZ);
941 	afi_writel(pcie, fpci_bar, AFI_FPCI_BAR3);
942 
943 	/* NULL out the remaining BARs as they are not used */
944 	afi_writel(pcie, 0, AFI_AXI_BAR4_START);
945 	afi_writel(pcie, 0, AFI_AXI_BAR4_SZ);
946 	afi_writel(pcie, 0, AFI_FPCI_BAR4);
947 
948 	afi_writel(pcie, 0, AFI_AXI_BAR5_START);
949 	afi_writel(pcie, 0, AFI_AXI_BAR5_SZ);
950 	afi_writel(pcie, 0, AFI_FPCI_BAR5);
951 
952 	if (pcie->soc->has_cache_bars) {
953 		/* map all upstream transactions as uncached */
954 		afi_writel(pcie, 0, AFI_CACHE_BAR0_ST);
955 		afi_writel(pcie, 0, AFI_CACHE_BAR0_SZ);
956 		afi_writel(pcie, 0, AFI_CACHE_BAR1_ST);
957 		afi_writel(pcie, 0, AFI_CACHE_BAR1_SZ);
958 	}
959 
960 	/* MSI translations are setup only when needed */
961 	afi_writel(pcie, 0, AFI_MSI_FPCI_BAR_ST);
962 	afi_writel(pcie, 0, AFI_MSI_BAR_SZ);
963 	afi_writel(pcie, 0, AFI_MSI_AXI_BAR_ST);
964 	afi_writel(pcie, 0, AFI_MSI_BAR_SZ);
965 }
966 
967 static int tegra_pcie_pll_wait(struct tegra_pcie *pcie, unsigned long timeout)
968 {
969 	const struct tegra_pcie_soc *soc = pcie->soc;
970 	u32 value;
971 
972 	timeout = jiffies + msecs_to_jiffies(timeout);
973 
974 	while (time_before(jiffies, timeout)) {
975 		value = pads_readl(pcie, soc->pads_pll_ctl);
976 		if (value & PADS_PLL_CTL_LOCKDET)
977 			return 0;
978 	}
979 
980 	return -ETIMEDOUT;
981 }
982 
983 static int tegra_pcie_phy_enable(struct tegra_pcie *pcie)
984 {
985 	struct device *dev = pcie->dev;
986 	const struct tegra_pcie_soc *soc = pcie->soc;
987 	u32 value;
988 	int err;
989 
990 	/* initialize internal PHY, enable up to 16 PCIE lanes */
991 	pads_writel(pcie, 0x0, PADS_CTL_SEL);
992 
993 	/* override IDDQ to 1 on all 4 lanes */
994 	value = pads_readl(pcie, PADS_CTL);
995 	value |= PADS_CTL_IDDQ_1L;
996 	pads_writel(pcie, value, PADS_CTL);
997 
998 	/*
999 	 * Set up PHY PLL inputs select PLLE output as refclock,
1000 	 * set TX ref sel to div10 (not div5).
1001 	 */
1002 	value = pads_readl(pcie, soc->pads_pll_ctl);
1003 	value &= ~(PADS_PLL_CTL_REFCLK_MASK | PADS_PLL_CTL_TXCLKREF_MASK);
1004 	value |= PADS_PLL_CTL_REFCLK_INTERNAL_CML | soc->tx_ref_sel;
1005 	pads_writel(pcie, value, soc->pads_pll_ctl);
1006 
1007 	/* reset PLL */
1008 	value = pads_readl(pcie, soc->pads_pll_ctl);
1009 	value &= ~PADS_PLL_CTL_RST_B4SM;
1010 	pads_writel(pcie, value, soc->pads_pll_ctl);
1011 
1012 	usleep_range(20, 100);
1013 
1014 	/* take PLL out of reset  */
1015 	value = pads_readl(pcie, soc->pads_pll_ctl);
1016 	value |= PADS_PLL_CTL_RST_B4SM;
1017 	pads_writel(pcie, value, soc->pads_pll_ctl);
1018 
1019 	/* wait for the PLL to lock */
1020 	err = tegra_pcie_pll_wait(pcie, 500);
1021 	if (err < 0) {
1022 		dev_err(dev, "PLL failed to lock: %d\n", err);
1023 		return err;
1024 	}
1025 
1026 	/* turn off IDDQ override */
1027 	value = pads_readl(pcie, PADS_CTL);
1028 	value &= ~PADS_CTL_IDDQ_1L;
1029 	pads_writel(pcie, value, PADS_CTL);
1030 
1031 	/* enable TX/RX data */
1032 	value = pads_readl(pcie, PADS_CTL);
1033 	value |= PADS_CTL_TX_DATA_EN_1L | PADS_CTL_RX_DATA_EN_1L;
1034 	pads_writel(pcie, value, PADS_CTL);
1035 
1036 	return 0;
1037 }
1038 
1039 static int tegra_pcie_phy_disable(struct tegra_pcie *pcie)
1040 {
1041 	const struct tegra_pcie_soc *soc = pcie->soc;
1042 	u32 value;
1043 
1044 	/* disable TX/RX data */
1045 	value = pads_readl(pcie, PADS_CTL);
1046 	value &= ~(PADS_CTL_TX_DATA_EN_1L | PADS_CTL_RX_DATA_EN_1L);
1047 	pads_writel(pcie, value, PADS_CTL);
1048 
1049 	/* override IDDQ */
1050 	value = pads_readl(pcie, PADS_CTL);
1051 	value |= PADS_CTL_IDDQ_1L;
1052 	pads_writel(pcie, value, PADS_CTL);
1053 
1054 	/* reset PLL */
1055 	value = pads_readl(pcie, soc->pads_pll_ctl);
1056 	value &= ~PADS_PLL_CTL_RST_B4SM;
1057 	pads_writel(pcie, value, soc->pads_pll_ctl);
1058 
1059 	usleep_range(20, 100);
1060 
1061 	return 0;
1062 }
1063 
1064 static int tegra_pcie_port_phy_power_on(struct tegra_pcie_port *port)
1065 {
1066 	struct device *dev = port->pcie->dev;
1067 	unsigned int i;
1068 	int err;
1069 
1070 	for (i = 0; i < port->lanes; i++) {
1071 		err = phy_power_on(port->phys[i]);
1072 		if (err < 0) {
1073 			dev_err(dev, "failed to power on PHY#%u: %d\n", i, err);
1074 			return err;
1075 		}
1076 	}
1077 
1078 	return 0;
1079 }
1080 
1081 static int tegra_pcie_port_phy_power_off(struct tegra_pcie_port *port)
1082 {
1083 	struct device *dev = port->pcie->dev;
1084 	unsigned int i;
1085 	int err;
1086 
1087 	for (i = 0; i < port->lanes; i++) {
1088 		err = phy_power_off(port->phys[i]);
1089 		if (err < 0) {
1090 			dev_err(dev, "failed to power off PHY#%u: %d\n", i,
1091 				err);
1092 			return err;
1093 		}
1094 	}
1095 
1096 	return 0;
1097 }
1098 
1099 static int tegra_pcie_phy_power_on(struct tegra_pcie *pcie)
1100 {
1101 	struct device *dev = pcie->dev;
1102 	struct tegra_pcie_port *port;
1103 	int err;
1104 
1105 	if (pcie->legacy_phy) {
1106 		if (pcie->phy)
1107 			err = phy_power_on(pcie->phy);
1108 		else
1109 			err = tegra_pcie_phy_enable(pcie);
1110 
1111 		if (err < 0)
1112 			dev_err(dev, "failed to power on PHY: %d\n", err);
1113 
1114 		return err;
1115 	}
1116 
1117 	list_for_each_entry(port, &pcie->ports, list) {
1118 		err = tegra_pcie_port_phy_power_on(port);
1119 		if (err < 0) {
1120 			dev_err(dev,
1121 				"failed to power on PCIe port %u PHY: %d\n",
1122 				port->index, err);
1123 			return err;
1124 		}
1125 	}
1126 
1127 	return 0;
1128 }
1129 
1130 static int tegra_pcie_phy_power_off(struct tegra_pcie *pcie)
1131 {
1132 	struct device *dev = pcie->dev;
1133 	struct tegra_pcie_port *port;
1134 	int err;
1135 
1136 	if (pcie->legacy_phy) {
1137 		if (pcie->phy)
1138 			err = phy_power_off(pcie->phy);
1139 		else
1140 			err = tegra_pcie_phy_disable(pcie);
1141 
1142 		if (err < 0)
1143 			dev_err(dev, "failed to power off PHY: %d\n", err);
1144 
1145 		return err;
1146 	}
1147 
1148 	list_for_each_entry(port, &pcie->ports, list) {
1149 		err = tegra_pcie_port_phy_power_off(port);
1150 		if (err < 0) {
1151 			dev_err(dev,
1152 				"failed to power off PCIe port %u PHY: %d\n",
1153 				port->index, err);
1154 			return err;
1155 		}
1156 	}
1157 
1158 	return 0;
1159 }
1160 
1161 static void tegra_pcie_enable_controller(struct tegra_pcie *pcie)
1162 {
1163 	const struct tegra_pcie_soc *soc = pcie->soc;
1164 	struct tegra_pcie_port *port;
1165 	unsigned long value;
1166 
1167 	/* enable PLL power down */
1168 	if (pcie->phy) {
1169 		value = afi_readl(pcie, AFI_PLLE_CONTROL);
1170 		value &= ~AFI_PLLE_CONTROL_BYPASS_PADS2PLLE_CONTROL;
1171 		value |= AFI_PLLE_CONTROL_PADS2PLLE_CONTROL_EN;
1172 		afi_writel(pcie, value, AFI_PLLE_CONTROL);
1173 	}
1174 
1175 	/* power down PCIe slot clock bias pad */
1176 	if (soc->has_pex_bias_ctrl)
1177 		afi_writel(pcie, 0, AFI_PEXBIAS_CTRL_0);
1178 
1179 	/* configure mode and disable all ports */
1180 	value = afi_readl(pcie, AFI_PCIE_CONFIG);
1181 	value &= ~AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_MASK;
1182 	value |= AFI_PCIE_CONFIG_PCIE_DISABLE_ALL | pcie->xbar_config;
1183 	value |= AFI_PCIE_CONFIG_PCIE_CLKREQ_GPIO_ALL;
1184 
1185 	list_for_each_entry(port, &pcie->ports, list) {
1186 		value &= ~AFI_PCIE_CONFIG_PCIE_DISABLE(port->index);
1187 		value &= ~AFI_PCIE_CONFIG_PCIE_CLKREQ_GPIO(port->index);
1188 	}
1189 
1190 	afi_writel(pcie, value, AFI_PCIE_CONFIG);
1191 
1192 	if (soc->has_gen2) {
1193 		value = afi_readl(pcie, AFI_FUSE);
1194 		value &= ~AFI_FUSE_PCIE_T0_GEN2_DIS;
1195 		afi_writel(pcie, value, AFI_FUSE);
1196 	} else {
1197 		value = afi_readl(pcie, AFI_FUSE);
1198 		value |= AFI_FUSE_PCIE_T0_GEN2_DIS;
1199 		afi_writel(pcie, value, AFI_FUSE);
1200 	}
1201 
1202 	/* Disable AFI dynamic clock gating and enable PCIe */
1203 	value = afi_readl(pcie, AFI_CONFIGURATION);
1204 	value |= AFI_CONFIGURATION_EN_FPCI;
1205 	value |= AFI_CONFIGURATION_CLKEN_OVERRIDE;
1206 	afi_writel(pcie, value, AFI_CONFIGURATION);
1207 
1208 	value = AFI_INTR_EN_INI_SLVERR | AFI_INTR_EN_INI_DECERR |
1209 		AFI_INTR_EN_TGT_SLVERR | AFI_INTR_EN_TGT_DECERR |
1210 		AFI_INTR_EN_TGT_WRERR | AFI_INTR_EN_DFPCI_DECERR;
1211 
1212 	if (soc->has_intr_prsnt_sense)
1213 		value |= AFI_INTR_EN_PRSNT_SENSE;
1214 
1215 	afi_writel(pcie, value, AFI_AFI_INTR_ENABLE);
1216 	afi_writel(pcie, 0xffffffff, AFI_SM_INTR_ENABLE);
1217 
1218 	/* don't enable MSI for now, only when needed */
1219 	afi_writel(pcie, AFI_INTR_MASK_INT_MASK, AFI_INTR_MASK);
1220 
1221 	/* disable all exceptions */
1222 	afi_writel(pcie, 0, AFI_FPCI_ERROR_MASKS);
1223 }
1224 
1225 static void tegra_pcie_power_off(struct tegra_pcie *pcie)
1226 {
1227 	struct device *dev = pcie->dev;
1228 	const struct tegra_pcie_soc *soc = pcie->soc;
1229 	int err;
1230 
1231 	reset_control_assert(pcie->afi_rst);
1232 
1233 	clk_disable_unprepare(pcie->pll_e);
1234 	if (soc->has_cml_clk)
1235 		clk_disable_unprepare(pcie->cml_clk);
1236 	clk_disable_unprepare(pcie->afi_clk);
1237 
1238 	if (!dev->pm_domain)
1239 		tegra_powergate_power_off(TEGRA_POWERGATE_PCIE);
1240 
1241 	err = regulator_bulk_disable(pcie->num_supplies, pcie->supplies);
1242 	if (err < 0)
1243 		dev_warn(dev, "failed to disable regulators: %d\n", err);
1244 }
1245 
1246 static int tegra_pcie_power_on(struct tegra_pcie *pcie)
1247 {
1248 	struct device *dev = pcie->dev;
1249 	const struct tegra_pcie_soc *soc = pcie->soc;
1250 	int err;
1251 
1252 	reset_control_assert(pcie->pcie_xrst);
1253 	reset_control_assert(pcie->afi_rst);
1254 	reset_control_assert(pcie->pex_rst);
1255 
1256 	if (!dev->pm_domain)
1257 		tegra_powergate_power_off(TEGRA_POWERGATE_PCIE);
1258 
1259 	/* enable regulators */
1260 	err = regulator_bulk_enable(pcie->num_supplies, pcie->supplies);
1261 	if (err < 0)
1262 		dev_err(dev, "failed to enable regulators: %d\n", err);
1263 
1264 	if (!dev->pm_domain) {
1265 		err = tegra_powergate_power_on(TEGRA_POWERGATE_PCIE);
1266 		if (err) {
1267 			dev_err(dev, "failed to power ungate: %d\n", err);
1268 			goto regulator_disable;
1269 		}
1270 		err = tegra_powergate_remove_clamping(TEGRA_POWERGATE_PCIE);
1271 		if (err) {
1272 			dev_err(dev, "failed to remove clamp: %d\n", err);
1273 			goto powergate;
1274 		}
1275 	}
1276 
1277 	err = clk_prepare_enable(pcie->afi_clk);
1278 	if (err < 0) {
1279 		dev_err(dev, "failed to enable AFI clock: %d\n", err);
1280 		goto powergate;
1281 	}
1282 
1283 	if (soc->has_cml_clk) {
1284 		err = clk_prepare_enable(pcie->cml_clk);
1285 		if (err < 0) {
1286 			dev_err(dev, "failed to enable CML clock: %d\n", err);
1287 			goto disable_afi_clk;
1288 		}
1289 	}
1290 
1291 	err = clk_prepare_enable(pcie->pll_e);
1292 	if (err < 0) {
1293 		dev_err(dev, "failed to enable PLLE clock: %d\n", err);
1294 		goto disable_cml_clk;
1295 	}
1296 
1297 	reset_control_deassert(pcie->afi_rst);
1298 
1299 	return 0;
1300 
1301 disable_cml_clk:
1302 	if (soc->has_cml_clk)
1303 		clk_disable_unprepare(pcie->cml_clk);
1304 disable_afi_clk:
1305 	clk_disable_unprepare(pcie->afi_clk);
1306 powergate:
1307 	if (!dev->pm_domain)
1308 		tegra_powergate_power_off(TEGRA_POWERGATE_PCIE);
1309 regulator_disable:
1310 	regulator_bulk_disable(pcie->num_supplies, pcie->supplies);
1311 
1312 	return err;
1313 }
1314 
1315 static void tegra_pcie_apply_pad_settings(struct tegra_pcie *pcie)
1316 {
1317 	const struct tegra_pcie_soc *soc = pcie->soc;
1318 
1319 	/* Configure the reference clock driver */
1320 	pads_writel(pcie, soc->pads_refclk_cfg0, PADS_REFCLK_CFG0);
1321 
1322 	if (soc->num_ports > 2)
1323 		pads_writel(pcie, soc->pads_refclk_cfg1, PADS_REFCLK_CFG1);
1324 }
1325 
1326 static int tegra_pcie_clocks_get(struct tegra_pcie *pcie)
1327 {
1328 	struct device *dev = pcie->dev;
1329 	const struct tegra_pcie_soc *soc = pcie->soc;
1330 
1331 	pcie->pex_clk = devm_clk_get(dev, "pex");
1332 	if (IS_ERR(pcie->pex_clk))
1333 		return PTR_ERR(pcie->pex_clk);
1334 
1335 	pcie->afi_clk = devm_clk_get(dev, "afi");
1336 	if (IS_ERR(pcie->afi_clk))
1337 		return PTR_ERR(pcie->afi_clk);
1338 
1339 	pcie->pll_e = devm_clk_get(dev, "pll_e");
1340 	if (IS_ERR(pcie->pll_e))
1341 		return PTR_ERR(pcie->pll_e);
1342 
1343 	if (soc->has_cml_clk) {
1344 		pcie->cml_clk = devm_clk_get(dev, "cml");
1345 		if (IS_ERR(pcie->cml_clk))
1346 			return PTR_ERR(pcie->cml_clk);
1347 	}
1348 
1349 	return 0;
1350 }
1351 
1352 static int tegra_pcie_resets_get(struct tegra_pcie *pcie)
1353 {
1354 	struct device *dev = pcie->dev;
1355 
1356 	pcie->pex_rst = devm_reset_control_get_exclusive(dev, "pex");
1357 	if (IS_ERR(pcie->pex_rst))
1358 		return PTR_ERR(pcie->pex_rst);
1359 
1360 	pcie->afi_rst = devm_reset_control_get_exclusive(dev, "afi");
1361 	if (IS_ERR(pcie->afi_rst))
1362 		return PTR_ERR(pcie->afi_rst);
1363 
1364 	pcie->pcie_xrst = devm_reset_control_get_exclusive(dev, "pcie_x");
1365 	if (IS_ERR(pcie->pcie_xrst))
1366 		return PTR_ERR(pcie->pcie_xrst);
1367 
1368 	return 0;
1369 }
1370 
1371 static int tegra_pcie_phys_get_legacy(struct tegra_pcie *pcie)
1372 {
1373 	struct device *dev = pcie->dev;
1374 	int err;
1375 
1376 	pcie->phy = devm_phy_optional_get(dev, "pcie");
1377 	if (IS_ERR(pcie->phy)) {
1378 		err = PTR_ERR(pcie->phy);
1379 		dev_err(dev, "failed to get PHY: %d\n", err);
1380 		return err;
1381 	}
1382 
1383 	err = phy_init(pcie->phy);
1384 	if (err < 0) {
1385 		dev_err(dev, "failed to initialize PHY: %d\n", err);
1386 		return err;
1387 	}
1388 
1389 	pcie->legacy_phy = true;
1390 
1391 	return 0;
1392 }
1393 
1394 static struct phy *devm_of_phy_optional_get_index(struct device *dev,
1395 						  struct device_node *np,
1396 						  const char *consumer,
1397 						  unsigned int index)
1398 {
1399 	struct phy *phy;
1400 	char *name;
1401 
1402 	name = kasprintf(GFP_KERNEL, "%s-%u", consumer, index);
1403 	if (!name)
1404 		return ERR_PTR(-ENOMEM);
1405 
1406 	phy = devm_of_phy_get(dev, np, name);
1407 	kfree(name);
1408 
1409 	if (IS_ERR(phy) && PTR_ERR(phy) == -ENODEV)
1410 		phy = NULL;
1411 
1412 	return phy;
1413 }
1414 
1415 static int tegra_pcie_port_get_phys(struct tegra_pcie_port *port)
1416 {
1417 	struct device *dev = port->pcie->dev;
1418 	struct phy *phy;
1419 	unsigned int i;
1420 	int err;
1421 
1422 	port->phys = devm_kcalloc(dev, sizeof(phy), port->lanes, GFP_KERNEL);
1423 	if (!port->phys)
1424 		return -ENOMEM;
1425 
1426 	for (i = 0; i < port->lanes; i++) {
1427 		phy = devm_of_phy_optional_get_index(dev, port->np, "pcie", i);
1428 		if (IS_ERR(phy)) {
1429 			dev_err(dev, "failed to get PHY#%u: %ld\n", i,
1430 				PTR_ERR(phy));
1431 			return PTR_ERR(phy);
1432 		}
1433 
1434 		err = phy_init(phy);
1435 		if (err < 0) {
1436 			dev_err(dev, "failed to initialize PHY#%u: %d\n", i,
1437 				err);
1438 			return err;
1439 		}
1440 
1441 		port->phys[i] = phy;
1442 	}
1443 
1444 	return 0;
1445 }
1446 
1447 static int tegra_pcie_phys_get(struct tegra_pcie *pcie)
1448 {
1449 	const struct tegra_pcie_soc *soc = pcie->soc;
1450 	struct device_node *np = pcie->dev->of_node;
1451 	struct tegra_pcie_port *port;
1452 	int err;
1453 
1454 	if (!soc->has_gen2 || of_find_property(np, "phys", NULL) != NULL)
1455 		return tegra_pcie_phys_get_legacy(pcie);
1456 
1457 	list_for_each_entry(port, &pcie->ports, list) {
1458 		err = tegra_pcie_port_get_phys(port);
1459 		if (err < 0)
1460 			return err;
1461 	}
1462 
1463 	return 0;
1464 }
1465 
1466 static void tegra_pcie_phys_put(struct tegra_pcie *pcie)
1467 {
1468 	struct tegra_pcie_port *port;
1469 	struct device *dev = pcie->dev;
1470 	int err, i;
1471 
1472 	if (pcie->legacy_phy) {
1473 		err = phy_exit(pcie->phy);
1474 		if (err < 0)
1475 			dev_err(dev, "failed to teardown PHY: %d\n", err);
1476 		return;
1477 	}
1478 
1479 	list_for_each_entry(port, &pcie->ports, list) {
1480 		for (i = 0; i < port->lanes; i++) {
1481 			err = phy_exit(port->phys[i]);
1482 			if (err < 0)
1483 				dev_err(dev, "failed to teardown PHY#%u: %d\n",
1484 					i, err);
1485 		}
1486 	}
1487 }
1488 
1489 
1490 static int tegra_pcie_get_resources(struct tegra_pcie *pcie)
1491 {
1492 	struct device *dev = pcie->dev;
1493 	struct platform_device *pdev = to_platform_device(dev);
1494 	struct resource *pads, *afi, *res;
1495 	const struct tegra_pcie_soc *soc = pcie->soc;
1496 	int err;
1497 
1498 	err = tegra_pcie_clocks_get(pcie);
1499 	if (err) {
1500 		dev_err(dev, "failed to get clocks: %d\n", err);
1501 		return err;
1502 	}
1503 
1504 	err = tegra_pcie_resets_get(pcie);
1505 	if (err) {
1506 		dev_err(dev, "failed to get resets: %d\n", err);
1507 		return err;
1508 	}
1509 
1510 	if (soc->program_uphy) {
1511 		err = tegra_pcie_phys_get(pcie);
1512 		if (err < 0) {
1513 			dev_err(dev, "failed to get PHYs: %d\n", err);
1514 			return err;
1515 		}
1516 	}
1517 
1518 	pads = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pads");
1519 	pcie->pads = devm_ioremap_resource(dev, pads);
1520 	if (IS_ERR(pcie->pads)) {
1521 		err = PTR_ERR(pcie->pads);
1522 		goto phys_put;
1523 	}
1524 
1525 	afi = platform_get_resource_byname(pdev, IORESOURCE_MEM, "afi");
1526 	pcie->afi = devm_ioremap_resource(dev, afi);
1527 	if (IS_ERR(pcie->afi)) {
1528 		err = PTR_ERR(pcie->afi);
1529 		goto phys_put;
1530 	}
1531 
1532 	/* request configuration space, but remap later, on demand */
1533 	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "cs");
1534 	if (!res) {
1535 		err = -EADDRNOTAVAIL;
1536 		goto phys_put;
1537 	}
1538 
1539 	pcie->cs = *res;
1540 
1541 	/* constrain configuration space to 4 KiB */
1542 	pcie->cs.end = pcie->cs.start + SZ_4K - 1;
1543 
1544 	pcie->cfg = devm_ioremap_resource(dev, &pcie->cs);
1545 	if (IS_ERR(pcie->cfg)) {
1546 		err = PTR_ERR(pcie->cfg);
1547 		goto phys_put;
1548 	}
1549 
1550 	/* request interrupt */
1551 	err = platform_get_irq_byname(pdev, "intr");
1552 	if (err < 0) {
1553 		dev_err(dev, "failed to get IRQ: %d\n", err);
1554 		goto phys_put;
1555 	}
1556 
1557 	pcie->irq = err;
1558 
1559 	err = request_irq(pcie->irq, tegra_pcie_isr, IRQF_SHARED, "PCIE", pcie);
1560 	if (err) {
1561 		dev_err(dev, "failed to register IRQ: %d\n", err);
1562 		goto phys_put;
1563 	}
1564 
1565 	return 0;
1566 
1567 phys_put:
1568 	if (soc->program_uphy)
1569 		tegra_pcie_phys_put(pcie);
1570 	return err;
1571 }
1572 
1573 static int tegra_pcie_put_resources(struct tegra_pcie *pcie)
1574 {
1575 	const struct tegra_pcie_soc *soc = pcie->soc;
1576 
1577 	if (pcie->irq > 0)
1578 		free_irq(pcie->irq, pcie);
1579 
1580 	if (soc->program_uphy)
1581 		tegra_pcie_phys_put(pcie);
1582 
1583 	return 0;
1584 }
1585 
1586 static void tegra_pcie_pme_turnoff(struct tegra_pcie_port *port)
1587 {
1588 	struct tegra_pcie *pcie = port->pcie;
1589 	const struct tegra_pcie_soc *soc = pcie->soc;
1590 	int err;
1591 	u32 val;
1592 	u8 ack_bit;
1593 
1594 	val = afi_readl(pcie, AFI_PCIE_PME);
1595 	val |= (0x1 << soc->ports[port->index].pme.turnoff_bit);
1596 	afi_writel(pcie, val, AFI_PCIE_PME);
1597 
1598 	ack_bit = soc->ports[port->index].pme.ack_bit;
1599 	err = readl_poll_timeout(pcie->afi + AFI_PCIE_PME, val,
1600 				 val & (0x1 << ack_bit), 1, PME_ACK_TIMEOUT);
1601 	if (err)
1602 		dev_err(pcie->dev, "PME Ack is not received on port: %d\n",
1603 			port->index);
1604 
1605 	usleep_range(10000, 11000);
1606 
1607 	val = afi_readl(pcie, AFI_PCIE_PME);
1608 	val &= ~(0x1 << soc->ports[port->index].pme.turnoff_bit);
1609 	afi_writel(pcie, val, AFI_PCIE_PME);
1610 }
1611 
1612 static int tegra_msi_alloc(struct tegra_msi *chip)
1613 {
1614 	int msi;
1615 
1616 	mutex_lock(&chip->lock);
1617 
1618 	msi = find_first_zero_bit(chip->used, INT_PCI_MSI_NR);
1619 	if (msi < INT_PCI_MSI_NR)
1620 		set_bit(msi, chip->used);
1621 	else
1622 		msi = -ENOSPC;
1623 
1624 	mutex_unlock(&chip->lock);
1625 
1626 	return msi;
1627 }
1628 
1629 static void tegra_msi_free(struct tegra_msi *chip, unsigned long irq)
1630 {
1631 	struct device *dev = chip->chip.dev;
1632 
1633 	mutex_lock(&chip->lock);
1634 
1635 	if (!test_bit(irq, chip->used))
1636 		dev_err(dev, "trying to free unused MSI#%lu\n", irq);
1637 	else
1638 		clear_bit(irq, chip->used);
1639 
1640 	mutex_unlock(&chip->lock);
1641 }
1642 
1643 static irqreturn_t tegra_pcie_msi_irq(int irq, void *data)
1644 {
1645 	struct tegra_pcie *pcie = data;
1646 	struct device *dev = pcie->dev;
1647 	struct tegra_msi *msi = &pcie->msi;
1648 	unsigned int i, processed = 0;
1649 
1650 	for (i = 0; i < 8; i++) {
1651 		unsigned long reg = afi_readl(pcie, AFI_MSI_VEC0 + i * 4);
1652 
1653 		while (reg) {
1654 			unsigned int offset = find_first_bit(&reg, 32);
1655 			unsigned int index = i * 32 + offset;
1656 			unsigned int irq;
1657 
1658 			/* clear the interrupt */
1659 			afi_writel(pcie, 1 << offset, AFI_MSI_VEC0 + i * 4);
1660 
1661 			irq = irq_find_mapping(msi->domain, index);
1662 			if (irq) {
1663 				if (test_bit(index, msi->used))
1664 					generic_handle_irq(irq);
1665 				else
1666 					dev_info(dev, "unhandled MSI\n");
1667 			} else {
1668 				/*
1669 				 * that's weird who triggered this?
1670 				 * just clear it
1671 				 */
1672 				dev_info(dev, "unexpected MSI\n");
1673 			}
1674 
1675 			/* see if there's any more pending in this vector */
1676 			reg = afi_readl(pcie, AFI_MSI_VEC0 + i * 4);
1677 
1678 			processed++;
1679 		}
1680 	}
1681 
1682 	return processed > 0 ? IRQ_HANDLED : IRQ_NONE;
1683 }
1684 
1685 static int tegra_msi_setup_irq(struct msi_controller *chip,
1686 			       struct pci_dev *pdev, struct msi_desc *desc)
1687 {
1688 	struct tegra_msi *msi = to_tegra_msi(chip);
1689 	struct msi_msg msg;
1690 	unsigned int irq;
1691 	int hwirq;
1692 
1693 	hwirq = tegra_msi_alloc(msi);
1694 	if (hwirq < 0)
1695 		return hwirq;
1696 
1697 	irq = irq_create_mapping(msi->domain, hwirq);
1698 	if (!irq) {
1699 		tegra_msi_free(msi, hwirq);
1700 		return -EINVAL;
1701 	}
1702 
1703 	irq_set_msi_desc(irq, desc);
1704 
1705 	msg.address_lo = lower_32_bits(msi->phys);
1706 	msg.address_hi = upper_32_bits(msi->phys);
1707 	msg.data = hwirq;
1708 
1709 	pci_write_msi_msg(irq, &msg);
1710 
1711 	return 0;
1712 }
1713 
1714 static void tegra_msi_teardown_irq(struct msi_controller *chip,
1715 				   unsigned int irq)
1716 {
1717 	struct tegra_msi *msi = to_tegra_msi(chip);
1718 	struct irq_data *d = irq_get_irq_data(irq);
1719 	irq_hw_number_t hwirq = irqd_to_hwirq(d);
1720 
1721 	irq_dispose_mapping(irq);
1722 	tegra_msi_free(msi, hwirq);
1723 }
1724 
1725 static struct irq_chip tegra_msi_irq_chip = {
1726 	.name = "Tegra PCIe MSI",
1727 	.irq_enable = pci_msi_unmask_irq,
1728 	.irq_disable = pci_msi_mask_irq,
1729 	.irq_mask = pci_msi_mask_irq,
1730 	.irq_unmask = pci_msi_unmask_irq,
1731 };
1732 
1733 static int tegra_msi_map(struct irq_domain *domain, unsigned int irq,
1734 			 irq_hw_number_t hwirq)
1735 {
1736 	irq_set_chip_and_handler(irq, &tegra_msi_irq_chip, handle_simple_irq);
1737 	irq_set_chip_data(irq, domain->host_data);
1738 
1739 	tegra_cpuidle_pcie_irqs_in_use();
1740 
1741 	return 0;
1742 }
1743 
1744 static const struct irq_domain_ops msi_domain_ops = {
1745 	.map = tegra_msi_map,
1746 };
1747 
1748 static int tegra_pcie_msi_setup(struct tegra_pcie *pcie)
1749 {
1750 	struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
1751 	struct platform_device *pdev = to_platform_device(pcie->dev);
1752 	struct tegra_msi *msi = &pcie->msi;
1753 	struct device *dev = pcie->dev;
1754 	int err;
1755 
1756 	mutex_init(&msi->lock);
1757 
1758 	msi->chip.dev = dev;
1759 	msi->chip.setup_irq = tegra_msi_setup_irq;
1760 	msi->chip.teardown_irq = tegra_msi_teardown_irq;
1761 
1762 	msi->domain = irq_domain_add_linear(dev->of_node, INT_PCI_MSI_NR,
1763 					    &msi_domain_ops, &msi->chip);
1764 	if (!msi->domain) {
1765 		dev_err(dev, "failed to create IRQ domain\n");
1766 		return -ENOMEM;
1767 	}
1768 
1769 	err = platform_get_irq_byname(pdev, "msi");
1770 	if (err < 0) {
1771 		dev_err(dev, "failed to get IRQ: %d\n", err);
1772 		goto free_irq_domain;
1773 	}
1774 
1775 	msi->irq = err;
1776 
1777 	err = request_irq(msi->irq, tegra_pcie_msi_irq, IRQF_NO_THREAD,
1778 			  tegra_msi_irq_chip.name, pcie);
1779 	if (err < 0) {
1780 		dev_err(dev, "failed to request IRQ: %d\n", err);
1781 		goto free_irq_domain;
1782 	}
1783 
1784 	/* Though the PCIe controller can address >32-bit address space, to
1785 	 * facilitate endpoints that support only 32-bit MSI target address,
1786 	 * the mask is set to 32-bit to make sure that MSI target address is
1787 	 * always a 32-bit address
1788 	 */
1789 	err = dma_set_coherent_mask(dev, DMA_BIT_MASK(32));
1790 	if (err < 0) {
1791 		dev_err(dev, "failed to set DMA coherent mask: %d\n", err);
1792 		goto free_irq;
1793 	}
1794 
1795 	msi->virt = dma_alloc_attrs(dev, PAGE_SIZE, &msi->phys, GFP_KERNEL,
1796 				    DMA_ATTR_NO_KERNEL_MAPPING);
1797 	if (!msi->virt) {
1798 		dev_err(dev, "failed to allocate DMA memory for MSI\n");
1799 		err = -ENOMEM;
1800 		goto free_irq;
1801 	}
1802 
1803 	host->msi = &msi->chip;
1804 
1805 	return 0;
1806 
1807 free_irq:
1808 	free_irq(msi->irq, pcie);
1809 free_irq_domain:
1810 	irq_domain_remove(msi->domain);
1811 	return err;
1812 }
1813 
1814 static void tegra_pcie_enable_msi(struct tegra_pcie *pcie)
1815 {
1816 	const struct tegra_pcie_soc *soc = pcie->soc;
1817 	struct tegra_msi *msi = &pcie->msi;
1818 	u32 reg;
1819 
1820 	afi_writel(pcie, msi->phys >> soc->msi_base_shift, AFI_MSI_FPCI_BAR_ST);
1821 	afi_writel(pcie, msi->phys, AFI_MSI_AXI_BAR_ST);
1822 	/* this register is in 4K increments */
1823 	afi_writel(pcie, 1, AFI_MSI_BAR_SZ);
1824 
1825 	/* enable all MSI vectors */
1826 	afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC0);
1827 	afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC1);
1828 	afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC2);
1829 	afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC3);
1830 	afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC4);
1831 	afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC5);
1832 	afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC6);
1833 	afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC7);
1834 
1835 	/* and unmask the MSI interrupt */
1836 	reg = afi_readl(pcie, AFI_INTR_MASK);
1837 	reg |= AFI_INTR_MASK_MSI_MASK;
1838 	afi_writel(pcie, reg, AFI_INTR_MASK);
1839 }
1840 
1841 static void tegra_pcie_msi_teardown(struct tegra_pcie *pcie)
1842 {
1843 	struct tegra_msi *msi = &pcie->msi;
1844 	unsigned int i, irq;
1845 
1846 	dma_free_attrs(pcie->dev, PAGE_SIZE, msi->virt, msi->phys,
1847 		       DMA_ATTR_NO_KERNEL_MAPPING);
1848 
1849 	if (msi->irq > 0)
1850 		free_irq(msi->irq, pcie);
1851 
1852 	for (i = 0; i < INT_PCI_MSI_NR; i++) {
1853 		irq = irq_find_mapping(msi->domain, i);
1854 		if (irq > 0)
1855 			irq_dispose_mapping(irq);
1856 	}
1857 
1858 	irq_domain_remove(msi->domain);
1859 }
1860 
1861 static int tegra_pcie_disable_msi(struct tegra_pcie *pcie)
1862 {
1863 	u32 value;
1864 
1865 	/* mask the MSI interrupt */
1866 	value = afi_readl(pcie, AFI_INTR_MASK);
1867 	value &= ~AFI_INTR_MASK_MSI_MASK;
1868 	afi_writel(pcie, value, AFI_INTR_MASK);
1869 
1870 	/* disable all MSI vectors */
1871 	afi_writel(pcie, 0, AFI_MSI_EN_VEC0);
1872 	afi_writel(pcie, 0, AFI_MSI_EN_VEC1);
1873 	afi_writel(pcie, 0, AFI_MSI_EN_VEC2);
1874 	afi_writel(pcie, 0, AFI_MSI_EN_VEC3);
1875 	afi_writel(pcie, 0, AFI_MSI_EN_VEC4);
1876 	afi_writel(pcie, 0, AFI_MSI_EN_VEC5);
1877 	afi_writel(pcie, 0, AFI_MSI_EN_VEC6);
1878 	afi_writel(pcie, 0, AFI_MSI_EN_VEC7);
1879 
1880 	return 0;
1881 }
1882 
1883 static void tegra_pcie_disable_interrupts(struct tegra_pcie *pcie)
1884 {
1885 	u32 value;
1886 
1887 	value = afi_readl(pcie, AFI_INTR_MASK);
1888 	value &= ~AFI_INTR_MASK_INT_MASK;
1889 	afi_writel(pcie, value, AFI_INTR_MASK);
1890 }
1891 
1892 static int tegra_pcie_get_xbar_config(struct tegra_pcie *pcie, u32 lanes,
1893 				      u32 *xbar)
1894 {
1895 	struct device *dev = pcie->dev;
1896 	struct device_node *np = dev->of_node;
1897 
1898 	if (of_device_is_compatible(np, "nvidia,tegra186-pcie")) {
1899 		switch (lanes) {
1900 		case 0x010004:
1901 			dev_info(dev, "4x1, 1x1 configuration\n");
1902 			*xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_401;
1903 			return 0;
1904 
1905 		case 0x010102:
1906 			dev_info(dev, "2x1, 1X1, 1x1 configuration\n");
1907 			*xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_211;
1908 			return 0;
1909 
1910 		case 0x010101:
1911 			dev_info(dev, "1x1, 1x1, 1x1 configuration\n");
1912 			*xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_111;
1913 			return 0;
1914 
1915 		default:
1916 			dev_info(dev, "wrong configuration updated in DT, "
1917 				 "switching to default 2x1, 1x1, 1x1 "
1918 				 "configuration\n");
1919 			*xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_211;
1920 			return 0;
1921 		}
1922 	} else if (of_device_is_compatible(np, "nvidia,tegra124-pcie") ||
1923 		   of_device_is_compatible(np, "nvidia,tegra210-pcie")) {
1924 		switch (lanes) {
1925 		case 0x0000104:
1926 			dev_info(dev, "4x1, 1x1 configuration\n");
1927 			*xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_X4_X1;
1928 			return 0;
1929 
1930 		case 0x0000102:
1931 			dev_info(dev, "2x1, 1x1 configuration\n");
1932 			*xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_X2_X1;
1933 			return 0;
1934 		}
1935 	} else if (of_device_is_compatible(np, "nvidia,tegra30-pcie")) {
1936 		switch (lanes) {
1937 		case 0x00000204:
1938 			dev_info(dev, "4x1, 2x1 configuration\n");
1939 			*xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_420;
1940 			return 0;
1941 
1942 		case 0x00020202:
1943 			dev_info(dev, "2x3 configuration\n");
1944 			*xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_222;
1945 			return 0;
1946 
1947 		case 0x00010104:
1948 			dev_info(dev, "4x1, 1x2 configuration\n");
1949 			*xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_411;
1950 			return 0;
1951 		}
1952 	} else if (of_device_is_compatible(np, "nvidia,tegra20-pcie")) {
1953 		switch (lanes) {
1954 		case 0x00000004:
1955 			dev_info(dev, "single-mode configuration\n");
1956 			*xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_SINGLE;
1957 			return 0;
1958 
1959 		case 0x00000202:
1960 			dev_info(dev, "dual-mode configuration\n");
1961 			*xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_DUAL;
1962 			return 0;
1963 		}
1964 	}
1965 
1966 	return -EINVAL;
1967 }
1968 
1969 /*
1970  * Check whether a given set of supplies is available in a device tree node.
1971  * This is used to check whether the new or the legacy device tree bindings
1972  * should be used.
1973  */
1974 static bool of_regulator_bulk_available(struct device_node *np,
1975 					struct regulator_bulk_data *supplies,
1976 					unsigned int num_supplies)
1977 {
1978 	char property[32];
1979 	unsigned int i;
1980 
1981 	for (i = 0; i < num_supplies; i++) {
1982 		snprintf(property, 32, "%s-supply", supplies[i].supply);
1983 
1984 		if (of_find_property(np, property, NULL) == NULL)
1985 			return false;
1986 	}
1987 
1988 	return true;
1989 }
1990 
1991 /*
1992  * Old versions of the device tree binding for this device used a set of power
1993  * supplies that didn't match the hardware inputs. This happened to work for a
1994  * number of cases but is not future proof. However to preserve backwards-
1995  * compatibility with old device trees, this function will try to use the old
1996  * set of supplies.
1997  */
1998 static int tegra_pcie_get_legacy_regulators(struct tegra_pcie *pcie)
1999 {
2000 	struct device *dev = pcie->dev;
2001 	struct device_node *np = dev->of_node;
2002 
2003 	if (of_device_is_compatible(np, "nvidia,tegra30-pcie"))
2004 		pcie->num_supplies = 3;
2005 	else if (of_device_is_compatible(np, "nvidia,tegra20-pcie"))
2006 		pcie->num_supplies = 2;
2007 
2008 	if (pcie->num_supplies == 0) {
2009 		dev_err(dev, "device %pOF not supported in legacy mode\n", np);
2010 		return -ENODEV;
2011 	}
2012 
2013 	pcie->supplies = devm_kcalloc(dev, pcie->num_supplies,
2014 				      sizeof(*pcie->supplies),
2015 				      GFP_KERNEL);
2016 	if (!pcie->supplies)
2017 		return -ENOMEM;
2018 
2019 	pcie->supplies[0].supply = "pex-clk";
2020 	pcie->supplies[1].supply = "vdd";
2021 
2022 	if (pcie->num_supplies > 2)
2023 		pcie->supplies[2].supply = "avdd";
2024 
2025 	return devm_regulator_bulk_get(dev, pcie->num_supplies, pcie->supplies);
2026 }
2027 
2028 /*
2029  * Obtains the list of regulators required for a particular generation of the
2030  * IP block.
2031  *
2032  * This would've been nice to do simply by providing static tables for use
2033  * with the regulator_bulk_*() API, but unfortunately Tegra30 is a bit quirky
2034  * in that it has two pairs or AVDD_PEX and VDD_PEX supplies (PEXA and PEXB)
2035  * and either seems to be optional depending on which ports are being used.
2036  */
2037 static int tegra_pcie_get_regulators(struct tegra_pcie *pcie, u32 lane_mask)
2038 {
2039 	struct device *dev = pcie->dev;
2040 	struct device_node *np = dev->of_node;
2041 	unsigned int i = 0;
2042 
2043 	if (of_device_is_compatible(np, "nvidia,tegra186-pcie")) {
2044 		pcie->num_supplies = 4;
2045 
2046 		pcie->supplies = devm_kcalloc(pcie->dev, pcie->num_supplies,
2047 					      sizeof(*pcie->supplies),
2048 					      GFP_KERNEL);
2049 		if (!pcie->supplies)
2050 			return -ENOMEM;
2051 
2052 		pcie->supplies[i++].supply = "dvdd-pex";
2053 		pcie->supplies[i++].supply = "hvdd-pex-pll";
2054 		pcie->supplies[i++].supply = "hvdd-pex";
2055 		pcie->supplies[i++].supply = "vddio-pexctl-aud";
2056 	} else if (of_device_is_compatible(np, "nvidia,tegra210-pcie")) {
2057 		pcie->num_supplies = 6;
2058 
2059 		pcie->supplies = devm_kcalloc(pcie->dev, pcie->num_supplies,
2060 					      sizeof(*pcie->supplies),
2061 					      GFP_KERNEL);
2062 		if (!pcie->supplies)
2063 			return -ENOMEM;
2064 
2065 		pcie->supplies[i++].supply = "avdd-pll-uerefe";
2066 		pcie->supplies[i++].supply = "hvddio-pex";
2067 		pcie->supplies[i++].supply = "dvddio-pex";
2068 		pcie->supplies[i++].supply = "dvdd-pex-pll";
2069 		pcie->supplies[i++].supply = "hvdd-pex-pll-e";
2070 		pcie->supplies[i++].supply = "vddio-pex-ctl";
2071 	} else if (of_device_is_compatible(np, "nvidia,tegra124-pcie")) {
2072 		pcie->num_supplies = 7;
2073 
2074 		pcie->supplies = devm_kcalloc(dev, pcie->num_supplies,
2075 					      sizeof(*pcie->supplies),
2076 					      GFP_KERNEL);
2077 		if (!pcie->supplies)
2078 			return -ENOMEM;
2079 
2080 		pcie->supplies[i++].supply = "avddio-pex";
2081 		pcie->supplies[i++].supply = "dvddio-pex";
2082 		pcie->supplies[i++].supply = "avdd-pex-pll";
2083 		pcie->supplies[i++].supply = "hvdd-pex";
2084 		pcie->supplies[i++].supply = "hvdd-pex-pll-e";
2085 		pcie->supplies[i++].supply = "vddio-pex-ctl";
2086 		pcie->supplies[i++].supply = "avdd-pll-erefe";
2087 	} else if (of_device_is_compatible(np, "nvidia,tegra30-pcie")) {
2088 		bool need_pexa = false, need_pexb = false;
2089 
2090 		/* VDD_PEXA and AVDD_PEXA supply lanes 0 to 3 */
2091 		if (lane_mask & 0x0f)
2092 			need_pexa = true;
2093 
2094 		/* VDD_PEXB and AVDD_PEXB supply lanes 4 to 5 */
2095 		if (lane_mask & 0x30)
2096 			need_pexb = true;
2097 
2098 		pcie->num_supplies = 4 + (need_pexa ? 2 : 0) +
2099 					 (need_pexb ? 2 : 0);
2100 
2101 		pcie->supplies = devm_kcalloc(dev, pcie->num_supplies,
2102 					      sizeof(*pcie->supplies),
2103 					      GFP_KERNEL);
2104 		if (!pcie->supplies)
2105 			return -ENOMEM;
2106 
2107 		pcie->supplies[i++].supply = "avdd-pex-pll";
2108 		pcie->supplies[i++].supply = "hvdd-pex";
2109 		pcie->supplies[i++].supply = "vddio-pex-ctl";
2110 		pcie->supplies[i++].supply = "avdd-plle";
2111 
2112 		if (need_pexa) {
2113 			pcie->supplies[i++].supply = "avdd-pexa";
2114 			pcie->supplies[i++].supply = "vdd-pexa";
2115 		}
2116 
2117 		if (need_pexb) {
2118 			pcie->supplies[i++].supply = "avdd-pexb";
2119 			pcie->supplies[i++].supply = "vdd-pexb";
2120 		}
2121 	} else if (of_device_is_compatible(np, "nvidia,tegra20-pcie")) {
2122 		pcie->num_supplies = 5;
2123 
2124 		pcie->supplies = devm_kcalloc(dev, pcie->num_supplies,
2125 					      sizeof(*pcie->supplies),
2126 					      GFP_KERNEL);
2127 		if (!pcie->supplies)
2128 			return -ENOMEM;
2129 
2130 		pcie->supplies[0].supply = "avdd-pex";
2131 		pcie->supplies[1].supply = "vdd-pex";
2132 		pcie->supplies[2].supply = "avdd-pex-pll";
2133 		pcie->supplies[3].supply = "avdd-plle";
2134 		pcie->supplies[4].supply = "vddio-pex-clk";
2135 	}
2136 
2137 	if (of_regulator_bulk_available(dev->of_node, pcie->supplies,
2138 					pcie->num_supplies))
2139 		return devm_regulator_bulk_get(dev, pcie->num_supplies,
2140 					       pcie->supplies);
2141 
2142 	/*
2143 	 * If not all regulators are available for this new scheme, assume
2144 	 * that the device tree complies with an older version of the device
2145 	 * tree binding.
2146 	 */
2147 	dev_info(dev, "using legacy DT binding for power supplies\n");
2148 
2149 	devm_kfree(dev, pcie->supplies);
2150 	pcie->num_supplies = 0;
2151 
2152 	return tegra_pcie_get_legacy_regulators(pcie);
2153 }
2154 
2155 static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)
2156 {
2157 	struct device *dev = pcie->dev;
2158 	struct device_node *np = dev->of_node, *port;
2159 	const struct tegra_pcie_soc *soc = pcie->soc;
2160 	struct of_pci_range_parser parser;
2161 	struct of_pci_range range;
2162 	u32 lanes = 0, mask = 0;
2163 	unsigned int lane = 0;
2164 	struct resource res;
2165 	int err;
2166 
2167 	if (of_pci_range_parser_init(&parser, np)) {
2168 		dev_err(dev, "missing \"ranges\" property\n");
2169 		return -EINVAL;
2170 	}
2171 
2172 	for_each_of_pci_range(&parser, &range) {
2173 		err = of_pci_range_to_resource(&range, np, &res);
2174 		if (err < 0)
2175 			return err;
2176 
2177 		switch (res.flags & IORESOURCE_TYPE_BITS) {
2178 		case IORESOURCE_IO:
2179 			/* Track the bus -> CPU I/O mapping offset. */
2180 			pcie->offset.io = res.start - range.pci_addr;
2181 
2182 			memcpy(&pcie->pio, &res, sizeof(res));
2183 			pcie->pio.name = np->full_name;
2184 
2185 			/*
2186 			 * The Tegra PCIe host bridge uses this to program the
2187 			 * mapping of the I/O space to the physical address,
2188 			 * so we override the .start and .end fields here that
2189 			 * of_pci_range_to_resource() converted to I/O space.
2190 			 * We also set the IORESOURCE_MEM type to clarify that
2191 			 * the resource is in the physical memory space.
2192 			 */
2193 			pcie->io.start = range.cpu_addr;
2194 			pcie->io.end = range.cpu_addr + range.size - 1;
2195 			pcie->io.flags = IORESOURCE_MEM;
2196 			pcie->io.name = "I/O";
2197 
2198 			memcpy(&res, &pcie->io, sizeof(res));
2199 			break;
2200 
2201 		case IORESOURCE_MEM:
2202 			/*
2203 			 * Track the bus -> CPU memory mapping offset. This
2204 			 * assumes that the prefetchable and non-prefetchable
2205 			 * regions will be the last of type IORESOURCE_MEM in
2206 			 * the ranges property.
2207 			 * */
2208 			pcie->offset.mem = res.start - range.pci_addr;
2209 
2210 			if (res.flags & IORESOURCE_PREFETCH) {
2211 				memcpy(&pcie->prefetch, &res, sizeof(res));
2212 				pcie->prefetch.name = "prefetchable";
2213 			} else {
2214 				memcpy(&pcie->mem, &res, sizeof(res));
2215 				pcie->mem.name = "non-prefetchable";
2216 			}
2217 			break;
2218 		}
2219 	}
2220 
2221 	err = of_pci_parse_bus_range(np, &pcie->busn);
2222 	if (err < 0) {
2223 		dev_err(dev, "failed to parse ranges property: %d\n", err);
2224 		pcie->busn.name = np->name;
2225 		pcie->busn.start = 0;
2226 		pcie->busn.end = 0xff;
2227 		pcie->busn.flags = IORESOURCE_BUS;
2228 	}
2229 
2230 	/* parse root ports */
2231 	for_each_child_of_node(np, port) {
2232 		struct tegra_pcie_port *rp;
2233 		unsigned int index;
2234 		u32 value;
2235 		char *label;
2236 
2237 		err = of_pci_get_devfn(port);
2238 		if (err < 0) {
2239 			dev_err(dev, "failed to parse address: %d\n", err);
2240 			goto err_node_put;
2241 		}
2242 
2243 		index = PCI_SLOT(err);
2244 
2245 		if (index < 1 || index > soc->num_ports) {
2246 			dev_err(dev, "invalid port number: %d\n", index);
2247 			err = -EINVAL;
2248 			goto err_node_put;
2249 		}
2250 
2251 		index--;
2252 
2253 		err = of_property_read_u32(port, "nvidia,num-lanes", &value);
2254 		if (err < 0) {
2255 			dev_err(dev, "failed to parse # of lanes: %d\n",
2256 				err);
2257 			goto err_node_put;
2258 		}
2259 
2260 		if (value > 16) {
2261 			dev_err(dev, "invalid # of lanes: %u\n", value);
2262 			err = -EINVAL;
2263 			goto err_node_put;
2264 		}
2265 
2266 		lanes |= value << (index << 3);
2267 
2268 		if (!of_device_is_available(port)) {
2269 			lane += value;
2270 			continue;
2271 		}
2272 
2273 		mask |= ((1 << value) - 1) << lane;
2274 		lane += value;
2275 
2276 		rp = devm_kzalloc(dev, sizeof(*rp), GFP_KERNEL);
2277 		if (!rp) {
2278 			err = -ENOMEM;
2279 			goto err_node_put;
2280 		}
2281 
2282 		err = of_address_to_resource(port, 0, &rp->regs);
2283 		if (err < 0) {
2284 			dev_err(dev, "failed to parse address: %d\n", err);
2285 			goto err_node_put;
2286 		}
2287 
2288 		INIT_LIST_HEAD(&rp->list);
2289 		rp->index = index;
2290 		rp->lanes = value;
2291 		rp->pcie = pcie;
2292 		rp->np = port;
2293 
2294 		rp->base = devm_pci_remap_cfg_resource(dev, &rp->regs);
2295 		if (IS_ERR(rp->base))
2296 			return PTR_ERR(rp->base);
2297 
2298 		label = devm_kasprintf(dev, GFP_KERNEL, "pex-reset-%u", index);
2299 		if (!label) {
2300 			dev_err(dev, "failed to create reset GPIO label\n");
2301 			return -ENOMEM;
2302 		}
2303 
2304 		/*
2305 		 * Returns -ENOENT if reset-gpios property is not populated
2306 		 * and in this case fall back to using AFI per port register
2307 		 * to toggle PERST# SFIO line.
2308 		 */
2309 		rp->reset_gpio = devm_gpiod_get_from_of_node(dev, port,
2310 							     "reset-gpios", 0,
2311 							     GPIOD_OUT_LOW,
2312 							     label);
2313 		if (IS_ERR(rp->reset_gpio)) {
2314 			if (PTR_ERR(rp->reset_gpio) == -ENOENT) {
2315 				rp->reset_gpio = NULL;
2316 			} else {
2317 				dev_err(dev, "failed to get reset GPIO: %d\n",
2318 					err);
2319 				return PTR_ERR(rp->reset_gpio);
2320 			}
2321 		}
2322 
2323 		list_add_tail(&rp->list, &pcie->ports);
2324 	}
2325 
2326 	err = tegra_pcie_get_xbar_config(pcie, lanes, &pcie->xbar_config);
2327 	if (err < 0) {
2328 		dev_err(dev, "invalid lane configuration\n");
2329 		return err;
2330 	}
2331 
2332 	err = tegra_pcie_get_regulators(pcie, mask);
2333 	if (err < 0)
2334 		return err;
2335 
2336 	return 0;
2337 
2338 err_node_put:
2339 	of_node_put(port);
2340 	return err;
2341 }
2342 
2343 /*
2344  * FIXME: If there are no PCIe cards attached, then calling this function
2345  * can result in the increase of the bootup time as there are big timeout
2346  * loops.
2347  */
2348 #define TEGRA_PCIE_LINKUP_TIMEOUT	200	/* up to 1.2 seconds */
2349 static bool tegra_pcie_port_check_link(struct tegra_pcie_port *port)
2350 {
2351 	struct device *dev = port->pcie->dev;
2352 	unsigned int retries = 3;
2353 	unsigned long value;
2354 
2355 	/* override presence detection */
2356 	value = readl(port->base + RP_PRIV_MISC);
2357 	value &= ~RP_PRIV_MISC_PRSNT_MAP_EP_ABSNT;
2358 	value |= RP_PRIV_MISC_PRSNT_MAP_EP_PRSNT;
2359 	writel(value, port->base + RP_PRIV_MISC);
2360 
2361 	do {
2362 		unsigned int timeout = TEGRA_PCIE_LINKUP_TIMEOUT;
2363 
2364 		do {
2365 			value = readl(port->base + RP_VEND_XP);
2366 
2367 			if (value & RP_VEND_XP_DL_UP)
2368 				break;
2369 
2370 			usleep_range(1000, 2000);
2371 		} while (--timeout);
2372 
2373 		if (!timeout) {
2374 			dev_dbg(dev, "link %u down, retrying\n", port->index);
2375 			goto retry;
2376 		}
2377 
2378 		timeout = TEGRA_PCIE_LINKUP_TIMEOUT;
2379 
2380 		do {
2381 			value = readl(port->base + RP_LINK_CONTROL_STATUS);
2382 
2383 			if (value & RP_LINK_CONTROL_STATUS_DL_LINK_ACTIVE)
2384 				return true;
2385 
2386 			usleep_range(1000, 2000);
2387 		} while (--timeout);
2388 
2389 retry:
2390 		tegra_pcie_port_reset(port);
2391 	} while (--retries);
2392 
2393 	return false;
2394 }
2395 
2396 static void tegra_pcie_change_link_speed(struct tegra_pcie *pcie)
2397 {
2398 	struct device *dev = pcie->dev;
2399 	struct tegra_pcie_port *port;
2400 	ktime_t deadline;
2401 	u32 value;
2402 
2403 	list_for_each_entry(port, &pcie->ports, list) {
2404 		/*
2405 		 * "Supported Link Speeds Vector" in "Link Capabilities 2"
2406 		 * is not supported by Tegra. tegra_pcie_change_link_speed()
2407 		 * is called only for Tegra chips which support Gen2.
2408 		 * So there no harm if supported link speed is not verified.
2409 		 */
2410 		value = readl(port->base + RP_LINK_CONTROL_STATUS_2);
2411 		value &= ~PCI_EXP_LNKSTA_CLS;
2412 		value |= PCI_EXP_LNKSTA_CLS_5_0GB;
2413 		writel(value, port->base + RP_LINK_CONTROL_STATUS_2);
2414 
2415 		/*
2416 		 * Poll until link comes back from recovery to avoid race
2417 		 * condition.
2418 		 */
2419 		deadline = ktime_add_us(ktime_get(), LINK_RETRAIN_TIMEOUT);
2420 
2421 		while (ktime_before(ktime_get(), deadline)) {
2422 			value = readl(port->base + RP_LINK_CONTROL_STATUS);
2423 			if ((value & PCI_EXP_LNKSTA_LT) == 0)
2424 				break;
2425 
2426 			usleep_range(2000, 3000);
2427 		}
2428 
2429 		if (value & PCI_EXP_LNKSTA_LT)
2430 			dev_warn(dev, "PCIe port %u link is in recovery\n",
2431 				 port->index);
2432 
2433 		/* Retrain the link */
2434 		value = readl(port->base + RP_LINK_CONTROL_STATUS);
2435 		value |= PCI_EXP_LNKCTL_RL;
2436 		writel(value, port->base + RP_LINK_CONTROL_STATUS);
2437 
2438 		deadline = ktime_add_us(ktime_get(), LINK_RETRAIN_TIMEOUT);
2439 
2440 		while (ktime_before(ktime_get(), deadline)) {
2441 			value = readl(port->base + RP_LINK_CONTROL_STATUS);
2442 			if ((value & PCI_EXP_LNKSTA_LT) == 0)
2443 				break;
2444 
2445 			usleep_range(2000, 3000);
2446 		}
2447 
2448 		if (value & PCI_EXP_LNKSTA_LT)
2449 			dev_err(dev, "failed to retrain link of port %u\n",
2450 				port->index);
2451 	}
2452 }
2453 
2454 static void tegra_pcie_enable_ports(struct tegra_pcie *pcie)
2455 {
2456 	struct device *dev = pcie->dev;
2457 	struct tegra_pcie_port *port, *tmp;
2458 
2459 	list_for_each_entry_safe(port, tmp, &pcie->ports, list) {
2460 		dev_info(dev, "probing port %u, using %u lanes\n",
2461 			 port->index, port->lanes);
2462 
2463 		tegra_pcie_port_enable(port);
2464 	}
2465 
2466 	/* Start LTSSM from Tegra side */
2467 	reset_control_deassert(pcie->pcie_xrst);
2468 
2469 	list_for_each_entry_safe(port, tmp, &pcie->ports, list) {
2470 		if (tegra_pcie_port_check_link(port))
2471 			continue;
2472 
2473 		dev_info(dev, "link %u down, ignoring\n", port->index);
2474 
2475 		tegra_pcie_port_disable(port);
2476 		tegra_pcie_port_free(port);
2477 	}
2478 
2479 	if (pcie->soc->has_gen2)
2480 		tegra_pcie_change_link_speed(pcie);
2481 }
2482 
2483 static void tegra_pcie_disable_ports(struct tegra_pcie *pcie)
2484 {
2485 	struct tegra_pcie_port *port, *tmp;
2486 
2487 	reset_control_assert(pcie->pcie_xrst);
2488 
2489 	list_for_each_entry_safe(port, tmp, &pcie->ports, list)
2490 		tegra_pcie_port_disable(port);
2491 }
2492 
2493 static const struct tegra_pcie_port_soc tegra20_pcie_ports[] = {
2494 	{ .pme.turnoff_bit = 0, .pme.ack_bit =  5 },
2495 	{ .pme.turnoff_bit = 8, .pme.ack_bit = 10 },
2496 };
2497 
2498 static const struct tegra_pcie_soc tegra20_pcie = {
2499 	.num_ports = 2,
2500 	.ports = tegra20_pcie_ports,
2501 	.msi_base_shift = 0,
2502 	.afi_pex2_ctrl = 0x128,
2503 	.pads_pll_ctl = PADS_PLL_CTL_TEGRA20,
2504 	.tx_ref_sel = PADS_PLL_CTL_TXCLKREF_DIV10,
2505 	.pads_refclk_cfg0 = 0xfa5cfa5c,
2506 	.has_pex_clkreq_en = false,
2507 	.has_pex_bias_ctrl = false,
2508 	.has_intr_prsnt_sense = false,
2509 	.has_cml_clk = false,
2510 	.has_gen2 = false,
2511 	.force_pca_enable = false,
2512 	.program_uphy = true,
2513 	.update_clamp_threshold = false,
2514 	.program_deskew_time = false,
2515 	.raw_violation_fixup = false,
2516 	.update_fc_timer = false,
2517 	.has_cache_bars = true,
2518 	.ectl.enable = false,
2519 };
2520 
2521 static const struct tegra_pcie_port_soc tegra30_pcie_ports[] = {
2522 	{ .pme.turnoff_bit =  0, .pme.ack_bit =  5 },
2523 	{ .pme.turnoff_bit =  8, .pme.ack_bit = 10 },
2524 	{ .pme.turnoff_bit = 16, .pme.ack_bit = 18 },
2525 };
2526 
2527 static const struct tegra_pcie_soc tegra30_pcie = {
2528 	.num_ports = 3,
2529 	.ports = tegra30_pcie_ports,
2530 	.msi_base_shift = 8,
2531 	.pads_pll_ctl = PADS_PLL_CTL_TEGRA30,
2532 	.tx_ref_sel = PADS_PLL_CTL_TXCLKREF_BUF_EN,
2533 	.pads_refclk_cfg0 = 0xfa5cfa5c,
2534 	.pads_refclk_cfg1 = 0xfa5cfa5c,
2535 	.has_pex_clkreq_en = true,
2536 	.has_pex_bias_ctrl = true,
2537 	.has_intr_prsnt_sense = true,
2538 	.has_cml_clk = true,
2539 	.has_gen2 = false,
2540 	.force_pca_enable = false,
2541 	.program_uphy = true,
2542 	.update_clamp_threshold = false,
2543 	.program_deskew_time = false,
2544 	.raw_violation_fixup = false,
2545 	.update_fc_timer = false,
2546 	.has_cache_bars = false,
2547 	.ectl.enable = false,
2548 };
2549 
2550 static const struct tegra_pcie_soc tegra124_pcie = {
2551 	.num_ports = 2,
2552 	.ports = tegra20_pcie_ports,
2553 	.msi_base_shift = 8,
2554 	.pads_pll_ctl = PADS_PLL_CTL_TEGRA30,
2555 	.tx_ref_sel = PADS_PLL_CTL_TXCLKREF_BUF_EN,
2556 	.pads_refclk_cfg0 = 0x44ac44ac,
2557 	/* FC threshold is bit[25:18] */
2558 	.update_fc_threshold = 0x03fc0000,
2559 	.has_pex_clkreq_en = true,
2560 	.has_pex_bias_ctrl = true,
2561 	.has_intr_prsnt_sense = true,
2562 	.has_cml_clk = true,
2563 	.has_gen2 = true,
2564 	.force_pca_enable = false,
2565 	.program_uphy = true,
2566 	.update_clamp_threshold = true,
2567 	.program_deskew_time = false,
2568 	.raw_violation_fixup = true,
2569 	.update_fc_timer = false,
2570 	.has_cache_bars = false,
2571 	.ectl.enable = false,
2572 };
2573 
2574 static const struct tegra_pcie_soc tegra210_pcie = {
2575 	.num_ports = 2,
2576 	.ports = tegra20_pcie_ports,
2577 	.msi_base_shift = 8,
2578 	.pads_pll_ctl = PADS_PLL_CTL_TEGRA30,
2579 	.tx_ref_sel = PADS_PLL_CTL_TXCLKREF_BUF_EN,
2580 	.pads_refclk_cfg0 = 0x90b890b8,
2581 	/* FC threshold is bit[25:18] */
2582 	.update_fc_threshold = 0x01800000,
2583 	.has_pex_clkreq_en = true,
2584 	.has_pex_bias_ctrl = true,
2585 	.has_intr_prsnt_sense = true,
2586 	.has_cml_clk = true,
2587 	.has_gen2 = true,
2588 	.force_pca_enable = true,
2589 	.program_uphy = true,
2590 	.update_clamp_threshold = true,
2591 	.program_deskew_time = true,
2592 	.raw_violation_fixup = false,
2593 	.update_fc_timer = true,
2594 	.has_cache_bars = false,
2595 	.ectl = {
2596 		.regs = {
2597 			.rp_ectl_2_r1 = 0x0000000f,
2598 			.rp_ectl_4_r1 = 0x00000067,
2599 			.rp_ectl_5_r1 = 0x55010000,
2600 			.rp_ectl_6_r1 = 0x00000001,
2601 			.rp_ectl_2_r2 = 0x0000008f,
2602 			.rp_ectl_4_r2 = 0x000000c7,
2603 			.rp_ectl_5_r2 = 0x55010000,
2604 			.rp_ectl_6_r2 = 0x00000001,
2605 		},
2606 		.enable = true,
2607 	},
2608 };
2609 
2610 static const struct tegra_pcie_port_soc tegra186_pcie_ports[] = {
2611 	{ .pme.turnoff_bit =  0, .pme.ack_bit =  5 },
2612 	{ .pme.turnoff_bit =  8, .pme.ack_bit = 10 },
2613 	{ .pme.turnoff_bit = 12, .pme.ack_bit = 14 },
2614 };
2615 
2616 static const struct tegra_pcie_soc tegra186_pcie = {
2617 	.num_ports = 3,
2618 	.ports = tegra186_pcie_ports,
2619 	.msi_base_shift = 8,
2620 	.afi_pex2_ctrl = 0x19c,
2621 	.pads_pll_ctl = PADS_PLL_CTL_TEGRA30,
2622 	.tx_ref_sel = PADS_PLL_CTL_TXCLKREF_BUF_EN,
2623 	.pads_refclk_cfg0 = 0x80b880b8,
2624 	.pads_refclk_cfg1 = 0x000480b8,
2625 	.has_pex_clkreq_en = true,
2626 	.has_pex_bias_ctrl = true,
2627 	.has_intr_prsnt_sense = true,
2628 	.has_cml_clk = false,
2629 	.has_gen2 = true,
2630 	.force_pca_enable = false,
2631 	.program_uphy = false,
2632 	.update_clamp_threshold = false,
2633 	.program_deskew_time = false,
2634 	.raw_violation_fixup = false,
2635 	.update_fc_timer = false,
2636 	.has_cache_bars = false,
2637 	.ectl.enable = false,
2638 };
2639 
2640 static const struct of_device_id tegra_pcie_of_match[] = {
2641 	{ .compatible = "nvidia,tegra186-pcie", .data = &tegra186_pcie },
2642 	{ .compatible = "nvidia,tegra210-pcie", .data = &tegra210_pcie },
2643 	{ .compatible = "nvidia,tegra124-pcie", .data = &tegra124_pcie },
2644 	{ .compatible = "nvidia,tegra30-pcie", .data = &tegra30_pcie },
2645 	{ .compatible = "nvidia,tegra20-pcie", .data = &tegra20_pcie },
2646 	{ },
2647 };
2648 
2649 static void *tegra_pcie_ports_seq_start(struct seq_file *s, loff_t *pos)
2650 {
2651 	struct tegra_pcie *pcie = s->private;
2652 
2653 	if (list_empty(&pcie->ports))
2654 		return NULL;
2655 
2656 	seq_printf(s, "Index  Status\n");
2657 
2658 	return seq_list_start(&pcie->ports, *pos);
2659 }
2660 
2661 static void *tegra_pcie_ports_seq_next(struct seq_file *s, void *v, loff_t *pos)
2662 {
2663 	struct tegra_pcie *pcie = s->private;
2664 
2665 	return seq_list_next(v, &pcie->ports, pos);
2666 }
2667 
2668 static void tegra_pcie_ports_seq_stop(struct seq_file *s, void *v)
2669 {
2670 }
2671 
2672 static int tegra_pcie_ports_seq_show(struct seq_file *s, void *v)
2673 {
2674 	bool up = false, active = false;
2675 	struct tegra_pcie_port *port;
2676 	unsigned int value;
2677 
2678 	port = list_entry(v, struct tegra_pcie_port, list);
2679 
2680 	value = readl(port->base + RP_VEND_XP);
2681 
2682 	if (value & RP_VEND_XP_DL_UP)
2683 		up = true;
2684 
2685 	value = readl(port->base + RP_LINK_CONTROL_STATUS);
2686 
2687 	if (value & RP_LINK_CONTROL_STATUS_DL_LINK_ACTIVE)
2688 		active = true;
2689 
2690 	seq_printf(s, "%2u     ", port->index);
2691 
2692 	if (up)
2693 		seq_printf(s, "up");
2694 
2695 	if (active) {
2696 		if (up)
2697 			seq_printf(s, ", ");
2698 
2699 		seq_printf(s, "active");
2700 	}
2701 
2702 	seq_printf(s, "\n");
2703 	return 0;
2704 }
2705 
2706 static const struct seq_operations tegra_pcie_ports_seq_ops = {
2707 	.start = tegra_pcie_ports_seq_start,
2708 	.next = tegra_pcie_ports_seq_next,
2709 	.stop = tegra_pcie_ports_seq_stop,
2710 	.show = tegra_pcie_ports_seq_show,
2711 };
2712 
2713 static int tegra_pcie_ports_open(struct inode *inode, struct file *file)
2714 {
2715 	struct tegra_pcie *pcie = inode->i_private;
2716 	struct seq_file *s;
2717 	int err;
2718 
2719 	err = seq_open(file, &tegra_pcie_ports_seq_ops);
2720 	if (err)
2721 		return err;
2722 
2723 	s = file->private_data;
2724 	s->private = pcie;
2725 
2726 	return 0;
2727 }
2728 
2729 static const struct file_operations tegra_pcie_ports_ops = {
2730 	.owner = THIS_MODULE,
2731 	.open = tegra_pcie_ports_open,
2732 	.read = seq_read,
2733 	.llseek = seq_lseek,
2734 	.release = seq_release,
2735 };
2736 
2737 static void tegra_pcie_debugfs_exit(struct tegra_pcie *pcie)
2738 {
2739 	debugfs_remove_recursive(pcie->debugfs);
2740 	pcie->debugfs = NULL;
2741 }
2742 
2743 static int tegra_pcie_debugfs_init(struct tegra_pcie *pcie)
2744 {
2745 	struct dentry *file;
2746 
2747 	pcie->debugfs = debugfs_create_dir("pcie", NULL);
2748 	if (!pcie->debugfs)
2749 		return -ENOMEM;
2750 
2751 	file = debugfs_create_file("ports", S_IFREG | S_IRUGO, pcie->debugfs,
2752 				   pcie, &tegra_pcie_ports_ops);
2753 	if (!file)
2754 		goto remove;
2755 
2756 	return 0;
2757 
2758 remove:
2759 	tegra_pcie_debugfs_exit(pcie);
2760 	return -ENOMEM;
2761 }
2762 
2763 static int tegra_pcie_probe(struct platform_device *pdev)
2764 {
2765 	struct device *dev = &pdev->dev;
2766 	struct pci_host_bridge *host;
2767 	struct tegra_pcie *pcie;
2768 	struct pci_bus *child;
2769 	int err;
2770 
2771 	host = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
2772 	if (!host)
2773 		return -ENOMEM;
2774 
2775 	pcie = pci_host_bridge_priv(host);
2776 	host->sysdata = pcie;
2777 	platform_set_drvdata(pdev, pcie);
2778 
2779 	pcie->soc = of_device_get_match_data(dev);
2780 	INIT_LIST_HEAD(&pcie->ports);
2781 	pcie->dev = dev;
2782 
2783 	err = tegra_pcie_parse_dt(pcie);
2784 	if (err < 0)
2785 		return err;
2786 
2787 	err = tegra_pcie_get_resources(pcie);
2788 	if (err < 0) {
2789 		dev_err(dev, "failed to request resources: %d\n", err);
2790 		return err;
2791 	}
2792 
2793 	err = tegra_pcie_msi_setup(pcie);
2794 	if (err < 0) {
2795 		dev_err(dev, "failed to enable MSI support: %d\n", err);
2796 		goto put_resources;
2797 	}
2798 
2799 	pm_runtime_enable(pcie->dev);
2800 	err = pm_runtime_get_sync(pcie->dev);
2801 	if (err) {
2802 		dev_err(dev, "fail to enable pcie controller: %d\n", err);
2803 		goto teardown_msi;
2804 	}
2805 
2806 	err = tegra_pcie_request_resources(pcie);
2807 	if (err)
2808 		goto pm_runtime_put;
2809 
2810 	host->busnr = pcie->busn.start;
2811 	host->dev.parent = &pdev->dev;
2812 	host->ops = &tegra_pcie_ops;
2813 	host->map_irq = tegra_pcie_map_irq;
2814 	host->swizzle_irq = pci_common_swizzle;
2815 
2816 	err = pci_scan_root_bus_bridge(host);
2817 	if (err < 0) {
2818 		dev_err(dev, "failed to register host: %d\n", err);
2819 		goto free_resources;
2820 	}
2821 
2822 	pci_bus_size_bridges(host->bus);
2823 	pci_bus_assign_resources(host->bus);
2824 
2825 	list_for_each_entry(child, &host->bus->children, node)
2826 		pcie_bus_configure_settings(child);
2827 
2828 	pci_bus_add_devices(host->bus);
2829 
2830 	if (IS_ENABLED(CONFIG_DEBUG_FS)) {
2831 		err = tegra_pcie_debugfs_init(pcie);
2832 		if (err < 0)
2833 			dev_err(dev, "failed to setup debugfs: %d\n", err);
2834 	}
2835 
2836 	return 0;
2837 
2838 free_resources:
2839 	tegra_pcie_free_resources(pcie);
2840 pm_runtime_put:
2841 	pm_runtime_put_sync(pcie->dev);
2842 	pm_runtime_disable(pcie->dev);
2843 teardown_msi:
2844 	tegra_pcie_msi_teardown(pcie);
2845 put_resources:
2846 	tegra_pcie_put_resources(pcie);
2847 	return err;
2848 }
2849 
2850 static int tegra_pcie_remove(struct platform_device *pdev)
2851 {
2852 	struct tegra_pcie *pcie = platform_get_drvdata(pdev);
2853 	struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
2854 	struct tegra_pcie_port *port, *tmp;
2855 
2856 	if (IS_ENABLED(CONFIG_DEBUG_FS))
2857 		tegra_pcie_debugfs_exit(pcie);
2858 
2859 	pci_stop_root_bus(host->bus);
2860 	pci_remove_root_bus(host->bus);
2861 	tegra_pcie_free_resources(pcie);
2862 	pm_runtime_put_sync(pcie->dev);
2863 	pm_runtime_disable(pcie->dev);
2864 
2865 	if (IS_ENABLED(CONFIG_PCI_MSI))
2866 		tegra_pcie_msi_teardown(pcie);
2867 
2868 	tegra_pcie_put_resources(pcie);
2869 
2870 	list_for_each_entry_safe(port, tmp, &pcie->ports, list)
2871 		tegra_pcie_port_free(port);
2872 
2873 	return 0;
2874 }
2875 
2876 static int __maybe_unused tegra_pcie_pm_suspend(struct device *dev)
2877 {
2878 	struct tegra_pcie *pcie = dev_get_drvdata(dev);
2879 	struct tegra_pcie_port *port;
2880 	int err;
2881 
2882 	list_for_each_entry(port, &pcie->ports, list)
2883 		tegra_pcie_pme_turnoff(port);
2884 
2885 	tegra_pcie_disable_ports(pcie);
2886 
2887 	/*
2888 	 * AFI_INTR is unmasked in tegra_pcie_enable_controller(), mask it to
2889 	 * avoid unwanted interrupts raised by AFI after pex_rst is asserted.
2890 	 */
2891 	tegra_pcie_disable_interrupts(pcie);
2892 
2893 	if (pcie->soc->program_uphy) {
2894 		err = tegra_pcie_phy_power_off(pcie);
2895 		if (err < 0)
2896 			dev_err(dev, "failed to power off PHY(s): %d\n", err);
2897 	}
2898 
2899 	reset_control_assert(pcie->pex_rst);
2900 	clk_disable_unprepare(pcie->pex_clk);
2901 
2902 	if (IS_ENABLED(CONFIG_PCI_MSI))
2903 		tegra_pcie_disable_msi(pcie);
2904 
2905 	pinctrl_pm_select_idle_state(dev);
2906 	tegra_pcie_power_off(pcie);
2907 
2908 	return 0;
2909 }
2910 
2911 static int __maybe_unused tegra_pcie_pm_resume(struct device *dev)
2912 {
2913 	struct tegra_pcie *pcie = dev_get_drvdata(dev);
2914 	int err;
2915 
2916 	err = tegra_pcie_power_on(pcie);
2917 	if (err) {
2918 		dev_err(dev, "tegra pcie power on fail: %d\n", err);
2919 		return err;
2920 	}
2921 
2922 	err = pinctrl_pm_select_default_state(dev);
2923 	if (err < 0) {
2924 		dev_err(dev, "failed to disable PCIe IO DPD: %d\n", err);
2925 		goto poweroff;
2926 	}
2927 
2928 	tegra_pcie_enable_controller(pcie);
2929 	tegra_pcie_setup_translations(pcie);
2930 
2931 	if (IS_ENABLED(CONFIG_PCI_MSI))
2932 		tegra_pcie_enable_msi(pcie);
2933 
2934 	err = clk_prepare_enable(pcie->pex_clk);
2935 	if (err) {
2936 		dev_err(dev, "failed to enable PEX clock: %d\n", err);
2937 		goto pex_dpd_enable;
2938 	}
2939 
2940 	reset_control_deassert(pcie->pex_rst);
2941 
2942 	if (pcie->soc->program_uphy) {
2943 		err = tegra_pcie_phy_power_on(pcie);
2944 		if (err < 0) {
2945 			dev_err(dev, "failed to power on PHY(s): %d\n", err);
2946 			goto disable_pex_clk;
2947 		}
2948 	}
2949 
2950 	tegra_pcie_apply_pad_settings(pcie);
2951 	tegra_pcie_enable_ports(pcie);
2952 
2953 	return 0;
2954 
2955 disable_pex_clk:
2956 	reset_control_assert(pcie->pex_rst);
2957 	clk_disable_unprepare(pcie->pex_clk);
2958 pex_dpd_enable:
2959 	pinctrl_pm_select_idle_state(dev);
2960 poweroff:
2961 	tegra_pcie_power_off(pcie);
2962 
2963 	return err;
2964 }
2965 
2966 static const struct dev_pm_ops tegra_pcie_pm_ops = {
2967 	SET_RUNTIME_PM_OPS(tegra_pcie_pm_suspend, tegra_pcie_pm_resume, NULL)
2968 	SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(tegra_pcie_pm_suspend,
2969 				      tegra_pcie_pm_resume)
2970 };
2971 
2972 static struct platform_driver tegra_pcie_driver = {
2973 	.driver = {
2974 		.name = "tegra-pcie",
2975 		.of_match_table = tegra_pcie_of_match,
2976 		.suppress_bind_attrs = true,
2977 		.pm = &tegra_pcie_pm_ops,
2978 	},
2979 	.probe = tegra_pcie_probe,
2980 	.remove = tegra_pcie_remove,
2981 };
2982 module_platform_driver(tegra_pcie_driver);
2983 MODULE_LICENSE("GPL");
2984