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