powerpc/mm: enable HAVE_MOVE_PMD support
[linux-2.6-microblaze.git] / drivers / pci / controller / pcie-iproc.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2014 Hauke Mehrtens <hauke@hauke-m.de>
4  * Copyright (C) 2015 Broadcom Corporation
5  */
6
7 #include <linux/kernel.h>
8 #include <linux/pci.h>
9 #include <linux/pci-ecam.h>
10 #include <linux/msi.h>
11 #include <linux/clk.h>
12 #include <linux/module.h>
13 #include <linux/mbus.h>
14 #include <linux/slab.h>
15 #include <linux/delay.h>
16 #include <linux/interrupt.h>
17 #include <linux/irqchip/arm-gic-v3.h>
18 #include <linux/platform_device.h>
19 #include <linux/of_address.h>
20 #include <linux/of_pci.h>
21 #include <linux/of_irq.h>
22 #include <linux/of_platform.h>
23 #include <linux/phy/phy.h>
24
25 #include "pcie-iproc.h"
26
27 #define EP_PERST_SOURCE_SELECT_SHIFT    2
28 #define EP_PERST_SOURCE_SELECT          BIT(EP_PERST_SOURCE_SELECT_SHIFT)
29 #define EP_MODE_SURVIVE_PERST_SHIFT     1
30 #define EP_MODE_SURVIVE_PERST           BIT(EP_MODE_SURVIVE_PERST_SHIFT)
31 #define RC_PCIE_RST_OUTPUT_SHIFT        0
32 #define RC_PCIE_RST_OUTPUT              BIT(RC_PCIE_RST_OUTPUT_SHIFT)
33 #define PAXC_RESET_MASK                 0x7f
34
35 #define GIC_V3_CFG_SHIFT                0
36 #define GIC_V3_CFG                      BIT(GIC_V3_CFG_SHIFT)
37
38 #define MSI_ENABLE_CFG_SHIFT            0
39 #define MSI_ENABLE_CFG                  BIT(MSI_ENABLE_CFG_SHIFT)
40
41 #define CFG_IND_ADDR_MASK               0x00001ffc
42
43 #define CFG_ADDR_REG_NUM_MASK           0x00000ffc
44 #define CFG_ADDR_CFG_TYPE_1             1
45
46 #define SYS_RC_INTX_MASK                0xf
47
48 #define PCIE_PHYLINKUP_SHIFT            3
49 #define PCIE_PHYLINKUP                  BIT(PCIE_PHYLINKUP_SHIFT)
50 #define PCIE_DL_ACTIVE_SHIFT            2
51 #define PCIE_DL_ACTIVE                  BIT(PCIE_DL_ACTIVE_SHIFT)
52
53 #define APB_ERR_EN_SHIFT                0
54 #define APB_ERR_EN                      BIT(APB_ERR_EN_SHIFT)
55
56 #define CFG_RD_SUCCESS                  0
57 #define CFG_RD_UR                       1
58 #define CFG_RD_CRS                      2
59 #define CFG_RD_CA                       3
60 #define CFG_RETRY_STATUS                0xffff0001
61 #define CFG_RETRY_STATUS_TIMEOUT_US     500000 /* 500 milliseconds */
62
63 /* derive the enum index of the outbound/inbound mapping registers */
64 #define MAP_REG(base_reg, index)        ((base_reg) + (index) * 2)
65
66 /*
67  * Maximum number of outbound mapping window sizes that can be supported by any
68  * OARR/OMAP mapping pair
69  */
70 #define MAX_NUM_OB_WINDOW_SIZES         4
71
72 #define OARR_VALID_SHIFT                0
73 #define OARR_VALID                      BIT(OARR_VALID_SHIFT)
74 #define OARR_SIZE_CFG_SHIFT             1
75
76 /*
77  * Maximum number of inbound mapping region sizes that can be supported by an
78  * IARR
79  */
80 #define MAX_NUM_IB_REGION_SIZES         9
81
82 #define IMAP_VALID_SHIFT                0
83 #define IMAP_VALID                      BIT(IMAP_VALID_SHIFT)
84
85 #define IPROC_PCI_PM_CAP                0x48
86 #define IPROC_PCI_PM_CAP_MASK           0xffff
87 #define IPROC_PCI_EXP_CAP               0xac
88
89 #define IPROC_PCIE_REG_INVALID          0xffff
90
91 /**
92  * iProc PCIe outbound mapping controller specific parameters
93  *
94  * @window_sizes: list of supported outbound mapping window sizes in MB
95  * @nr_sizes: number of supported outbound mapping window sizes
96  */
97 struct iproc_pcie_ob_map {
98         resource_size_t window_sizes[MAX_NUM_OB_WINDOW_SIZES];
99         unsigned int nr_sizes;
100 };
101
102 static const struct iproc_pcie_ob_map paxb_ob_map[] = {
103         {
104                 /* OARR0/OMAP0 */
105                 .window_sizes = { 128, 256 },
106                 .nr_sizes = 2,
107         },
108         {
109                 /* OARR1/OMAP1 */
110                 .window_sizes = { 128, 256 },
111                 .nr_sizes = 2,
112         },
113 };
114
115 static const struct iproc_pcie_ob_map paxb_v2_ob_map[] = {
116         {
117                 /* OARR0/OMAP0 */
118                 .window_sizes = { 128, 256 },
119                 .nr_sizes = 2,
120         },
121         {
122                 /* OARR1/OMAP1 */
123                 .window_sizes = { 128, 256 },
124                 .nr_sizes = 2,
125         },
126         {
127                 /* OARR2/OMAP2 */
128                 .window_sizes = { 128, 256, 512, 1024 },
129                 .nr_sizes = 4,
130         },
131         {
132                 /* OARR3/OMAP3 */
133                 .window_sizes = { 128, 256, 512, 1024 },
134                 .nr_sizes = 4,
135         },
136 };
137
138 /**
139  * iProc PCIe inbound mapping type
140  */
141 enum iproc_pcie_ib_map_type {
142         /* for DDR memory */
143         IPROC_PCIE_IB_MAP_MEM = 0,
144
145         /* for device I/O memory */
146         IPROC_PCIE_IB_MAP_IO,
147
148         /* invalid or unused */
149         IPROC_PCIE_IB_MAP_INVALID
150 };
151
152 /**
153  * iProc PCIe inbound mapping controller specific parameters
154  *
155  * @type: inbound mapping region type
156  * @size_unit: inbound mapping region size unit, could be SZ_1K, SZ_1M, or
157  * SZ_1G
158  * @region_sizes: list of supported inbound mapping region sizes in KB, MB, or
159  * GB, depending on the size unit
160  * @nr_sizes: number of supported inbound mapping region sizes
161  * @nr_windows: number of supported inbound mapping windows for the region
162  * @imap_addr_offset: register offset between the upper and lower 32-bit
163  * IMAP address registers
164  * @imap_window_offset: register offset between each IMAP window
165  */
166 struct iproc_pcie_ib_map {
167         enum iproc_pcie_ib_map_type type;
168         unsigned int size_unit;
169         resource_size_t region_sizes[MAX_NUM_IB_REGION_SIZES];
170         unsigned int nr_sizes;
171         unsigned int nr_windows;
172         u16 imap_addr_offset;
173         u16 imap_window_offset;
174 };
175
176 static const struct iproc_pcie_ib_map paxb_v2_ib_map[] = {
177         {
178                 /* IARR0/IMAP0 */
179                 .type = IPROC_PCIE_IB_MAP_IO,
180                 .size_unit = SZ_1K,
181                 .region_sizes = { 32 },
182                 .nr_sizes = 1,
183                 .nr_windows = 8,
184                 .imap_addr_offset = 0x40,
185                 .imap_window_offset = 0x4,
186         },
187         {
188                 /* IARR1/IMAP1 */
189                 .type = IPROC_PCIE_IB_MAP_MEM,
190                 .size_unit = SZ_1M,
191                 .region_sizes = { 8 },
192                 .nr_sizes = 1,
193                 .nr_windows = 8,
194                 .imap_addr_offset = 0x4,
195                 .imap_window_offset = 0x8,
196
197         },
198         {
199                 /* IARR2/IMAP2 */
200                 .type = IPROC_PCIE_IB_MAP_MEM,
201                 .size_unit = SZ_1M,
202                 .region_sizes = { 64, 128, 256, 512, 1024, 2048, 4096, 8192,
203                                   16384 },
204                 .nr_sizes = 9,
205                 .nr_windows = 1,
206                 .imap_addr_offset = 0x4,
207                 .imap_window_offset = 0x8,
208         },
209         {
210                 /* IARR3/IMAP3 */
211                 .type = IPROC_PCIE_IB_MAP_MEM,
212                 .size_unit = SZ_1G,
213                 .region_sizes = { 1, 2, 4, 8, 16, 32 },
214                 .nr_sizes = 6,
215                 .nr_windows = 8,
216                 .imap_addr_offset = 0x4,
217                 .imap_window_offset = 0x8,
218         },
219         {
220                 /* IARR4/IMAP4 */
221                 .type = IPROC_PCIE_IB_MAP_MEM,
222                 .size_unit = SZ_1G,
223                 .region_sizes = { 32, 64, 128, 256, 512 },
224                 .nr_sizes = 5,
225                 .nr_windows = 8,
226                 .imap_addr_offset = 0x4,
227                 .imap_window_offset = 0x8,
228         },
229 };
230
231 /*
232  * iProc PCIe host registers
233  */
234 enum iproc_pcie_reg {
235         /* clock/reset signal control */
236         IPROC_PCIE_CLK_CTRL = 0,
237
238         /*
239          * To allow MSI to be steered to an external MSI controller (e.g., ARM
240          * GICv3 ITS)
241          */
242         IPROC_PCIE_MSI_GIC_MODE,
243
244         /*
245          * IPROC_PCIE_MSI_BASE_ADDR and IPROC_PCIE_MSI_WINDOW_SIZE define the
246          * window where the MSI posted writes are written, for the writes to be
247          * interpreted as MSI writes.
248          */
249         IPROC_PCIE_MSI_BASE_ADDR,
250         IPROC_PCIE_MSI_WINDOW_SIZE,
251
252         /*
253          * To hold the address of the register where the MSI writes are
254          * programed.  When ARM GICv3 ITS is used, this should be programmed
255          * with the address of the GITS_TRANSLATER register.
256          */
257         IPROC_PCIE_MSI_ADDR_LO,
258         IPROC_PCIE_MSI_ADDR_HI,
259
260         /* enable MSI */
261         IPROC_PCIE_MSI_EN_CFG,
262
263         /* allow access to root complex configuration space */
264         IPROC_PCIE_CFG_IND_ADDR,
265         IPROC_PCIE_CFG_IND_DATA,
266
267         /* allow access to device configuration space */
268         IPROC_PCIE_CFG_ADDR,
269         IPROC_PCIE_CFG_DATA,
270
271         /* enable INTx */
272         IPROC_PCIE_INTX_EN,
273
274         /* outbound address mapping */
275         IPROC_PCIE_OARR0,
276         IPROC_PCIE_OMAP0,
277         IPROC_PCIE_OARR1,
278         IPROC_PCIE_OMAP1,
279         IPROC_PCIE_OARR2,
280         IPROC_PCIE_OMAP2,
281         IPROC_PCIE_OARR3,
282         IPROC_PCIE_OMAP3,
283
284         /* inbound address mapping */
285         IPROC_PCIE_IARR0,
286         IPROC_PCIE_IMAP0,
287         IPROC_PCIE_IARR1,
288         IPROC_PCIE_IMAP1,
289         IPROC_PCIE_IARR2,
290         IPROC_PCIE_IMAP2,
291         IPROC_PCIE_IARR3,
292         IPROC_PCIE_IMAP3,
293         IPROC_PCIE_IARR4,
294         IPROC_PCIE_IMAP4,
295
296         /* config read status */
297         IPROC_PCIE_CFG_RD_STATUS,
298
299         /* link status */
300         IPROC_PCIE_LINK_STATUS,
301
302         /* enable APB error for unsupported requests */
303         IPROC_PCIE_APB_ERR_EN,
304
305         /* total number of core registers */
306         IPROC_PCIE_MAX_NUM_REG,
307 };
308
309 /* iProc PCIe PAXB BCMA registers */
310 static const u16 iproc_pcie_reg_paxb_bcma[IPROC_PCIE_MAX_NUM_REG] = {
311         [IPROC_PCIE_CLK_CTRL]           = 0x000,
312         [IPROC_PCIE_CFG_IND_ADDR]       = 0x120,
313         [IPROC_PCIE_CFG_IND_DATA]       = 0x124,
314         [IPROC_PCIE_CFG_ADDR]           = 0x1f8,
315         [IPROC_PCIE_CFG_DATA]           = 0x1fc,
316         [IPROC_PCIE_INTX_EN]            = 0x330,
317         [IPROC_PCIE_LINK_STATUS]        = 0xf0c,
318 };
319
320 /* iProc PCIe PAXB registers */
321 static const u16 iproc_pcie_reg_paxb[IPROC_PCIE_MAX_NUM_REG] = {
322         [IPROC_PCIE_CLK_CTRL]           = 0x000,
323         [IPROC_PCIE_CFG_IND_ADDR]       = 0x120,
324         [IPROC_PCIE_CFG_IND_DATA]       = 0x124,
325         [IPROC_PCIE_CFG_ADDR]           = 0x1f8,
326         [IPROC_PCIE_CFG_DATA]           = 0x1fc,
327         [IPROC_PCIE_INTX_EN]            = 0x330,
328         [IPROC_PCIE_OARR0]              = 0xd20,
329         [IPROC_PCIE_OMAP0]              = 0xd40,
330         [IPROC_PCIE_OARR1]              = 0xd28,
331         [IPROC_PCIE_OMAP1]              = 0xd48,
332         [IPROC_PCIE_LINK_STATUS]        = 0xf0c,
333         [IPROC_PCIE_APB_ERR_EN]         = 0xf40,
334 };
335
336 /* iProc PCIe PAXB v2 registers */
337 static const u16 iproc_pcie_reg_paxb_v2[IPROC_PCIE_MAX_NUM_REG] = {
338         [IPROC_PCIE_CLK_CTRL]           = 0x000,
339         [IPROC_PCIE_CFG_IND_ADDR]       = 0x120,
340         [IPROC_PCIE_CFG_IND_DATA]       = 0x124,
341         [IPROC_PCIE_CFG_ADDR]           = 0x1f8,
342         [IPROC_PCIE_CFG_DATA]           = 0x1fc,
343         [IPROC_PCIE_INTX_EN]            = 0x330,
344         [IPROC_PCIE_OARR0]              = 0xd20,
345         [IPROC_PCIE_OMAP0]              = 0xd40,
346         [IPROC_PCIE_OARR1]              = 0xd28,
347         [IPROC_PCIE_OMAP1]              = 0xd48,
348         [IPROC_PCIE_OARR2]              = 0xd60,
349         [IPROC_PCIE_OMAP2]              = 0xd68,
350         [IPROC_PCIE_OARR3]              = 0xdf0,
351         [IPROC_PCIE_OMAP3]              = 0xdf8,
352         [IPROC_PCIE_IARR0]              = 0xd00,
353         [IPROC_PCIE_IMAP0]              = 0xc00,
354         [IPROC_PCIE_IARR1]              = 0xd08,
355         [IPROC_PCIE_IMAP1]              = 0xd70,
356         [IPROC_PCIE_IARR2]              = 0xd10,
357         [IPROC_PCIE_IMAP2]              = 0xcc0,
358         [IPROC_PCIE_IARR3]              = 0xe00,
359         [IPROC_PCIE_IMAP3]              = 0xe08,
360         [IPROC_PCIE_IARR4]              = 0xe68,
361         [IPROC_PCIE_IMAP4]              = 0xe70,
362         [IPROC_PCIE_CFG_RD_STATUS]      = 0xee0,
363         [IPROC_PCIE_LINK_STATUS]        = 0xf0c,
364         [IPROC_PCIE_APB_ERR_EN]         = 0xf40,
365 };
366
367 /* iProc PCIe PAXC v1 registers */
368 static const u16 iproc_pcie_reg_paxc[IPROC_PCIE_MAX_NUM_REG] = {
369         [IPROC_PCIE_CLK_CTRL]           = 0x000,
370         [IPROC_PCIE_CFG_IND_ADDR]       = 0x1f0,
371         [IPROC_PCIE_CFG_IND_DATA]       = 0x1f4,
372         [IPROC_PCIE_CFG_ADDR]           = 0x1f8,
373         [IPROC_PCIE_CFG_DATA]           = 0x1fc,
374 };
375
376 /* iProc PCIe PAXC v2 registers */
377 static const u16 iproc_pcie_reg_paxc_v2[IPROC_PCIE_MAX_NUM_REG] = {
378         [IPROC_PCIE_MSI_GIC_MODE]       = 0x050,
379         [IPROC_PCIE_MSI_BASE_ADDR]      = 0x074,
380         [IPROC_PCIE_MSI_WINDOW_SIZE]    = 0x078,
381         [IPROC_PCIE_MSI_ADDR_LO]        = 0x07c,
382         [IPROC_PCIE_MSI_ADDR_HI]        = 0x080,
383         [IPROC_PCIE_MSI_EN_CFG]         = 0x09c,
384         [IPROC_PCIE_CFG_IND_ADDR]       = 0x1f0,
385         [IPROC_PCIE_CFG_IND_DATA]       = 0x1f4,
386         [IPROC_PCIE_CFG_ADDR]           = 0x1f8,
387         [IPROC_PCIE_CFG_DATA]           = 0x1fc,
388 };
389
390 /*
391  * List of device IDs of controllers that have corrupted capability list that
392  * require SW fixup
393  */
394 static const u16 iproc_pcie_corrupt_cap_did[] = {
395         0x16cd,
396         0x16f0,
397         0xd802,
398         0xd804
399 };
400
401 static inline struct iproc_pcie *iproc_data(struct pci_bus *bus)
402 {
403         struct iproc_pcie *pcie = bus->sysdata;
404         return pcie;
405 }
406
407 static inline bool iproc_pcie_reg_is_invalid(u16 reg_offset)
408 {
409         return !!(reg_offset == IPROC_PCIE_REG_INVALID);
410 }
411
412 static inline u16 iproc_pcie_reg_offset(struct iproc_pcie *pcie,
413                                         enum iproc_pcie_reg reg)
414 {
415         return pcie->reg_offsets[reg];
416 }
417
418 static inline u32 iproc_pcie_read_reg(struct iproc_pcie *pcie,
419                                       enum iproc_pcie_reg reg)
420 {
421         u16 offset = iproc_pcie_reg_offset(pcie, reg);
422
423         if (iproc_pcie_reg_is_invalid(offset))
424                 return 0;
425
426         return readl(pcie->base + offset);
427 }
428
429 static inline void iproc_pcie_write_reg(struct iproc_pcie *pcie,
430                                         enum iproc_pcie_reg reg, u32 val)
431 {
432         u16 offset = iproc_pcie_reg_offset(pcie, reg);
433
434         if (iproc_pcie_reg_is_invalid(offset))
435                 return;
436
437         writel(val, pcie->base + offset);
438 }
439
440 /**
441  * APB error forwarding can be disabled during access of configuration
442  * registers of the endpoint device, to prevent unsupported requests
443  * (typically seen during enumeration with multi-function devices) from
444  * triggering a system exception.
445  */
446 static inline void iproc_pcie_apb_err_disable(struct pci_bus *bus,
447                                               bool disable)
448 {
449         struct iproc_pcie *pcie = iproc_data(bus);
450         u32 val;
451
452         if (bus->number && pcie->has_apb_err_disable) {
453                 val = iproc_pcie_read_reg(pcie, IPROC_PCIE_APB_ERR_EN);
454                 if (disable)
455                         val &= ~APB_ERR_EN;
456                 else
457                         val |= APB_ERR_EN;
458                 iproc_pcie_write_reg(pcie, IPROC_PCIE_APB_ERR_EN, val);
459         }
460 }
461
462 static void __iomem *iproc_pcie_map_ep_cfg_reg(struct iproc_pcie *pcie,
463                                                unsigned int busno,
464                                                unsigned int devfn,
465                                                int where)
466 {
467         u16 offset;
468         u32 val;
469
470         /* EP device access */
471         val = ALIGN_DOWN(PCIE_ECAM_OFFSET(busno, devfn, where), 4) |
472                 CFG_ADDR_CFG_TYPE_1;
473
474         iproc_pcie_write_reg(pcie, IPROC_PCIE_CFG_ADDR, val);
475         offset = iproc_pcie_reg_offset(pcie, IPROC_PCIE_CFG_DATA);
476
477         if (iproc_pcie_reg_is_invalid(offset))
478                 return NULL;
479
480         return (pcie->base + offset);
481 }
482
483 static unsigned int iproc_pcie_cfg_retry(struct iproc_pcie *pcie,
484                                          void __iomem *cfg_data_p)
485 {
486         int timeout = CFG_RETRY_STATUS_TIMEOUT_US;
487         unsigned int data;
488         u32 status;
489
490         /*
491          * As per PCIe spec r3.1, sec 2.3.2, CRS Software Visibility only
492          * affects config reads of the Vendor ID.  For config writes or any
493          * other config reads, the Root may automatically reissue the
494          * configuration request again as a new request.
495          *
496          * For config reads, this hardware returns CFG_RETRY_STATUS data
497          * when it receives a CRS completion, regardless of the address of
498          * the read or the CRS Software Visibility Enable bit.  As a
499          * partial workaround for this, we retry in software any read that
500          * returns CFG_RETRY_STATUS.
501          *
502          * Note that a non-Vendor ID config register may have a value of
503          * CFG_RETRY_STATUS.  If we read that, we can't distinguish it from
504          * a CRS completion, so we will incorrectly retry the read and
505          * eventually return the wrong data (0xffffffff).
506          */
507         data = readl(cfg_data_p);
508         while (data == CFG_RETRY_STATUS && timeout--) {
509                 /*
510                  * CRS state is set in CFG_RD status register
511                  * This will handle the case where CFG_RETRY_STATUS is
512                  * valid config data.
513                  */
514                 status = iproc_pcie_read_reg(pcie, IPROC_PCIE_CFG_RD_STATUS);
515                 if (status != CFG_RD_CRS)
516                         return data;
517
518                 udelay(1);
519                 data = readl(cfg_data_p);
520         }
521
522         if (data == CFG_RETRY_STATUS)
523                 data = 0xffffffff;
524
525         return data;
526 }
527
528 static void iproc_pcie_fix_cap(struct iproc_pcie *pcie, int where, u32 *val)
529 {
530         u32 i, dev_id;
531
532         switch (where & ~0x3) {
533         case PCI_VENDOR_ID:
534                 dev_id = *val >> 16;
535
536                 /*
537                  * Activate fixup for those controllers that have corrupted
538                  * capability list registers
539                  */
540                 for (i = 0; i < ARRAY_SIZE(iproc_pcie_corrupt_cap_did); i++)
541                         if (dev_id == iproc_pcie_corrupt_cap_did[i])
542                                 pcie->fix_paxc_cap = true;
543                 break;
544
545         case IPROC_PCI_PM_CAP:
546                 if (pcie->fix_paxc_cap) {
547                         /* advertise PM, force next capability to PCIe */
548                         *val &= ~IPROC_PCI_PM_CAP_MASK;
549                         *val |= IPROC_PCI_EXP_CAP << 8 | PCI_CAP_ID_PM;
550                 }
551                 break;
552
553         case IPROC_PCI_EXP_CAP:
554                 if (pcie->fix_paxc_cap) {
555                         /* advertise root port, version 2, terminate here */
556                         *val = (PCI_EXP_TYPE_ROOT_PORT << 4 | 2) << 16 |
557                                 PCI_CAP_ID_EXP;
558                 }
559                 break;
560
561         case IPROC_PCI_EXP_CAP + PCI_EXP_RTCTL:
562                 /* Don't advertise CRS SV support */
563                 *val &= ~(PCI_EXP_RTCAP_CRSVIS << 16);
564                 break;
565
566         default:
567                 break;
568         }
569 }
570
571 static int iproc_pcie_config_read(struct pci_bus *bus, unsigned int devfn,
572                                   int where, int size, u32 *val)
573 {
574         struct iproc_pcie *pcie = iproc_data(bus);
575         unsigned int busno = bus->number;
576         void __iomem *cfg_data_p;
577         unsigned int data;
578         int ret;
579
580         /* root complex access */
581         if (busno == 0) {
582                 ret = pci_generic_config_read32(bus, devfn, where, size, val);
583                 if (ret == PCIBIOS_SUCCESSFUL)
584                         iproc_pcie_fix_cap(pcie, where, val);
585
586                 return ret;
587         }
588
589         cfg_data_p = iproc_pcie_map_ep_cfg_reg(pcie, busno, devfn, where);
590
591         if (!cfg_data_p)
592                 return PCIBIOS_DEVICE_NOT_FOUND;
593
594         data = iproc_pcie_cfg_retry(pcie, cfg_data_p);
595
596         *val = data;
597         if (size <= 2)
598                 *val = (data >> (8 * (where & 3))) & ((1 << (size * 8)) - 1);
599
600         /*
601          * For PAXC and PAXCv2, the total number of PFs that one can enumerate
602          * depends on the firmware configuration. Unfortunately, due to an ASIC
603          * bug, unconfigured PFs cannot be properly hidden from the root
604          * complex. As a result, write access to these PFs will cause bus lock
605          * up on the embedded processor
606          *
607          * Since all unconfigured PFs are left with an incorrect, staled device
608          * ID of 0x168e (PCI_DEVICE_ID_NX2_57810), we try to catch those access
609          * early here and reject them all
610          */
611 #define DEVICE_ID_MASK     0xffff0000
612 #define DEVICE_ID_SHIFT    16
613         if (pcie->rej_unconfig_pf &&
614             (where & CFG_ADDR_REG_NUM_MASK) == PCI_VENDOR_ID)
615                 if ((*val & DEVICE_ID_MASK) ==
616                     (PCI_DEVICE_ID_NX2_57810 << DEVICE_ID_SHIFT))
617                         return PCIBIOS_FUNC_NOT_SUPPORTED;
618
619         return PCIBIOS_SUCCESSFUL;
620 }
621
622 /**
623  * Note access to the configuration registers are protected at the higher layer
624  * by 'pci_lock' in drivers/pci/access.c
625  */
626 static void __iomem *iproc_pcie_map_cfg_bus(struct iproc_pcie *pcie,
627                                             int busno, unsigned int devfn,
628                                             int where)
629 {
630         u16 offset;
631
632         /* root complex access */
633         if (busno == 0) {
634                 if (PCIE_ECAM_DEVFN(devfn) > 0)
635                         return NULL;
636
637                 iproc_pcie_write_reg(pcie, IPROC_PCIE_CFG_IND_ADDR,
638                                      where & CFG_IND_ADDR_MASK);
639                 offset = iproc_pcie_reg_offset(pcie, IPROC_PCIE_CFG_IND_DATA);
640                 if (iproc_pcie_reg_is_invalid(offset))
641                         return NULL;
642                 else
643                         return (pcie->base + offset);
644         }
645
646         return iproc_pcie_map_ep_cfg_reg(pcie, busno, devfn, where);
647 }
648
649 static void __iomem *iproc_pcie_bus_map_cfg_bus(struct pci_bus *bus,
650                                                 unsigned int devfn,
651                                                 int where)
652 {
653         return iproc_pcie_map_cfg_bus(iproc_data(bus), bus->number, devfn,
654                                       where);
655 }
656
657 static int iproc_pci_raw_config_read32(struct iproc_pcie *pcie,
658                                        unsigned int devfn, int where,
659                                        int size, u32 *val)
660 {
661         void __iomem *addr;
662
663         addr = iproc_pcie_map_cfg_bus(pcie, 0, devfn, where & ~0x3);
664         if (!addr) {
665                 *val = ~0;
666                 return PCIBIOS_DEVICE_NOT_FOUND;
667         }
668
669         *val = readl(addr);
670
671         if (size <= 2)
672                 *val = (*val >> (8 * (where & 3))) & ((1 << (size * 8)) - 1);
673
674         return PCIBIOS_SUCCESSFUL;
675 }
676
677 static int iproc_pci_raw_config_write32(struct iproc_pcie *pcie,
678                                         unsigned int devfn, int where,
679                                         int size, u32 val)
680 {
681         void __iomem *addr;
682         u32 mask, tmp;
683
684         addr = iproc_pcie_map_cfg_bus(pcie, 0, devfn, where & ~0x3);
685         if (!addr)
686                 return PCIBIOS_DEVICE_NOT_FOUND;
687
688         if (size == 4) {
689                 writel(val, addr);
690                 return PCIBIOS_SUCCESSFUL;
691         }
692
693         mask = ~(((1 << (size * 8)) - 1) << ((where & 0x3) * 8));
694         tmp = readl(addr) & mask;
695         tmp |= val << ((where & 0x3) * 8);
696         writel(tmp, addr);
697
698         return PCIBIOS_SUCCESSFUL;
699 }
700
701 static int iproc_pcie_config_read32(struct pci_bus *bus, unsigned int devfn,
702                                     int where, int size, u32 *val)
703 {
704         int ret;
705         struct iproc_pcie *pcie = iproc_data(bus);
706
707         iproc_pcie_apb_err_disable(bus, true);
708         if (pcie->iproc_cfg_read)
709                 ret = iproc_pcie_config_read(bus, devfn, where, size, val);
710         else
711                 ret = pci_generic_config_read32(bus, devfn, where, size, val);
712         iproc_pcie_apb_err_disable(bus, false);
713
714         return ret;
715 }
716
717 static int iproc_pcie_config_write32(struct pci_bus *bus, unsigned int devfn,
718                                      int where, int size, u32 val)
719 {
720         int ret;
721
722         iproc_pcie_apb_err_disable(bus, true);
723         ret = pci_generic_config_write32(bus, devfn, where, size, val);
724         iproc_pcie_apb_err_disable(bus, false);
725
726         return ret;
727 }
728
729 static struct pci_ops iproc_pcie_ops = {
730         .map_bus = iproc_pcie_bus_map_cfg_bus,
731         .read = iproc_pcie_config_read32,
732         .write = iproc_pcie_config_write32,
733 };
734
735 static void iproc_pcie_perst_ctrl(struct iproc_pcie *pcie, bool assert)
736 {
737         u32 val;
738
739         /*
740          * PAXC and the internal emulated endpoint device downstream should not
741          * be reset.  If firmware has been loaded on the endpoint device at an
742          * earlier boot stage, reset here causes issues.
743          */
744         if (pcie->ep_is_internal)
745                 return;
746
747         if (assert) {
748                 val = iproc_pcie_read_reg(pcie, IPROC_PCIE_CLK_CTRL);
749                 val &= ~EP_PERST_SOURCE_SELECT & ~EP_MODE_SURVIVE_PERST &
750                         ~RC_PCIE_RST_OUTPUT;
751                 iproc_pcie_write_reg(pcie, IPROC_PCIE_CLK_CTRL, val);
752                 udelay(250);
753         } else {
754                 val = iproc_pcie_read_reg(pcie, IPROC_PCIE_CLK_CTRL);
755                 val |= RC_PCIE_RST_OUTPUT;
756                 iproc_pcie_write_reg(pcie, IPROC_PCIE_CLK_CTRL, val);
757                 msleep(100);
758         }
759 }
760
761 int iproc_pcie_shutdown(struct iproc_pcie *pcie)
762 {
763         iproc_pcie_perst_ctrl(pcie, true);
764         msleep(500);
765
766         return 0;
767 }
768 EXPORT_SYMBOL_GPL(iproc_pcie_shutdown);
769
770 static int iproc_pcie_check_link(struct iproc_pcie *pcie)
771 {
772         struct device *dev = pcie->dev;
773         u32 hdr_type, link_ctrl, link_status, class, val;
774         bool link_is_active = false;
775
776         /*
777          * PAXC connects to emulated endpoint devices directly and does not
778          * have a Serdes.  Therefore skip the link detection logic here.
779          */
780         if (pcie->ep_is_internal)
781                 return 0;
782
783         val = iproc_pcie_read_reg(pcie, IPROC_PCIE_LINK_STATUS);
784         if (!(val & PCIE_PHYLINKUP) || !(val & PCIE_DL_ACTIVE)) {
785                 dev_err(dev, "PHY or data link is INACTIVE!\n");
786                 return -ENODEV;
787         }
788
789         /* make sure we are not in EP mode */
790         iproc_pci_raw_config_read32(pcie, 0, PCI_HEADER_TYPE, 1, &hdr_type);
791         if ((hdr_type & 0x7f) != PCI_HEADER_TYPE_BRIDGE) {
792                 dev_err(dev, "in EP mode, hdr=%#02x\n", hdr_type);
793                 return -EFAULT;
794         }
795
796         /* force class to PCI_CLASS_BRIDGE_PCI (0x0604) */
797 #define PCI_BRIDGE_CTRL_REG_OFFSET      0x43c
798 #define PCI_CLASS_BRIDGE_MASK           0xffff00
799 #define PCI_CLASS_BRIDGE_SHIFT          8
800         iproc_pci_raw_config_read32(pcie, 0, PCI_BRIDGE_CTRL_REG_OFFSET,
801                                     4, &class);
802         class &= ~PCI_CLASS_BRIDGE_MASK;
803         class |= (PCI_CLASS_BRIDGE_PCI << PCI_CLASS_BRIDGE_SHIFT);
804         iproc_pci_raw_config_write32(pcie, 0, PCI_BRIDGE_CTRL_REG_OFFSET,
805                                      4, class);
806
807         /* check link status to see if link is active */
808         iproc_pci_raw_config_read32(pcie, 0, IPROC_PCI_EXP_CAP + PCI_EXP_LNKSTA,
809                                     2, &link_status);
810         if (link_status & PCI_EXP_LNKSTA_NLW)
811                 link_is_active = true;
812
813         if (!link_is_active) {
814                 /* try GEN 1 link speed */
815 #define PCI_TARGET_LINK_SPEED_MASK      0xf
816 #define PCI_TARGET_LINK_SPEED_GEN2      0x2
817 #define PCI_TARGET_LINK_SPEED_GEN1      0x1
818                 iproc_pci_raw_config_read32(pcie, 0,
819                                             IPROC_PCI_EXP_CAP + PCI_EXP_LNKCTL2,
820                                             4, &link_ctrl);
821                 if ((link_ctrl & PCI_TARGET_LINK_SPEED_MASK) ==
822                     PCI_TARGET_LINK_SPEED_GEN2) {
823                         link_ctrl &= ~PCI_TARGET_LINK_SPEED_MASK;
824                         link_ctrl |= PCI_TARGET_LINK_SPEED_GEN1;
825                         iproc_pci_raw_config_write32(pcie, 0,
826                                         IPROC_PCI_EXP_CAP + PCI_EXP_LNKCTL2,
827                                         4, link_ctrl);
828                         msleep(100);
829
830                         iproc_pci_raw_config_read32(pcie, 0,
831                                         IPROC_PCI_EXP_CAP + PCI_EXP_LNKSTA,
832                                         2, &link_status);
833                         if (link_status & PCI_EXP_LNKSTA_NLW)
834                                 link_is_active = true;
835                 }
836         }
837
838         dev_info(dev, "link: %s\n", link_is_active ? "UP" : "DOWN");
839
840         return link_is_active ? 0 : -ENODEV;
841 }
842
843 static void iproc_pcie_enable(struct iproc_pcie *pcie)
844 {
845         iproc_pcie_write_reg(pcie, IPROC_PCIE_INTX_EN, SYS_RC_INTX_MASK);
846 }
847
848 static inline bool iproc_pcie_ob_is_valid(struct iproc_pcie *pcie,
849                                           int window_idx)
850 {
851         u32 val;
852
853         val = iproc_pcie_read_reg(pcie, MAP_REG(IPROC_PCIE_OARR0, window_idx));
854
855         return !!(val & OARR_VALID);
856 }
857
858 static inline int iproc_pcie_ob_write(struct iproc_pcie *pcie, int window_idx,
859                                       int size_idx, u64 axi_addr, u64 pci_addr)
860 {
861         struct device *dev = pcie->dev;
862         u16 oarr_offset, omap_offset;
863
864         /*
865          * Derive the OARR/OMAP offset from the first pair (OARR0/OMAP0) based
866          * on window index.
867          */
868         oarr_offset = iproc_pcie_reg_offset(pcie, MAP_REG(IPROC_PCIE_OARR0,
869                                                           window_idx));
870         omap_offset = iproc_pcie_reg_offset(pcie, MAP_REG(IPROC_PCIE_OMAP0,
871                                                           window_idx));
872         if (iproc_pcie_reg_is_invalid(oarr_offset) ||
873             iproc_pcie_reg_is_invalid(omap_offset))
874                 return -EINVAL;
875
876         /*
877          * Program the OARR registers.  The upper 32-bit OARR register is
878          * always right after the lower 32-bit OARR register.
879          */
880         writel(lower_32_bits(axi_addr) | (size_idx << OARR_SIZE_CFG_SHIFT) |
881                OARR_VALID, pcie->base + oarr_offset);
882         writel(upper_32_bits(axi_addr), pcie->base + oarr_offset + 4);
883
884         /* now program the OMAP registers */
885         writel(lower_32_bits(pci_addr), pcie->base + omap_offset);
886         writel(upper_32_bits(pci_addr), pcie->base + omap_offset + 4);
887
888         dev_dbg(dev, "ob window [%d]: offset 0x%x axi %pap pci %pap\n",
889                 window_idx, oarr_offset, &axi_addr, &pci_addr);
890         dev_dbg(dev, "oarr lo 0x%x oarr hi 0x%x\n",
891                 readl(pcie->base + oarr_offset),
892                 readl(pcie->base + oarr_offset + 4));
893         dev_dbg(dev, "omap lo 0x%x omap hi 0x%x\n",
894                 readl(pcie->base + omap_offset),
895                 readl(pcie->base + omap_offset + 4));
896
897         return 0;
898 }
899
900 /**
901  * Some iProc SoCs require the SW to configure the outbound address mapping
902  *
903  * Outbound address translation:
904  *
905  * iproc_pcie_address = axi_address - axi_offset
906  * OARR = iproc_pcie_address
907  * OMAP = pci_addr
908  *
909  * axi_addr -> iproc_pcie_address -> OARR -> OMAP -> pci_address
910  */
911 static int iproc_pcie_setup_ob(struct iproc_pcie *pcie, u64 axi_addr,
912                                u64 pci_addr, resource_size_t size)
913 {
914         struct iproc_pcie_ob *ob = &pcie->ob;
915         struct device *dev = pcie->dev;
916         int ret = -EINVAL, window_idx, size_idx;
917
918         if (axi_addr < ob->axi_offset) {
919                 dev_err(dev, "axi address %pap less than offset %pap\n",
920                         &axi_addr, &ob->axi_offset);
921                 return -EINVAL;
922         }
923
924         /*
925          * Translate the AXI address to the internal address used by the iProc
926          * PCIe core before programming the OARR
927          */
928         axi_addr -= ob->axi_offset;
929
930         /* iterate through all OARR/OMAP mapping windows */
931         for (window_idx = ob->nr_windows - 1; window_idx >= 0; window_idx--) {
932                 const struct iproc_pcie_ob_map *ob_map =
933                         &pcie->ob_map[window_idx];
934
935                 /*
936                  * If current outbound window is already in use, move on to the
937                  * next one.
938                  */
939                 if (iproc_pcie_ob_is_valid(pcie, window_idx))
940                         continue;
941
942                 /*
943                  * Iterate through all supported window sizes within the
944                  * OARR/OMAP pair to find a match.  Go through the window sizes
945                  * in a descending order.
946                  */
947                 for (size_idx = ob_map->nr_sizes - 1; size_idx >= 0;
948                      size_idx--) {
949                         resource_size_t window_size =
950                                 ob_map->window_sizes[size_idx] * SZ_1M;
951
952                         /*
953                          * Keep iterating until we reach the last window and
954                          * with the minimal window size at index zero. In this
955                          * case, we take a compromise by mapping it using the
956                          * minimum window size that can be supported
957                          */
958                         if (size < window_size) {
959                                 if (size_idx > 0 || window_idx > 0)
960                                         continue;
961
962                                 /*
963                                  * For the corner case of reaching the minimal
964                                  * window size that can be supported on the
965                                  * last window
966                                  */
967                                 axi_addr = ALIGN_DOWN(axi_addr, window_size);
968                                 pci_addr = ALIGN_DOWN(pci_addr, window_size);
969                                 size = window_size;
970                         }
971
972                         if (!IS_ALIGNED(axi_addr, window_size) ||
973                             !IS_ALIGNED(pci_addr, window_size)) {
974                                 dev_err(dev,
975                                         "axi %pap or pci %pap not aligned\n",
976                                         &axi_addr, &pci_addr);
977                                 return -EINVAL;
978                         }
979
980                         /*
981                          * Match found!  Program both OARR and OMAP and mark
982                          * them as a valid entry.
983                          */
984                         ret = iproc_pcie_ob_write(pcie, window_idx, size_idx,
985                                                   axi_addr, pci_addr);
986                         if (ret)
987                                 goto err_ob;
988
989                         size -= window_size;
990                         if (size == 0)
991                                 return 0;
992
993                         /*
994                          * If we are here, we are done with the current window,
995                          * but not yet finished all mappings.  Need to move on
996                          * to the next window.
997                          */
998                         axi_addr += window_size;
999                         pci_addr += window_size;
1000                         break;
1001                 }
1002         }
1003
1004 err_ob:
1005         dev_err(dev, "unable to configure outbound mapping\n");
1006         dev_err(dev,
1007                 "axi %pap, axi offset %pap, pci %pap, res size %pap\n",
1008                 &axi_addr, &ob->axi_offset, &pci_addr, &size);
1009
1010         return ret;
1011 }
1012
1013 static int iproc_pcie_map_ranges(struct iproc_pcie *pcie,
1014                                  struct list_head *resources)
1015 {
1016         struct device *dev = pcie->dev;
1017         struct resource_entry *window;
1018         int ret;
1019
1020         resource_list_for_each_entry(window, resources) {
1021                 struct resource *res = window->res;
1022                 u64 res_type = resource_type(res);
1023
1024                 switch (res_type) {
1025                 case IORESOURCE_IO:
1026                 case IORESOURCE_BUS:
1027                         break;
1028                 case IORESOURCE_MEM:
1029                         ret = iproc_pcie_setup_ob(pcie, res->start,
1030                                                   res->start - window->offset,
1031                                                   resource_size(res));
1032                         if (ret)
1033                                 return ret;
1034                         break;
1035                 default:
1036                         dev_err(dev, "invalid resource %pR\n", res);
1037                         return -EINVAL;
1038                 }
1039         }
1040
1041         return 0;
1042 }
1043
1044 static inline bool iproc_pcie_ib_is_in_use(struct iproc_pcie *pcie,
1045                                            int region_idx)
1046 {
1047         const struct iproc_pcie_ib_map *ib_map = &pcie->ib_map[region_idx];
1048         u32 val;
1049
1050         val = iproc_pcie_read_reg(pcie, MAP_REG(IPROC_PCIE_IARR0, region_idx));
1051
1052         return !!(val & (BIT(ib_map->nr_sizes) - 1));
1053 }
1054
1055 static inline bool iproc_pcie_ib_check_type(const struct iproc_pcie_ib_map *ib_map,
1056                                             enum iproc_pcie_ib_map_type type)
1057 {
1058         return !!(ib_map->type == type);
1059 }
1060
1061 static int iproc_pcie_ib_write(struct iproc_pcie *pcie, int region_idx,
1062                                int size_idx, int nr_windows, u64 axi_addr,
1063                                u64 pci_addr, resource_size_t size)
1064 {
1065         struct device *dev = pcie->dev;
1066         const struct iproc_pcie_ib_map *ib_map = &pcie->ib_map[region_idx];
1067         u16 iarr_offset, imap_offset;
1068         u32 val;
1069         int window_idx;
1070
1071         iarr_offset = iproc_pcie_reg_offset(pcie,
1072                                 MAP_REG(IPROC_PCIE_IARR0, region_idx));
1073         imap_offset = iproc_pcie_reg_offset(pcie,
1074                                 MAP_REG(IPROC_PCIE_IMAP0, region_idx));
1075         if (iproc_pcie_reg_is_invalid(iarr_offset) ||
1076             iproc_pcie_reg_is_invalid(imap_offset))
1077                 return -EINVAL;
1078
1079         dev_dbg(dev, "ib region [%d]: offset 0x%x axi %pap pci %pap\n",
1080                 region_idx, iarr_offset, &axi_addr, &pci_addr);
1081
1082         /*
1083          * Program the IARR registers.  The upper 32-bit IARR register is
1084          * always right after the lower 32-bit IARR register.
1085          */
1086         writel(lower_32_bits(pci_addr) | BIT(size_idx),
1087                pcie->base + iarr_offset);
1088         writel(upper_32_bits(pci_addr), pcie->base + iarr_offset + 4);
1089
1090         dev_dbg(dev, "iarr lo 0x%x iarr hi 0x%x\n",
1091                 readl(pcie->base + iarr_offset),
1092                 readl(pcie->base + iarr_offset + 4));
1093
1094         /*
1095          * Now program the IMAP registers.  Each IARR region may have one or
1096          * more IMAP windows.
1097          */
1098         size >>= ilog2(nr_windows);
1099         for (window_idx = 0; window_idx < nr_windows; window_idx++) {
1100                 val = readl(pcie->base + imap_offset);
1101                 val |= lower_32_bits(axi_addr) | IMAP_VALID;
1102                 writel(val, pcie->base + imap_offset);
1103                 writel(upper_32_bits(axi_addr),
1104                        pcie->base + imap_offset + ib_map->imap_addr_offset);
1105
1106                 dev_dbg(dev, "imap window [%d] lo 0x%x hi 0x%x\n",
1107                         window_idx, readl(pcie->base + imap_offset),
1108                         readl(pcie->base + imap_offset +
1109                               ib_map->imap_addr_offset));
1110
1111                 imap_offset += ib_map->imap_window_offset;
1112                 axi_addr += size;
1113         }
1114
1115         return 0;
1116 }
1117
1118 static int iproc_pcie_setup_ib(struct iproc_pcie *pcie,
1119                                struct resource_entry *entry,
1120                                enum iproc_pcie_ib_map_type type)
1121 {
1122         struct device *dev = pcie->dev;
1123         struct iproc_pcie_ib *ib = &pcie->ib;
1124         int ret;
1125         unsigned int region_idx, size_idx;
1126         u64 axi_addr = entry->res->start;
1127         u64 pci_addr = entry->res->start - entry->offset;
1128         resource_size_t size = resource_size(entry->res);
1129
1130         /* iterate through all IARR mapping regions */
1131         for (region_idx = 0; region_idx < ib->nr_regions; region_idx++) {
1132                 const struct iproc_pcie_ib_map *ib_map =
1133                         &pcie->ib_map[region_idx];
1134
1135                 /*
1136                  * If current inbound region is already in use or not a
1137                  * compatible type, move on to the next.
1138                  */
1139                 if (iproc_pcie_ib_is_in_use(pcie, region_idx) ||
1140                     !iproc_pcie_ib_check_type(ib_map, type))
1141                         continue;
1142
1143                 /* iterate through all supported region sizes to find a match */
1144                 for (size_idx = 0; size_idx < ib_map->nr_sizes; size_idx++) {
1145                         resource_size_t region_size =
1146                         ib_map->region_sizes[size_idx] * ib_map->size_unit;
1147
1148                         if (size != region_size)
1149                                 continue;
1150
1151                         if (!IS_ALIGNED(axi_addr, region_size) ||
1152                             !IS_ALIGNED(pci_addr, region_size)) {
1153                                 dev_err(dev,
1154                                         "axi %pap or pci %pap not aligned\n",
1155                                         &axi_addr, &pci_addr);
1156                                 return -EINVAL;
1157                         }
1158
1159                         /* Match found!  Program IARR and all IMAP windows. */
1160                         ret = iproc_pcie_ib_write(pcie, region_idx, size_idx,
1161                                                   ib_map->nr_windows, axi_addr,
1162                                                   pci_addr, size);
1163                         if (ret)
1164                                 goto err_ib;
1165                         else
1166                                 return 0;
1167
1168                 }
1169         }
1170         ret = -EINVAL;
1171
1172 err_ib:
1173         dev_err(dev, "unable to configure inbound mapping\n");
1174         dev_err(dev, "axi %pap, pci %pap, res size %pap\n",
1175                 &axi_addr, &pci_addr, &size);
1176
1177         return ret;
1178 }
1179
1180 static int iproc_pcie_map_dma_ranges(struct iproc_pcie *pcie)
1181 {
1182         struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
1183         struct resource_entry *entry;
1184         int ret = 0;
1185
1186         resource_list_for_each_entry(entry, &host->dma_ranges) {
1187                 /* Each range entry corresponds to an inbound mapping region */
1188                 ret = iproc_pcie_setup_ib(pcie, entry, IPROC_PCIE_IB_MAP_MEM);
1189                 if (ret)
1190                         break;
1191         }
1192
1193         return ret;
1194 }
1195
1196 static void iproc_pcie_invalidate_mapping(struct iproc_pcie *pcie)
1197 {
1198         struct iproc_pcie_ib *ib = &pcie->ib;
1199         struct iproc_pcie_ob *ob = &pcie->ob;
1200         int idx;
1201
1202         if (pcie->ep_is_internal)
1203                 return;
1204
1205         if (pcie->need_ob_cfg) {
1206                 /* iterate through all OARR mapping regions */
1207                 for (idx = ob->nr_windows - 1; idx >= 0; idx--) {
1208                         iproc_pcie_write_reg(pcie,
1209                                              MAP_REG(IPROC_PCIE_OARR0, idx), 0);
1210                 }
1211         }
1212
1213         if (pcie->need_ib_cfg) {
1214                 /* iterate through all IARR mapping regions */
1215                 for (idx = 0; idx < ib->nr_regions; idx++) {
1216                         iproc_pcie_write_reg(pcie,
1217                                              MAP_REG(IPROC_PCIE_IARR0, idx), 0);
1218                 }
1219         }
1220 }
1221
1222 static int iproce_pcie_get_msi(struct iproc_pcie *pcie,
1223                                struct device_node *msi_node,
1224                                u64 *msi_addr)
1225 {
1226         struct device *dev = pcie->dev;
1227         int ret;
1228         struct resource res;
1229
1230         /*
1231          * Check if 'msi-map' points to ARM GICv3 ITS, which is the only
1232          * supported external MSI controller that requires steering.
1233          */
1234         if (!of_device_is_compatible(msi_node, "arm,gic-v3-its")) {
1235                 dev_err(dev, "unable to find compatible MSI controller\n");
1236                 return -ENODEV;
1237         }
1238
1239         /* derive GITS_TRANSLATER address from GICv3 */
1240         ret = of_address_to_resource(msi_node, 0, &res);
1241         if (ret < 0) {
1242                 dev_err(dev, "unable to obtain MSI controller resources\n");
1243                 return ret;
1244         }
1245
1246         *msi_addr = res.start + GITS_TRANSLATER;
1247         return 0;
1248 }
1249
1250 static int iproc_pcie_paxb_v2_msi_steer(struct iproc_pcie *pcie, u64 msi_addr)
1251 {
1252         int ret;
1253         struct resource_entry entry;
1254
1255         memset(&entry, 0, sizeof(entry));
1256         entry.res = &entry.__res;
1257
1258         msi_addr &= ~(SZ_32K - 1);
1259         entry.res->start = msi_addr;
1260         entry.res->end = msi_addr + SZ_32K - 1;
1261
1262         ret = iproc_pcie_setup_ib(pcie, &entry, IPROC_PCIE_IB_MAP_IO);
1263         return ret;
1264 }
1265
1266 static void iproc_pcie_paxc_v2_msi_steer(struct iproc_pcie *pcie, u64 msi_addr,
1267                                          bool enable)
1268 {
1269         u32 val;
1270
1271         if (!enable) {
1272                 /*
1273                  * Disable PAXC MSI steering. All write transfers will be
1274                  * treated as non-MSI transfers
1275                  */
1276                 val = iproc_pcie_read_reg(pcie, IPROC_PCIE_MSI_EN_CFG);
1277                 val &= ~MSI_ENABLE_CFG;
1278                 iproc_pcie_write_reg(pcie, IPROC_PCIE_MSI_EN_CFG, val);
1279                 return;
1280         }
1281
1282         /*
1283          * Program bits [43:13] of address of GITS_TRANSLATER register into
1284          * bits [30:0] of the MSI base address register.  In fact, in all iProc
1285          * based SoCs, all I/O register bases are well below the 32-bit
1286          * boundary, so we can safely assume bits [43:32] are always zeros.
1287          */
1288         iproc_pcie_write_reg(pcie, IPROC_PCIE_MSI_BASE_ADDR,
1289                              (u32)(msi_addr >> 13));
1290
1291         /* use a default 8K window size */
1292         iproc_pcie_write_reg(pcie, IPROC_PCIE_MSI_WINDOW_SIZE, 0);
1293
1294         /* steering MSI to GICv3 ITS */
1295         val = iproc_pcie_read_reg(pcie, IPROC_PCIE_MSI_GIC_MODE);
1296         val |= GIC_V3_CFG;
1297         iproc_pcie_write_reg(pcie, IPROC_PCIE_MSI_GIC_MODE, val);
1298
1299         /*
1300          * Program bits [43:2] of address of GITS_TRANSLATER register into the
1301          * iProc MSI address registers.
1302          */
1303         msi_addr >>= 2;
1304         iproc_pcie_write_reg(pcie, IPROC_PCIE_MSI_ADDR_HI,
1305                              upper_32_bits(msi_addr));
1306         iproc_pcie_write_reg(pcie, IPROC_PCIE_MSI_ADDR_LO,
1307                              lower_32_bits(msi_addr));
1308
1309         /* enable MSI */
1310         val = iproc_pcie_read_reg(pcie, IPROC_PCIE_MSI_EN_CFG);
1311         val |= MSI_ENABLE_CFG;
1312         iproc_pcie_write_reg(pcie, IPROC_PCIE_MSI_EN_CFG, val);
1313 }
1314
1315 static int iproc_pcie_msi_steer(struct iproc_pcie *pcie,
1316                                 struct device_node *msi_node)
1317 {
1318         struct device *dev = pcie->dev;
1319         int ret;
1320         u64 msi_addr;
1321
1322         ret = iproce_pcie_get_msi(pcie, msi_node, &msi_addr);
1323         if (ret < 0) {
1324                 dev_err(dev, "msi steering failed\n");
1325                 return ret;
1326         }
1327
1328         switch (pcie->type) {
1329         case IPROC_PCIE_PAXB_V2:
1330                 ret = iproc_pcie_paxb_v2_msi_steer(pcie, msi_addr);
1331                 if (ret)
1332                         return ret;
1333                 break;
1334         case IPROC_PCIE_PAXC_V2:
1335                 iproc_pcie_paxc_v2_msi_steer(pcie, msi_addr, true);
1336                 break;
1337         default:
1338                 return -EINVAL;
1339         }
1340
1341         return 0;
1342 }
1343
1344 static int iproc_pcie_msi_enable(struct iproc_pcie *pcie)
1345 {
1346         struct device_node *msi_node;
1347         int ret;
1348
1349         /*
1350          * Either the "msi-parent" or the "msi-map" phandle needs to exist
1351          * for us to obtain the MSI node.
1352          */
1353
1354         msi_node = of_parse_phandle(pcie->dev->of_node, "msi-parent", 0);
1355         if (!msi_node) {
1356                 const __be32 *msi_map = NULL;
1357                 int len;
1358                 u32 phandle;
1359
1360                 msi_map = of_get_property(pcie->dev->of_node, "msi-map", &len);
1361                 if (!msi_map)
1362                         return -ENODEV;
1363
1364                 phandle = be32_to_cpup(msi_map + 1);
1365                 msi_node = of_find_node_by_phandle(phandle);
1366                 if (!msi_node)
1367                         return -ENODEV;
1368         }
1369
1370         /*
1371          * Certain revisions of the iProc PCIe controller require additional
1372          * configurations to steer the MSI writes towards an external MSI
1373          * controller.
1374          */
1375         if (pcie->need_msi_steer) {
1376                 ret = iproc_pcie_msi_steer(pcie, msi_node);
1377                 if (ret)
1378                         goto out_put_node;
1379         }
1380
1381         /*
1382          * If another MSI controller is being used, the call below should fail
1383          * but that is okay
1384          */
1385         ret = iproc_msi_init(pcie, msi_node);
1386
1387 out_put_node:
1388         of_node_put(msi_node);
1389         return ret;
1390 }
1391
1392 static void iproc_pcie_msi_disable(struct iproc_pcie *pcie)
1393 {
1394         iproc_msi_exit(pcie);
1395 }
1396
1397 static int iproc_pcie_rev_init(struct iproc_pcie *pcie)
1398 {
1399         struct device *dev = pcie->dev;
1400         unsigned int reg_idx;
1401         const u16 *regs;
1402
1403         switch (pcie->type) {
1404         case IPROC_PCIE_PAXB_BCMA:
1405                 regs = iproc_pcie_reg_paxb_bcma;
1406                 break;
1407         case IPROC_PCIE_PAXB:
1408                 regs = iproc_pcie_reg_paxb;
1409                 pcie->has_apb_err_disable = true;
1410                 if (pcie->need_ob_cfg) {
1411                         pcie->ob_map = paxb_ob_map;
1412                         pcie->ob.nr_windows = ARRAY_SIZE(paxb_ob_map);
1413                 }
1414                 break;
1415         case IPROC_PCIE_PAXB_V2:
1416                 regs = iproc_pcie_reg_paxb_v2;
1417                 pcie->iproc_cfg_read = true;
1418                 pcie->has_apb_err_disable = true;
1419                 if (pcie->need_ob_cfg) {
1420                         pcie->ob_map = paxb_v2_ob_map;
1421                         pcie->ob.nr_windows = ARRAY_SIZE(paxb_v2_ob_map);
1422                 }
1423                 pcie->ib.nr_regions = ARRAY_SIZE(paxb_v2_ib_map);
1424                 pcie->ib_map = paxb_v2_ib_map;
1425                 pcie->need_msi_steer = true;
1426                 dev_warn(dev, "reads of config registers that contain %#x return incorrect data\n",
1427                          CFG_RETRY_STATUS);
1428                 break;
1429         case IPROC_PCIE_PAXC:
1430                 regs = iproc_pcie_reg_paxc;
1431                 pcie->ep_is_internal = true;
1432                 pcie->iproc_cfg_read = true;
1433                 pcie->rej_unconfig_pf = true;
1434                 break;
1435         case IPROC_PCIE_PAXC_V2:
1436                 regs = iproc_pcie_reg_paxc_v2;
1437                 pcie->ep_is_internal = true;
1438                 pcie->iproc_cfg_read = true;
1439                 pcie->rej_unconfig_pf = true;
1440                 pcie->need_msi_steer = true;
1441                 break;
1442         default:
1443                 dev_err(dev, "incompatible iProc PCIe interface\n");
1444                 return -EINVAL;
1445         }
1446
1447         pcie->reg_offsets = devm_kcalloc(dev, IPROC_PCIE_MAX_NUM_REG,
1448                                          sizeof(*pcie->reg_offsets),
1449                                          GFP_KERNEL);
1450         if (!pcie->reg_offsets)
1451                 return -ENOMEM;
1452
1453         /* go through the register table and populate all valid registers */
1454         pcie->reg_offsets[0] = (pcie->type == IPROC_PCIE_PAXC_V2) ?
1455                 IPROC_PCIE_REG_INVALID : regs[0];
1456         for (reg_idx = 1; reg_idx < IPROC_PCIE_MAX_NUM_REG; reg_idx++)
1457                 pcie->reg_offsets[reg_idx] = regs[reg_idx] ?
1458                         regs[reg_idx] : IPROC_PCIE_REG_INVALID;
1459
1460         return 0;
1461 }
1462
1463 int iproc_pcie_setup(struct iproc_pcie *pcie, struct list_head *res)
1464 {
1465         struct device *dev;
1466         int ret;
1467         struct pci_dev *pdev;
1468         struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
1469
1470         dev = pcie->dev;
1471
1472         ret = iproc_pcie_rev_init(pcie);
1473         if (ret) {
1474                 dev_err(dev, "unable to initialize controller parameters\n");
1475                 return ret;
1476         }
1477
1478         ret = phy_init(pcie->phy);
1479         if (ret) {
1480                 dev_err(dev, "unable to initialize PCIe PHY\n");
1481                 return ret;
1482         }
1483
1484         ret = phy_power_on(pcie->phy);
1485         if (ret) {
1486                 dev_err(dev, "unable to power on PCIe PHY\n");
1487                 goto err_exit_phy;
1488         }
1489
1490         iproc_pcie_perst_ctrl(pcie, true);
1491         iproc_pcie_perst_ctrl(pcie, false);
1492
1493         iproc_pcie_invalidate_mapping(pcie);
1494
1495         if (pcie->need_ob_cfg) {
1496                 ret = iproc_pcie_map_ranges(pcie, res);
1497                 if (ret) {
1498                         dev_err(dev, "map failed\n");
1499                         goto err_power_off_phy;
1500                 }
1501         }
1502
1503         if (pcie->need_ib_cfg) {
1504                 ret = iproc_pcie_map_dma_ranges(pcie);
1505                 if (ret && ret != -ENOENT)
1506                         goto err_power_off_phy;
1507         }
1508
1509         ret = iproc_pcie_check_link(pcie);
1510         if (ret) {
1511                 dev_err(dev, "no PCIe EP device detected\n");
1512                 goto err_power_off_phy;
1513         }
1514
1515         iproc_pcie_enable(pcie);
1516
1517         if (IS_ENABLED(CONFIG_PCI_MSI))
1518                 if (iproc_pcie_msi_enable(pcie))
1519                         dev_info(dev, "not using iProc MSI\n");
1520
1521         host->ops = &iproc_pcie_ops;
1522         host->sysdata = pcie;
1523         host->map_irq = pcie->map_irq;
1524
1525         ret = pci_host_probe(host);
1526         if (ret < 0) {
1527                 dev_err(dev, "failed to scan host: %d\n", ret);
1528                 goto err_power_off_phy;
1529         }
1530
1531         for_each_pci_bridge(pdev, host->bus) {
1532                 if (pci_pcie_type(pdev) == PCI_EXP_TYPE_ROOT_PORT)
1533                         pcie_print_link_status(pdev);
1534         }
1535
1536         return 0;
1537
1538 err_power_off_phy:
1539         phy_power_off(pcie->phy);
1540 err_exit_phy:
1541         phy_exit(pcie->phy);
1542         return ret;
1543 }
1544 EXPORT_SYMBOL(iproc_pcie_setup);
1545
1546 int iproc_pcie_remove(struct iproc_pcie *pcie)
1547 {
1548         struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
1549
1550         pci_stop_root_bus(host->bus);
1551         pci_remove_root_bus(host->bus);
1552
1553         iproc_pcie_msi_disable(pcie);
1554
1555         phy_power_off(pcie->phy);
1556         phy_exit(pcie->phy);
1557
1558         return 0;
1559 }
1560 EXPORT_SYMBOL(iproc_pcie_remove);
1561
1562 /*
1563  * The MSI parsing logic in certain revisions of Broadcom PAXC based root
1564  * complex does not work and needs to be disabled
1565  */
1566 static void quirk_paxc_disable_msi_parsing(struct pci_dev *pdev)
1567 {
1568         struct iproc_pcie *pcie = iproc_data(pdev->bus);
1569
1570         if (pdev->hdr_type == PCI_HEADER_TYPE_BRIDGE)
1571                 iproc_pcie_paxc_v2_msi_steer(pcie, 0, false);
1572 }
1573 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0x16f0,
1574                         quirk_paxc_disable_msi_parsing);
1575 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0xd802,
1576                         quirk_paxc_disable_msi_parsing);
1577 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0xd804,
1578                         quirk_paxc_disable_msi_parsing);
1579
1580 static void quirk_paxc_bridge(struct pci_dev *pdev)
1581 {
1582         /*
1583          * The PCI config space is shared with the PAXC root port and the first
1584          * Ethernet device.  So, we need to workaround this by telling the PCI
1585          * code that the bridge is not an Ethernet device.
1586          */
1587         if (pdev->hdr_type == PCI_HEADER_TYPE_BRIDGE)
1588                 pdev->class = PCI_CLASS_BRIDGE_PCI << 8;
1589
1590         /*
1591          * MPSS is not being set properly (as it is currently 0).  This is
1592          * because that area of the PCI config space is hard coded to zero, and
1593          * is not modifiable by firmware.  Set this to 2 (e.g., 512 byte MPS)
1594          * so that the MPS can be set to the real max value.
1595          */
1596         pdev->pcie_mpss = 2;
1597 }
1598 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0x16cd, quirk_paxc_bridge);
1599 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0x16f0, quirk_paxc_bridge);
1600 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0xd750, quirk_paxc_bridge);
1601 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0xd802, quirk_paxc_bridge);
1602 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0xd804, quirk_paxc_bridge);
1603
1604 MODULE_AUTHOR("Ray Jui <rjui@broadcom.com>");
1605 MODULE_DESCRIPTION("Broadcom iPROC PCIe common driver");
1606 MODULE_LICENSE("GPL v2");