PCI: tegra: No need to check return value of debugfs_create() functions
[linux-2.6-microblaze.git] / drivers / pci / controller / dwc / pcie-tegra194.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * PCIe host controller driver for Tegra194 SoC
4  *
5  * Copyright (C) 2019 NVIDIA Corporation.
6  *
7  * Author: Vidya Sagar <vidyas@nvidia.com>
8  */
9
10 #include <linux/clk.h>
11 #include <linux/debugfs.h>
12 #include <linux/delay.h>
13 #include <linux/gpio.h>
14 #include <linux/gpio/consumer.h>
15 #include <linux/interrupt.h>
16 #include <linux/iopoll.h>
17 #include <linux/kernel.h>
18 #include <linux/module.h>
19 #include <linux/of.h>
20 #include <linux/of_device.h>
21 #include <linux/of_gpio.h>
22 #include <linux/of_irq.h>
23 #include <linux/of_pci.h>
24 #include <linux/pci.h>
25 #include <linux/phy/phy.h>
26 #include <linux/pinctrl/consumer.h>
27 #include <linux/platform_device.h>
28 #include <linux/pm_runtime.h>
29 #include <linux/random.h>
30 #include <linux/reset.h>
31 #include <linux/resource.h>
32 #include <linux/types.h>
33 #include "pcie-designware.h"
34 #include <soc/tegra/bpmp.h>
35 #include <soc/tegra/bpmp-abi.h>
36 #include "../../pci.h"
37
38 #define APPL_PINMUX                             0x0
39 #define APPL_PINMUX_PEX_RST                     BIT(0)
40 #define APPL_PINMUX_CLKREQ_OVERRIDE_EN          BIT(2)
41 #define APPL_PINMUX_CLKREQ_OVERRIDE             BIT(3)
42 #define APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE_EN   BIT(4)
43 #define APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE      BIT(5)
44
45 #define APPL_CTRL                               0x4
46 #define APPL_CTRL_SYS_PRE_DET_STATE             BIT(6)
47 #define APPL_CTRL_LTSSM_EN                      BIT(7)
48 #define APPL_CTRL_HW_HOT_RST_EN                 BIT(20)
49 #define APPL_CTRL_HW_HOT_RST_MODE_MASK          GENMASK(1, 0)
50 #define APPL_CTRL_HW_HOT_RST_MODE_SHIFT         22
51 #define APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST      0x1
52
53 #define APPL_INTR_EN_L0_0                       0x8
54 #define APPL_INTR_EN_L0_0_LINK_STATE_INT_EN     BIT(0)
55 #define APPL_INTR_EN_L0_0_MSI_RCV_INT_EN        BIT(4)
56 #define APPL_INTR_EN_L0_0_INT_INT_EN            BIT(8)
57 #define APPL_INTR_EN_L0_0_PCI_CMD_EN_INT_EN     BIT(15)
58 #define APPL_INTR_EN_L0_0_CDM_REG_CHK_INT_EN    BIT(19)
59 #define APPL_INTR_EN_L0_0_SYS_INTR_EN           BIT(30)
60 #define APPL_INTR_EN_L0_0_SYS_MSI_INTR_EN       BIT(31)
61
62 #define APPL_INTR_STATUS_L0                     0xC
63 #define APPL_INTR_STATUS_L0_LINK_STATE_INT      BIT(0)
64 #define APPL_INTR_STATUS_L0_INT_INT             BIT(8)
65 #define APPL_INTR_STATUS_L0_PCI_CMD_EN_INT      BIT(15)
66 #define APPL_INTR_STATUS_L0_PEX_RST_INT         BIT(16)
67 #define APPL_INTR_STATUS_L0_CDM_REG_CHK_INT     BIT(18)
68
69 #define APPL_INTR_EN_L1_0_0                             0x1C
70 #define APPL_INTR_EN_L1_0_0_LINK_REQ_RST_NOT_INT_EN     BIT(1)
71 #define APPL_INTR_EN_L1_0_0_RDLH_LINK_UP_INT_EN         BIT(3)
72 #define APPL_INTR_EN_L1_0_0_HOT_RESET_DONE_INT_EN       BIT(30)
73
74 #define APPL_INTR_STATUS_L1_0_0                         0x20
75 #define APPL_INTR_STATUS_L1_0_0_LINK_REQ_RST_NOT_CHGED  BIT(1)
76 #define APPL_INTR_STATUS_L1_0_0_RDLH_LINK_UP_CHGED      BIT(3)
77 #define APPL_INTR_STATUS_L1_0_0_HOT_RESET_DONE          BIT(30)
78
79 #define APPL_INTR_STATUS_L1_1                   0x2C
80 #define APPL_INTR_STATUS_L1_2                   0x30
81 #define APPL_INTR_STATUS_L1_3                   0x34
82 #define APPL_INTR_STATUS_L1_6                   0x3C
83 #define APPL_INTR_STATUS_L1_7                   0x40
84 #define APPL_INTR_STATUS_L1_15_CFG_BME_CHGED    BIT(1)
85
86 #define APPL_INTR_EN_L1_8_0                     0x44
87 #define APPL_INTR_EN_L1_8_BW_MGT_INT_EN         BIT(2)
88 #define APPL_INTR_EN_L1_8_AUTO_BW_INT_EN        BIT(3)
89 #define APPL_INTR_EN_L1_8_INTX_EN               BIT(11)
90 #define APPL_INTR_EN_L1_8_AER_INT_EN            BIT(15)
91
92 #define APPL_INTR_STATUS_L1_8_0                 0x4C
93 #define APPL_INTR_STATUS_L1_8_0_EDMA_INT_MASK   GENMASK(11, 6)
94 #define APPL_INTR_STATUS_L1_8_0_BW_MGT_INT_STS  BIT(2)
95 #define APPL_INTR_STATUS_L1_8_0_AUTO_BW_INT_STS BIT(3)
96
97 #define APPL_INTR_STATUS_L1_9                   0x54
98 #define APPL_INTR_STATUS_L1_10                  0x58
99 #define APPL_INTR_STATUS_L1_11                  0x64
100 #define APPL_INTR_STATUS_L1_13                  0x74
101 #define APPL_INTR_STATUS_L1_14                  0x78
102 #define APPL_INTR_STATUS_L1_15                  0x7C
103 #define APPL_INTR_STATUS_L1_17                  0x88
104
105 #define APPL_INTR_EN_L1_18                              0x90
106 #define APPL_INTR_EN_L1_18_CDM_REG_CHK_CMPLT            BIT(2)
107 #define APPL_INTR_EN_L1_18_CDM_REG_CHK_CMP_ERR          BIT(1)
108 #define APPL_INTR_EN_L1_18_CDM_REG_CHK_LOGIC_ERR        BIT(0)
109
110 #define APPL_INTR_STATUS_L1_18                          0x94
111 #define APPL_INTR_STATUS_L1_18_CDM_REG_CHK_CMPLT        BIT(2)
112 #define APPL_INTR_STATUS_L1_18_CDM_REG_CHK_CMP_ERR      BIT(1)
113 #define APPL_INTR_STATUS_L1_18_CDM_REG_CHK_LOGIC_ERR    BIT(0)
114
115 #define APPL_MSI_CTRL_1                         0xAC
116
117 #define APPL_MSI_CTRL_2                         0xB0
118
119 #define APPL_LEGACY_INTX                        0xB8
120
121 #define APPL_LTR_MSG_1                          0xC4
122 #define LTR_MSG_REQ                             BIT(15)
123 #define LTR_MST_NO_SNOOP_SHIFT                  16
124
125 #define APPL_LTR_MSG_2                          0xC8
126 #define APPL_LTR_MSG_2_LTR_MSG_REQ_STATE        BIT(3)
127
128 #define APPL_LINK_STATUS                        0xCC
129 #define APPL_LINK_STATUS_RDLH_LINK_UP           BIT(0)
130
131 #define APPL_DEBUG                              0xD0
132 #define APPL_DEBUG_PM_LINKST_IN_L2_LAT          BIT(21)
133 #define APPL_DEBUG_PM_LINKST_IN_L0              0x11
134 #define APPL_DEBUG_LTSSM_STATE_MASK             GENMASK(8, 3)
135 #define APPL_DEBUG_LTSSM_STATE_SHIFT            3
136 #define LTSSM_STATE_PRE_DETECT                  5
137
138 #define APPL_RADM_STATUS                        0xE4
139 #define APPL_PM_XMT_TURNOFF_STATE               BIT(0)
140
141 #define APPL_DM_TYPE                            0x100
142 #define APPL_DM_TYPE_MASK                       GENMASK(3, 0)
143 #define APPL_DM_TYPE_RP                         0x4
144 #define APPL_DM_TYPE_EP                         0x0
145
146 #define APPL_CFG_BASE_ADDR                      0x104
147 #define APPL_CFG_BASE_ADDR_MASK                 GENMASK(31, 12)
148
149 #define APPL_CFG_IATU_DMA_BASE_ADDR             0x108
150 #define APPL_CFG_IATU_DMA_BASE_ADDR_MASK        GENMASK(31, 18)
151
152 #define APPL_CFG_MISC                           0x110
153 #define APPL_CFG_MISC_SLV_EP_MODE               BIT(14)
154 #define APPL_CFG_MISC_ARCACHE_MASK              GENMASK(13, 10)
155 #define APPL_CFG_MISC_ARCACHE_SHIFT             10
156 #define APPL_CFG_MISC_ARCACHE_VAL               3
157
158 #define APPL_CFG_SLCG_OVERRIDE                  0x114
159 #define APPL_CFG_SLCG_OVERRIDE_SLCG_EN_MASTER   BIT(0)
160
161 #define APPL_CAR_RESET_OVRD                             0x12C
162 #define APPL_CAR_RESET_OVRD_CYA_OVERRIDE_CORE_RST_N     BIT(0)
163
164 #define IO_BASE_IO_DECODE                               BIT(0)
165 #define IO_BASE_IO_DECODE_BIT8                          BIT(8)
166
167 #define CFG_PREF_MEM_LIMIT_BASE_MEM_DECODE              BIT(0)
168 #define CFG_PREF_MEM_LIMIT_BASE_MEM_LIMIT_DECODE        BIT(16)
169
170 #define CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF 0x718
171 #define CFG_TIMER_CTRL_ACK_NAK_SHIFT    (19)
172
173 #define EVENT_COUNTER_ALL_CLEAR         0x3
174 #define EVENT_COUNTER_ENABLE_ALL        0x7
175 #define EVENT_COUNTER_ENABLE_SHIFT      2
176 #define EVENT_COUNTER_EVENT_SEL_MASK    GENMASK(7, 0)
177 #define EVENT_COUNTER_EVENT_SEL_SHIFT   16
178 #define EVENT_COUNTER_EVENT_Tx_L0S      0x2
179 #define EVENT_COUNTER_EVENT_Rx_L0S      0x3
180 #define EVENT_COUNTER_EVENT_L1          0x5
181 #define EVENT_COUNTER_EVENT_L1_1        0x7
182 #define EVENT_COUNTER_EVENT_L1_2        0x8
183 #define EVENT_COUNTER_GROUP_SEL_SHIFT   24
184 #define EVENT_COUNTER_GROUP_5           0x5
185
186 #define PORT_LOGIC_ACK_F_ASPM_CTRL                      0x70C
187 #define ENTER_ASPM                                      BIT(30)
188 #define L0S_ENTRANCE_LAT_SHIFT                          24
189 #define L0S_ENTRANCE_LAT_MASK                           GENMASK(26, 24)
190 #define L1_ENTRANCE_LAT_SHIFT                           27
191 #define L1_ENTRANCE_LAT_MASK                            GENMASK(29, 27)
192 #define N_FTS_SHIFT                                     8
193 #define N_FTS_MASK                                      GENMASK(7, 0)
194 #define N_FTS_VAL                                       52
195
196 #define PORT_LOGIC_GEN2_CTRL                            0x80C
197 #define PORT_LOGIC_GEN2_CTRL_DIRECT_SPEED_CHANGE        BIT(17)
198 #define FTS_MASK                                        GENMASK(7, 0)
199 #define FTS_VAL                                         52
200
201 #define PORT_LOGIC_MSI_CTRL_INT_0_EN            0x828
202
203 #define GEN3_EQ_CONTROL_OFF                     0x8a8
204 #define GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC_SHIFT  8
205 #define GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC_MASK   GENMASK(23, 8)
206 #define GEN3_EQ_CONTROL_OFF_FB_MODE_MASK        GENMASK(3, 0)
207
208 #define GEN3_RELATED_OFF                        0x890
209 #define GEN3_RELATED_OFF_GEN3_ZRXDC_NONCOMPL    BIT(0)
210 #define GEN3_RELATED_OFF_GEN3_EQ_DISABLE        BIT(16)
211 #define GEN3_RELATED_OFF_RATE_SHADOW_SEL_SHIFT  24
212 #define GEN3_RELATED_OFF_RATE_SHADOW_SEL_MASK   GENMASK(25, 24)
213
214 #define PORT_LOGIC_AMBA_ERROR_RESPONSE_DEFAULT  0x8D0
215 #define AMBA_ERROR_RESPONSE_CRS_SHIFT           3
216 #define AMBA_ERROR_RESPONSE_CRS_MASK            GENMASK(1, 0)
217 #define AMBA_ERROR_RESPONSE_CRS_OKAY            0
218 #define AMBA_ERROR_RESPONSE_CRS_OKAY_FFFFFFFF   1
219 #define AMBA_ERROR_RESPONSE_CRS_OKAY_FFFF0001   2
220
221 #define MSIX_ADDR_MATCH_LOW_OFF                 0x940
222 #define MSIX_ADDR_MATCH_LOW_OFF_EN              BIT(0)
223 #define MSIX_ADDR_MATCH_LOW_OFF_MASK            GENMASK(31, 2)
224
225 #define MSIX_ADDR_MATCH_HIGH_OFF                0x944
226 #define MSIX_ADDR_MATCH_HIGH_OFF_MASK           GENMASK(31, 0)
227
228 #define PORT_LOGIC_MSIX_DOORBELL                        0x948
229
230 #define CAP_SPCIE_CAP_OFF                       0x154
231 #define CAP_SPCIE_CAP_OFF_DSP_TX_PRESET0_MASK   GENMASK(3, 0)
232 #define CAP_SPCIE_CAP_OFF_USP_TX_PRESET0_MASK   GENMASK(11, 8)
233 #define CAP_SPCIE_CAP_OFF_USP_TX_PRESET0_SHIFT  8
234
235 #define PME_ACK_TIMEOUT 10000
236
237 #define LTSSM_TIMEOUT 50000     /* 50ms */
238
239 #define GEN3_GEN4_EQ_PRESET_INIT        5
240
241 #define GEN1_CORE_CLK_FREQ      62500000
242 #define GEN2_CORE_CLK_FREQ      125000000
243 #define GEN3_CORE_CLK_FREQ      250000000
244 #define GEN4_CORE_CLK_FREQ      500000000
245
246 #define LTR_MSG_TIMEOUT         (100 * 1000)
247
248 #define PERST_DEBOUNCE_TIME     (5 * 1000)
249
250 #define EP_STATE_DISABLED       0
251 #define EP_STATE_ENABLED        1
252
253 static const unsigned int pcie_gen_freq[] = {
254         GEN1_CORE_CLK_FREQ,
255         GEN2_CORE_CLK_FREQ,
256         GEN3_CORE_CLK_FREQ,
257         GEN4_CORE_CLK_FREQ
258 };
259
260 static const u32 event_cntr_ctrl_offset[] = {
261         0x1d8,
262         0x1a8,
263         0x1a8,
264         0x1a8,
265         0x1c4,
266         0x1d8
267 };
268
269 static const u32 event_cntr_data_offset[] = {
270         0x1dc,
271         0x1ac,
272         0x1ac,
273         0x1ac,
274         0x1c8,
275         0x1dc
276 };
277
278 struct tegra_pcie_dw {
279         struct device *dev;
280         struct resource *appl_res;
281         struct resource *dbi_res;
282         struct resource *atu_dma_res;
283         void __iomem *appl_base;
284         struct clk *core_clk;
285         struct reset_control *core_apb_rst;
286         struct reset_control *core_rst;
287         struct dw_pcie pci;
288         struct tegra_bpmp *bpmp;
289
290         enum dw_pcie_device_mode mode;
291
292         bool supports_clkreq;
293         bool enable_cdm_check;
294         bool link_state;
295         bool update_fc_fixup;
296         u8 init_link_width;
297         u32 msi_ctrl_int;
298         u32 num_lanes;
299         u32 max_speed;
300         u32 cid;
301         u32 cfg_link_cap_l1sub;
302         u32 pcie_cap_base;
303         u32 aspm_cmrt;
304         u32 aspm_pwr_on_t;
305         u32 aspm_l0s_enter_lat;
306
307         struct regulator *pex_ctl_supply;
308         struct regulator *slot_ctl_3v3;
309         struct regulator *slot_ctl_12v;
310
311         unsigned int phy_count;
312         struct phy **phys;
313
314         struct dentry *debugfs;
315
316         /* Endpoint mode specific */
317         struct gpio_desc *pex_rst_gpiod;
318         struct gpio_desc *pex_refclk_sel_gpiod;
319         unsigned int pex_rst_irq;
320         int ep_state;
321 };
322
323 struct tegra_pcie_dw_of_data {
324         enum dw_pcie_device_mode mode;
325 };
326
327 static inline struct tegra_pcie_dw *to_tegra_pcie(struct dw_pcie *pci)
328 {
329         return container_of(pci, struct tegra_pcie_dw, pci);
330 }
331
332 static inline void appl_writel(struct tegra_pcie_dw *pcie, const u32 value,
333                                const u32 reg)
334 {
335         writel_relaxed(value, pcie->appl_base + reg);
336 }
337
338 static inline u32 appl_readl(struct tegra_pcie_dw *pcie, const u32 reg)
339 {
340         return readl_relaxed(pcie->appl_base + reg);
341 }
342
343 struct tegra_pcie_soc {
344         enum dw_pcie_device_mode mode;
345 };
346
347 static void apply_bad_link_workaround(struct pcie_port *pp)
348 {
349         struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
350         struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
351         u32 current_link_width;
352         u16 val;
353
354         /*
355          * NOTE:- Since this scenario is uncommon and link as such is not
356          * stable anyway, not waiting to confirm if link is really
357          * transitioning to Gen-2 speed
358          */
359         val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA);
360         if (val & PCI_EXP_LNKSTA_LBMS) {
361                 current_link_width = (val & PCI_EXP_LNKSTA_NLW) >>
362                                      PCI_EXP_LNKSTA_NLW_SHIFT;
363                 if (pcie->init_link_width > current_link_width) {
364                         dev_warn(pci->dev, "PCIe link is bad, width reduced\n");
365                         val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base +
366                                                 PCI_EXP_LNKCTL2);
367                         val &= ~PCI_EXP_LNKCTL2_TLS;
368                         val |= PCI_EXP_LNKCTL2_TLS_2_5GT;
369                         dw_pcie_writew_dbi(pci, pcie->pcie_cap_base +
370                                            PCI_EXP_LNKCTL2, val);
371
372                         val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base +
373                                                 PCI_EXP_LNKCTL);
374                         val |= PCI_EXP_LNKCTL_RL;
375                         dw_pcie_writew_dbi(pci, pcie->pcie_cap_base +
376                                            PCI_EXP_LNKCTL, val);
377                 }
378         }
379 }
380
381 static irqreturn_t tegra_pcie_rp_irq_handler(int irq, void *arg)
382 {
383         struct tegra_pcie_dw *pcie = arg;
384         struct dw_pcie *pci = &pcie->pci;
385         struct pcie_port *pp = &pci->pp;
386         u32 val, tmp;
387         u16 val_w;
388
389         val = appl_readl(pcie, APPL_INTR_STATUS_L0);
390         if (val & APPL_INTR_STATUS_L0_LINK_STATE_INT) {
391                 val = appl_readl(pcie, APPL_INTR_STATUS_L1_0_0);
392                 if (val & APPL_INTR_STATUS_L1_0_0_LINK_REQ_RST_NOT_CHGED) {
393                         appl_writel(pcie, val, APPL_INTR_STATUS_L1_0_0);
394
395                         /* SBR & Surprise Link Down WAR */
396                         val = appl_readl(pcie, APPL_CAR_RESET_OVRD);
397                         val &= ~APPL_CAR_RESET_OVRD_CYA_OVERRIDE_CORE_RST_N;
398                         appl_writel(pcie, val, APPL_CAR_RESET_OVRD);
399                         udelay(1);
400                         val = appl_readl(pcie, APPL_CAR_RESET_OVRD);
401                         val |= APPL_CAR_RESET_OVRD_CYA_OVERRIDE_CORE_RST_N;
402                         appl_writel(pcie, val, APPL_CAR_RESET_OVRD);
403
404                         val = dw_pcie_readl_dbi(pci, PORT_LOGIC_GEN2_CTRL);
405                         val |= PORT_LOGIC_GEN2_CTRL_DIRECT_SPEED_CHANGE;
406                         dw_pcie_writel_dbi(pci, PORT_LOGIC_GEN2_CTRL, val);
407                 }
408         }
409
410         if (val & APPL_INTR_STATUS_L0_INT_INT) {
411                 val = appl_readl(pcie, APPL_INTR_STATUS_L1_8_0);
412                 if (val & APPL_INTR_STATUS_L1_8_0_AUTO_BW_INT_STS) {
413                         appl_writel(pcie,
414                                     APPL_INTR_STATUS_L1_8_0_AUTO_BW_INT_STS,
415                                     APPL_INTR_STATUS_L1_8_0);
416                         apply_bad_link_workaround(pp);
417                 }
418                 if (val & APPL_INTR_STATUS_L1_8_0_BW_MGT_INT_STS) {
419                         appl_writel(pcie,
420                                     APPL_INTR_STATUS_L1_8_0_BW_MGT_INT_STS,
421                                     APPL_INTR_STATUS_L1_8_0);
422
423                         val_w = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base +
424                                                   PCI_EXP_LNKSTA);
425                         dev_dbg(pci->dev, "Link Speed : Gen-%u\n", val_w &
426                                 PCI_EXP_LNKSTA_CLS);
427                 }
428         }
429
430         val = appl_readl(pcie, APPL_INTR_STATUS_L0);
431         if (val & APPL_INTR_STATUS_L0_CDM_REG_CHK_INT) {
432                 val = appl_readl(pcie, APPL_INTR_STATUS_L1_18);
433                 tmp = dw_pcie_readl_dbi(pci, PCIE_PL_CHK_REG_CONTROL_STATUS);
434                 if (val & APPL_INTR_STATUS_L1_18_CDM_REG_CHK_CMPLT) {
435                         dev_info(pci->dev, "CDM check complete\n");
436                         tmp |= PCIE_PL_CHK_REG_CHK_REG_COMPLETE;
437                 }
438                 if (val & APPL_INTR_STATUS_L1_18_CDM_REG_CHK_CMP_ERR) {
439                         dev_err(pci->dev, "CDM comparison mismatch\n");
440                         tmp |= PCIE_PL_CHK_REG_CHK_REG_COMPARISON_ERROR;
441                 }
442                 if (val & APPL_INTR_STATUS_L1_18_CDM_REG_CHK_LOGIC_ERR) {
443                         dev_err(pci->dev, "CDM Logic error\n");
444                         tmp |= PCIE_PL_CHK_REG_CHK_REG_LOGIC_ERROR;
445                 }
446                 dw_pcie_writel_dbi(pci, PCIE_PL_CHK_REG_CONTROL_STATUS, tmp);
447                 tmp = dw_pcie_readl_dbi(pci, PCIE_PL_CHK_REG_ERR_ADDR);
448                 dev_err(pci->dev, "CDM Error Address Offset = 0x%08X\n", tmp);
449         }
450
451         return IRQ_HANDLED;
452 }
453
454 static void pex_ep_event_hot_rst_done(struct tegra_pcie_dw *pcie)
455 {
456         u32 val;
457
458         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L0);
459         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_0_0);
460         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_1);
461         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_2);
462         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_3);
463         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_6);
464         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_7);
465         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_8_0);
466         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_9);
467         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_10);
468         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_11);
469         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_13);
470         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_14);
471         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_15);
472         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_17);
473         appl_writel(pcie, 0xFFFFFFFF, APPL_MSI_CTRL_2);
474
475         val = appl_readl(pcie, APPL_CTRL);
476         val |= APPL_CTRL_LTSSM_EN;
477         appl_writel(pcie, val, APPL_CTRL);
478 }
479
480 static irqreturn_t tegra_pcie_ep_irq_thread(int irq, void *arg)
481 {
482         struct tegra_pcie_dw *pcie = arg;
483         struct dw_pcie *pci = &pcie->pci;
484         u32 val, speed;
485
486         speed = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA) &
487                 PCI_EXP_LNKSTA_CLS;
488         clk_set_rate(pcie->core_clk, pcie_gen_freq[speed - 1]);
489
490         /* If EP doesn't advertise L1SS, just return */
491         val = dw_pcie_readl_dbi(pci, pcie->cfg_link_cap_l1sub);
492         if (!(val & (PCI_L1SS_CAP_ASPM_L1_1 | PCI_L1SS_CAP_ASPM_L1_2)))
493                 return IRQ_HANDLED;
494
495         /* Check if BME is set to '1' */
496         val = dw_pcie_readl_dbi(pci, PCI_COMMAND);
497         if (val & PCI_COMMAND_MASTER) {
498                 ktime_t timeout;
499
500                 /* 110us for both snoop and no-snoop */
501                 val = 110 | (2 << PCI_LTR_SCALE_SHIFT) | LTR_MSG_REQ;
502                 val |= (val << LTR_MST_NO_SNOOP_SHIFT);
503                 appl_writel(pcie, val, APPL_LTR_MSG_1);
504
505                 /* Send LTR upstream */
506                 val = appl_readl(pcie, APPL_LTR_MSG_2);
507                 val |= APPL_LTR_MSG_2_LTR_MSG_REQ_STATE;
508                 appl_writel(pcie, val, APPL_LTR_MSG_2);
509
510                 timeout = ktime_add_us(ktime_get(), LTR_MSG_TIMEOUT);
511                 for (;;) {
512                         val = appl_readl(pcie, APPL_LTR_MSG_2);
513                         if (!(val & APPL_LTR_MSG_2_LTR_MSG_REQ_STATE))
514                                 break;
515                         if (ktime_after(ktime_get(), timeout))
516                                 break;
517                         usleep_range(1000, 1100);
518                 }
519                 if (val & APPL_LTR_MSG_2_LTR_MSG_REQ_STATE)
520                         dev_err(pcie->dev, "Failed to send LTR message\n");
521         }
522
523         return IRQ_HANDLED;
524 }
525
526 static irqreturn_t tegra_pcie_ep_hard_irq(int irq, void *arg)
527 {
528         struct tegra_pcie_dw *pcie = arg;
529         struct dw_pcie_ep *ep = &pcie->pci.ep;
530         int spurious = 1;
531         u32 val, tmp;
532
533         val = appl_readl(pcie, APPL_INTR_STATUS_L0);
534         if (val & APPL_INTR_STATUS_L0_LINK_STATE_INT) {
535                 val = appl_readl(pcie, APPL_INTR_STATUS_L1_0_0);
536                 appl_writel(pcie, val, APPL_INTR_STATUS_L1_0_0);
537
538                 if (val & APPL_INTR_STATUS_L1_0_0_HOT_RESET_DONE)
539                         pex_ep_event_hot_rst_done(pcie);
540
541                 if (val & APPL_INTR_STATUS_L1_0_0_RDLH_LINK_UP_CHGED) {
542                         tmp = appl_readl(pcie, APPL_LINK_STATUS);
543                         if (tmp & APPL_LINK_STATUS_RDLH_LINK_UP) {
544                                 dev_dbg(pcie->dev, "Link is up with Host\n");
545                                 dw_pcie_ep_linkup(ep);
546                         }
547                 }
548
549                 spurious = 0;
550         }
551
552         if (val & APPL_INTR_STATUS_L0_PCI_CMD_EN_INT) {
553                 val = appl_readl(pcie, APPL_INTR_STATUS_L1_15);
554                 appl_writel(pcie, val, APPL_INTR_STATUS_L1_15);
555
556                 if (val & APPL_INTR_STATUS_L1_15_CFG_BME_CHGED)
557                         return IRQ_WAKE_THREAD;
558
559                 spurious = 0;
560         }
561
562         if (spurious) {
563                 dev_warn(pcie->dev, "Random interrupt (STATUS = 0x%08X)\n",
564                          val);
565                 appl_writel(pcie, val, APPL_INTR_STATUS_L0);
566         }
567
568         return IRQ_HANDLED;
569 }
570
571 static int tegra_pcie_dw_rd_own_conf(struct pcie_port *pp, int where, int size,
572                                      u32 *val)
573 {
574         struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
575
576         /*
577          * This is an endpoint mode specific register happen to appear even
578          * when controller is operating in root port mode and system hangs
579          * when it is accessed with link being in ASPM-L1 state.
580          * So skip accessing it altogether
581          */
582         if (where == PORT_LOGIC_MSIX_DOORBELL) {
583                 *val = 0x00000000;
584                 return PCIBIOS_SUCCESSFUL;
585         }
586
587         return dw_pcie_read(pci->dbi_base + where, size, val);
588 }
589
590 static int tegra_pcie_dw_wr_own_conf(struct pcie_port *pp, int where, int size,
591                                      u32 val)
592 {
593         struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
594
595         /*
596          * This is an endpoint mode specific register happen to appear even
597          * when controller is operating in root port mode and system hangs
598          * when it is accessed with link being in ASPM-L1 state.
599          * So skip accessing it altogether
600          */
601         if (where == PORT_LOGIC_MSIX_DOORBELL)
602                 return PCIBIOS_SUCCESSFUL;
603
604         return dw_pcie_write(pci->dbi_base + where, size, val);
605 }
606
607 #if defined(CONFIG_PCIEASPM)
608 static void disable_aspm_l11(struct tegra_pcie_dw *pcie)
609 {
610         u32 val;
611
612         val = dw_pcie_readl_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub);
613         val &= ~PCI_L1SS_CAP_ASPM_L1_1;
614         dw_pcie_writel_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub, val);
615 }
616
617 static void disable_aspm_l12(struct tegra_pcie_dw *pcie)
618 {
619         u32 val;
620
621         val = dw_pcie_readl_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub);
622         val &= ~PCI_L1SS_CAP_ASPM_L1_2;
623         dw_pcie_writel_dbi(&pcie->pci, pcie->cfg_link_cap_l1sub, val);
624 }
625
626 static inline u32 event_counter_prog(struct tegra_pcie_dw *pcie, u32 event)
627 {
628         u32 val;
629
630         val = dw_pcie_readl_dbi(&pcie->pci, event_cntr_ctrl_offset[pcie->cid]);
631         val &= ~(EVENT_COUNTER_EVENT_SEL_MASK << EVENT_COUNTER_EVENT_SEL_SHIFT);
632         val |= EVENT_COUNTER_GROUP_5 << EVENT_COUNTER_GROUP_SEL_SHIFT;
633         val |= event << EVENT_COUNTER_EVENT_SEL_SHIFT;
634         val |= EVENT_COUNTER_ENABLE_ALL << EVENT_COUNTER_ENABLE_SHIFT;
635         dw_pcie_writel_dbi(&pcie->pci, event_cntr_ctrl_offset[pcie->cid], val);
636         val = dw_pcie_readl_dbi(&pcie->pci, event_cntr_data_offset[pcie->cid]);
637
638         return val;
639 }
640
641 static int aspm_state_cnt(struct seq_file *s, void *data)
642 {
643         struct tegra_pcie_dw *pcie = (struct tegra_pcie_dw *)
644                                      dev_get_drvdata(s->private);
645         u32 val;
646
647         seq_printf(s, "Tx L0s entry count : %u\n",
648                    event_counter_prog(pcie, EVENT_COUNTER_EVENT_Tx_L0S));
649
650         seq_printf(s, "Rx L0s entry count : %u\n",
651                    event_counter_prog(pcie, EVENT_COUNTER_EVENT_Rx_L0S));
652
653         seq_printf(s, "Link L1 entry count : %u\n",
654                    event_counter_prog(pcie, EVENT_COUNTER_EVENT_L1));
655
656         seq_printf(s, "Link L1.1 entry count : %u\n",
657                    event_counter_prog(pcie, EVENT_COUNTER_EVENT_L1_1));
658
659         seq_printf(s, "Link L1.2 entry count : %u\n",
660                    event_counter_prog(pcie, EVENT_COUNTER_EVENT_L1_2));
661
662         /* Clear all counters */
663         dw_pcie_writel_dbi(&pcie->pci, event_cntr_ctrl_offset[pcie->cid],
664                            EVENT_COUNTER_ALL_CLEAR);
665
666         /* Re-enable counting */
667         val = EVENT_COUNTER_ENABLE_ALL << EVENT_COUNTER_ENABLE_SHIFT;
668         val |= EVENT_COUNTER_GROUP_5 << EVENT_COUNTER_GROUP_SEL_SHIFT;
669         dw_pcie_writel_dbi(&pcie->pci, event_cntr_ctrl_offset[pcie->cid], val);
670
671         return 0;
672 }
673
674 static void init_host_aspm(struct tegra_pcie_dw *pcie)
675 {
676         struct dw_pcie *pci = &pcie->pci;
677         u32 val;
678
679         val = dw_pcie_find_ext_capability(pci, PCI_EXT_CAP_ID_L1SS);
680         pcie->cfg_link_cap_l1sub = val + PCI_L1SS_CAP;
681
682         /* Enable ASPM counters */
683         val = EVENT_COUNTER_ENABLE_ALL << EVENT_COUNTER_ENABLE_SHIFT;
684         val |= EVENT_COUNTER_GROUP_5 << EVENT_COUNTER_GROUP_SEL_SHIFT;
685         dw_pcie_writel_dbi(pci, event_cntr_ctrl_offset[pcie->cid], val);
686
687         /* Program T_cmrt and T_pwr_on values */
688         val = dw_pcie_readl_dbi(pci, pcie->cfg_link_cap_l1sub);
689         val &= ~(PCI_L1SS_CAP_CM_RESTORE_TIME | PCI_L1SS_CAP_P_PWR_ON_VALUE);
690         val |= (pcie->aspm_cmrt << 8);
691         val |= (pcie->aspm_pwr_on_t << 19);
692         dw_pcie_writel_dbi(pci, pcie->cfg_link_cap_l1sub, val);
693
694         /* Program L0s and L1 entrance latencies */
695         val = dw_pcie_readl_dbi(pci, PORT_LOGIC_ACK_F_ASPM_CTRL);
696         val &= ~L0S_ENTRANCE_LAT_MASK;
697         val |= (pcie->aspm_l0s_enter_lat << L0S_ENTRANCE_LAT_SHIFT);
698         val |= ENTER_ASPM;
699         dw_pcie_writel_dbi(pci, PORT_LOGIC_ACK_F_ASPM_CTRL, val);
700 }
701
702 static void init_debugfs(struct tegra_pcie_dw *pcie)
703 {
704         debugfs_create_devm_seqfile(pcie->dev, "aspm_state_cnt", pcie->debugfs,
705                                     aspm_state_cnt);
706 }
707 #else
708 static inline void disable_aspm_l12(struct tegra_pcie_dw *pcie) { return; }
709 static inline void disable_aspm_l11(struct tegra_pcie_dw *pcie) { return; }
710 static inline void init_host_aspm(struct tegra_pcie_dw *pcie) { return; }
711 static inline void init_debugfs(struct tegra_pcie_dw *pcie) { return; }
712 #endif
713
714 static void tegra_pcie_enable_system_interrupts(struct pcie_port *pp)
715 {
716         struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
717         struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
718         u32 val;
719         u16 val_w;
720
721         val = appl_readl(pcie, APPL_INTR_EN_L0_0);
722         val |= APPL_INTR_EN_L0_0_LINK_STATE_INT_EN;
723         appl_writel(pcie, val, APPL_INTR_EN_L0_0);
724
725         val = appl_readl(pcie, APPL_INTR_EN_L1_0_0);
726         val |= APPL_INTR_EN_L1_0_0_LINK_REQ_RST_NOT_INT_EN;
727         appl_writel(pcie, val, APPL_INTR_EN_L1_0_0);
728
729         if (pcie->enable_cdm_check) {
730                 val = appl_readl(pcie, APPL_INTR_EN_L0_0);
731                 val |= APPL_INTR_EN_L0_0_CDM_REG_CHK_INT_EN;
732                 appl_writel(pcie, val, APPL_INTR_EN_L0_0);
733
734                 val = appl_readl(pcie, APPL_INTR_EN_L1_18);
735                 val |= APPL_INTR_EN_L1_18_CDM_REG_CHK_CMP_ERR;
736                 val |= APPL_INTR_EN_L1_18_CDM_REG_CHK_LOGIC_ERR;
737                 appl_writel(pcie, val, APPL_INTR_EN_L1_18);
738         }
739
740         val_w = dw_pcie_readw_dbi(&pcie->pci, pcie->pcie_cap_base +
741                                   PCI_EXP_LNKSTA);
742         pcie->init_link_width = (val_w & PCI_EXP_LNKSTA_NLW) >>
743                                 PCI_EXP_LNKSTA_NLW_SHIFT;
744
745         val_w = dw_pcie_readw_dbi(&pcie->pci, pcie->pcie_cap_base +
746                                   PCI_EXP_LNKCTL);
747         val_w |= PCI_EXP_LNKCTL_LBMIE;
748         dw_pcie_writew_dbi(&pcie->pci, pcie->pcie_cap_base + PCI_EXP_LNKCTL,
749                            val_w);
750 }
751
752 static void tegra_pcie_enable_legacy_interrupts(struct pcie_port *pp)
753 {
754         struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
755         struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
756         u32 val;
757
758         /* Enable legacy interrupt generation */
759         val = appl_readl(pcie, APPL_INTR_EN_L0_0);
760         val |= APPL_INTR_EN_L0_0_SYS_INTR_EN;
761         val |= APPL_INTR_EN_L0_0_INT_INT_EN;
762         appl_writel(pcie, val, APPL_INTR_EN_L0_0);
763
764         val = appl_readl(pcie, APPL_INTR_EN_L1_8_0);
765         val |= APPL_INTR_EN_L1_8_INTX_EN;
766         val |= APPL_INTR_EN_L1_8_AUTO_BW_INT_EN;
767         val |= APPL_INTR_EN_L1_8_BW_MGT_INT_EN;
768         if (IS_ENABLED(CONFIG_PCIEAER))
769                 val |= APPL_INTR_EN_L1_8_AER_INT_EN;
770         appl_writel(pcie, val, APPL_INTR_EN_L1_8_0);
771 }
772
773 static void tegra_pcie_enable_msi_interrupts(struct pcie_port *pp)
774 {
775         struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
776         struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
777         u32 val;
778
779         dw_pcie_msi_init(pp);
780
781         /* Enable MSI interrupt generation */
782         val = appl_readl(pcie, APPL_INTR_EN_L0_0);
783         val |= APPL_INTR_EN_L0_0_SYS_MSI_INTR_EN;
784         val |= APPL_INTR_EN_L0_0_MSI_RCV_INT_EN;
785         appl_writel(pcie, val, APPL_INTR_EN_L0_0);
786 }
787
788 static void tegra_pcie_enable_interrupts(struct pcie_port *pp)
789 {
790         struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
791         struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
792
793         /* Clear interrupt statuses before enabling interrupts */
794         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L0);
795         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_0_0);
796         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_1);
797         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_2);
798         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_3);
799         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_6);
800         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_7);
801         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_8_0);
802         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_9);
803         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_10);
804         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_11);
805         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_13);
806         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_14);
807         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_15);
808         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_17);
809
810         tegra_pcie_enable_system_interrupts(pp);
811         tegra_pcie_enable_legacy_interrupts(pp);
812         if (IS_ENABLED(CONFIG_PCI_MSI))
813                 tegra_pcie_enable_msi_interrupts(pp);
814 }
815
816 static void config_gen3_gen4_eq_presets(struct tegra_pcie_dw *pcie)
817 {
818         struct dw_pcie *pci = &pcie->pci;
819         u32 val, offset, i;
820
821         /* Program init preset */
822         for (i = 0; i < pcie->num_lanes; i++) {
823                 dw_pcie_read(pci->dbi_base + CAP_SPCIE_CAP_OFF
824                                  + (i * 2), 2, &val);
825                 val &= ~CAP_SPCIE_CAP_OFF_DSP_TX_PRESET0_MASK;
826                 val |= GEN3_GEN4_EQ_PRESET_INIT;
827                 val &= ~CAP_SPCIE_CAP_OFF_USP_TX_PRESET0_MASK;
828                 val |= (GEN3_GEN4_EQ_PRESET_INIT <<
829                            CAP_SPCIE_CAP_OFF_USP_TX_PRESET0_SHIFT);
830                 dw_pcie_write(pci->dbi_base + CAP_SPCIE_CAP_OFF
831                                  + (i * 2), 2, val);
832
833                 offset = dw_pcie_find_ext_capability(pci,
834                                                      PCI_EXT_CAP_ID_PL_16GT) +
835                                 PCI_PL_16GT_LE_CTRL;
836                 dw_pcie_read(pci->dbi_base + offset + i, 1, &val);
837                 val &= ~PCI_PL_16GT_LE_CTRL_DSP_TX_PRESET_MASK;
838                 val |= GEN3_GEN4_EQ_PRESET_INIT;
839                 val &= ~PCI_PL_16GT_LE_CTRL_USP_TX_PRESET_MASK;
840                 val |= (GEN3_GEN4_EQ_PRESET_INIT <<
841                         PCI_PL_16GT_LE_CTRL_USP_TX_PRESET_SHIFT);
842                 dw_pcie_write(pci->dbi_base + offset + i, 1, val);
843         }
844
845         val = dw_pcie_readl_dbi(pci, GEN3_RELATED_OFF);
846         val &= ~GEN3_RELATED_OFF_RATE_SHADOW_SEL_MASK;
847         dw_pcie_writel_dbi(pci, GEN3_RELATED_OFF, val);
848
849         val = dw_pcie_readl_dbi(pci, GEN3_EQ_CONTROL_OFF);
850         val &= ~GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC_MASK;
851         val |= (0x3ff << GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC_SHIFT);
852         val &= ~GEN3_EQ_CONTROL_OFF_FB_MODE_MASK;
853         dw_pcie_writel_dbi(pci, GEN3_EQ_CONTROL_OFF, val);
854
855         val = dw_pcie_readl_dbi(pci, GEN3_RELATED_OFF);
856         val &= ~GEN3_RELATED_OFF_RATE_SHADOW_SEL_MASK;
857         val |= (0x1 << GEN3_RELATED_OFF_RATE_SHADOW_SEL_SHIFT);
858         dw_pcie_writel_dbi(pci, GEN3_RELATED_OFF, val);
859
860         val = dw_pcie_readl_dbi(pci, GEN3_EQ_CONTROL_OFF);
861         val &= ~GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC_MASK;
862         val |= (0x360 << GEN3_EQ_CONTROL_OFF_PSET_REQ_VEC_SHIFT);
863         val &= ~GEN3_EQ_CONTROL_OFF_FB_MODE_MASK;
864         dw_pcie_writel_dbi(pci, GEN3_EQ_CONTROL_OFF, val);
865
866         val = dw_pcie_readl_dbi(pci, GEN3_RELATED_OFF);
867         val &= ~GEN3_RELATED_OFF_RATE_SHADOW_SEL_MASK;
868         dw_pcie_writel_dbi(pci, GEN3_RELATED_OFF, val);
869 }
870
871 static void tegra_pcie_prepare_host(struct pcie_port *pp)
872 {
873         struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
874         struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
875         u32 val;
876
877         val = dw_pcie_readl_dbi(pci, PCI_IO_BASE);
878         val &= ~(IO_BASE_IO_DECODE | IO_BASE_IO_DECODE_BIT8);
879         dw_pcie_writel_dbi(pci, PCI_IO_BASE, val);
880
881         val = dw_pcie_readl_dbi(pci, PCI_PREF_MEMORY_BASE);
882         val |= CFG_PREF_MEM_LIMIT_BASE_MEM_DECODE;
883         val |= CFG_PREF_MEM_LIMIT_BASE_MEM_LIMIT_DECODE;
884         dw_pcie_writel_dbi(pci, PCI_PREF_MEMORY_BASE, val);
885
886         dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, 0);
887
888         /* Configure FTS */
889         val = dw_pcie_readl_dbi(pci, PORT_LOGIC_ACK_F_ASPM_CTRL);
890         val &= ~(N_FTS_MASK << N_FTS_SHIFT);
891         val |= N_FTS_VAL << N_FTS_SHIFT;
892         dw_pcie_writel_dbi(pci, PORT_LOGIC_ACK_F_ASPM_CTRL, val);
893
894         val = dw_pcie_readl_dbi(pci, PORT_LOGIC_GEN2_CTRL);
895         val &= ~FTS_MASK;
896         val |= FTS_VAL;
897         dw_pcie_writel_dbi(pci, PORT_LOGIC_GEN2_CTRL, val);
898
899         /* Enable as 0xFFFF0001 response for CRS */
900         val = dw_pcie_readl_dbi(pci, PORT_LOGIC_AMBA_ERROR_RESPONSE_DEFAULT);
901         val &= ~(AMBA_ERROR_RESPONSE_CRS_MASK << AMBA_ERROR_RESPONSE_CRS_SHIFT);
902         val |= (AMBA_ERROR_RESPONSE_CRS_OKAY_FFFF0001 <<
903                 AMBA_ERROR_RESPONSE_CRS_SHIFT);
904         dw_pcie_writel_dbi(pci, PORT_LOGIC_AMBA_ERROR_RESPONSE_DEFAULT, val);
905
906         /* Configure Max Speed from DT */
907         if (pcie->max_speed && pcie->max_speed != -EINVAL) {
908                 val = dw_pcie_readl_dbi(pci, pcie->pcie_cap_base +
909                                         PCI_EXP_LNKCAP);
910                 val &= ~PCI_EXP_LNKCAP_SLS;
911                 val |= pcie->max_speed;
912                 dw_pcie_writel_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKCAP,
913                                    val);
914         }
915
916         /* Configure Max lane width from DT */
917         val = dw_pcie_readl_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKCAP);
918         val &= ~PCI_EXP_LNKCAP_MLW;
919         val |= (pcie->num_lanes << PCI_EXP_LNKSTA_NLW_SHIFT);
920         dw_pcie_writel_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKCAP, val);
921
922         config_gen3_gen4_eq_presets(pcie);
923
924         init_host_aspm(pcie);
925
926         val = dw_pcie_readl_dbi(pci, GEN3_RELATED_OFF);
927         val &= ~GEN3_RELATED_OFF_GEN3_ZRXDC_NONCOMPL;
928         dw_pcie_writel_dbi(pci, GEN3_RELATED_OFF, val);
929
930         if (pcie->update_fc_fixup) {
931                 val = dw_pcie_readl_dbi(pci, CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF);
932                 val |= 0x1 << CFG_TIMER_CTRL_ACK_NAK_SHIFT;
933                 dw_pcie_writel_dbi(pci, CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF, val);
934         }
935
936         dw_pcie_setup_rc(pp);
937
938         clk_set_rate(pcie->core_clk, GEN4_CORE_CLK_FREQ);
939
940         /* Assert RST */
941         val = appl_readl(pcie, APPL_PINMUX);
942         val &= ~APPL_PINMUX_PEX_RST;
943         appl_writel(pcie, val, APPL_PINMUX);
944
945         usleep_range(100, 200);
946
947         /* Enable LTSSM */
948         val = appl_readl(pcie, APPL_CTRL);
949         val |= APPL_CTRL_LTSSM_EN;
950         appl_writel(pcie, val, APPL_CTRL);
951
952         /* De-assert RST */
953         val = appl_readl(pcie, APPL_PINMUX);
954         val |= APPL_PINMUX_PEX_RST;
955         appl_writel(pcie, val, APPL_PINMUX);
956
957         msleep(100);
958 }
959
960 static int tegra_pcie_dw_host_init(struct pcie_port *pp)
961 {
962         struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
963         struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
964         u32 val, tmp, offset, speed;
965
966         tegra_pcie_prepare_host(pp);
967
968         if (dw_pcie_wait_for_link(pci)) {
969                 /*
970                  * There are some endpoints which can't get the link up if
971                  * root port has Data Link Feature (DLF) enabled.
972                  * Refer Spec rev 4.0 ver 1.0 sec 3.4.2 & 7.7.4 for more info
973                  * on Scaled Flow Control and DLF.
974                  * So, need to confirm that is indeed the case here and attempt
975                  * link up once again with DLF disabled.
976                  */
977                 val = appl_readl(pcie, APPL_DEBUG);
978                 val &= APPL_DEBUG_LTSSM_STATE_MASK;
979                 val >>= APPL_DEBUG_LTSSM_STATE_SHIFT;
980                 tmp = appl_readl(pcie, APPL_LINK_STATUS);
981                 tmp &= APPL_LINK_STATUS_RDLH_LINK_UP;
982                 if (!(val == 0x11 && !tmp)) {
983                         /* Link is down for all good reasons */
984                         return 0;
985                 }
986
987                 dev_info(pci->dev, "Link is down in DLL");
988                 dev_info(pci->dev, "Trying again with DLFE disabled\n");
989                 /* Disable LTSSM */
990                 val = appl_readl(pcie, APPL_CTRL);
991                 val &= ~APPL_CTRL_LTSSM_EN;
992                 appl_writel(pcie, val, APPL_CTRL);
993
994                 reset_control_assert(pcie->core_rst);
995                 reset_control_deassert(pcie->core_rst);
996
997                 offset = dw_pcie_find_ext_capability(pci, PCI_EXT_CAP_ID_DLF);
998                 val = dw_pcie_readl_dbi(pci, offset + PCI_DLF_CAP);
999                 val &= ~PCI_DLF_EXCHANGE_ENABLE;
1000                 dw_pcie_writel_dbi(pci, offset, val);
1001
1002                 tegra_pcie_prepare_host(pp);
1003
1004                 if (dw_pcie_wait_for_link(pci))
1005                         return 0;
1006         }
1007
1008         speed = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA) &
1009                 PCI_EXP_LNKSTA_CLS;
1010         clk_set_rate(pcie->core_clk, pcie_gen_freq[speed - 1]);
1011
1012         tegra_pcie_enable_interrupts(pp);
1013
1014         return 0;
1015 }
1016
1017 static int tegra_pcie_dw_link_up(struct dw_pcie *pci)
1018 {
1019         struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
1020         u32 val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA);
1021
1022         return !!(val & PCI_EXP_LNKSTA_DLLLA);
1023 }
1024
1025 static void tegra_pcie_set_msi_vec_num(struct pcie_port *pp)
1026 {
1027         pp->num_vectors = MAX_MSI_IRQS;
1028 }
1029
1030 static int tegra_pcie_dw_start_link(struct dw_pcie *pci)
1031 {
1032         struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
1033
1034         enable_irq(pcie->pex_rst_irq);
1035
1036         return 0;
1037 }
1038
1039 static void tegra_pcie_dw_stop_link(struct dw_pcie *pci)
1040 {
1041         struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
1042
1043         disable_irq(pcie->pex_rst_irq);
1044 }
1045
1046 static const struct dw_pcie_ops tegra_dw_pcie_ops = {
1047         .link_up = tegra_pcie_dw_link_up,
1048         .start_link = tegra_pcie_dw_start_link,
1049         .stop_link = tegra_pcie_dw_stop_link,
1050 };
1051
1052 static struct dw_pcie_host_ops tegra_pcie_dw_host_ops = {
1053         .rd_own_conf = tegra_pcie_dw_rd_own_conf,
1054         .wr_own_conf = tegra_pcie_dw_wr_own_conf,
1055         .host_init = tegra_pcie_dw_host_init,
1056         .set_num_vectors = tegra_pcie_set_msi_vec_num,
1057 };
1058
1059 static void tegra_pcie_disable_phy(struct tegra_pcie_dw *pcie)
1060 {
1061         unsigned int phy_count = pcie->phy_count;
1062
1063         while (phy_count--) {
1064                 phy_power_off(pcie->phys[phy_count]);
1065                 phy_exit(pcie->phys[phy_count]);
1066         }
1067 }
1068
1069 static int tegra_pcie_enable_phy(struct tegra_pcie_dw *pcie)
1070 {
1071         unsigned int i;
1072         int ret;
1073
1074         for (i = 0; i < pcie->phy_count; i++) {
1075                 ret = phy_init(pcie->phys[i]);
1076                 if (ret < 0)
1077                         goto phy_power_off;
1078
1079                 ret = phy_power_on(pcie->phys[i]);
1080                 if (ret < 0)
1081                         goto phy_exit;
1082         }
1083
1084         return 0;
1085
1086 phy_power_off:
1087         while (i--) {
1088                 phy_power_off(pcie->phys[i]);
1089 phy_exit:
1090                 phy_exit(pcie->phys[i]);
1091         }
1092
1093         return ret;
1094 }
1095
1096 static int tegra_pcie_dw_parse_dt(struct tegra_pcie_dw *pcie)
1097 {
1098         struct device_node *np = pcie->dev->of_node;
1099         int ret;
1100
1101         ret = of_property_read_u32(np, "nvidia,aspm-cmrt-us", &pcie->aspm_cmrt);
1102         if (ret < 0) {
1103                 dev_info(pcie->dev, "Failed to read ASPM T_cmrt: %d\n", ret);
1104                 return ret;
1105         }
1106
1107         ret = of_property_read_u32(np, "nvidia,aspm-pwr-on-t-us",
1108                                    &pcie->aspm_pwr_on_t);
1109         if (ret < 0)
1110                 dev_info(pcie->dev, "Failed to read ASPM Power On time: %d\n",
1111                          ret);
1112
1113         ret = of_property_read_u32(np, "nvidia,aspm-l0s-entrance-latency-us",
1114                                    &pcie->aspm_l0s_enter_lat);
1115         if (ret < 0)
1116                 dev_info(pcie->dev,
1117                          "Failed to read ASPM L0s Entrance latency: %d\n", ret);
1118
1119         ret = of_property_read_u32(np, "num-lanes", &pcie->num_lanes);
1120         if (ret < 0) {
1121                 dev_err(pcie->dev, "Failed to read num-lanes: %d\n", ret);
1122                 return ret;
1123         }
1124
1125         pcie->max_speed = of_pci_get_max_link_speed(np);
1126
1127         ret = of_property_read_u32_index(np, "nvidia,bpmp", 1, &pcie->cid);
1128         if (ret) {
1129                 dev_err(pcie->dev, "Failed to read Controller-ID: %d\n", ret);
1130                 return ret;
1131         }
1132
1133         ret = of_property_count_strings(np, "phy-names");
1134         if (ret < 0) {
1135                 dev_err(pcie->dev, "Failed to find PHY entries: %d\n",
1136                         ret);
1137                 return ret;
1138         }
1139         pcie->phy_count = ret;
1140
1141         if (of_property_read_bool(np, "nvidia,update-fc-fixup"))
1142                 pcie->update_fc_fixup = true;
1143
1144         pcie->supports_clkreq =
1145                 of_property_read_bool(pcie->dev->of_node, "supports-clkreq");
1146
1147         pcie->enable_cdm_check =
1148                 of_property_read_bool(np, "snps,enable-cdm-check");
1149
1150         if (pcie->mode == DW_PCIE_RC_TYPE)
1151                 return 0;
1152
1153         /* Endpoint mode specific DT entries */
1154         pcie->pex_rst_gpiod = devm_gpiod_get(pcie->dev, "reset", GPIOD_IN);
1155         if (IS_ERR(pcie->pex_rst_gpiod)) {
1156                 int err = PTR_ERR(pcie->pex_rst_gpiod);
1157                 const char *level = KERN_ERR;
1158
1159                 if (err == -EPROBE_DEFER)
1160                         level = KERN_DEBUG;
1161
1162                 dev_printk(level, pcie->dev,
1163                            dev_fmt("Failed to get PERST GPIO: %d\n"),
1164                            err);
1165                 return err;
1166         }
1167
1168         pcie->pex_refclk_sel_gpiod = devm_gpiod_get(pcie->dev,
1169                                                     "nvidia,refclk-select",
1170                                                     GPIOD_OUT_HIGH);
1171         if (IS_ERR(pcie->pex_refclk_sel_gpiod)) {
1172                 int err = PTR_ERR(pcie->pex_refclk_sel_gpiod);
1173                 const char *level = KERN_ERR;
1174
1175                 if (err == -EPROBE_DEFER)
1176                         level = KERN_DEBUG;
1177
1178                 dev_printk(level, pcie->dev,
1179                            dev_fmt("Failed to get REFCLK select GPIOs: %d\n"),
1180                            err);
1181                 pcie->pex_refclk_sel_gpiod = NULL;
1182         }
1183
1184         return 0;
1185 }
1186
1187 static int tegra_pcie_bpmp_set_ctrl_state(struct tegra_pcie_dw *pcie,
1188                                           bool enable)
1189 {
1190         struct mrq_uphy_response resp;
1191         struct tegra_bpmp_message msg;
1192         struct mrq_uphy_request req;
1193
1194         /* Controller-5 doesn't need to have its state set by BPMP-FW */
1195         if (pcie->cid == 5)
1196                 return 0;
1197
1198         memset(&req, 0, sizeof(req));
1199         memset(&resp, 0, sizeof(resp));
1200
1201         req.cmd = CMD_UPHY_PCIE_CONTROLLER_STATE;
1202         req.controller_state.pcie_controller = pcie->cid;
1203         req.controller_state.enable = enable;
1204
1205         memset(&msg, 0, sizeof(msg));
1206         msg.mrq = MRQ_UPHY;
1207         msg.tx.data = &req;
1208         msg.tx.size = sizeof(req);
1209         msg.rx.data = &resp;
1210         msg.rx.size = sizeof(resp);
1211
1212         return tegra_bpmp_transfer(pcie->bpmp, &msg);
1213 }
1214
1215 static int tegra_pcie_bpmp_set_pll_state(struct tegra_pcie_dw *pcie,
1216                                          bool enable)
1217 {
1218         struct mrq_uphy_response resp;
1219         struct tegra_bpmp_message msg;
1220         struct mrq_uphy_request req;
1221
1222         memset(&req, 0, sizeof(req));
1223         memset(&resp, 0, sizeof(resp));
1224
1225         if (enable) {
1226                 req.cmd = CMD_UPHY_PCIE_EP_CONTROLLER_PLL_INIT;
1227                 req.ep_ctrlr_pll_init.ep_controller = pcie->cid;
1228         } else {
1229                 req.cmd = CMD_UPHY_PCIE_EP_CONTROLLER_PLL_OFF;
1230                 req.ep_ctrlr_pll_off.ep_controller = pcie->cid;
1231         }
1232
1233         memset(&msg, 0, sizeof(msg));
1234         msg.mrq = MRQ_UPHY;
1235         msg.tx.data = &req;
1236         msg.tx.size = sizeof(req);
1237         msg.rx.data = &resp;
1238         msg.rx.size = sizeof(resp);
1239
1240         return tegra_bpmp_transfer(pcie->bpmp, &msg);
1241 }
1242
1243 static void tegra_pcie_downstream_dev_to_D0(struct tegra_pcie_dw *pcie)
1244 {
1245         struct pcie_port *pp = &pcie->pci.pp;
1246         struct pci_bus *child, *root_bus = NULL;
1247         struct pci_dev *pdev;
1248
1249         /*
1250          * link doesn't go into L2 state with some of the endpoints with Tegra
1251          * if they are not in D0 state. So, need to make sure that immediate
1252          * downstream devices are in D0 state before sending PME_TurnOff to put
1253          * link into L2 state.
1254          * This is as per PCI Express Base r4.0 v1.0 September 27-2017,
1255          * 5.2 Link State Power Management (Page #428).
1256          */
1257
1258         list_for_each_entry(child, &pp->root_bus->children, node) {
1259                 /* Bring downstream devices to D0 if they are not already in */
1260                 if (child->parent == pp->root_bus) {
1261                         root_bus = child;
1262                         break;
1263                 }
1264         }
1265
1266         if (!root_bus) {
1267                 dev_err(pcie->dev, "Failed to find downstream devices\n");
1268                 return;
1269         }
1270
1271         list_for_each_entry(pdev, &root_bus->devices, bus_list) {
1272                 if (PCI_SLOT(pdev->devfn) == 0) {
1273                         if (pci_set_power_state(pdev, PCI_D0))
1274                                 dev_err(pcie->dev,
1275                                         "Failed to transition %s to D0 state\n",
1276                                         dev_name(&pdev->dev));
1277                 }
1278         }
1279 }
1280
1281 static int tegra_pcie_get_slot_regulators(struct tegra_pcie_dw *pcie)
1282 {
1283         pcie->slot_ctl_3v3 = devm_regulator_get_optional(pcie->dev, "vpcie3v3");
1284         if (IS_ERR(pcie->slot_ctl_3v3)) {
1285                 if (PTR_ERR(pcie->slot_ctl_3v3) != -ENODEV)
1286                         return PTR_ERR(pcie->slot_ctl_3v3);
1287
1288                 pcie->slot_ctl_3v3 = NULL;
1289         }
1290
1291         pcie->slot_ctl_12v = devm_regulator_get_optional(pcie->dev, "vpcie12v");
1292         if (IS_ERR(pcie->slot_ctl_12v)) {
1293                 if (PTR_ERR(pcie->slot_ctl_12v) != -ENODEV)
1294                         return PTR_ERR(pcie->slot_ctl_12v);
1295
1296                 pcie->slot_ctl_12v = NULL;
1297         }
1298
1299         return 0;
1300 }
1301
1302 static int tegra_pcie_enable_slot_regulators(struct tegra_pcie_dw *pcie)
1303 {
1304         int ret;
1305
1306         if (pcie->slot_ctl_3v3) {
1307                 ret = regulator_enable(pcie->slot_ctl_3v3);
1308                 if (ret < 0) {
1309                         dev_err(pcie->dev,
1310                                 "Failed to enable 3.3V slot supply: %d\n", ret);
1311                         return ret;
1312                 }
1313         }
1314
1315         if (pcie->slot_ctl_12v) {
1316                 ret = regulator_enable(pcie->slot_ctl_12v);
1317                 if (ret < 0) {
1318                         dev_err(pcie->dev,
1319                                 "Failed to enable 12V slot supply: %d\n", ret);
1320                         goto fail_12v_enable;
1321                 }
1322         }
1323
1324         /*
1325          * According to PCI Express Card Electromechanical Specification
1326          * Revision 1.1, Table-2.4, T_PVPERL (Power stable to PERST# inactive)
1327          * should be a minimum of 100ms.
1328          */
1329         if (pcie->slot_ctl_3v3 || pcie->slot_ctl_12v)
1330                 msleep(100);
1331
1332         return 0;
1333
1334 fail_12v_enable:
1335         if (pcie->slot_ctl_3v3)
1336                 regulator_disable(pcie->slot_ctl_3v3);
1337         return ret;
1338 }
1339
1340 static void tegra_pcie_disable_slot_regulators(struct tegra_pcie_dw *pcie)
1341 {
1342         if (pcie->slot_ctl_12v)
1343                 regulator_disable(pcie->slot_ctl_12v);
1344         if (pcie->slot_ctl_3v3)
1345                 regulator_disable(pcie->slot_ctl_3v3);
1346 }
1347
1348 static int tegra_pcie_config_controller(struct tegra_pcie_dw *pcie,
1349                                         bool en_hw_hot_rst)
1350 {
1351         int ret;
1352         u32 val;
1353
1354         ret = tegra_pcie_bpmp_set_ctrl_state(pcie, true);
1355         if (ret) {
1356                 dev_err(pcie->dev,
1357                         "Failed to enable controller %u: %d\n", pcie->cid, ret);
1358                 return ret;
1359         }
1360
1361         ret = tegra_pcie_enable_slot_regulators(pcie);
1362         if (ret < 0)
1363                 goto fail_slot_reg_en;
1364
1365         ret = regulator_enable(pcie->pex_ctl_supply);
1366         if (ret < 0) {
1367                 dev_err(pcie->dev, "Failed to enable regulator: %d\n", ret);
1368                 goto fail_reg_en;
1369         }
1370
1371         ret = clk_prepare_enable(pcie->core_clk);
1372         if (ret) {
1373                 dev_err(pcie->dev, "Failed to enable core clock: %d\n", ret);
1374                 goto fail_core_clk;
1375         }
1376
1377         ret = reset_control_deassert(pcie->core_apb_rst);
1378         if (ret) {
1379                 dev_err(pcie->dev, "Failed to deassert core APB reset: %d\n",
1380                         ret);
1381                 goto fail_core_apb_rst;
1382         }
1383
1384         if (en_hw_hot_rst) {
1385                 /* Enable HW_HOT_RST mode */
1386                 val = appl_readl(pcie, APPL_CTRL);
1387                 val &= ~(APPL_CTRL_HW_HOT_RST_MODE_MASK <<
1388                          APPL_CTRL_HW_HOT_RST_MODE_SHIFT);
1389                 val |= APPL_CTRL_HW_HOT_RST_EN;
1390                 appl_writel(pcie, val, APPL_CTRL);
1391         }
1392
1393         ret = tegra_pcie_enable_phy(pcie);
1394         if (ret) {
1395                 dev_err(pcie->dev, "Failed to enable PHY: %d\n", ret);
1396                 goto fail_phy;
1397         }
1398
1399         /* Update CFG base address */
1400         appl_writel(pcie, pcie->dbi_res->start & APPL_CFG_BASE_ADDR_MASK,
1401                     APPL_CFG_BASE_ADDR);
1402
1403         /* Configure this core for RP mode operation */
1404         appl_writel(pcie, APPL_DM_TYPE_RP, APPL_DM_TYPE);
1405
1406         appl_writel(pcie, 0x0, APPL_CFG_SLCG_OVERRIDE);
1407
1408         val = appl_readl(pcie, APPL_CTRL);
1409         appl_writel(pcie, val | APPL_CTRL_SYS_PRE_DET_STATE, APPL_CTRL);
1410
1411         val = appl_readl(pcie, APPL_CFG_MISC);
1412         val |= (APPL_CFG_MISC_ARCACHE_VAL << APPL_CFG_MISC_ARCACHE_SHIFT);
1413         appl_writel(pcie, val, APPL_CFG_MISC);
1414
1415         if (!pcie->supports_clkreq) {
1416                 val = appl_readl(pcie, APPL_PINMUX);
1417                 val |= APPL_PINMUX_CLKREQ_OVERRIDE_EN;
1418                 val &= ~APPL_PINMUX_CLKREQ_OVERRIDE;
1419                 appl_writel(pcie, val, APPL_PINMUX);
1420         }
1421
1422         /* Update iATU_DMA base address */
1423         appl_writel(pcie,
1424                     pcie->atu_dma_res->start & APPL_CFG_IATU_DMA_BASE_ADDR_MASK,
1425                     APPL_CFG_IATU_DMA_BASE_ADDR);
1426
1427         reset_control_deassert(pcie->core_rst);
1428
1429         pcie->pcie_cap_base = dw_pcie_find_capability(&pcie->pci,
1430                                                       PCI_CAP_ID_EXP);
1431
1432         /* Disable ASPM-L1SS advertisement as there is no CLKREQ routing */
1433         if (!pcie->supports_clkreq) {
1434                 disable_aspm_l11(pcie);
1435                 disable_aspm_l12(pcie);
1436         }
1437
1438         return ret;
1439
1440 fail_phy:
1441         reset_control_assert(pcie->core_apb_rst);
1442 fail_core_apb_rst:
1443         clk_disable_unprepare(pcie->core_clk);
1444 fail_core_clk:
1445         regulator_disable(pcie->pex_ctl_supply);
1446 fail_reg_en:
1447         tegra_pcie_disable_slot_regulators(pcie);
1448 fail_slot_reg_en:
1449         tegra_pcie_bpmp_set_ctrl_state(pcie, false);
1450
1451         return ret;
1452 }
1453
1454 static int __deinit_controller(struct tegra_pcie_dw *pcie)
1455 {
1456         int ret;
1457
1458         ret = reset_control_assert(pcie->core_rst);
1459         if (ret) {
1460                 dev_err(pcie->dev, "Failed to assert \"core\" reset: %d\n",
1461                         ret);
1462                 return ret;
1463         }
1464
1465         tegra_pcie_disable_phy(pcie);
1466
1467         ret = reset_control_assert(pcie->core_apb_rst);
1468         if (ret) {
1469                 dev_err(pcie->dev, "Failed to assert APB reset: %d\n", ret);
1470                 return ret;
1471         }
1472
1473         clk_disable_unprepare(pcie->core_clk);
1474
1475         ret = regulator_disable(pcie->pex_ctl_supply);
1476         if (ret) {
1477                 dev_err(pcie->dev, "Failed to disable regulator: %d\n", ret);
1478                 return ret;
1479         }
1480
1481         tegra_pcie_disable_slot_regulators(pcie);
1482
1483         ret = tegra_pcie_bpmp_set_ctrl_state(pcie, false);
1484         if (ret) {
1485                 dev_err(pcie->dev, "Failed to disable controller %d: %d\n",
1486                         pcie->cid, ret);
1487                 return ret;
1488         }
1489
1490         return ret;
1491 }
1492
1493 static int tegra_pcie_init_controller(struct tegra_pcie_dw *pcie)
1494 {
1495         struct dw_pcie *pci = &pcie->pci;
1496         struct pcie_port *pp = &pci->pp;
1497         int ret;
1498
1499         ret = tegra_pcie_config_controller(pcie, false);
1500         if (ret < 0)
1501                 return ret;
1502
1503         pp->ops = &tegra_pcie_dw_host_ops;
1504
1505         ret = dw_pcie_host_init(pp);
1506         if (ret < 0) {
1507                 dev_err(pcie->dev, "Failed to add PCIe port: %d\n", ret);
1508                 goto fail_host_init;
1509         }
1510
1511         return 0;
1512
1513 fail_host_init:
1514         return __deinit_controller(pcie);
1515 }
1516
1517 static int tegra_pcie_try_link_l2(struct tegra_pcie_dw *pcie)
1518 {
1519         u32 val;
1520
1521         if (!tegra_pcie_dw_link_up(&pcie->pci))
1522                 return 0;
1523
1524         val = appl_readl(pcie, APPL_RADM_STATUS);
1525         val |= APPL_PM_XMT_TURNOFF_STATE;
1526         appl_writel(pcie, val, APPL_RADM_STATUS);
1527
1528         return readl_poll_timeout_atomic(pcie->appl_base + APPL_DEBUG, val,
1529                                  val & APPL_DEBUG_PM_LINKST_IN_L2_LAT,
1530                                  1, PME_ACK_TIMEOUT);
1531 }
1532
1533 static void tegra_pcie_dw_pme_turnoff(struct tegra_pcie_dw *pcie)
1534 {
1535         u32 data;
1536         int err;
1537
1538         if (!tegra_pcie_dw_link_up(&pcie->pci)) {
1539                 dev_dbg(pcie->dev, "PCIe link is not up...!\n");
1540                 return;
1541         }
1542
1543         if (tegra_pcie_try_link_l2(pcie)) {
1544                 dev_info(pcie->dev, "Link didn't transition to L2 state\n");
1545                 /*
1546                  * TX lane clock freq will reset to Gen1 only if link is in L2
1547                  * or detect state.
1548                  * So apply pex_rst to end point to force RP to go into detect
1549                  * state
1550                  */
1551                 data = appl_readl(pcie, APPL_PINMUX);
1552                 data &= ~APPL_PINMUX_PEX_RST;
1553                 appl_writel(pcie, data, APPL_PINMUX);
1554
1555                 err = readl_poll_timeout_atomic(pcie->appl_base + APPL_DEBUG,
1556                                                 data,
1557                                                 ((data &
1558                                                 APPL_DEBUG_LTSSM_STATE_MASK) >>
1559                                                 APPL_DEBUG_LTSSM_STATE_SHIFT) ==
1560                                                 LTSSM_STATE_PRE_DETECT,
1561                                                 1, LTSSM_TIMEOUT);
1562                 if (err) {
1563                         dev_info(pcie->dev, "Link didn't go to detect state\n");
1564                 } else {
1565                         /* Disable LTSSM after link is in detect state */
1566                         data = appl_readl(pcie, APPL_CTRL);
1567                         data &= ~APPL_CTRL_LTSSM_EN;
1568                         appl_writel(pcie, data, APPL_CTRL);
1569                 }
1570         }
1571         /*
1572          * DBI registers may not be accessible after this as PLL-E would be
1573          * down depending on how CLKREQ is pulled by end point
1574          */
1575         data = appl_readl(pcie, APPL_PINMUX);
1576         data |= (APPL_PINMUX_CLKREQ_OVERRIDE_EN | APPL_PINMUX_CLKREQ_OVERRIDE);
1577         /* Cut REFCLK to slot */
1578         data |= APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE_EN;
1579         data &= ~APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE;
1580         appl_writel(pcie, data, APPL_PINMUX);
1581 }
1582
1583 static int tegra_pcie_deinit_controller(struct tegra_pcie_dw *pcie)
1584 {
1585         tegra_pcie_downstream_dev_to_D0(pcie);
1586         dw_pcie_host_deinit(&pcie->pci.pp);
1587         tegra_pcie_dw_pme_turnoff(pcie);
1588
1589         return __deinit_controller(pcie);
1590 }
1591
1592 static int tegra_pcie_config_rp(struct tegra_pcie_dw *pcie)
1593 {
1594         struct pcie_port *pp = &pcie->pci.pp;
1595         struct device *dev = pcie->dev;
1596         char *name;
1597         int ret;
1598
1599         if (IS_ENABLED(CONFIG_PCI_MSI)) {
1600                 pp->msi_irq = of_irq_get_byname(dev->of_node, "msi");
1601                 if (!pp->msi_irq) {
1602                         dev_err(dev, "Failed to get MSI interrupt\n");
1603                         return -ENODEV;
1604                 }
1605         }
1606
1607         pm_runtime_enable(dev);
1608
1609         ret = pm_runtime_get_sync(dev);
1610         if (ret < 0) {
1611                 dev_err(dev, "Failed to get runtime sync for PCIe dev: %d\n",
1612                         ret);
1613                 goto fail_pm_get_sync;
1614         }
1615
1616         ret = pinctrl_pm_select_default_state(dev);
1617         if (ret < 0) {
1618                 dev_err(dev, "Failed to configure sideband pins: %d\n", ret);
1619                 goto fail_pm_get_sync;
1620         }
1621
1622         tegra_pcie_init_controller(pcie);
1623
1624         pcie->link_state = tegra_pcie_dw_link_up(&pcie->pci);
1625         if (!pcie->link_state) {
1626                 ret = -ENOMEDIUM;
1627                 goto fail_host_init;
1628         }
1629
1630         name = devm_kasprintf(dev, GFP_KERNEL, "%pOFP", dev->of_node);
1631         if (!name) {
1632                 ret = -ENOMEM;
1633                 goto fail_host_init;
1634         }
1635
1636         pcie->debugfs = debugfs_create_dir(name, NULL);
1637         init_debugfs(pcie);
1638
1639         return ret;
1640
1641 fail_host_init:
1642         tegra_pcie_deinit_controller(pcie);
1643 fail_pm_get_sync:
1644         pm_runtime_put_sync(dev);
1645         pm_runtime_disable(dev);
1646         return ret;
1647 }
1648
1649 static void pex_ep_event_pex_rst_assert(struct tegra_pcie_dw *pcie)
1650 {
1651         u32 val;
1652         int ret;
1653
1654         if (pcie->ep_state == EP_STATE_DISABLED)
1655                 return;
1656
1657         /* Disable LTSSM */
1658         val = appl_readl(pcie, APPL_CTRL);
1659         val &= ~APPL_CTRL_LTSSM_EN;
1660         appl_writel(pcie, val, APPL_CTRL);
1661
1662         ret = readl_poll_timeout(pcie->appl_base + APPL_DEBUG, val,
1663                                  ((val & APPL_DEBUG_LTSSM_STATE_MASK) >>
1664                                  APPL_DEBUG_LTSSM_STATE_SHIFT) ==
1665                                  LTSSM_STATE_PRE_DETECT,
1666                                  1, LTSSM_TIMEOUT);
1667         if (ret)
1668                 dev_err(pcie->dev, "Failed to go Detect state: %d\n", ret);
1669
1670         reset_control_assert(pcie->core_rst);
1671
1672         tegra_pcie_disable_phy(pcie);
1673
1674         reset_control_assert(pcie->core_apb_rst);
1675
1676         clk_disable_unprepare(pcie->core_clk);
1677
1678         pm_runtime_put_sync(pcie->dev);
1679
1680         ret = tegra_pcie_bpmp_set_pll_state(pcie, false);
1681         if (ret)
1682                 dev_err(pcie->dev, "Failed to turn off UPHY: %d\n", ret);
1683
1684         pcie->ep_state = EP_STATE_DISABLED;
1685         dev_dbg(pcie->dev, "Uninitialization of endpoint is completed\n");
1686 }
1687
1688 static void pex_ep_event_pex_rst_deassert(struct tegra_pcie_dw *pcie)
1689 {
1690         struct dw_pcie *pci = &pcie->pci;
1691         struct dw_pcie_ep *ep = &pci->ep;
1692         struct device *dev = pcie->dev;
1693         u32 val;
1694         int ret;
1695
1696         if (pcie->ep_state == EP_STATE_ENABLED)
1697                 return;
1698
1699         ret = pm_runtime_get_sync(dev);
1700         if (ret < 0) {
1701                 dev_err(dev, "Failed to get runtime sync for PCIe dev: %d\n",
1702                         ret);
1703                 return;
1704         }
1705
1706         ret = tegra_pcie_bpmp_set_pll_state(pcie, true);
1707         if (ret) {
1708                 dev_err(dev, "Failed to init UPHY for PCIe EP: %d\n", ret);
1709                 goto fail_pll_init;
1710         }
1711
1712         ret = clk_prepare_enable(pcie->core_clk);
1713         if (ret) {
1714                 dev_err(dev, "Failed to enable core clock: %d\n", ret);
1715                 goto fail_core_clk_enable;
1716         }
1717
1718         ret = reset_control_deassert(pcie->core_apb_rst);
1719         if (ret) {
1720                 dev_err(dev, "Failed to deassert core APB reset: %d\n", ret);
1721                 goto fail_core_apb_rst;
1722         }
1723
1724         ret = tegra_pcie_enable_phy(pcie);
1725         if (ret) {
1726                 dev_err(dev, "Failed to enable PHY: %d\n", ret);
1727                 goto fail_phy;
1728         }
1729
1730         /* Clear any stale interrupt statuses */
1731         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L0);
1732         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_0_0);
1733         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_1);
1734         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_2);
1735         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_3);
1736         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_6);
1737         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_7);
1738         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_8_0);
1739         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_9);
1740         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_10);
1741         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_11);
1742         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_13);
1743         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_14);
1744         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_15);
1745         appl_writel(pcie, 0xFFFFFFFF, APPL_INTR_STATUS_L1_17);
1746
1747         /* configure this core for EP mode operation */
1748         val = appl_readl(pcie, APPL_DM_TYPE);
1749         val &= ~APPL_DM_TYPE_MASK;
1750         val |= APPL_DM_TYPE_EP;
1751         appl_writel(pcie, val, APPL_DM_TYPE);
1752
1753         appl_writel(pcie, 0x0, APPL_CFG_SLCG_OVERRIDE);
1754
1755         val = appl_readl(pcie, APPL_CTRL);
1756         val |= APPL_CTRL_SYS_PRE_DET_STATE;
1757         val |= APPL_CTRL_HW_HOT_RST_EN;
1758         appl_writel(pcie, val, APPL_CTRL);
1759
1760         val = appl_readl(pcie, APPL_CFG_MISC);
1761         val |= APPL_CFG_MISC_SLV_EP_MODE;
1762         val |= (APPL_CFG_MISC_ARCACHE_VAL << APPL_CFG_MISC_ARCACHE_SHIFT);
1763         appl_writel(pcie, val, APPL_CFG_MISC);
1764
1765         val = appl_readl(pcie, APPL_PINMUX);
1766         val |= APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE_EN;
1767         val |= APPL_PINMUX_CLK_OUTPUT_IN_OVERRIDE;
1768         appl_writel(pcie, val, APPL_PINMUX);
1769
1770         appl_writel(pcie, pcie->dbi_res->start & APPL_CFG_BASE_ADDR_MASK,
1771                     APPL_CFG_BASE_ADDR);
1772
1773         appl_writel(pcie, pcie->atu_dma_res->start &
1774                     APPL_CFG_IATU_DMA_BASE_ADDR_MASK,
1775                     APPL_CFG_IATU_DMA_BASE_ADDR);
1776
1777         val = appl_readl(pcie, APPL_INTR_EN_L0_0);
1778         val |= APPL_INTR_EN_L0_0_SYS_INTR_EN;
1779         val |= APPL_INTR_EN_L0_0_LINK_STATE_INT_EN;
1780         val |= APPL_INTR_EN_L0_0_PCI_CMD_EN_INT_EN;
1781         appl_writel(pcie, val, APPL_INTR_EN_L0_0);
1782
1783         val = appl_readl(pcie, APPL_INTR_EN_L1_0_0);
1784         val |= APPL_INTR_EN_L1_0_0_HOT_RESET_DONE_INT_EN;
1785         val |= APPL_INTR_EN_L1_0_0_RDLH_LINK_UP_INT_EN;
1786         appl_writel(pcie, val, APPL_INTR_EN_L1_0_0);
1787
1788         reset_control_deassert(pcie->core_rst);
1789
1790         if (pcie->update_fc_fixup) {
1791                 val = dw_pcie_readl_dbi(pci, CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF);
1792                 val |= 0x1 << CFG_TIMER_CTRL_ACK_NAK_SHIFT;
1793                 dw_pcie_writel_dbi(pci, CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF, val);
1794         }
1795
1796         config_gen3_gen4_eq_presets(pcie);
1797
1798         init_host_aspm(pcie);
1799
1800         /* Disable ASPM-L1SS advertisement if there is no CLKREQ routing */
1801         if (!pcie->supports_clkreq) {
1802                 disable_aspm_l11(pcie);
1803                 disable_aspm_l12(pcie);
1804         }
1805
1806         val = dw_pcie_readl_dbi(pci, GEN3_RELATED_OFF);
1807         val &= ~GEN3_RELATED_OFF_GEN3_ZRXDC_NONCOMPL;
1808         dw_pcie_writel_dbi(pci, GEN3_RELATED_OFF, val);
1809
1810         /* Configure N_FTS & FTS */
1811         val = dw_pcie_readl_dbi(pci, PORT_LOGIC_ACK_F_ASPM_CTRL);
1812         val &= ~(N_FTS_MASK << N_FTS_SHIFT);
1813         val |= N_FTS_VAL << N_FTS_SHIFT;
1814         dw_pcie_writel_dbi(pci, PORT_LOGIC_ACK_F_ASPM_CTRL, val);
1815
1816         val = dw_pcie_readl_dbi(pci, PORT_LOGIC_GEN2_CTRL);
1817         val &= ~FTS_MASK;
1818         val |= FTS_VAL;
1819         dw_pcie_writel_dbi(pci, PORT_LOGIC_GEN2_CTRL, val);
1820
1821         /* Configure Max Speed from DT */
1822         if (pcie->max_speed && pcie->max_speed != -EINVAL) {
1823                 val = dw_pcie_readl_dbi(pci, pcie->pcie_cap_base +
1824                                         PCI_EXP_LNKCAP);
1825                 val &= ~PCI_EXP_LNKCAP_SLS;
1826                 val |= pcie->max_speed;
1827                 dw_pcie_writel_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKCAP,
1828                                    val);
1829         }
1830
1831         pcie->pcie_cap_base = dw_pcie_find_capability(&pcie->pci,
1832                                                       PCI_CAP_ID_EXP);
1833         clk_set_rate(pcie->core_clk, GEN4_CORE_CLK_FREQ);
1834
1835         val = (ep->msi_mem_phys & MSIX_ADDR_MATCH_LOW_OFF_MASK);
1836         val |= MSIX_ADDR_MATCH_LOW_OFF_EN;
1837         dw_pcie_writel_dbi(pci, MSIX_ADDR_MATCH_LOW_OFF, val);
1838         val = (lower_32_bits(ep->msi_mem_phys) & MSIX_ADDR_MATCH_HIGH_OFF_MASK);
1839         dw_pcie_writel_dbi(pci, MSIX_ADDR_MATCH_HIGH_OFF, val);
1840
1841         ret = dw_pcie_ep_init_complete(ep);
1842         if (ret) {
1843                 dev_err(dev, "Failed to complete initialization: %d\n", ret);
1844                 goto fail_init_complete;
1845         }
1846
1847         dw_pcie_ep_init_notify(ep);
1848
1849         /* Enable LTSSM */
1850         val = appl_readl(pcie, APPL_CTRL);
1851         val |= APPL_CTRL_LTSSM_EN;
1852         appl_writel(pcie, val, APPL_CTRL);
1853
1854         pcie->ep_state = EP_STATE_ENABLED;
1855         dev_dbg(dev, "Initialization of endpoint is completed\n");
1856
1857         return;
1858
1859 fail_init_complete:
1860         reset_control_assert(pcie->core_rst);
1861         tegra_pcie_disable_phy(pcie);
1862 fail_phy:
1863         reset_control_assert(pcie->core_apb_rst);
1864 fail_core_apb_rst:
1865         clk_disable_unprepare(pcie->core_clk);
1866 fail_core_clk_enable:
1867         tegra_pcie_bpmp_set_pll_state(pcie, false);
1868 fail_pll_init:
1869         pm_runtime_put_sync(dev);
1870 }
1871
1872 static irqreturn_t tegra_pcie_ep_pex_rst_irq(int irq, void *arg)
1873 {
1874         struct tegra_pcie_dw *pcie = arg;
1875
1876         if (gpiod_get_value(pcie->pex_rst_gpiod))
1877                 pex_ep_event_pex_rst_assert(pcie);
1878         else
1879                 pex_ep_event_pex_rst_deassert(pcie);
1880
1881         return IRQ_HANDLED;
1882 }
1883
1884 static int tegra_pcie_ep_raise_legacy_irq(struct tegra_pcie_dw *pcie, u16 irq)
1885 {
1886         /* Tegra194 supports only INTA */
1887         if (irq > 1)
1888                 return -EINVAL;
1889
1890         appl_writel(pcie, 1, APPL_LEGACY_INTX);
1891         usleep_range(1000, 2000);
1892         appl_writel(pcie, 0, APPL_LEGACY_INTX);
1893         return 0;
1894 }
1895
1896 static int tegra_pcie_ep_raise_msi_irq(struct tegra_pcie_dw *pcie, u16 irq)
1897 {
1898         if (unlikely(irq > 31))
1899                 return -EINVAL;
1900
1901         appl_writel(pcie, (1 << irq), APPL_MSI_CTRL_1);
1902
1903         return 0;
1904 }
1905
1906 static int tegra_pcie_ep_raise_msix_irq(struct tegra_pcie_dw *pcie, u16 irq)
1907 {
1908         struct dw_pcie_ep *ep = &pcie->pci.ep;
1909
1910         writel(irq, ep->msi_mem);
1911
1912         return 0;
1913 }
1914
1915 static int tegra_pcie_ep_raise_irq(struct dw_pcie_ep *ep, u8 func_no,
1916                                    enum pci_epc_irq_type type,
1917                                    u16 interrupt_num)
1918 {
1919         struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
1920         struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
1921
1922         switch (type) {
1923         case PCI_EPC_IRQ_LEGACY:
1924                 return tegra_pcie_ep_raise_legacy_irq(pcie, interrupt_num);
1925
1926         case PCI_EPC_IRQ_MSI:
1927                 return tegra_pcie_ep_raise_msi_irq(pcie, interrupt_num);
1928
1929         case PCI_EPC_IRQ_MSIX:
1930                 return tegra_pcie_ep_raise_msix_irq(pcie, interrupt_num);
1931
1932         default:
1933                 dev_err(pci->dev, "Unknown IRQ type\n");
1934                 return -EPERM;
1935         }
1936
1937         return 0;
1938 }
1939
1940 static const struct pci_epc_features tegra_pcie_epc_features = {
1941         .linkup_notifier = true,
1942         .core_init_notifier = true,
1943         .msi_capable = false,
1944         .msix_capable = false,
1945         .reserved_bar = 1 << BAR_2 | 1 << BAR_3 | 1 << BAR_4 | 1 << BAR_5,
1946         .bar_fixed_64bit = 1 << BAR_0,
1947         .bar_fixed_size[0] = SZ_1M,
1948 };
1949
1950 static const struct pci_epc_features*
1951 tegra_pcie_ep_get_features(struct dw_pcie_ep *ep)
1952 {
1953         return &tegra_pcie_epc_features;
1954 }
1955
1956 static struct dw_pcie_ep_ops pcie_ep_ops = {
1957         .raise_irq = tegra_pcie_ep_raise_irq,
1958         .get_features = tegra_pcie_ep_get_features,
1959 };
1960
1961 static int tegra_pcie_config_ep(struct tegra_pcie_dw *pcie,
1962                                 struct platform_device *pdev)
1963 {
1964         struct dw_pcie *pci = &pcie->pci;
1965         struct device *dev = pcie->dev;
1966         struct dw_pcie_ep *ep;
1967         struct resource *res;
1968         char *name;
1969         int ret;
1970
1971         ep = &pci->ep;
1972         ep->ops = &pcie_ep_ops;
1973
1974         res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "addr_space");
1975         if (!res)
1976                 return -EINVAL;
1977
1978         ep->phys_base = res->start;
1979         ep->addr_size = resource_size(res);
1980         ep->page_size = SZ_64K;
1981
1982         ret = gpiod_set_debounce(pcie->pex_rst_gpiod, PERST_DEBOUNCE_TIME);
1983         if (ret < 0) {
1984                 dev_err(dev, "Failed to set PERST GPIO debounce time: %d\n",
1985                         ret);
1986                 return ret;
1987         }
1988
1989         ret = gpiod_to_irq(pcie->pex_rst_gpiod);
1990         if (ret < 0) {
1991                 dev_err(dev, "Failed to get IRQ for PERST GPIO: %d\n", ret);
1992                 return ret;
1993         }
1994         pcie->pex_rst_irq = (unsigned int)ret;
1995
1996         name = devm_kasprintf(dev, GFP_KERNEL, "tegra_pcie_%u_pex_rst_irq",
1997                               pcie->cid);
1998         if (!name) {
1999                 dev_err(dev, "Failed to create PERST IRQ string\n");
2000                 return -ENOMEM;
2001         }
2002
2003         irq_set_status_flags(pcie->pex_rst_irq, IRQ_NOAUTOEN);
2004
2005         pcie->ep_state = EP_STATE_DISABLED;
2006
2007         ret = devm_request_threaded_irq(dev, pcie->pex_rst_irq, NULL,
2008                                         tegra_pcie_ep_pex_rst_irq,
2009                                         IRQF_TRIGGER_RISING |
2010                                         IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
2011                                         name, (void *)pcie);
2012         if (ret < 0) {
2013                 dev_err(dev, "Failed to request IRQ for PERST: %d\n", ret);
2014                 return ret;
2015         }
2016
2017         name = devm_kasprintf(dev, GFP_KERNEL, "tegra_pcie_%u_ep_work",
2018                               pcie->cid);
2019         if (!name) {
2020                 dev_err(dev, "Failed to create PCIe EP work thread string\n");
2021                 return -ENOMEM;
2022         }
2023
2024         pm_runtime_enable(dev);
2025
2026         ret = dw_pcie_ep_init(ep);
2027         if (ret) {
2028                 dev_err(dev, "Failed to initialize DWC Endpoint subsystem: %d\n",
2029                         ret);
2030                 return ret;
2031         }
2032
2033         return 0;
2034 }
2035
2036 static int tegra_pcie_dw_probe(struct platform_device *pdev)
2037 {
2038         const struct tegra_pcie_dw_of_data *data;
2039         struct device *dev = &pdev->dev;
2040         struct resource *atu_dma_res;
2041         struct tegra_pcie_dw *pcie;
2042         struct resource *dbi_res;
2043         struct pcie_port *pp;
2044         struct dw_pcie *pci;
2045         struct phy **phys;
2046         char *name;
2047         int ret;
2048         u32 i;
2049
2050         data = of_device_get_match_data(dev);
2051
2052         pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
2053         if (!pcie)
2054                 return -ENOMEM;
2055
2056         pci = &pcie->pci;
2057         pci->dev = &pdev->dev;
2058         pci->ops = &tegra_dw_pcie_ops;
2059         pp = &pci->pp;
2060         pcie->dev = &pdev->dev;
2061         pcie->mode = (enum dw_pcie_device_mode)data->mode;
2062
2063         ret = tegra_pcie_dw_parse_dt(pcie);
2064         if (ret < 0) {
2065                 const char *level = KERN_ERR;
2066
2067                 if (ret == -EPROBE_DEFER)
2068                         level = KERN_DEBUG;
2069
2070                 dev_printk(level, dev,
2071                            dev_fmt("Failed to parse device tree: %d\n"),
2072                            ret);
2073                 return ret;
2074         }
2075
2076         ret = tegra_pcie_get_slot_regulators(pcie);
2077         if (ret < 0) {
2078                 const char *level = KERN_ERR;
2079
2080                 if (ret == -EPROBE_DEFER)
2081                         level = KERN_DEBUG;
2082
2083                 dev_printk(level, dev,
2084                            dev_fmt("Failed to get slot regulators: %d\n"),
2085                            ret);
2086                 return ret;
2087         }
2088
2089         if (pcie->pex_refclk_sel_gpiod)
2090                 gpiod_set_value(pcie->pex_refclk_sel_gpiod, 1);
2091
2092         pcie->pex_ctl_supply = devm_regulator_get(dev, "vddio-pex-ctl");
2093         if (IS_ERR(pcie->pex_ctl_supply)) {
2094                 ret = PTR_ERR(pcie->pex_ctl_supply);
2095                 if (ret != -EPROBE_DEFER)
2096                         dev_err(dev, "Failed to get regulator: %ld\n",
2097                                 PTR_ERR(pcie->pex_ctl_supply));
2098                 return ret;
2099         }
2100
2101         pcie->core_clk = devm_clk_get(dev, "core");
2102         if (IS_ERR(pcie->core_clk)) {
2103                 dev_err(dev, "Failed to get core clock: %ld\n",
2104                         PTR_ERR(pcie->core_clk));
2105                 return PTR_ERR(pcie->core_clk);
2106         }
2107
2108         pcie->appl_res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
2109                                                       "appl");
2110         if (!pcie->appl_res) {
2111                 dev_err(dev, "Failed to find \"appl\" region\n");
2112                 return -ENODEV;
2113         }
2114
2115         pcie->appl_base = devm_ioremap_resource(dev, pcie->appl_res);
2116         if (IS_ERR(pcie->appl_base))
2117                 return PTR_ERR(pcie->appl_base);
2118
2119         pcie->core_apb_rst = devm_reset_control_get(dev, "apb");
2120         if (IS_ERR(pcie->core_apb_rst)) {
2121                 dev_err(dev, "Failed to get APB reset: %ld\n",
2122                         PTR_ERR(pcie->core_apb_rst));
2123                 return PTR_ERR(pcie->core_apb_rst);
2124         }
2125
2126         phys = devm_kcalloc(dev, pcie->phy_count, sizeof(*phys), GFP_KERNEL);
2127         if (!phys)
2128                 return -ENOMEM;
2129
2130         for (i = 0; i < pcie->phy_count; i++) {
2131                 name = kasprintf(GFP_KERNEL, "p2u-%u", i);
2132                 if (!name) {
2133                         dev_err(dev, "Failed to create P2U string\n");
2134                         return -ENOMEM;
2135                 }
2136                 phys[i] = devm_phy_get(dev, name);
2137                 kfree(name);
2138                 if (IS_ERR(phys[i])) {
2139                         ret = PTR_ERR(phys[i]);
2140                         if (ret != -EPROBE_DEFER)
2141                                 dev_err(dev, "Failed to get PHY: %d\n", ret);
2142                         return ret;
2143                 }
2144         }
2145
2146         pcie->phys = phys;
2147
2148         dbi_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
2149         if (!dbi_res) {
2150                 dev_err(dev, "Failed to find \"dbi\" region\n");
2151                 return -ENODEV;
2152         }
2153         pcie->dbi_res = dbi_res;
2154
2155         pci->dbi_base = devm_ioremap_resource(dev, dbi_res);
2156         if (IS_ERR(pci->dbi_base))
2157                 return PTR_ERR(pci->dbi_base);
2158
2159         /* Tegra HW locates DBI2 at a fixed offset from DBI */
2160         pci->dbi_base2 = pci->dbi_base + 0x1000;
2161
2162         atu_dma_res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
2163                                                    "atu_dma");
2164         if (!atu_dma_res) {
2165                 dev_err(dev, "Failed to find \"atu_dma\" region\n");
2166                 return -ENODEV;
2167         }
2168         pcie->atu_dma_res = atu_dma_res;
2169
2170         pci->atu_base = devm_ioremap_resource(dev, atu_dma_res);
2171         if (IS_ERR(pci->atu_base))
2172                 return PTR_ERR(pci->atu_base);
2173
2174         pcie->core_rst = devm_reset_control_get(dev, "core");
2175         if (IS_ERR(pcie->core_rst)) {
2176                 dev_err(dev, "Failed to get core reset: %ld\n",
2177                         PTR_ERR(pcie->core_rst));
2178                 return PTR_ERR(pcie->core_rst);
2179         }
2180
2181         pp->irq = platform_get_irq_byname(pdev, "intr");
2182         if (pp->irq < 0)
2183                 return pp->irq;
2184
2185         pcie->bpmp = tegra_bpmp_get(dev);
2186         if (IS_ERR(pcie->bpmp))
2187                 return PTR_ERR(pcie->bpmp);
2188
2189         platform_set_drvdata(pdev, pcie);
2190
2191         switch (pcie->mode) {
2192         case DW_PCIE_RC_TYPE:
2193                 ret = devm_request_irq(dev, pp->irq, tegra_pcie_rp_irq_handler,
2194                                        IRQF_SHARED, "tegra-pcie-intr", pcie);
2195                 if (ret) {
2196                         dev_err(dev, "Failed to request IRQ %d: %d\n", pp->irq,
2197                                 ret);
2198                         goto fail;
2199                 }
2200
2201                 ret = tegra_pcie_config_rp(pcie);
2202                 if (ret && ret != -ENOMEDIUM)
2203                         goto fail;
2204                 else
2205                         return 0;
2206                 break;
2207
2208         case DW_PCIE_EP_TYPE:
2209                 ret = devm_request_threaded_irq(dev, pp->irq,
2210                                                 tegra_pcie_ep_hard_irq,
2211                                                 tegra_pcie_ep_irq_thread,
2212                                                 IRQF_SHARED | IRQF_ONESHOT,
2213                                                 "tegra-pcie-ep-intr", pcie);
2214                 if (ret) {
2215                         dev_err(dev, "Failed to request IRQ %d: %d\n", pp->irq,
2216                                 ret);
2217                         goto fail;
2218                 }
2219
2220                 ret = tegra_pcie_config_ep(pcie, pdev);
2221                 if (ret < 0)
2222                         goto fail;
2223                 break;
2224
2225         default:
2226                 dev_err(dev, "Invalid PCIe device type %d\n", pcie->mode);
2227         }
2228
2229 fail:
2230         tegra_bpmp_put(pcie->bpmp);
2231         return ret;
2232 }
2233
2234 static int tegra_pcie_dw_remove(struct platform_device *pdev)
2235 {
2236         struct tegra_pcie_dw *pcie = platform_get_drvdata(pdev);
2237
2238         if (!pcie->link_state)
2239                 return 0;
2240
2241         debugfs_remove_recursive(pcie->debugfs);
2242         tegra_pcie_deinit_controller(pcie);
2243         pm_runtime_put_sync(pcie->dev);
2244         pm_runtime_disable(pcie->dev);
2245         tegra_bpmp_put(pcie->bpmp);
2246         if (pcie->pex_refclk_sel_gpiod)
2247                 gpiod_set_value(pcie->pex_refclk_sel_gpiod, 0);
2248
2249         return 0;
2250 }
2251
2252 static int tegra_pcie_dw_suspend_late(struct device *dev)
2253 {
2254         struct tegra_pcie_dw *pcie = dev_get_drvdata(dev);
2255         u32 val;
2256
2257         if (!pcie->link_state)
2258                 return 0;
2259
2260         /* Enable HW_HOT_RST mode */
2261         val = appl_readl(pcie, APPL_CTRL);
2262         val &= ~(APPL_CTRL_HW_HOT_RST_MODE_MASK <<
2263                  APPL_CTRL_HW_HOT_RST_MODE_SHIFT);
2264         val |= APPL_CTRL_HW_HOT_RST_EN;
2265         appl_writel(pcie, val, APPL_CTRL);
2266
2267         return 0;
2268 }
2269
2270 static int tegra_pcie_dw_suspend_noirq(struct device *dev)
2271 {
2272         struct tegra_pcie_dw *pcie = dev_get_drvdata(dev);
2273
2274         if (!pcie->link_state)
2275                 return 0;
2276
2277         /* Save MSI interrupt vector */
2278         pcie->msi_ctrl_int = dw_pcie_readl_dbi(&pcie->pci,
2279                                                PORT_LOGIC_MSI_CTRL_INT_0_EN);
2280         tegra_pcie_downstream_dev_to_D0(pcie);
2281         tegra_pcie_dw_pme_turnoff(pcie);
2282
2283         return __deinit_controller(pcie);
2284 }
2285
2286 static int tegra_pcie_dw_resume_noirq(struct device *dev)
2287 {
2288         struct tegra_pcie_dw *pcie = dev_get_drvdata(dev);
2289         int ret;
2290
2291         if (!pcie->link_state)
2292                 return 0;
2293
2294         ret = tegra_pcie_config_controller(pcie, true);
2295         if (ret < 0)
2296                 return ret;
2297
2298         ret = tegra_pcie_dw_host_init(&pcie->pci.pp);
2299         if (ret < 0) {
2300                 dev_err(dev, "Failed to init host: %d\n", ret);
2301                 goto fail_host_init;
2302         }
2303
2304         /* Restore MSI interrupt vector */
2305         dw_pcie_writel_dbi(&pcie->pci, PORT_LOGIC_MSI_CTRL_INT_0_EN,
2306                            pcie->msi_ctrl_int);
2307
2308         return 0;
2309
2310 fail_host_init:
2311         return __deinit_controller(pcie);
2312 }
2313
2314 static int tegra_pcie_dw_resume_early(struct device *dev)
2315 {
2316         struct tegra_pcie_dw *pcie = dev_get_drvdata(dev);
2317         u32 val;
2318
2319         if (!pcie->link_state)
2320                 return 0;
2321
2322         /* Disable HW_HOT_RST mode */
2323         val = appl_readl(pcie, APPL_CTRL);
2324         val &= ~(APPL_CTRL_HW_HOT_RST_MODE_MASK <<
2325                  APPL_CTRL_HW_HOT_RST_MODE_SHIFT);
2326         val |= APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST <<
2327                APPL_CTRL_HW_HOT_RST_MODE_SHIFT;
2328         val &= ~APPL_CTRL_HW_HOT_RST_EN;
2329         appl_writel(pcie, val, APPL_CTRL);
2330
2331         return 0;
2332 }
2333
2334 static void tegra_pcie_dw_shutdown(struct platform_device *pdev)
2335 {
2336         struct tegra_pcie_dw *pcie = platform_get_drvdata(pdev);
2337
2338         if (!pcie->link_state)
2339                 return;
2340
2341         debugfs_remove_recursive(pcie->debugfs);
2342         tegra_pcie_downstream_dev_to_D0(pcie);
2343
2344         disable_irq(pcie->pci.pp.irq);
2345         if (IS_ENABLED(CONFIG_PCI_MSI))
2346                 disable_irq(pcie->pci.pp.msi_irq);
2347
2348         tegra_pcie_dw_pme_turnoff(pcie);
2349         __deinit_controller(pcie);
2350 }
2351
2352 static const struct tegra_pcie_dw_of_data tegra_pcie_dw_rc_of_data = {
2353         .mode = DW_PCIE_RC_TYPE,
2354 };
2355
2356 static const struct tegra_pcie_dw_of_data tegra_pcie_dw_ep_of_data = {
2357         .mode = DW_PCIE_EP_TYPE,
2358 };
2359
2360 static const struct of_device_id tegra_pcie_dw_of_match[] = {
2361         {
2362                 .compatible = "nvidia,tegra194-pcie",
2363                 .data = &tegra_pcie_dw_rc_of_data,
2364         },
2365         {
2366                 .compatible = "nvidia,tegra194-pcie-ep",
2367                 .data = &tegra_pcie_dw_ep_of_data,
2368         },
2369         {},
2370 };
2371
2372 static const struct dev_pm_ops tegra_pcie_dw_pm_ops = {
2373         .suspend_late = tegra_pcie_dw_suspend_late,
2374         .suspend_noirq = tegra_pcie_dw_suspend_noirq,
2375         .resume_noirq = tegra_pcie_dw_resume_noirq,
2376         .resume_early = tegra_pcie_dw_resume_early,
2377 };
2378
2379 static struct platform_driver tegra_pcie_dw_driver = {
2380         .probe = tegra_pcie_dw_probe,
2381         .remove = tegra_pcie_dw_remove,
2382         .shutdown = tegra_pcie_dw_shutdown,
2383         .driver = {
2384                 .name   = "tegra194-pcie",
2385                 .pm = &tegra_pcie_dw_pm_ops,
2386                 .of_match_table = tegra_pcie_dw_of_match,
2387         },
2388 };
2389 module_platform_driver(tegra_pcie_dw_driver);
2390
2391 MODULE_DEVICE_TABLE(of, tegra_pcie_dw_of_match);
2392
2393 MODULE_AUTHOR("Vidya Sagar <vidyas@nvidia.com>");
2394 MODULE_DESCRIPTION("NVIDIA PCIe host controller driver");
2395 MODULE_LICENSE("GPL v2");