blob: 7be31f58a4e61d65e3633d627336f02ed20b43a0 [file] [log] [blame]
Thierry Redingd1523b52013-08-09 16:49:19 +02001/*
Jay Agarwal94716cd2013-08-09 16:49:24 +02002 * PCIe host controller driver for Tegra SoCs
Thierry Redingd1523b52013-08-09 16:49:19 +02003 *
4 * Copyright (c) 2010, CompuLab, Ltd.
5 * Author: Mike Rapoport <mike@compulab.co.il>
6 *
7 * Based on NVIDIA PCIe driver
8 * Copyright (c) 2008-2009, NVIDIA Corporation.
9 *
10 * Bits taken from arch/arm/mach-dove/pcie.c
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful, but WITHOUT
18 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
20 * more details.
21 *
22 * You should have received a copy of the GNU General Public License along
23 * with this program; if not, write to the Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
25 */
26
27#include <linux/clk.h>
Thierry Reding2cb989f2014-07-22 12:30:46 -060028#include <linux/debugfs.h>
Thierry Redingd1523b52013-08-09 16:49:19 +020029#include <linux/delay.h>
30#include <linux/export.h>
31#include <linux/interrupt.h>
32#include <linux/irq.h>
33#include <linux/irqdomain.h>
34#include <linux/kernel.h>
35#include <linux/module.h>
36#include <linux/msi.h>
37#include <linux/of_address.h>
38#include <linux/of_pci.h>
39#include <linux/of_platform.h>
40#include <linux/pci.h>
41#include <linux/platform_device.h>
Stephen Warren3127a6b2013-11-06 15:56:58 -070042#include <linux/reset.h>
Thierry Redingd1523b52013-08-09 16:49:19 +020043#include <linux/sizes.h>
44#include <linux/slab.h>
Thierry Redingd1523b52013-08-09 16:49:19 +020045#include <linux/vmalloc.h>
46#include <linux/regulator/consumer.h>
47
Thierry Reding306a7f92014-07-17 13:17:24 +020048#include <soc/tegra/cpuidle.h>
Thierry Reding72323982014-07-11 13:19:06 +020049#include <soc/tegra/pmc.h>
Thierry Reding306a7f92014-07-17 13:17:24 +020050
Thierry Redingd1523b52013-08-09 16:49:19 +020051#include <asm/mach/irq.h>
52#include <asm/mach/map.h>
53#include <asm/mach/pci.h>
54
55#define INT_PCI_MSI_NR (8 * 32)
Thierry Redingd1523b52013-08-09 16:49:19 +020056
57/* register definitions */
58
59#define AFI_AXI_BAR0_SZ 0x00
60#define AFI_AXI_BAR1_SZ 0x04
61#define AFI_AXI_BAR2_SZ 0x08
62#define AFI_AXI_BAR3_SZ 0x0c
63#define AFI_AXI_BAR4_SZ 0x10
64#define AFI_AXI_BAR5_SZ 0x14
65
66#define AFI_AXI_BAR0_START 0x18
67#define AFI_AXI_BAR1_START 0x1c
68#define AFI_AXI_BAR2_START 0x20
69#define AFI_AXI_BAR3_START 0x24
70#define AFI_AXI_BAR4_START 0x28
71#define AFI_AXI_BAR5_START 0x2c
72
73#define AFI_FPCI_BAR0 0x30
74#define AFI_FPCI_BAR1 0x34
75#define AFI_FPCI_BAR2 0x38
76#define AFI_FPCI_BAR3 0x3c
77#define AFI_FPCI_BAR4 0x40
78#define AFI_FPCI_BAR5 0x44
79
80#define AFI_CACHE_BAR0_SZ 0x48
81#define AFI_CACHE_BAR0_ST 0x4c
82#define AFI_CACHE_BAR1_SZ 0x50
83#define AFI_CACHE_BAR1_ST 0x54
84
85#define AFI_MSI_BAR_SZ 0x60
86#define AFI_MSI_FPCI_BAR_ST 0x64
87#define AFI_MSI_AXI_BAR_ST 0x68
88
89#define AFI_MSI_VEC0 0x6c
90#define AFI_MSI_VEC1 0x70
91#define AFI_MSI_VEC2 0x74
92#define AFI_MSI_VEC3 0x78
93#define AFI_MSI_VEC4 0x7c
94#define AFI_MSI_VEC5 0x80
95#define AFI_MSI_VEC6 0x84
96#define AFI_MSI_VEC7 0x88
97
98#define AFI_MSI_EN_VEC0 0x8c
99#define AFI_MSI_EN_VEC1 0x90
100#define AFI_MSI_EN_VEC2 0x94
101#define AFI_MSI_EN_VEC3 0x98
102#define AFI_MSI_EN_VEC4 0x9c
103#define AFI_MSI_EN_VEC5 0xa0
104#define AFI_MSI_EN_VEC6 0xa4
105#define AFI_MSI_EN_VEC7 0xa8
106
107#define AFI_CONFIGURATION 0xac
108#define AFI_CONFIGURATION_EN_FPCI (1 << 0)
109
110#define AFI_FPCI_ERROR_MASKS 0xb0
111
112#define AFI_INTR_MASK 0xb4
113#define AFI_INTR_MASK_INT_MASK (1 << 0)
114#define AFI_INTR_MASK_MSI_MASK (1 << 8)
115
116#define AFI_INTR_CODE 0xb8
117#define AFI_INTR_CODE_MASK 0xf
118#define AFI_INTR_AXI_SLAVE_ERROR 1
119#define AFI_INTR_AXI_DECODE_ERROR 2
120#define AFI_INTR_TARGET_ABORT 3
121#define AFI_INTR_MASTER_ABORT 4
122#define AFI_INTR_INVALID_WRITE 5
123#define AFI_INTR_LEGACY 6
124#define AFI_INTR_FPCI_DECODE_ERROR 7
125
126#define AFI_INTR_SIGNATURE 0xbc
127#define AFI_UPPER_FPCI_ADDRESS 0xc0
128#define AFI_SM_INTR_ENABLE 0xc4
129#define AFI_SM_INTR_INTA_ASSERT (1 << 0)
130#define AFI_SM_INTR_INTB_ASSERT (1 << 1)
131#define AFI_SM_INTR_INTC_ASSERT (1 << 2)
132#define AFI_SM_INTR_INTD_ASSERT (1 << 3)
133#define AFI_SM_INTR_INTA_DEASSERT (1 << 4)
134#define AFI_SM_INTR_INTB_DEASSERT (1 << 5)
135#define AFI_SM_INTR_INTC_DEASSERT (1 << 6)
136#define AFI_SM_INTR_INTD_DEASSERT (1 << 7)
137
138#define AFI_AFI_INTR_ENABLE 0xc8
139#define AFI_INTR_EN_INI_SLVERR (1 << 0)
140#define AFI_INTR_EN_INI_DECERR (1 << 1)
141#define AFI_INTR_EN_TGT_SLVERR (1 << 2)
142#define AFI_INTR_EN_TGT_DECERR (1 << 3)
143#define AFI_INTR_EN_TGT_WRERR (1 << 4)
144#define AFI_INTR_EN_DFPCI_DECERR (1 << 5)
145#define AFI_INTR_EN_AXI_DECERR (1 << 6)
146#define AFI_INTR_EN_FPCI_TIMEOUT (1 << 7)
Jay Agarwal94716cd2013-08-09 16:49:24 +0200147#define AFI_INTR_EN_PRSNT_SENSE (1 << 8)
Thierry Redingd1523b52013-08-09 16:49:19 +0200148
149#define AFI_PCIE_CONFIG 0x0f8
150#define AFI_PCIE_CONFIG_PCIE_DISABLE(x) (1 << ((x) + 1))
151#define AFI_PCIE_CONFIG_PCIE_DISABLE_ALL 0xe
152#define AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_MASK (0xf << 20)
153#define AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_SINGLE (0x0 << 20)
Jay Agarwal94716cd2013-08-09 16:49:24 +0200154#define AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_420 (0x0 << 20)
Thierry Redingd1523b52013-08-09 16:49:19 +0200155#define AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_DUAL (0x1 << 20)
Jay Agarwal94716cd2013-08-09 16:49:24 +0200156#define AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_222 (0x1 << 20)
157#define AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_411 (0x2 << 20)
Thierry Redingd1523b52013-08-09 16:49:19 +0200158
159#define AFI_FUSE 0x104
160#define AFI_FUSE_PCIE_T0_GEN2_DIS (1 << 2)
161
162#define AFI_PEX0_CTRL 0x110
163#define AFI_PEX1_CTRL 0x118
Jay Agarwal94716cd2013-08-09 16:49:24 +0200164#define AFI_PEX2_CTRL 0x128
Thierry Redingd1523b52013-08-09 16:49:19 +0200165#define AFI_PEX_CTRL_RST (1 << 0)
Jay Agarwal94716cd2013-08-09 16:49:24 +0200166#define AFI_PEX_CTRL_CLKREQ_EN (1 << 1)
Thierry Redingd1523b52013-08-09 16:49:19 +0200167#define AFI_PEX_CTRL_REFCLK_EN (1 << 3)
168
Jay Agarwal94716cd2013-08-09 16:49:24 +0200169#define AFI_PEXBIAS_CTRL_0 0x168
170
Thierry Redingd1523b52013-08-09 16:49:19 +0200171#define RP_VEND_XP 0x00000F00
172#define RP_VEND_XP_DL_UP (1 << 30)
173
174#define RP_LINK_CONTROL_STATUS 0x00000090
175#define RP_LINK_CONTROL_STATUS_DL_LINK_ACTIVE 0x20000000
176#define RP_LINK_CONTROL_STATUS_LINKSTAT_MASK 0x3fff0000
177
178#define PADS_CTL_SEL 0x0000009C
179
180#define PADS_CTL 0x000000A0
181#define PADS_CTL_IDDQ_1L (1 << 0)
182#define PADS_CTL_TX_DATA_EN_1L (1 << 6)
183#define PADS_CTL_RX_DATA_EN_1L (1 << 10)
184
Jay Agarwal94716cd2013-08-09 16:49:24 +0200185#define PADS_PLL_CTL_TEGRA20 0x000000B8
186#define PADS_PLL_CTL_TEGRA30 0x000000B4
Thierry Redingd1523b52013-08-09 16:49:19 +0200187#define PADS_PLL_CTL_RST_B4SM (1 << 1)
188#define PADS_PLL_CTL_LOCKDET (1 << 8)
189#define PADS_PLL_CTL_REFCLK_MASK (0x3 << 16)
190#define PADS_PLL_CTL_REFCLK_INTERNAL_CML (0 << 16)
191#define PADS_PLL_CTL_REFCLK_INTERNAL_CMOS (1 << 16)
192#define PADS_PLL_CTL_REFCLK_EXTERNAL (2 << 16)
193#define PADS_PLL_CTL_TXCLKREF_MASK (0x1 << 20)
194#define PADS_PLL_CTL_TXCLKREF_DIV10 (0 << 20)
195#define PADS_PLL_CTL_TXCLKREF_DIV5 (1 << 20)
Jay Agarwal94716cd2013-08-09 16:49:24 +0200196#define PADS_PLL_CTL_TXCLKREF_BUF_EN (1 << 22)
197
198#define PADS_REFCLK_CFG0 0x000000C8
199#define PADS_REFCLK_CFG1 0x000000CC
Thierry Redingd1523b52013-08-09 16:49:19 +0200200
Stephen Warrenb02b07a2013-08-09 16:49:25 +0200201/*
202 * Fields in PADS_REFCLK_CFG*. Those registers form an array of 16-bit
203 * entries, one entry per PCIe port. These field definitions and desired
204 * values aren't in the TRM, but do come from NVIDIA.
205 */
206#define PADS_REFCLK_CFG_TERM_SHIFT 2 /* 6:2 */
207#define PADS_REFCLK_CFG_E_TERM_SHIFT 7
208#define PADS_REFCLK_CFG_PREDI_SHIFT 8 /* 11:8 */
209#define PADS_REFCLK_CFG_DRVI_SHIFT 12 /* 15:12 */
210
211/* Default value provided by HW engineering is 0xfa5c */
212#define PADS_REFCLK_CFG_VALUE \
213 ( \
214 (0x17 << PADS_REFCLK_CFG_TERM_SHIFT) | \
215 (0 << PADS_REFCLK_CFG_E_TERM_SHIFT) | \
216 (0xa << PADS_REFCLK_CFG_PREDI_SHIFT) | \
217 (0xf << PADS_REFCLK_CFG_DRVI_SHIFT) \
218 )
219
Thierry Redingd1523b52013-08-09 16:49:19 +0200220struct tegra_msi {
221 struct msi_chip chip;
222 DECLARE_BITMAP(used, INT_PCI_MSI_NR);
223 struct irq_domain *domain;
224 unsigned long pages;
225 struct mutex lock;
226 int irq;
227};
228
Jay Agarwal94716cd2013-08-09 16:49:24 +0200229/* used to differentiate between Tegra SoC generations */
230struct tegra_pcie_soc_data {
231 unsigned int num_ports;
232 unsigned int msi_base_shift;
233 u32 pads_pll_ctl;
234 u32 tx_ref_sel;
235 bool has_pex_clkreq_en;
236 bool has_pex_bias_ctrl;
237 bool has_intr_prsnt_sense;
Jay Agarwal94716cd2013-08-09 16:49:24 +0200238 bool has_cml_clk;
239};
240
Thierry Redingd1523b52013-08-09 16:49:19 +0200241static inline struct tegra_msi *to_tegra_msi(struct msi_chip *chip)
242{
243 return container_of(chip, struct tegra_msi, chip);
244}
245
246struct tegra_pcie {
247 struct device *dev;
248
249 void __iomem *pads;
250 void __iomem *afi;
251 int irq;
252
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700253 struct list_head buses;
Thierry Redingd1523b52013-08-09 16:49:19 +0200254 struct resource *cs;
255
Thierry Reding41534e52014-08-01 14:15:11 +0200256 struct resource all;
Thierry Redingd1523b52013-08-09 16:49:19 +0200257 struct resource io;
258 struct resource mem;
259 struct resource prefetch;
260 struct resource busn;
261
262 struct clk *pex_clk;
263 struct clk *afi_clk;
Thierry Redingd1523b52013-08-09 16:49:19 +0200264 struct clk *pll_e;
Jay Agarwal94716cd2013-08-09 16:49:24 +0200265 struct clk *cml_clk;
Thierry Redingd1523b52013-08-09 16:49:19 +0200266
Stephen Warren3127a6b2013-11-06 15:56:58 -0700267 struct reset_control *pex_rst;
268 struct reset_control *afi_rst;
269 struct reset_control *pcie_xrst;
270
Thierry Redingd1523b52013-08-09 16:49:19 +0200271 struct tegra_msi msi;
272
273 struct list_head ports;
274 unsigned int num_ports;
275 u32 xbar_config;
276
Thierry Reding077fb152014-05-28 16:49:13 +0200277 struct regulator_bulk_data *supplies;
278 unsigned int num_supplies;
Jay Agarwal94716cd2013-08-09 16:49:24 +0200279
280 const struct tegra_pcie_soc_data *soc_data;
Thierry Reding2cb989f2014-07-22 12:30:46 -0600281 struct dentry *debugfs;
Thierry Redingd1523b52013-08-09 16:49:19 +0200282};
283
284struct tegra_pcie_port {
285 struct tegra_pcie *pcie;
286 struct list_head list;
287 struct resource regs;
288 void __iomem *base;
289 unsigned int index;
290 unsigned int lanes;
291};
292
293struct tegra_pcie_bus {
294 struct vm_struct *area;
295 struct list_head list;
296 unsigned int nr;
297};
298
299static inline struct tegra_pcie *sys_to_pcie(struct pci_sys_data *sys)
300{
301 return sys->private_data;
302}
303
304static inline void afi_writel(struct tegra_pcie *pcie, u32 value,
305 unsigned long offset)
306{
307 writel(value, pcie->afi + offset);
308}
309
310static inline u32 afi_readl(struct tegra_pcie *pcie, unsigned long offset)
311{
312 return readl(pcie->afi + offset);
313}
314
315static inline void pads_writel(struct tegra_pcie *pcie, u32 value,
316 unsigned long offset)
317{
318 writel(value, pcie->pads + offset);
319}
320
321static inline u32 pads_readl(struct tegra_pcie *pcie, unsigned long offset)
322{
323 return readl(pcie->pads + offset);
324}
325
326/*
327 * The configuration space mapping on Tegra is somewhat similar to the ECAM
328 * defined by PCIe. However it deviates a bit in how the 4 bits for extended
329 * register accesses are mapped:
330 *
331 * [27:24] extended register number
332 * [23:16] bus number
333 * [15:11] device number
334 * [10: 8] function number
335 * [ 7: 0] register number
336 *
337 * Mapping the whole extended configuration space would require 256 MiB of
338 * virtual address space, only a small part of which will actually be used.
339 * To work around this, a 1 MiB of virtual addresses are allocated per bus
340 * when the bus is first accessed. When the physical range is mapped, the
341 * the bus number bits are hidden so that the extended register number bits
342 * appear as bits [19:16]. Therefore the virtual mapping looks like this:
343 *
344 * [19:16] extended register number
345 * [15:11] device number
346 * [10: 8] function number
347 * [ 7: 0] register number
348 *
349 * This is achieved by stitching together 16 chunks of 64 KiB of physical
350 * address space via the MMU.
351 */
352static unsigned long tegra_pcie_conf_offset(unsigned int devfn, int where)
353{
354 return ((where & 0xf00) << 8) | (PCI_SLOT(devfn) << 11) |
355 (PCI_FUNC(devfn) << 8) | (where & 0xfc);
356}
357
358static struct tegra_pcie_bus *tegra_pcie_bus_alloc(struct tegra_pcie *pcie,
359 unsigned int busnr)
360{
361 pgprot_t prot = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | L_PTE_XN |
362 L_PTE_MT_DEV_SHARED | L_PTE_SHARED;
363 phys_addr_t cs = pcie->cs->start;
364 struct tegra_pcie_bus *bus;
365 unsigned int i;
366 int err;
367
368 bus = kzalloc(sizeof(*bus), GFP_KERNEL);
369 if (!bus)
370 return ERR_PTR(-ENOMEM);
371
372 INIT_LIST_HEAD(&bus->list);
373 bus->nr = busnr;
374
375 /* allocate 1 MiB of virtual addresses */
376 bus->area = get_vm_area(SZ_1M, VM_IOREMAP);
377 if (!bus->area) {
378 err = -ENOMEM;
379 goto free;
380 }
381
382 /* map each of the 16 chunks of 64 KiB each */
383 for (i = 0; i < 16; i++) {
384 unsigned long virt = (unsigned long)bus->area->addr +
385 i * SZ_64K;
386 phys_addr_t phys = cs + i * SZ_1M + busnr * SZ_64K;
387
388 err = ioremap_page_range(virt, virt + SZ_64K, phys, prot);
389 if (err < 0) {
390 dev_err(pcie->dev, "ioremap_page_range() failed: %d\n",
391 err);
392 goto unmap;
393 }
394 }
395
396 return bus;
397
398unmap:
399 vunmap(bus->area->addr);
400free:
401 kfree(bus);
402 return ERR_PTR(err);
403}
404
405/*
406 * Look up a virtual address mapping for the specified bus number. If no such
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700407 * mapping exists, try to create one.
Thierry Redingd1523b52013-08-09 16:49:19 +0200408 */
409static void __iomem *tegra_pcie_bus_map(struct tegra_pcie *pcie,
410 unsigned int busnr)
411{
412 struct tegra_pcie_bus *bus;
413
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700414 list_for_each_entry(bus, &pcie->buses, list)
Thierry Redingd1523b52013-08-09 16:49:19 +0200415 if (bus->nr == busnr)
Jingoo Han1e652492013-09-25 16:40:54 -0600416 return (void __iomem *)bus->area->addr;
Thierry Redingd1523b52013-08-09 16:49:19 +0200417
418 bus = tegra_pcie_bus_alloc(pcie, busnr);
419 if (IS_ERR(bus))
420 return NULL;
421
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700422 list_add_tail(&bus->list, &pcie->buses);
Thierry Redingd1523b52013-08-09 16:49:19 +0200423
Jingoo Han1e652492013-09-25 16:40:54 -0600424 return (void __iomem *)bus->area->addr;
Thierry Redingd1523b52013-08-09 16:49:19 +0200425}
426
427static void __iomem *tegra_pcie_conf_address(struct pci_bus *bus,
428 unsigned int devfn,
429 int where)
430{
431 struct tegra_pcie *pcie = sys_to_pcie(bus->sysdata);
432 void __iomem *addr = NULL;
433
434 if (bus->number == 0) {
435 unsigned int slot = PCI_SLOT(devfn);
436 struct tegra_pcie_port *port;
437
438 list_for_each_entry(port, &pcie->ports, list) {
439 if (port->index + 1 == slot) {
440 addr = port->base + (where & ~3);
441 break;
442 }
443 }
444 } else {
445 addr = tegra_pcie_bus_map(pcie, bus->number);
446 if (!addr) {
447 dev_err(pcie->dev,
448 "failed to map cfg. space for bus %u\n",
449 bus->number);
450 return NULL;
451 }
452
453 addr += tegra_pcie_conf_offset(devfn, where);
454 }
455
456 return addr;
457}
458
459static int tegra_pcie_read_conf(struct pci_bus *bus, unsigned int devfn,
460 int where, int size, u32 *value)
461{
462 void __iomem *addr;
463
464 addr = tegra_pcie_conf_address(bus, devfn, where);
465 if (!addr) {
466 *value = 0xffffffff;
467 return PCIBIOS_DEVICE_NOT_FOUND;
468 }
469
470 *value = readl(addr);
471
472 if (size == 1)
473 *value = (*value >> (8 * (where & 3))) & 0xff;
474 else if (size == 2)
475 *value = (*value >> (8 * (where & 3))) & 0xffff;
476
477 return PCIBIOS_SUCCESSFUL;
478}
479
480static int tegra_pcie_write_conf(struct pci_bus *bus, unsigned int devfn,
481 int where, int size, u32 value)
482{
483 void __iomem *addr;
484 u32 mask, tmp;
485
486 addr = tegra_pcie_conf_address(bus, devfn, where);
487 if (!addr)
488 return PCIBIOS_DEVICE_NOT_FOUND;
489
490 if (size == 4) {
491 writel(value, addr);
492 return PCIBIOS_SUCCESSFUL;
493 }
494
495 if (size == 2)
496 mask = ~(0xffff << ((where & 0x3) * 8));
497 else if (size == 1)
498 mask = ~(0xff << ((where & 0x3) * 8));
499 else
500 return PCIBIOS_BAD_REGISTER_NUMBER;
501
502 tmp = readl(addr) & mask;
503 tmp |= value << ((where & 0x3) * 8);
504 writel(tmp, addr);
505
506 return PCIBIOS_SUCCESSFUL;
507}
508
509static struct pci_ops tegra_pcie_ops = {
510 .read = tegra_pcie_read_conf,
511 .write = tegra_pcie_write_conf,
512};
513
514static unsigned long tegra_pcie_port_get_pex_ctrl(struct tegra_pcie_port *port)
515{
516 unsigned long ret = 0;
517
518 switch (port->index) {
519 case 0:
520 ret = AFI_PEX0_CTRL;
521 break;
522
523 case 1:
524 ret = AFI_PEX1_CTRL;
525 break;
Jay Agarwal94716cd2013-08-09 16:49:24 +0200526
527 case 2:
528 ret = AFI_PEX2_CTRL;
529 break;
Thierry Redingd1523b52013-08-09 16:49:19 +0200530 }
531
532 return ret;
533}
534
535static void tegra_pcie_port_reset(struct tegra_pcie_port *port)
536{
537 unsigned long ctrl = tegra_pcie_port_get_pex_ctrl(port);
538 unsigned long value;
539
540 /* pulse reset signal */
541 value = afi_readl(port->pcie, ctrl);
542 value &= ~AFI_PEX_CTRL_RST;
543 afi_writel(port->pcie, value, ctrl);
544
545 usleep_range(1000, 2000);
546
547 value = afi_readl(port->pcie, ctrl);
548 value |= AFI_PEX_CTRL_RST;
549 afi_writel(port->pcie, value, ctrl);
550}
551
552static void tegra_pcie_port_enable(struct tegra_pcie_port *port)
553{
Jay Agarwal94716cd2013-08-09 16:49:24 +0200554 const struct tegra_pcie_soc_data *soc = port->pcie->soc_data;
Thierry Redingd1523b52013-08-09 16:49:19 +0200555 unsigned long ctrl = tegra_pcie_port_get_pex_ctrl(port);
556 unsigned long value;
557
558 /* enable reference clock */
559 value = afi_readl(port->pcie, ctrl);
560 value |= AFI_PEX_CTRL_REFCLK_EN;
Jay Agarwal94716cd2013-08-09 16:49:24 +0200561
562 if (soc->has_pex_clkreq_en)
563 value |= AFI_PEX_CTRL_CLKREQ_EN;
564
Thierry Redingd1523b52013-08-09 16:49:19 +0200565 afi_writel(port->pcie, value, ctrl);
566
567 tegra_pcie_port_reset(port);
568}
569
570static void tegra_pcie_port_disable(struct tegra_pcie_port *port)
571{
572 unsigned long ctrl = tegra_pcie_port_get_pex_ctrl(port);
573 unsigned long value;
574
575 /* assert port reset */
576 value = afi_readl(port->pcie, ctrl);
577 value &= ~AFI_PEX_CTRL_RST;
578 afi_writel(port->pcie, value, ctrl);
579
580 /* disable reference clock */
581 value = afi_readl(port->pcie, ctrl);
582 value &= ~AFI_PEX_CTRL_REFCLK_EN;
583 afi_writel(port->pcie, value, ctrl);
584}
585
586static void tegra_pcie_port_free(struct tegra_pcie_port *port)
587{
588 struct tegra_pcie *pcie = port->pcie;
589
590 devm_iounmap(pcie->dev, port->base);
591 devm_release_mem_region(pcie->dev, port->regs.start,
592 resource_size(&port->regs));
593 list_del(&port->list);
594 devm_kfree(pcie->dev, port);
595}
596
597static void tegra_pcie_fixup_bridge(struct pci_dev *dev)
598{
599 u16 reg;
600
601 if ((dev->class >> 16) == PCI_BASE_CLASS_BRIDGE) {
602 pci_read_config_word(dev, PCI_COMMAND, &reg);
603 reg |= (PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
604 PCI_COMMAND_MASTER | PCI_COMMAND_SERR);
605 pci_write_config_word(dev, PCI_COMMAND, reg);
606 }
607}
608DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, tegra_pcie_fixup_bridge);
609
610/* Tegra PCIE root complex wrongly reports device class */
611static void tegra_pcie_fixup_class(struct pci_dev *dev)
612{
613 dev->class = PCI_CLASS_BRIDGE_PCI << 8;
614}
615DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, 0x0bf0, tegra_pcie_fixup_class);
616DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, 0x0bf1, tegra_pcie_fixup_class);
Jay Agarwal94716cd2013-08-09 16:49:24 +0200617DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, 0x0e1c, tegra_pcie_fixup_class);
618DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, 0x0e1d, tegra_pcie_fixup_class);
Thierry Redingd1523b52013-08-09 16:49:19 +0200619
620/* Tegra PCIE requires relaxed ordering */
621static void tegra_pcie_relax_enable(struct pci_dev *dev)
622{
623 pcie_capability_set_word(dev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_RELAX_EN);
624}
625DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, tegra_pcie_relax_enable);
626
627static int tegra_pcie_setup(int nr, struct pci_sys_data *sys)
628{
629 struct tegra_pcie *pcie = sys_to_pcie(sys);
Thierry Reding41534e52014-08-01 14:15:11 +0200630 int err;
631
632 err = devm_request_resource(pcie->dev, &pcie->all, &pcie->mem);
633 if (err < 0)
634 return err;
635
636 err = devm_request_resource(pcie->dev, &pcie->all, &pcie->prefetch);
637 if (err)
638 return err;
Thierry Redingd1523b52013-08-09 16:49:19 +0200639
640 pci_add_resource_offset(&sys->resources, &pcie->mem, sys->mem_offset);
641 pci_add_resource_offset(&sys->resources, &pcie->prefetch,
642 sys->mem_offset);
643 pci_add_resource(&sys->resources, &pcie->busn);
644
645 pci_ioremap_io(nr * SZ_64K, pcie->io.start);
646
647 return 1;
648}
649
650static int tegra_pcie_map_irq(const struct pci_dev *pdev, u8 slot, u8 pin)
651{
652 struct tegra_pcie *pcie = sys_to_pcie(pdev->bus->sysdata);
Lucas Stachf5d33522014-04-16 10:24:32 -0600653 int irq;
Thierry Redingd1523b52013-08-09 16:49:19 +0200654
Stephen Warrenb4f17372013-05-06 14:19:19 -0600655 tegra_cpuidle_pcie_irqs_in_use();
656
Lucas Stachf5d33522014-04-16 10:24:32 -0600657 irq = of_irq_parse_and_map_pci(pdev, slot, pin);
658 if (!irq)
659 irq = pcie->irq;
660
661 return irq;
Thierry Redingd1523b52013-08-09 16:49:19 +0200662}
663
664static void tegra_pcie_add_bus(struct pci_bus *bus)
665{
666 if (IS_ENABLED(CONFIG_PCI_MSI)) {
667 struct tegra_pcie *pcie = sys_to_pcie(bus->sysdata);
668
669 bus->msi = &pcie->msi.chip;
670 }
671}
672
673static struct pci_bus *tegra_pcie_scan_bus(int nr, struct pci_sys_data *sys)
674{
675 struct tegra_pcie *pcie = sys_to_pcie(sys);
676 struct pci_bus *bus;
677
678 bus = pci_create_root_bus(pcie->dev, sys->busnr, &tegra_pcie_ops, sys,
679 &sys->resources);
680 if (!bus)
681 return NULL;
682
683 pci_scan_child_bus(bus);
684
685 return bus;
686}
687
688static irqreturn_t tegra_pcie_isr(int irq, void *arg)
689{
690 const char *err_msg[] = {
691 "Unknown",
692 "AXI slave error",
693 "AXI decode error",
694 "Target abort",
695 "Master abort",
696 "Invalid write",
697 "Response decoding error",
698 "AXI response decoding error",
699 "Transaction timeout",
700 };
701 struct tegra_pcie *pcie = arg;
702 u32 code, signature;
703
704 code = afi_readl(pcie, AFI_INTR_CODE) & AFI_INTR_CODE_MASK;
705 signature = afi_readl(pcie, AFI_INTR_SIGNATURE);
706 afi_writel(pcie, 0, AFI_INTR_CODE);
707
708 if (code == AFI_INTR_LEGACY)
709 return IRQ_NONE;
710
711 if (code >= ARRAY_SIZE(err_msg))
712 code = 0;
713
714 /*
715 * do not pollute kernel log with master abort reports since they
716 * happen a lot during enumeration
717 */
718 if (code == AFI_INTR_MASTER_ABORT)
719 dev_dbg(pcie->dev, "%s, signature: %08x\n", err_msg[code],
720 signature);
721 else
722 dev_err(pcie->dev, "%s, signature: %08x\n", err_msg[code],
723 signature);
724
725 if (code == AFI_INTR_TARGET_ABORT || code == AFI_INTR_MASTER_ABORT ||
726 code == AFI_INTR_FPCI_DECODE_ERROR) {
727 u32 fpci = afi_readl(pcie, AFI_UPPER_FPCI_ADDRESS) & 0xff;
728 u64 address = (u64)fpci << 32 | (signature & 0xfffffffc);
729
730 if (code == AFI_INTR_MASTER_ABORT)
731 dev_dbg(pcie->dev, " FPCI address: %10llx\n", address);
732 else
733 dev_err(pcie->dev, " FPCI address: %10llx\n", address);
734 }
735
736 return IRQ_HANDLED;
737}
738
739/*
740 * FPCI map is as follows:
741 * - 0xfdfc000000: I/O space
742 * - 0xfdfe000000: type 0 configuration space
743 * - 0xfdff000000: type 1 configuration space
744 * - 0xfe00000000: type 0 extended configuration space
745 * - 0xfe10000000: type 1 extended configuration space
746 */
747static void tegra_pcie_setup_translations(struct tegra_pcie *pcie)
748{
749 u32 fpci_bar, size, axi_address;
750
751 /* Bar 0: type 1 extended configuration space */
752 fpci_bar = 0xfe100000;
753 size = resource_size(pcie->cs);
754 axi_address = pcie->cs->start;
755 afi_writel(pcie, axi_address, AFI_AXI_BAR0_START);
756 afi_writel(pcie, size >> 12, AFI_AXI_BAR0_SZ);
757 afi_writel(pcie, fpci_bar, AFI_FPCI_BAR0);
758
759 /* Bar 1: downstream IO bar */
760 fpci_bar = 0xfdfc0000;
761 size = resource_size(&pcie->io);
762 axi_address = pcie->io.start;
763 afi_writel(pcie, axi_address, AFI_AXI_BAR1_START);
764 afi_writel(pcie, size >> 12, AFI_AXI_BAR1_SZ);
765 afi_writel(pcie, fpci_bar, AFI_FPCI_BAR1);
766
767 /* Bar 2: prefetchable memory BAR */
768 fpci_bar = (((pcie->prefetch.start >> 12) & 0x0fffffff) << 4) | 0x1;
769 size = resource_size(&pcie->prefetch);
770 axi_address = pcie->prefetch.start;
771 afi_writel(pcie, axi_address, AFI_AXI_BAR2_START);
772 afi_writel(pcie, size >> 12, AFI_AXI_BAR2_SZ);
773 afi_writel(pcie, fpci_bar, AFI_FPCI_BAR2);
774
775 /* Bar 3: non prefetchable memory BAR */
776 fpci_bar = (((pcie->mem.start >> 12) & 0x0fffffff) << 4) | 0x1;
777 size = resource_size(&pcie->mem);
778 axi_address = pcie->mem.start;
779 afi_writel(pcie, axi_address, AFI_AXI_BAR3_START);
780 afi_writel(pcie, size >> 12, AFI_AXI_BAR3_SZ);
781 afi_writel(pcie, fpci_bar, AFI_FPCI_BAR3);
782
783 /* NULL out the remaining BARs as they are not used */
784 afi_writel(pcie, 0, AFI_AXI_BAR4_START);
785 afi_writel(pcie, 0, AFI_AXI_BAR4_SZ);
786 afi_writel(pcie, 0, AFI_FPCI_BAR4);
787
788 afi_writel(pcie, 0, AFI_AXI_BAR5_START);
789 afi_writel(pcie, 0, AFI_AXI_BAR5_SZ);
790 afi_writel(pcie, 0, AFI_FPCI_BAR5);
791
792 /* map all upstream transactions as uncached */
793 afi_writel(pcie, PHYS_OFFSET, AFI_CACHE_BAR0_ST);
794 afi_writel(pcie, 0, AFI_CACHE_BAR0_SZ);
795 afi_writel(pcie, 0, AFI_CACHE_BAR1_ST);
796 afi_writel(pcie, 0, AFI_CACHE_BAR1_SZ);
797
798 /* MSI translations are setup only when needed */
799 afi_writel(pcie, 0, AFI_MSI_FPCI_BAR_ST);
800 afi_writel(pcie, 0, AFI_MSI_BAR_SZ);
801 afi_writel(pcie, 0, AFI_MSI_AXI_BAR_ST);
802 afi_writel(pcie, 0, AFI_MSI_BAR_SZ);
803}
804
805static int tegra_pcie_enable_controller(struct tegra_pcie *pcie)
806{
Jay Agarwal94716cd2013-08-09 16:49:24 +0200807 const struct tegra_pcie_soc_data *soc = pcie->soc_data;
Thierry Redingd1523b52013-08-09 16:49:19 +0200808 struct tegra_pcie_port *port;
809 unsigned int timeout;
810 unsigned long value;
811
Jay Agarwal94716cd2013-08-09 16:49:24 +0200812 /* power down PCIe slot clock bias pad */
813 if (soc->has_pex_bias_ctrl)
814 afi_writel(pcie, 0, AFI_PEXBIAS_CTRL_0);
815
Thierry Redingd1523b52013-08-09 16:49:19 +0200816 /* configure mode and disable all ports */
817 value = afi_readl(pcie, AFI_PCIE_CONFIG);
818 value &= ~AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_MASK;
819 value |= AFI_PCIE_CONFIG_PCIE_DISABLE_ALL | pcie->xbar_config;
820
821 list_for_each_entry(port, &pcie->ports, list)
822 value &= ~AFI_PCIE_CONFIG_PCIE_DISABLE(port->index);
823
824 afi_writel(pcie, value, AFI_PCIE_CONFIG);
825
826 value = afi_readl(pcie, AFI_FUSE);
Eric Brower17bd86c2013-11-18 14:55:06 -0800827 value |= AFI_FUSE_PCIE_T0_GEN2_DIS;
Thierry Redingd1523b52013-08-09 16:49:19 +0200828 afi_writel(pcie, value, AFI_FUSE);
829
Bjorn Helgaasf7625982013-11-14 11:28:18 -0700830 /* initialize internal PHY, enable up to 16 PCIE lanes */
Thierry Redingd1523b52013-08-09 16:49:19 +0200831 pads_writel(pcie, 0x0, PADS_CTL_SEL);
832
833 /* override IDDQ to 1 on all 4 lanes */
834 value = pads_readl(pcie, PADS_CTL);
835 value |= PADS_CTL_IDDQ_1L;
836 pads_writel(pcie, value, PADS_CTL);
837
838 /*
839 * Set up PHY PLL inputs select PLLE output as refclock,
840 * set TX ref sel to div10 (not div5).
841 */
Jay Agarwal94716cd2013-08-09 16:49:24 +0200842 value = pads_readl(pcie, soc->pads_pll_ctl);
Thierry Redingd1523b52013-08-09 16:49:19 +0200843 value &= ~(PADS_PLL_CTL_REFCLK_MASK | PADS_PLL_CTL_TXCLKREF_MASK);
Jay Agarwal94716cd2013-08-09 16:49:24 +0200844 value |= PADS_PLL_CTL_REFCLK_INTERNAL_CML | soc->tx_ref_sel;
845 pads_writel(pcie, value, soc->pads_pll_ctl);
Thierry Redingd1523b52013-08-09 16:49:19 +0200846
847 /* take PLL out of reset */
Jay Agarwal94716cd2013-08-09 16:49:24 +0200848 value = pads_readl(pcie, soc->pads_pll_ctl);
Thierry Redingd1523b52013-08-09 16:49:19 +0200849 value |= PADS_PLL_CTL_RST_B4SM;
Jay Agarwal94716cd2013-08-09 16:49:24 +0200850 pads_writel(pcie, value, soc->pads_pll_ctl);
Thierry Redingd1523b52013-08-09 16:49:19 +0200851
Stephen Warrenb02b07a2013-08-09 16:49:25 +0200852 /* Configure the reference clock driver */
853 value = PADS_REFCLK_CFG_VALUE | (PADS_REFCLK_CFG_VALUE << 16);
854 pads_writel(pcie, value, PADS_REFCLK_CFG0);
855 if (soc->num_ports > 2)
856 pads_writel(pcie, PADS_REFCLK_CFG_VALUE, PADS_REFCLK_CFG1);
Thierry Redingd1523b52013-08-09 16:49:19 +0200857
858 /* wait for the PLL to lock */
859 timeout = 300;
860 do {
Jay Agarwal94716cd2013-08-09 16:49:24 +0200861 value = pads_readl(pcie, soc->pads_pll_ctl);
Thierry Redingd1523b52013-08-09 16:49:19 +0200862 usleep_range(1000, 2000);
863 if (--timeout == 0) {
864 pr_err("Tegra PCIe error: timeout waiting for PLL\n");
865 return -EBUSY;
866 }
867 } while (!(value & PADS_PLL_CTL_LOCKDET));
868
869 /* turn off IDDQ override */
870 value = pads_readl(pcie, PADS_CTL);
871 value &= ~PADS_CTL_IDDQ_1L;
872 pads_writel(pcie, value, PADS_CTL);
873
874 /* enable TX/RX data */
875 value = pads_readl(pcie, PADS_CTL);
876 value |= PADS_CTL_TX_DATA_EN_1L | PADS_CTL_RX_DATA_EN_1L;
877 pads_writel(pcie, value, PADS_CTL);
878
879 /* take the PCIe interface module out of reset */
Stephen Warren3127a6b2013-11-06 15:56:58 -0700880 reset_control_deassert(pcie->pcie_xrst);
Thierry Redingd1523b52013-08-09 16:49:19 +0200881
882 /* finally enable PCIe */
883 value = afi_readl(pcie, AFI_CONFIGURATION);
884 value |= AFI_CONFIGURATION_EN_FPCI;
885 afi_writel(pcie, value, AFI_CONFIGURATION);
886
887 value = AFI_INTR_EN_INI_SLVERR | AFI_INTR_EN_INI_DECERR |
888 AFI_INTR_EN_TGT_SLVERR | AFI_INTR_EN_TGT_DECERR |
889 AFI_INTR_EN_TGT_WRERR | AFI_INTR_EN_DFPCI_DECERR;
Jay Agarwal94716cd2013-08-09 16:49:24 +0200890
891 if (soc->has_intr_prsnt_sense)
892 value |= AFI_INTR_EN_PRSNT_SENSE;
893
Thierry Redingd1523b52013-08-09 16:49:19 +0200894 afi_writel(pcie, value, AFI_AFI_INTR_ENABLE);
895 afi_writel(pcie, 0xffffffff, AFI_SM_INTR_ENABLE);
896
897 /* don't enable MSI for now, only when needed */
898 afi_writel(pcie, AFI_INTR_MASK_INT_MASK, AFI_INTR_MASK);
899
900 /* disable all exceptions */
901 afi_writel(pcie, 0, AFI_FPCI_ERROR_MASKS);
902
903 return 0;
904}
905
906static void tegra_pcie_power_off(struct tegra_pcie *pcie)
907{
908 int err;
909
910 /* TODO: disable and unprepare clocks? */
911
Stephen Warren3127a6b2013-11-06 15:56:58 -0700912 reset_control_assert(pcie->pcie_xrst);
913 reset_control_assert(pcie->afi_rst);
914 reset_control_assert(pcie->pex_rst);
Thierry Redingd1523b52013-08-09 16:49:19 +0200915
916 tegra_powergate_power_off(TEGRA_POWERGATE_PCIE);
917
Thierry Reding077fb152014-05-28 16:49:13 +0200918 err = regulator_bulk_disable(pcie->num_supplies, pcie->supplies);
Thierry Redingd1523b52013-08-09 16:49:19 +0200919 if (err < 0)
Thierry Reding077fb152014-05-28 16:49:13 +0200920 dev_warn(pcie->dev, "failed to disable regulators: %d\n", err);
Thierry Redingd1523b52013-08-09 16:49:19 +0200921}
922
923static int tegra_pcie_power_on(struct tegra_pcie *pcie)
924{
Jay Agarwal94716cd2013-08-09 16:49:24 +0200925 const struct tegra_pcie_soc_data *soc = pcie->soc_data;
Thierry Redingd1523b52013-08-09 16:49:19 +0200926 int err;
927
Stephen Warren3127a6b2013-11-06 15:56:58 -0700928 reset_control_assert(pcie->pcie_xrst);
929 reset_control_assert(pcie->afi_rst);
930 reset_control_assert(pcie->pex_rst);
Thierry Redingd1523b52013-08-09 16:49:19 +0200931
932 tegra_powergate_power_off(TEGRA_POWERGATE_PCIE);
933
934 /* enable regulators */
Thierry Reding077fb152014-05-28 16:49:13 +0200935 err = regulator_bulk_enable(pcie->num_supplies, pcie->supplies);
936 if (err < 0)
937 dev_err(pcie->dev, "failed to enable regulators: %d\n", err);
Jay Agarwal94716cd2013-08-09 16:49:24 +0200938
Thierry Redingd1523b52013-08-09 16:49:19 +0200939 err = tegra_powergate_sequence_power_up(TEGRA_POWERGATE_PCIE,
Stephen Warren80b28792013-11-06 15:45:46 -0700940 pcie->pex_clk,
941 pcie->pex_rst);
Thierry Redingd1523b52013-08-09 16:49:19 +0200942 if (err) {
943 dev_err(pcie->dev, "powerup sequence failed: %d\n", err);
944 return err;
945 }
946
Stephen Warren3127a6b2013-11-06 15:56:58 -0700947 reset_control_deassert(pcie->afi_rst);
Thierry Redingd1523b52013-08-09 16:49:19 +0200948
949 err = clk_prepare_enable(pcie->afi_clk);
950 if (err < 0) {
951 dev_err(pcie->dev, "failed to enable AFI clock: %d\n", err);
952 return err;
953 }
954
Jay Agarwal94716cd2013-08-09 16:49:24 +0200955 if (soc->has_cml_clk) {
956 err = clk_prepare_enable(pcie->cml_clk);
957 if (err < 0) {
958 dev_err(pcie->dev, "failed to enable CML clock: %d\n",
959 err);
960 return err;
961 }
962 }
963
Thierry Redingd1523b52013-08-09 16:49:19 +0200964 err = clk_prepare_enable(pcie->pll_e);
965 if (err < 0) {
966 dev_err(pcie->dev, "failed to enable PLLE clock: %d\n", err);
967 return err;
968 }
969
970 return 0;
971}
972
973static int tegra_pcie_clocks_get(struct tegra_pcie *pcie)
974{
Jay Agarwal94716cd2013-08-09 16:49:24 +0200975 const struct tegra_pcie_soc_data *soc = pcie->soc_data;
976
Thierry Redingd1523b52013-08-09 16:49:19 +0200977 pcie->pex_clk = devm_clk_get(pcie->dev, "pex");
978 if (IS_ERR(pcie->pex_clk))
979 return PTR_ERR(pcie->pex_clk);
980
981 pcie->afi_clk = devm_clk_get(pcie->dev, "afi");
982 if (IS_ERR(pcie->afi_clk))
983 return PTR_ERR(pcie->afi_clk);
984
Thierry Redingd1523b52013-08-09 16:49:19 +0200985 pcie->pll_e = devm_clk_get(pcie->dev, "pll_e");
986 if (IS_ERR(pcie->pll_e))
987 return PTR_ERR(pcie->pll_e);
988
Jay Agarwal94716cd2013-08-09 16:49:24 +0200989 if (soc->has_cml_clk) {
990 pcie->cml_clk = devm_clk_get(pcie->dev, "cml");
991 if (IS_ERR(pcie->cml_clk))
992 return PTR_ERR(pcie->cml_clk);
993 }
994
Thierry Redingd1523b52013-08-09 16:49:19 +0200995 return 0;
996}
997
Stephen Warren3127a6b2013-11-06 15:56:58 -0700998static int tegra_pcie_resets_get(struct tegra_pcie *pcie)
999{
1000 pcie->pex_rst = devm_reset_control_get(pcie->dev, "pex");
1001 if (IS_ERR(pcie->pex_rst))
1002 return PTR_ERR(pcie->pex_rst);
1003
1004 pcie->afi_rst = devm_reset_control_get(pcie->dev, "afi");
1005 if (IS_ERR(pcie->afi_rst))
1006 return PTR_ERR(pcie->afi_rst);
1007
1008 pcie->pcie_xrst = devm_reset_control_get(pcie->dev, "pcie_x");
1009 if (IS_ERR(pcie->pcie_xrst))
1010 return PTR_ERR(pcie->pcie_xrst);
1011
1012 return 0;
1013}
1014
Thierry Redingd1523b52013-08-09 16:49:19 +02001015static int tegra_pcie_get_resources(struct tegra_pcie *pcie)
1016{
1017 struct platform_device *pdev = to_platform_device(pcie->dev);
1018 struct resource *pads, *afi, *res;
1019 int err;
1020
1021 err = tegra_pcie_clocks_get(pcie);
1022 if (err) {
1023 dev_err(&pdev->dev, "failed to get clocks: %d\n", err);
1024 return err;
1025 }
1026
Stephen Warren3127a6b2013-11-06 15:56:58 -07001027 err = tegra_pcie_resets_get(pcie);
1028 if (err) {
1029 dev_err(&pdev->dev, "failed to get resets: %d\n", err);
1030 return err;
1031 }
1032
Thierry Redingd1523b52013-08-09 16:49:19 +02001033 err = tegra_pcie_power_on(pcie);
1034 if (err) {
1035 dev_err(&pdev->dev, "failed to power up: %d\n", err);
1036 return err;
1037 }
1038
Thierry Redingd1523b52013-08-09 16:49:19 +02001039 pads = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pads");
Julia Lawalldc05ee32013-08-26 11:11:09 +02001040 pcie->pads = devm_ioremap_resource(&pdev->dev, pads);
1041 if (IS_ERR(pcie->pads)) {
1042 err = PTR_ERR(pcie->pads);
Thierry Redingd1523b52013-08-09 16:49:19 +02001043 goto poweroff;
1044 }
1045
1046 afi = platform_get_resource_byname(pdev, IORESOURCE_MEM, "afi");
Julia Lawalldc05ee32013-08-26 11:11:09 +02001047 pcie->afi = devm_ioremap_resource(&pdev->dev, afi);
1048 if (IS_ERR(pcie->afi)) {
1049 err = PTR_ERR(pcie->afi);
Thierry Redingd1523b52013-08-09 16:49:19 +02001050 goto poweroff;
1051 }
1052
Julia Lawalldc05ee32013-08-26 11:11:09 +02001053 /* request configuration space, but remap later, on demand */
Thierry Redingd1523b52013-08-09 16:49:19 +02001054 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "cs");
1055 if (!res) {
1056 err = -EADDRNOTAVAIL;
1057 goto poweroff;
1058 }
1059
1060 pcie->cs = devm_request_mem_region(pcie->dev, res->start,
1061 resource_size(res), res->name);
1062 if (!pcie->cs) {
1063 err = -EADDRNOTAVAIL;
1064 goto poweroff;
1065 }
1066
1067 /* request interrupt */
1068 err = platform_get_irq_byname(pdev, "intr");
1069 if (err < 0) {
1070 dev_err(&pdev->dev, "failed to get IRQ: %d\n", err);
1071 goto poweroff;
1072 }
1073
1074 pcie->irq = err;
1075
1076 err = request_irq(pcie->irq, tegra_pcie_isr, IRQF_SHARED, "PCIE", pcie);
1077 if (err) {
1078 dev_err(&pdev->dev, "failed to register IRQ: %d\n", err);
1079 goto poweroff;
1080 }
1081
1082 return 0;
1083
1084poweroff:
1085 tegra_pcie_power_off(pcie);
1086 return err;
1087}
1088
1089static int tegra_pcie_put_resources(struct tegra_pcie *pcie)
1090{
1091 if (pcie->irq > 0)
1092 free_irq(pcie->irq, pcie);
1093
1094 tegra_pcie_power_off(pcie);
1095 return 0;
1096}
1097
1098static int tegra_msi_alloc(struct tegra_msi *chip)
1099{
1100 int msi;
1101
1102 mutex_lock(&chip->lock);
1103
1104 msi = find_first_zero_bit(chip->used, INT_PCI_MSI_NR);
1105 if (msi < INT_PCI_MSI_NR)
1106 set_bit(msi, chip->used);
1107 else
1108 msi = -ENOSPC;
1109
1110 mutex_unlock(&chip->lock);
1111
1112 return msi;
1113}
1114
1115static void tegra_msi_free(struct tegra_msi *chip, unsigned long irq)
1116{
1117 struct device *dev = chip->chip.dev;
1118
1119 mutex_lock(&chip->lock);
1120
1121 if (!test_bit(irq, chip->used))
1122 dev_err(dev, "trying to free unused MSI#%lu\n", irq);
1123 else
1124 clear_bit(irq, chip->used);
1125
1126 mutex_unlock(&chip->lock);
1127}
1128
1129static irqreturn_t tegra_pcie_msi_irq(int irq, void *data)
1130{
1131 struct tegra_pcie *pcie = data;
1132 struct tegra_msi *msi = &pcie->msi;
1133 unsigned int i, processed = 0;
1134
1135 for (i = 0; i < 8; i++) {
1136 unsigned long reg = afi_readl(pcie, AFI_MSI_VEC0 + i * 4);
1137
1138 while (reg) {
1139 unsigned int offset = find_first_bit(&reg, 32);
1140 unsigned int index = i * 32 + offset;
1141 unsigned int irq;
1142
1143 /* clear the interrupt */
1144 afi_writel(pcie, 1 << offset, AFI_MSI_VEC0 + i * 4);
1145
1146 irq = irq_find_mapping(msi->domain, index);
1147 if (irq) {
1148 if (test_bit(index, msi->used))
1149 generic_handle_irq(irq);
1150 else
1151 dev_info(pcie->dev, "unhandled MSI\n");
1152 } else {
1153 /*
1154 * that's weird who triggered this?
1155 * just clear it
1156 */
1157 dev_info(pcie->dev, "unexpected MSI\n");
1158 }
1159
1160 /* see if there's any more pending in this vector */
1161 reg = afi_readl(pcie, AFI_MSI_VEC0 + i * 4);
1162
1163 processed++;
1164 }
1165 }
1166
1167 return processed > 0 ? IRQ_HANDLED : IRQ_NONE;
1168}
1169
1170static int tegra_msi_setup_irq(struct msi_chip *chip, struct pci_dev *pdev,
1171 struct msi_desc *desc)
1172{
1173 struct tegra_msi *msi = to_tegra_msi(chip);
1174 struct msi_msg msg;
1175 unsigned int irq;
1176 int hwirq;
1177
1178 hwirq = tegra_msi_alloc(msi);
1179 if (hwirq < 0)
1180 return hwirq;
1181
1182 irq = irq_create_mapping(msi->domain, hwirq);
Jisheng Zhang019fa462014-07-29 09:33:30 +08001183 if (!irq) {
1184 tegra_msi_free(msi, hwirq);
Thierry Redingd1523b52013-08-09 16:49:19 +02001185 return -EINVAL;
Jisheng Zhang019fa462014-07-29 09:33:30 +08001186 }
Thierry Redingd1523b52013-08-09 16:49:19 +02001187
1188 irq_set_msi_desc(irq, desc);
1189
1190 msg.address_lo = virt_to_phys((void *)msi->pages);
1191 /* 32 bit address only */
1192 msg.address_hi = 0;
1193 msg.data = hwirq;
1194
1195 write_msi_msg(irq, &msg);
1196
1197 return 0;
1198}
1199
1200static void tegra_msi_teardown_irq(struct msi_chip *chip, unsigned int irq)
1201{
1202 struct tegra_msi *msi = to_tegra_msi(chip);
1203 struct irq_data *d = irq_get_irq_data(irq);
Jisheng Zhang019fa462014-07-29 09:33:30 +08001204 irq_hw_number_t hwirq = irqd_to_hwirq(d);
Thierry Redingd1523b52013-08-09 16:49:19 +02001205
Jisheng Zhang019fa462014-07-29 09:33:30 +08001206 irq_dispose_mapping(irq);
1207 tegra_msi_free(msi, hwirq);
Thierry Redingd1523b52013-08-09 16:49:19 +02001208}
1209
1210static struct irq_chip tegra_msi_irq_chip = {
1211 .name = "Tegra PCIe MSI",
1212 .irq_enable = unmask_msi_irq,
1213 .irq_disable = mask_msi_irq,
1214 .irq_mask = mask_msi_irq,
1215 .irq_unmask = unmask_msi_irq,
1216};
1217
1218static int tegra_msi_map(struct irq_domain *domain, unsigned int irq,
1219 irq_hw_number_t hwirq)
1220{
1221 irq_set_chip_and_handler(irq, &tegra_msi_irq_chip, handle_simple_irq);
1222 irq_set_chip_data(irq, domain->host_data);
1223 set_irq_flags(irq, IRQF_VALID);
1224
Stephen Warrenb4f17372013-05-06 14:19:19 -06001225 tegra_cpuidle_pcie_irqs_in_use();
1226
Thierry Redingd1523b52013-08-09 16:49:19 +02001227 return 0;
1228}
1229
1230static const struct irq_domain_ops msi_domain_ops = {
1231 .map = tegra_msi_map,
1232};
1233
1234static int tegra_pcie_enable_msi(struct tegra_pcie *pcie)
1235{
1236 struct platform_device *pdev = to_platform_device(pcie->dev);
Jay Agarwal94716cd2013-08-09 16:49:24 +02001237 const struct tegra_pcie_soc_data *soc = pcie->soc_data;
Thierry Redingd1523b52013-08-09 16:49:19 +02001238 struct tegra_msi *msi = &pcie->msi;
1239 unsigned long base;
1240 int err;
1241 u32 reg;
1242
1243 mutex_init(&msi->lock);
1244
1245 msi->chip.dev = pcie->dev;
1246 msi->chip.setup_irq = tegra_msi_setup_irq;
1247 msi->chip.teardown_irq = tegra_msi_teardown_irq;
1248
1249 msi->domain = irq_domain_add_linear(pcie->dev->of_node, INT_PCI_MSI_NR,
1250 &msi_domain_ops, &msi->chip);
1251 if (!msi->domain) {
1252 dev_err(&pdev->dev, "failed to create IRQ domain\n");
1253 return -ENOMEM;
1254 }
1255
1256 err = platform_get_irq_byname(pdev, "msi");
1257 if (err < 0) {
1258 dev_err(&pdev->dev, "failed to get IRQ: %d\n", err);
1259 goto err;
1260 }
1261
1262 msi->irq = err;
1263
1264 err = request_irq(msi->irq, tegra_pcie_msi_irq, 0,
1265 tegra_msi_irq_chip.name, pcie);
1266 if (err < 0) {
1267 dev_err(&pdev->dev, "failed to request IRQ: %d\n", err);
1268 goto err;
1269 }
1270
1271 /* setup AFI/FPCI range */
1272 msi->pages = __get_free_pages(GFP_KERNEL, 0);
1273 base = virt_to_phys((void *)msi->pages);
1274
Jay Agarwal94716cd2013-08-09 16:49:24 +02001275 afi_writel(pcie, base >> soc->msi_base_shift, AFI_MSI_FPCI_BAR_ST);
Thierry Redingd1523b52013-08-09 16:49:19 +02001276 afi_writel(pcie, base, AFI_MSI_AXI_BAR_ST);
1277 /* this register is in 4K increments */
1278 afi_writel(pcie, 1, AFI_MSI_BAR_SZ);
1279
1280 /* enable all MSI vectors */
1281 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC0);
1282 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC1);
1283 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC2);
1284 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC3);
1285 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC4);
1286 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC5);
1287 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC6);
1288 afi_writel(pcie, 0xffffffff, AFI_MSI_EN_VEC7);
1289
1290 /* and unmask the MSI interrupt */
1291 reg = afi_readl(pcie, AFI_INTR_MASK);
1292 reg |= AFI_INTR_MASK_MSI_MASK;
1293 afi_writel(pcie, reg, AFI_INTR_MASK);
1294
1295 return 0;
1296
1297err:
1298 irq_domain_remove(msi->domain);
1299 return err;
1300}
1301
1302static int tegra_pcie_disable_msi(struct tegra_pcie *pcie)
1303{
1304 struct tegra_msi *msi = &pcie->msi;
1305 unsigned int i, irq;
1306 u32 value;
1307
1308 /* mask the MSI interrupt */
1309 value = afi_readl(pcie, AFI_INTR_MASK);
1310 value &= ~AFI_INTR_MASK_MSI_MASK;
1311 afi_writel(pcie, value, AFI_INTR_MASK);
1312
1313 /* disable all MSI vectors */
1314 afi_writel(pcie, 0, AFI_MSI_EN_VEC0);
1315 afi_writel(pcie, 0, AFI_MSI_EN_VEC1);
1316 afi_writel(pcie, 0, AFI_MSI_EN_VEC2);
1317 afi_writel(pcie, 0, AFI_MSI_EN_VEC3);
1318 afi_writel(pcie, 0, AFI_MSI_EN_VEC4);
1319 afi_writel(pcie, 0, AFI_MSI_EN_VEC5);
1320 afi_writel(pcie, 0, AFI_MSI_EN_VEC6);
1321 afi_writel(pcie, 0, AFI_MSI_EN_VEC7);
1322
1323 free_pages(msi->pages, 0);
1324
1325 if (msi->irq > 0)
1326 free_irq(msi->irq, pcie);
1327
1328 for (i = 0; i < INT_PCI_MSI_NR; i++) {
1329 irq = irq_find_mapping(msi->domain, i);
1330 if (irq > 0)
1331 irq_dispose_mapping(irq);
1332 }
1333
1334 irq_domain_remove(msi->domain);
1335
1336 return 0;
1337}
1338
1339static int tegra_pcie_get_xbar_config(struct tegra_pcie *pcie, u32 lanes,
1340 u32 *xbar)
1341{
1342 struct device_node *np = pcie->dev->of_node;
1343
Jay Agarwal94716cd2013-08-09 16:49:24 +02001344 if (of_device_is_compatible(np, "nvidia,tegra30-pcie")) {
1345 switch (lanes) {
1346 case 0x00000204:
1347 dev_info(pcie->dev, "4x1, 2x1 configuration\n");
1348 *xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_420;
1349 return 0;
Thierry Redingd1523b52013-08-09 16:49:19 +02001350
Jay Agarwal94716cd2013-08-09 16:49:24 +02001351 case 0x00020202:
1352 dev_info(pcie->dev, "2x3 configuration\n");
1353 *xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_222;
1354 return 0;
1355
1356 case 0x00010104:
1357 dev_info(pcie->dev, "4x1, 1x2 configuration\n");
1358 *xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_411;
1359 return 0;
1360 }
1361 } else if (of_device_is_compatible(np, "nvidia,tegra20-pcie")) {
1362 switch (lanes) {
1363 case 0x00000004:
1364 dev_info(pcie->dev, "single-mode configuration\n");
1365 *xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_SINGLE;
1366 return 0;
1367
1368 case 0x00000202:
1369 dev_info(pcie->dev, "dual-mode configuration\n");
1370 *xbar = AFI_PCIE_CONFIG_SM2TMS0_XBAR_CONFIG_DUAL;
1371 return 0;
1372 }
Thierry Redingd1523b52013-08-09 16:49:19 +02001373 }
1374
1375 return -EINVAL;
1376}
1377
Thierry Reding077fb152014-05-28 16:49:13 +02001378/*
1379 * Check whether a given set of supplies is available in a device tree node.
1380 * This is used to check whether the new or the legacy device tree bindings
1381 * should be used.
1382 */
1383static bool of_regulator_bulk_available(struct device_node *np,
1384 struct regulator_bulk_data *supplies,
1385 unsigned int num_supplies)
1386{
1387 char property[32];
1388 unsigned int i;
1389
1390 for (i = 0; i < num_supplies; i++) {
1391 snprintf(property, 32, "%s-supply", supplies[i].supply);
1392
1393 if (of_find_property(np, property, NULL) == NULL)
1394 return false;
1395 }
1396
1397 return true;
1398}
1399
1400/*
1401 * Old versions of the device tree binding for this device used a set of power
1402 * supplies that didn't match the hardware inputs. This happened to work for a
1403 * number of cases but is not future proof. However to preserve backwards-
1404 * compatibility with old device trees, this function will try to use the old
1405 * set of supplies.
1406 */
1407static int tegra_pcie_get_legacy_regulators(struct tegra_pcie *pcie)
1408{
1409 struct device_node *np = pcie->dev->of_node;
1410
1411 if (of_device_is_compatible(np, "nvidia,tegra30-pcie"))
1412 pcie->num_supplies = 3;
1413 else if (of_device_is_compatible(np, "nvidia,tegra20-pcie"))
1414 pcie->num_supplies = 2;
1415
1416 if (pcie->num_supplies == 0) {
1417 dev_err(pcie->dev, "device %s not supported in legacy mode\n",
1418 np->full_name);
1419 return -ENODEV;
1420 }
1421
1422 pcie->supplies = devm_kcalloc(pcie->dev, pcie->num_supplies,
1423 sizeof(*pcie->supplies),
1424 GFP_KERNEL);
1425 if (!pcie->supplies)
1426 return -ENOMEM;
1427
1428 pcie->supplies[0].supply = "pex-clk";
1429 pcie->supplies[1].supply = "vdd";
1430
1431 if (pcie->num_supplies > 2)
1432 pcie->supplies[2].supply = "avdd";
1433
1434 return devm_regulator_bulk_get(pcie->dev, pcie->num_supplies,
1435 pcie->supplies);
1436}
1437
1438/*
1439 * Obtains the list of regulators required for a particular generation of the
1440 * IP block.
1441 *
1442 * This would've been nice to do simply by providing static tables for use
1443 * with the regulator_bulk_*() API, but unfortunately Tegra30 is a bit quirky
1444 * in that it has two pairs or AVDD_PEX and VDD_PEX supplies (PEXA and PEXB)
1445 * and either seems to be optional depending on which ports are being used.
1446 */
1447static int tegra_pcie_get_regulators(struct tegra_pcie *pcie, u32 lane_mask)
1448{
1449 struct device_node *np = pcie->dev->of_node;
1450 unsigned int i = 0;
1451
1452 if (of_device_is_compatible(np, "nvidia,tegra30-pcie")) {
1453 bool need_pexa = false, need_pexb = false;
1454
1455 /* VDD_PEXA and AVDD_PEXA supply lanes 0 to 3 */
1456 if (lane_mask & 0x0f)
1457 need_pexa = true;
1458
1459 /* VDD_PEXB and AVDD_PEXB supply lanes 4 to 5 */
1460 if (lane_mask & 0x30)
1461 need_pexb = true;
1462
1463 pcie->num_supplies = 4 + (need_pexa ? 2 : 0) +
1464 (need_pexb ? 2 : 0);
1465
1466 pcie->supplies = devm_kcalloc(pcie->dev, pcie->num_supplies,
1467 sizeof(*pcie->supplies),
1468 GFP_KERNEL);
1469 if (!pcie->supplies)
1470 return -ENOMEM;
1471
1472 pcie->supplies[i++].supply = "avdd-pex-pll";
1473 pcie->supplies[i++].supply = "hvdd-pex";
1474 pcie->supplies[i++].supply = "vddio-pex-ctl";
1475 pcie->supplies[i++].supply = "avdd-plle";
1476
1477 if (need_pexa) {
1478 pcie->supplies[i++].supply = "avdd-pexa";
1479 pcie->supplies[i++].supply = "vdd-pexa";
1480 }
1481
1482 if (need_pexb) {
1483 pcie->supplies[i++].supply = "avdd-pexb";
1484 pcie->supplies[i++].supply = "vdd-pexb";
1485 }
1486 } else if (of_device_is_compatible(np, "nvidia,tegra20-pcie")) {
1487 pcie->num_supplies = 5;
1488
1489 pcie->supplies = devm_kcalloc(pcie->dev, pcie->num_supplies,
1490 sizeof(*pcie->supplies),
1491 GFP_KERNEL);
1492 if (!pcie->supplies)
1493 return -ENOMEM;
1494
1495 pcie->supplies[0].supply = "avdd-pex";
1496 pcie->supplies[1].supply = "vdd-pex";
1497 pcie->supplies[2].supply = "avdd-pex-pll";
1498 pcie->supplies[3].supply = "avdd-plle";
1499 pcie->supplies[4].supply = "vddio-pex-clk";
1500 }
1501
1502 if (of_regulator_bulk_available(pcie->dev->of_node, pcie->supplies,
1503 pcie->num_supplies))
1504 return devm_regulator_bulk_get(pcie->dev, pcie->num_supplies,
1505 pcie->supplies);
1506
1507 /*
1508 * If not all regulators are available for this new scheme, assume
1509 * that the device tree complies with an older version of the device
1510 * tree binding.
1511 */
1512 dev_info(pcie->dev, "using legacy DT binding for power supplies\n");
1513
1514 devm_kfree(pcie->dev, pcie->supplies);
1515 pcie->num_supplies = 0;
1516
1517 return tegra_pcie_get_legacy_regulators(pcie);
1518}
1519
Thierry Redingd1523b52013-08-09 16:49:19 +02001520static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)
1521{
Jay Agarwal94716cd2013-08-09 16:49:24 +02001522 const struct tegra_pcie_soc_data *soc = pcie->soc_data;
Thierry Redingd1523b52013-08-09 16:49:19 +02001523 struct device_node *np = pcie->dev->of_node, *port;
1524 struct of_pci_range_parser parser;
1525 struct of_pci_range range;
Thierry Reding077fb152014-05-28 16:49:13 +02001526 u32 lanes = 0, mask = 0;
1527 unsigned int lane = 0;
Thierry Redingd1523b52013-08-09 16:49:19 +02001528 struct resource res;
Thierry Redingd1523b52013-08-09 16:49:19 +02001529 int err;
1530
Thierry Reding41534e52014-08-01 14:15:11 +02001531 memset(&pcie->all, 0, sizeof(pcie->all));
1532 pcie->all.flags = IORESOURCE_MEM;
1533 pcie->all.name = np->full_name;
1534 pcie->all.start = ~0;
1535 pcie->all.end = 0;
1536
Thierry Redingd1523b52013-08-09 16:49:19 +02001537 if (of_pci_range_parser_init(&parser, np)) {
1538 dev_err(pcie->dev, "missing \"ranges\" property\n");
1539 return -EINVAL;
1540 }
1541
Thierry Redingd1523b52013-08-09 16:49:19 +02001542 for_each_of_pci_range(&parser, &range) {
1543 of_pci_range_to_resource(&range, np, &res);
1544
1545 switch (res.flags & IORESOURCE_TYPE_BITS) {
1546 case IORESOURCE_IO:
1547 memcpy(&pcie->io, &res, sizeof(res));
Thierry Reding41534e52014-08-01 14:15:11 +02001548 pcie->io.name = np->full_name;
Thierry Redingd1523b52013-08-09 16:49:19 +02001549 break;
1550
1551 case IORESOURCE_MEM:
1552 if (res.flags & IORESOURCE_PREFETCH) {
1553 memcpy(&pcie->prefetch, &res, sizeof(res));
Thierry Reding41534e52014-08-01 14:15:11 +02001554 pcie->prefetch.name = "prefetchable";
Thierry Redingd1523b52013-08-09 16:49:19 +02001555 } else {
1556 memcpy(&pcie->mem, &res, sizeof(res));
Thierry Reding41534e52014-08-01 14:15:11 +02001557 pcie->mem.name = "non-prefetchable";
Thierry Redingd1523b52013-08-09 16:49:19 +02001558 }
1559 break;
1560 }
Thierry Reding41534e52014-08-01 14:15:11 +02001561
1562 if (res.start <= pcie->all.start)
1563 pcie->all.start = res.start;
1564
1565 if (res.end >= pcie->all.end)
1566 pcie->all.end = res.end;
Thierry Redingd1523b52013-08-09 16:49:19 +02001567 }
1568
Thierry Reding41534e52014-08-01 14:15:11 +02001569 err = devm_request_resource(pcie->dev, &iomem_resource, &pcie->all);
1570 if (err < 0)
1571 return err;
1572
Thierry Redingd1523b52013-08-09 16:49:19 +02001573 err = of_pci_parse_bus_range(np, &pcie->busn);
1574 if (err < 0) {
1575 dev_err(pcie->dev, "failed to parse ranges property: %d\n",
1576 err);
1577 pcie->busn.name = np->name;
1578 pcie->busn.start = 0;
1579 pcie->busn.end = 0xff;
1580 pcie->busn.flags = IORESOURCE_BUS;
1581 }
1582
1583 /* parse root ports */
1584 for_each_child_of_node(np, port) {
1585 struct tegra_pcie_port *rp;
1586 unsigned int index;
1587 u32 value;
1588
1589 err = of_pci_get_devfn(port);
1590 if (err < 0) {
1591 dev_err(pcie->dev, "failed to parse address: %d\n",
1592 err);
1593 return err;
1594 }
1595
1596 index = PCI_SLOT(err);
1597
Jay Agarwal94716cd2013-08-09 16:49:24 +02001598 if (index < 1 || index > soc->num_ports) {
Thierry Redingd1523b52013-08-09 16:49:19 +02001599 dev_err(pcie->dev, "invalid port number: %d\n", index);
1600 return -EINVAL;
1601 }
1602
1603 index--;
1604
1605 err = of_property_read_u32(port, "nvidia,num-lanes", &value);
1606 if (err < 0) {
1607 dev_err(pcie->dev, "failed to parse # of lanes: %d\n",
1608 err);
1609 return err;
1610 }
1611
1612 if (value > 16) {
1613 dev_err(pcie->dev, "invalid # of lanes: %u\n", value);
1614 return -EINVAL;
1615 }
1616
1617 lanes |= value << (index << 3);
1618
Thierry Reding077fb152014-05-28 16:49:13 +02001619 if (!of_device_is_available(port)) {
1620 lane += value;
Thierry Redingd1523b52013-08-09 16:49:19 +02001621 continue;
Thierry Reding077fb152014-05-28 16:49:13 +02001622 }
1623
1624 mask |= ((1 << value) - 1) << lane;
1625 lane += value;
Thierry Redingd1523b52013-08-09 16:49:19 +02001626
1627 rp = devm_kzalloc(pcie->dev, sizeof(*rp), GFP_KERNEL);
1628 if (!rp)
1629 return -ENOMEM;
1630
1631 err = of_address_to_resource(port, 0, &rp->regs);
1632 if (err < 0) {
1633 dev_err(pcie->dev, "failed to parse address: %d\n",
1634 err);
1635 return err;
1636 }
1637
1638 INIT_LIST_HEAD(&rp->list);
1639 rp->index = index;
1640 rp->lanes = value;
1641 rp->pcie = pcie;
1642
Julia Lawalldc05ee32013-08-26 11:11:09 +02001643 rp->base = devm_ioremap_resource(pcie->dev, &rp->regs);
1644 if (IS_ERR(rp->base))
1645 return PTR_ERR(rp->base);
Thierry Redingd1523b52013-08-09 16:49:19 +02001646
1647 list_add_tail(&rp->list, &pcie->ports);
1648 }
1649
1650 err = tegra_pcie_get_xbar_config(pcie, lanes, &pcie->xbar_config);
1651 if (err < 0) {
1652 dev_err(pcie->dev, "invalid lane configuration\n");
1653 return err;
1654 }
1655
Thierry Reding077fb152014-05-28 16:49:13 +02001656 err = tegra_pcie_get_regulators(pcie, mask);
1657 if (err < 0)
1658 return err;
1659
Thierry Redingd1523b52013-08-09 16:49:19 +02001660 return 0;
1661}
1662
1663/*
1664 * FIXME: If there are no PCIe cards attached, then calling this function
1665 * can result in the increase of the bootup time as there are big timeout
1666 * loops.
1667 */
1668#define TEGRA_PCIE_LINKUP_TIMEOUT 200 /* up to 1.2 seconds */
1669static bool tegra_pcie_port_check_link(struct tegra_pcie_port *port)
1670{
1671 unsigned int retries = 3;
1672 unsigned long value;
1673
1674 do {
1675 unsigned int timeout = TEGRA_PCIE_LINKUP_TIMEOUT;
1676
1677 do {
1678 value = readl(port->base + RP_VEND_XP);
1679
1680 if (value & RP_VEND_XP_DL_UP)
1681 break;
1682
1683 usleep_range(1000, 2000);
1684 } while (--timeout);
1685
1686 if (!timeout) {
1687 dev_err(port->pcie->dev, "link %u down, retrying\n",
1688 port->index);
1689 goto retry;
1690 }
1691
1692 timeout = TEGRA_PCIE_LINKUP_TIMEOUT;
1693
1694 do {
1695 value = readl(port->base + RP_LINK_CONTROL_STATUS);
1696
1697 if (value & RP_LINK_CONTROL_STATUS_DL_LINK_ACTIVE)
1698 return true;
1699
1700 usleep_range(1000, 2000);
1701 } while (--timeout);
1702
1703retry:
1704 tegra_pcie_port_reset(port);
1705 } while (--retries);
1706
1707 return false;
1708}
1709
1710static int tegra_pcie_enable(struct tegra_pcie *pcie)
1711{
1712 struct tegra_pcie_port *port, *tmp;
1713 struct hw_pci hw;
1714
1715 list_for_each_entry_safe(port, tmp, &pcie->ports, list) {
1716 dev_info(pcie->dev, "probing port %u, using %u lanes\n",
1717 port->index, port->lanes);
1718
1719 tegra_pcie_port_enable(port);
1720
1721 if (tegra_pcie_port_check_link(port))
1722 continue;
1723
1724 dev_info(pcie->dev, "link %u down, ignoring\n", port->index);
1725
1726 tegra_pcie_port_disable(port);
1727 tegra_pcie_port_free(port);
1728 }
1729
1730 memset(&hw, 0, sizeof(hw));
1731
1732 hw.nr_controllers = 1;
1733 hw.private_data = (void **)&pcie;
1734 hw.setup = tegra_pcie_setup;
1735 hw.map_irq = tegra_pcie_map_irq;
1736 hw.add_bus = tegra_pcie_add_bus;
1737 hw.scan = tegra_pcie_scan_bus;
1738 hw.ops = &tegra_pcie_ops;
1739
1740 pci_common_init_dev(pcie->dev, &hw);
1741
1742 return 0;
1743}
1744
Jay Agarwal94716cd2013-08-09 16:49:24 +02001745static const struct tegra_pcie_soc_data tegra20_pcie_data = {
1746 .num_ports = 2,
1747 .msi_base_shift = 0,
1748 .pads_pll_ctl = PADS_PLL_CTL_TEGRA20,
1749 .tx_ref_sel = PADS_PLL_CTL_TXCLKREF_DIV10,
1750 .has_pex_clkreq_en = false,
1751 .has_pex_bias_ctrl = false,
1752 .has_intr_prsnt_sense = false,
Jay Agarwal94716cd2013-08-09 16:49:24 +02001753 .has_cml_clk = false,
1754};
1755
1756static const struct tegra_pcie_soc_data tegra30_pcie_data = {
1757 .num_ports = 3,
1758 .msi_base_shift = 8,
1759 .pads_pll_ctl = PADS_PLL_CTL_TEGRA30,
1760 .tx_ref_sel = PADS_PLL_CTL_TXCLKREF_BUF_EN,
1761 .has_pex_clkreq_en = true,
1762 .has_pex_bias_ctrl = true,
1763 .has_intr_prsnt_sense = true,
Jay Agarwal94716cd2013-08-09 16:49:24 +02001764 .has_cml_clk = true,
1765};
1766
1767static const struct of_device_id tegra_pcie_of_match[] = {
1768 { .compatible = "nvidia,tegra30-pcie", .data = &tegra30_pcie_data },
1769 { .compatible = "nvidia,tegra20-pcie", .data = &tegra20_pcie_data },
1770 { },
1771};
1772MODULE_DEVICE_TABLE(of, tegra_pcie_of_match);
1773
Thierry Reding2cb989f2014-07-22 12:30:46 -06001774static void *tegra_pcie_ports_seq_start(struct seq_file *s, loff_t *pos)
1775{
1776 struct tegra_pcie *pcie = s->private;
1777
1778 if (list_empty(&pcie->ports))
1779 return NULL;
1780
1781 seq_printf(s, "Index Status\n");
1782
1783 return seq_list_start(&pcie->ports, *pos);
1784}
1785
1786static void *tegra_pcie_ports_seq_next(struct seq_file *s, void *v, loff_t *pos)
1787{
1788 struct tegra_pcie *pcie = s->private;
1789
1790 return seq_list_next(v, &pcie->ports, pos);
1791}
1792
1793static void tegra_pcie_ports_seq_stop(struct seq_file *s, void *v)
1794{
1795}
1796
1797static int tegra_pcie_ports_seq_show(struct seq_file *s, void *v)
1798{
1799 bool up = false, active = false;
1800 struct tegra_pcie_port *port;
1801 unsigned int value;
1802
1803 port = list_entry(v, struct tegra_pcie_port, list);
1804
1805 value = readl(port->base + RP_VEND_XP);
1806
1807 if (value & RP_VEND_XP_DL_UP)
1808 up = true;
1809
1810 value = readl(port->base + RP_LINK_CONTROL_STATUS);
1811
1812 if (value & RP_LINK_CONTROL_STATUS_DL_LINK_ACTIVE)
1813 active = true;
1814
1815 seq_printf(s, "%2u ", port->index);
1816
1817 if (up)
1818 seq_printf(s, "up");
1819
1820 if (active) {
1821 if (up)
1822 seq_printf(s, ", ");
1823
1824 seq_printf(s, "active");
1825 }
1826
1827 seq_printf(s, "\n");
1828 return 0;
1829}
1830
1831static const struct seq_operations tegra_pcie_ports_seq_ops = {
1832 .start = tegra_pcie_ports_seq_start,
1833 .next = tegra_pcie_ports_seq_next,
1834 .stop = tegra_pcie_ports_seq_stop,
1835 .show = tegra_pcie_ports_seq_show,
1836};
1837
1838static int tegra_pcie_ports_open(struct inode *inode, struct file *file)
1839{
1840 struct tegra_pcie *pcie = inode->i_private;
1841 struct seq_file *s;
1842 int err;
1843
1844 err = seq_open(file, &tegra_pcie_ports_seq_ops);
1845 if (err)
1846 return err;
1847
1848 s = file->private_data;
1849 s->private = pcie;
1850
1851 return 0;
1852}
1853
1854static const struct file_operations tegra_pcie_ports_ops = {
1855 .owner = THIS_MODULE,
1856 .open = tegra_pcie_ports_open,
1857 .read = seq_read,
1858 .llseek = seq_lseek,
1859 .release = seq_release,
1860};
1861
1862static int tegra_pcie_debugfs_init(struct tegra_pcie *pcie)
1863{
1864 struct dentry *file;
1865
1866 pcie->debugfs = debugfs_create_dir("pcie", NULL);
1867 if (!pcie->debugfs)
1868 return -ENOMEM;
1869
1870 file = debugfs_create_file("ports", S_IFREG | S_IRUGO, pcie->debugfs,
1871 pcie, &tegra_pcie_ports_ops);
1872 if (!file)
1873 goto remove;
1874
1875 return 0;
1876
1877remove:
1878 debugfs_remove_recursive(pcie->debugfs);
1879 pcie->debugfs = NULL;
1880 return -ENOMEM;
1881}
1882
Thierry Redingd1523b52013-08-09 16:49:19 +02001883static int tegra_pcie_probe(struct platform_device *pdev)
1884{
Jay Agarwal94716cd2013-08-09 16:49:24 +02001885 const struct of_device_id *match;
Thierry Redingd1523b52013-08-09 16:49:19 +02001886 struct tegra_pcie *pcie;
1887 int err;
1888
Jay Agarwal94716cd2013-08-09 16:49:24 +02001889 match = of_match_device(tegra_pcie_of_match, &pdev->dev);
1890 if (!match)
1891 return -ENODEV;
1892
Thierry Redingd1523b52013-08-09 16:49:19 +02001893 pcie = devm_kzalloc(&pdev->dev, sizeof(*pcie), GFP_KERNEL);
1894 if (!pcie)
1895 return -ENOMEM;
1896
Bjorn Helgaasf7625982013-11-14 11:28:18 -07001897 INIT_LIST_HEAD(&pcie->buses);
Thierry Redingd1523b52013-08-09 16:49:19 +02001898 INIT_LIST_HEAD(&pcie->ports);
Jay Agarwal94716cd2013-08-09 16:49:24 +02001899 pcie->soc_data = match->data;
Thierry Redingd1523b52013-08-09 16:49:19 +02001900 pcie->dev = &pdev->dev;
1901
1902 err = tegra_pcie_parse_dt(pcie);
1903 if (err < 0)
1904 return err;
1905
1906 pcibios_min_mem = 0;
1907
1908 err = tegra_pcie_get_resources(pcie);
1909 if (err < 0) {
1910 dev_err(&pdev->dev, "failed to request resources: %d\n", err);
1911 return err;
1912 }
1913
1914 err = tegra_pcie_enable_controller(pcie);
1915 if (err)
1916 goto put_resources;
1917
1918 /* setup the AFI address translations */
1919 tegra_pcie_setup_translations(pcie);
1920
1921 if (IS_ENABLED(CONFIG_PCI_MSI)) {
1922 err = tegra_pcie_enable_msi(pcie);
1923 if (err < 0) {
1924 dev_err(&pdev->dev,
1925 "failed to enable MSI support: %d\n",
1926 err);
1927 goto put_resources;
1928 }
1929 }
1930
1931 err = tegra_pcie_enable(pcie);
1932 if (err < 0) {
1933 dev_err(&pdev->dev, "failed to enable PCIe ports: %d\n", err);
1934 goto disable_msi;
1935 }
1936
Thierry Reding2cb989f2014-07-22 12:30:46 -06001937 if (IS_ENABLED(CONFIG_DEBUG_FS)) {
1938 err = tegra_pcie_debugfs_init(pcie);
1939 if (err < 0)
1940 dev_err(&pdev->dev, "failed to setup debugfs: %d\n",
1941 err);
1942 }
1943
Thierry Redingd1523b52013-08-09 16:49:19 +02001944 platform_set_drvdata(pdev, pcie);
1945 return 0;
1946
1947disable_msi:
1948 if (IS_ENABLED(CONFIG_PCI_MSI))
1949 tegra_pcie_disable_msi(pcie);
1950put_resources:
1951 tegra_pcie_put_resources(pcie);
1952 return err;
1953}
1954
Thierry Redingd1523b52013-08-09 16:49:19 +02001955static struct platform_driver tegra_pcie_driver = {
1956 .driver = {
1957 .name = "tegra-pcie",
1958 .owner = THIS_MODULE,
1959 .of_match_table = tegra_pcie_of_match,
1960 .suppress_bind_attrs = true,
1961 },
1962 .probe = tegra_pcie_probe,
1963};
1964module_platform_driver(tegra_pcie_driver);
1965
1966MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>");
1967MODULE_DESCRIPTION("NVIDIA Tegra PCIe driver");
Thierry Redingd975cb52014-07-11 08:58:58 +02001968MODULE_LICENSE("GPL v2");