Merge branch 'acpi-ec'
[linux-drm-fsl-dcu.git] / drivers / pci / host / pci-mvebu.c
1 /*
2  * PCIe driver for Marvell Armada 370 and Armada XP SoCs
3  *
4  * This file is licensed under the terms of the GNU General Public
5  * License version 2.  This program is licensed "as is" without any
6  * warranty of any kind, whether express or implied.
7  */
8
9 #include <linux/kernel.h>
10 #include <linux/pci.h>
11 #include <linux/clk.h>
12 #include <linux/delay.h>
13 #include <linux/gpio.h>
14 #include <linux/module.h>
15 #include <linux/mbus.h>
16 #include <linux/msi.h>
17 #include <linux/slab.h>
18 #include <linux/platform_device.h>
19 #include <linux/of_address.h>
20 #include <linux/of_irq.h>
21 #include <linux/of_gpio.h>
22 #include <linux/of_pci.h>
23 #include <linux/of_platform.h>
24
25 /*
26  * PCIe unit register offsets.
27  */
28 #define PCIE_DEV_ID_OFF         0x0000
29 #define PCIE_CMD_OFF            0x0004
30 #define PCIE_DEV_REV_OFF        0x0008
31 #define PCIE_BAR_LO_OFF(n)      (0x0010 + ((n) << 3))
32 #define PCIE_BAR_HI_OFF(n)      (0x0014 + ((n) << 3))
33 #define PCIE_HEADER_LOG_4_OFF   0x0128
34 #define PCIE_BAR_CTRL_OFF(n)    (0x1804 + (((n) - 1) * 4))
35 #define PCIE_WIN04_CTRL_OFF(n)  (0x1820 + ((n) << 4))
36 #define PCIE_WIN04_BASE_OFF(n)  (0x1824 + ((n) << 4))
37 #define PCIE_WIN04_REMAP_OFF(n) (0x182c + ((n) << 4))
38 #define PCIE_WIN5_CTRL_OFF      0x1880
39 #define PCIE_WIN5_BASE_OFF      0x1884
40 #define PCIE_WIN5_REMAP_OFF     0x188c
41 #define PCIE_CONF_ADDR_OFF      0x18f8
42 #define  PCIE_CONF_ADDR_EN              0x80000000
43 #define  PCIE_CONF_REG(r)               ((((r) & 0xf00) << 16) | ((r) & 0xfc))
44 #define  PCIE_CONF_BUS(b)               (((b) & 0xff) << 16)
45 #define  PCIE_CONF_DEV(d)               (((d) & 0x1f) << 11)
46 #define  PCIE_CONF_FUNC(f)              (((f) & 0x7) << 8)
47 #define  PCIE_CONF_ADDR(bus, devfn, where) \
48         (PCIE_CONF_BUS(bus) | PCIE_CONF_DEV(PCI_SLOT(devfn))    | \
49          PCIE_CONF_FUNC(PCI_FUNC(devfn)) | PCIE_CONF_REG(where) | \
50          PCIE_CONF_ADDR_EN)
51 #define PCIE_CONF_DATA_OFF      0x18fc
52 #define PCIE_MASK_OFF           0x1910
53 #define  PCIE_MASK_ENABLE_INTS          0x0f000000
54 #define PCIE_CTRL_OFF           0x1a00
55 #define  PCIE_CTRL_X1_MODE              0x0001
56 #define PCIE_STAT_OFF           0x1a04
57 #define  PCIE_STAT_BUS                  0xff00
58 #define  PCIE_STAT_DEV                  0x1f0000
59 #define  PCIE_STAT_LINK_DOWN            BIT(0)
60 #define PCIE_DEBUG_CTRL         0x1a60
61 #define  PCIE_DEBUG_SOFT_RESET          BIT(20)
62
63 /* PCI configuration space of a PCI-to-PCI bridge */
64 struct mvebu_sw_pci_bridge {
65         u16 vendor;
66         u16 device;
67         u16 command;
68         u16 class;
69         u8 interface;
70         u8 revision;
71         u8 bist;
72         u8 header_type;
73         u8 latency_timer;
74         u8 cache_line_size;
75         u32 bar[2];
76         u8 primary_bus;
77         u8 secondary_bus;
78         u8 subordinate_bus;
79         u8 secondary_latency_timer;
80         u8 iobase;
81         u8 iolimit;
82         u16 secondary_status;
83         u16 membase;
84         u16 memlimit;
85         u16 iobaseupper;
86         u16 iolimitupper;
87         u8 cappointer;
88         u8 reserved1;
89         u16 reserved2;
90         u32 romaddr;
91         u8 intline;
92         u8 intpin;
93         u16 bridgectrl;
94 };
95
96 struct mvebu_pcie_port;
97
98 /* Structure representing all PCIe interfaces */
99 struct mvebu_pcie {
100         struct platform_device *pdev;
101         struct mvebu_pcie_port *ports;
102         struct msi_controller *msi;
103         struct resource io;
104         struct resource realio;
105         struct resource mem;
106         struct resource busn;
107         int nports;
108 };
109
110 /* Structure representing one PCIe interface */
111 struct mvebu_pcie_port {
112         char *name;
113         void __iomem *base;
114         u32 port;
115         u32 lane;
116         int devfn;
117         unsigned int mem_target;
118         unsigned int mem_attr;
119         unsigned int io_target;
120         unsigned int io_attr;
121         struct clk *clk;
122         int reset_gpio;
123         int reset_active_low;
124         char *reset_name;
125         struct mvebu_sw_pci_bridge bridge;
126         struct device_node *dn;
127         struct mvebu_pcie *pcie;
128         phys_addr_t memwin_base;
129         size_t memwin_size;
130         phys_addr_t iowin_base;
131         size_t iowin_size;
132 };
133
134 static inline void mvebu_writel(struct mvebu_pcie_port *port, u32 val, u32 reg)
135 {
136         writel(val, port->base + reg);
137 }
138
139 static inline u32 mvebu_readl(struct mvebu_pcie_port *port, u32 reg)
140 {
141         return readl(port->base + reg);
142 }
143
144 static inline bool mvebu_has_ioport(struct mvebu_pcie_port *port)
145 {
146         return port->io_target != -1 && port->io_attr != -1;
147 }
148
149 static bool mvebu_pcie_link_up(struct mvebu_pcie_port *port)
150 {
151         return !(mvebu_readl(port, PCIE_STAT_OFF) & PCIE_STAT_LINK_DOWN);
152 }
153
154 static void mvebu_pcie_set_local_bus_nr(struct mvebu_pcie_port *port, int nr)
155 {
156         u32 stat;
157
158         stat = mvebu_readl(port, PCIE_STAT_OFF);
159         stat &= ~PCIE_STAT_BUS;
160         stat |= nr << 8;
161         mvebu_writel(port, stat, PCIE_STAT_OFF);
162 }
163
164 static void mvebu_pcie_set_local_dev_nr(struct mvebu_pcie_port *port, int nr)
165 {
166         u32 stat;
167
168         stat = mvebu_readl(port, PCIE_STAT_OFF);
169         stat &= ~PCIE_STAT_DEV;
170         stat |= nr << 16;
171         mvebu_writel(port, stat, PCIE_STAT_OFF);
172 }
173
174 /*
175  * Setup PCIE BARs and Address Decode Wins:
176  * BAR[0,2] -> disabled, BAR[1] -> covers all DRAM banks
177  * WIN[0-3] -> DRAM bank[0-3]
178  */
179 static void mvebu_pcie_setup_wins(struct mvebu_pcie_port *port)
180 {
181         const struct mbus_dram_target_info *dram;
182         u32 size;
183         int i;
184
185         dram = mv_mbus_dram_info();
186
187         /* First, disable and clear BARs and windows. */
188         for (i = 1; i < 3; i++) {
189                 mvebu_writel(port, 0, PCIE_BAR_CTRL_OFF(i));
190                 mvebu_writel(port, 0, PCIE_BAR_LO_OFF(i));
191                 mvebu_writel(port, 0, PCIE_BAR_HI_OFF(i));
192         }
193
194         for (i = 0; i < 5; i++) {
195                 mvebu_writel(port, 0, PCIE_WIN04_CTRL_OFF(i));
196                 mvebu_writel(port, 0, PCIE_WIN04_BASE_OFF(i));
197                 mvebu_writel(port, 0, PCIE_WIN04_REMAP_OFF(i));
198         }
199
200         mvebu_writel(port, 0, PCIE_WIN5_CTRL_OFF);
201         mvebu_writel(port, 0, PCIE_WIN5_BASE_OFF);
202         mvebu_writel(port, 0, PCIE_WIN5_REMAP_OFF);
203
204         /* Setup windows for DDR banks.  Count total DDR size on the fly. */
205         size = 0;
206         for (i = 0; i < dram->num_cs; i++) {
207                 const struct mbus_dram_window *cs = dram->cs + i;
208
209                 mvebu_writel(port, cs->base & 0xffff0000,
210                              PCIE_WIN04_BASE_OFF(i));
211                 mvebu_writel(port, 0, PCIE_WIN04_REMAP_OFF(i));
212                 mvebu_writel(port,
213                              ((cs->size - 1) & 0xffff0000) |
214                              (cs->mbus_attr << 8) |
215                              (dram->mbus_dram_target_id << 4) | 1,
216                              PCIE_WIN04_CTRL_OFF(i));
217
218                 size += cs->size;
219         }
220
221         /* Round up 'size' to the nearest power of two. */
222         if ((size & (size - 1)) != 0)
223                 size = 1 << fls(size);
224
225         /* Setup BAR[1] to all DRAM banks. */
226         mvebu_writel(port, dram->cs[0].base, PCIE_BAR_LO_OFF(1));
227         mvebu_writel(port, 0, PCIE_BAR_HI_OFF(1));
228         mvebu_writel(port, ((size - 1) & 0xffff0000) | 1,
229                      PCIE_BAR_CTRL_OFF(1));
230 }
231
232 static void mvebu_pcie_setup_hw(struct mvebu_pcie_port *port)
233 {
234         u32 cmd, mask;
235
236         /* Point PCIe unit MBUS decode windows to DRAM space. */
237         mvebu_pcie_setup_wins(port);
238
239         /* Master + slave enable. */
240         cmd = mvebu_readl(port, PCIE_CMD_OFF);
241         cmd |= PCI_COMMAND_IO;
242         cmd |= PCI_COMMAND_MEMORY;
243         cmd |= PCI_COMMAND_MASTER;
244         mvebu_writel(port, cmd, PCIE_CMD_OFF);
245
246         /* Enable interrupt lines A-D. */
247         mask = mvebu_readl(port, PCIE_MASK_OFF);
248         mask |= PCIE_MASK_ENABLE_INTS;
249         mvebu_writel(port, mask, PCIE_MASK_OFF);
250 }
251
252 static int mvebu_pcie_hw_rd_conf(struct mvebu_pcie_port *port,
253                                  struct pci_bus *bus,
254                                  u32 devfn, int where, int size, u32 *val)
255 {
256         mvebu_writel(port, PCIE_CONF_ADDR(bus->number, devfn, where),
257                      PCIE_CONF_ADDR_OFF);
258
259         *val = mvebu_readl(port, PCIE_CONF_DATA_OFF);
260
261         if (size == 1)
262                 *val = (*val >> (8 * (where & 3))) & 0xff;
263         else if (size == 2)
264                 *val = (*val >> (8 * (where & 3))) & 0xffff;
265
266         return PCIBIOS_SUCCESSFUL;
267 }
268
269 static int mvebu_pcie_hw_wr_conf(struct mvebu_pcie_port *port,
270                                  struct pci_bus *bus,
271                                  u32 devfn, int where, int size, u32 val)
272 {
273         u32 _val, shift = 8 * (where & 3);
274
275         mvebu_writel(port, PCIE_CONF_ADDR(bus->number, devfn, where),
276                      PCIE_CONF_ADDR_OFF);
277         _val = mvebu_readl(port, PCIE_CONF_DATA_OFF);
278
279         if (size == 4)
280                 _val = val;
281         else if (size == 2)
282                 _val = (_val & ~(0xffff << shift)) | ((val & 0xffff) << shift);
283         else if (size == 1)
284                 _val = (_val & ~(0xff << shift)) | ((val & 0xff) << shift);
285         else
286                 return PCIBIOS_BAD_REGISTER_NUMBER;
287
288         mvebu_writel(port, _val, PCIE_CONF_DATA_OFF);
289
290         return PCIBIOS_SUCCESSFUL;
291 }
292
293 /*
294  * Remove windows, starting from the largest ones to the smallest
295  * ones.
296  */
297 static void mvebu_pcie_del_windows(struct mvebu_pcie_port *port,
298                                    phys_addr_t base, size_t size)
299 {
300         while (size) {
301                 size_t sz = 1 << (fls(size) - 1);
302
303                 mvebu_mbus_del_window(base, sz);
304                 base += sz;
305                 size -= sz;
306         }
307 }
308
309 /*
310  * MBus windows can only have a power of two size, but PCI BARs do not
311  * have this constraint. Therefore, we have to split the PCI BAR into
312  * areas each having a power of two size. We start from the largest
313  * one (i.e highest order bit set in the size).
314  */
315 static void mvebu_pcie_add_windows(struct mvebu_pcie_port *port,
316                                    unsigned int target, unsigned int attribute,
317                                    phys_addr_t base, size_t size,
318                                    phys_addr_t remap)
319 {
320         size_t size_mapped = 0;
321
322         while (size) {
323                 size_t sz = 1 << (fls(size) - 1);
324                 int ret;
325
326                 ret = mvebu_mbus_add_window_remap_by_id(target, attribute, base,
327                                                         sz, remap);
328                 if (ret) {
329                         phys_addr_t end = base + sz - 1;
330
331                         dev_err(&port->pcie->pdev->dev,
332                                 "Could not create MBus window at [mem %pa-%pa]: %d\n",
333                                 &base, &end, ret);
334                         mvebu_pcie_del_windows(port, base - size_mapped,
335                                                size_mapped);
336                         return;
337                 }
338
339                 size -= sz;
340                 size_mapped += sz;
341                 base += sz;
342                 if (remap != MVEBU_MBUS_NO_REMAP)
343                         remap += sz;
344         }
345 }
346
347 static void mvebu_pcie_handle_iobase_change(struct mvebu_pcie_port *port)
348 {
349         phys_addr_t iobase;
350
351         /* Are the new iobase/iolimit values invalid? */
352         if (port->bridge.iolimit < port->bridge.iobase ||
353             port->bridge.iolimitupper < port->bridge.iobaseupper ||
354             !(port->bridge.command & PCI_COMMAND_IO)) {
355
356                 /* If a window was configured, remove it */
357                 if (port->iowin_base) {
358                         mvebu_pcie_del_windows(port, port->iowin_base,
359                                                port->iowin_size);
360                         port->iowin_base = 0;
361                         port->iowin_size = 0;
362                 }
363
364                 return;
365         }
366
367         if (!mvebu_has_ioport(port)) {
368                 dev_WARN(&port->pcie->pdev->dev,
369                          "Attempt to set IO when IO is disabled\n");
370                 return;
371         }
372
373         /*
374          * We read the PCI-to-PCI bridge emulated registers, and
375          * calculate the base address and size of the address decoding
376          * window to setup, according to the PCI-to-PCI bridge
377          * specifications. iobase is the bus address, port->iowin_base
378          * is the CPU address.
379          */
380         iobase = ((port->bridge.iobase & 0xF0) << 8) |
381                 (port->bridge.iobaseupper << 16);
382         port->iowin_base = port->pcie->io.start + iobase;
383         port->iowin_size = ((0xFFF | ((port->bridge.iolimit & 0xF0) << 8) |
384                             (port->bridge.iolimitupper << 16)) -
385                             iobase) + 1;
386
387         mvebu_pcie_add_windows(port, port->io_target, port->io_attr,
388                                port->iowin_base, port->iowin_size,
389                                iobase);
390 }
391
392 static void mvebu_pcie_handle_membase_change(struct mvebu_pcie_port *port)
393 {
394         /* Are the new membase/memlimit values invalid? */
395         if (port->bridge.memlimit < port->bridge.membase ||
396             !(port->bridge.command & PCI_COMMAND_MEMORY)) {
397
398                 /* If a window was configured, remove it */
399                 if (port->memwin_base) {
400                         mvebu_pcie_del_windows(port, port->memwin_base,
401                                                port->memwin_size);
402                         port->memwin_base = 0;
403                         port->memwin_size = 0;
404                 }
405
406                 return;
407         }
408
409         /*
410          * We read the PCI-to-PCI bridge emulated registers, and
411          * calculate the base address and size of the address decoding
412          * window to setup, according to the PCI-to-PCI bridge
413          * specifications.
414          */
415         port->memwin_base  = ((port->bridge.membase & 0xFFF0) << 16);
416         port->memwin_size  =
417                 (((port->bridge.memlimit & 0xFFF0) << 16) | 0xFFFFF) -
418                 port->memwin_base + 1;
419
420         mvebu_pcie_add_windows(port, port->mem_target, port->mem_attr,
421                                port->memwin_base, port->memwin_size,
422                                MVEBU_MBUS_NO_REMAP);
423 }
424
425 /*
426  * Initialize the configuration space of the PCI-to-PCI bridge
427  * associated with the given PCIe interface.
428  */
429 static void mvebu_sw_pci_bridge_init(struct mvebu_pcie_port *port)
430 {
431         struct mvebu_sw_pci_bridge *bridge = &port->bridge;
432
433         memset(bridge, 0, sizeof(struct mvebu_sw_pci_bridge));
434
435         bridge->class = PCI_CLASS_BRIDGE_PCI;
436         bridge->vendor = PCI_VENDOR_ID_MARVELL;
437         bridge->device = mvebu_readl(port, PCIE_DEV_ID_OFF) >> 16;
438         bridge->revision = mvebu_readl(port, PCIE_DEV_REV_OFF) & 0xff;
439         bridge->header_type = PCI_HEADER_TYPE_BRIDGE;
440         bridge->cache_line_size = 0x10;
441
442         /* We support 32 bits I/O addressing */
443         bridge->iobase = PCI_IO_RANGE_TYPE_32;
444         bridge->iolimit = PCI_IO_RANGE_TYPE_32;
445 }
446
447 /*
448  * Read the configuration space of the PCI-to-PCI bridge associated to
449  * the given PCIe interface.
450  */
451 static int mvebu_sw_pci_bridge_read(struct mvebu_pcie_port *port,
452                                   unsigned int where, int size, u32 *value)
453 {
454         struct mvebu_sw_pci_bridge *bridge = &port->bridge;
455
456         switch (where & ~3) {
457         case PCI_VENDOR_ID:
458                 *value = bridge->device << 16 | bridge->vendor;
459                 break;
460
461         case PCI_COMMAND:
462                 *value = bridge->command;
463                 break;
464
465         case PCI_CLASS_REVISION:
466                 *value = bridge->class << 16 | bridge->interface << 8 |
467                          bridge->revision;
468                 break;
469
470         case PCI_CACHE_LINE_SIZE:
471                 *value = bridge->bist << 24 | bridge->header_type << 16 |
472                          bridge->latency_timer << 8 | bridge->cache_line_size;
473                 break;
474
475         case PCI_BASE_ADDRESS_0 ... PCI_BASE_ADDRESS_1:
476                 *value = bridge->bar[((where & ~3) - PCI_BASE_ADDRESS_0) / 4];
477                 break;
478
479         case PCI_PRIMARY_BUS:
480                 *value = (bridge->secondary_latency_timer << 24 |
481                           bridge->subordinate_bus         << 16 |
482                           bridge->secondary_bus           <<  8 |
483                           bridge->primary_bus);
484                 break;
485
486         case PCI_IO_BASE:
487                 if (!mvebu_has_ioport(port))
488                         *value = bridge->secondary_status << 16;
489                 else
490                         *value = (bridge->secondary_status << 16 |
491                                   bridge->iolimit          <<  8 |
492                                   bridge->iobase);
493                 break;
494
495         case PCI_MEMORY_BASE:
496                 *value = (bridge->memlimit << 16 | bridge->membase);
497                 break;
498
499         case PCI_PREF_MEMORY_BASE:
500                 *value = 0;
501                 break;
502
503         case PCI_IO_BASE_UPPER16:
504                 *value = (bridge->iolimitupper << 16 | bridge->iobaseupper);
505                 break;
506
507         case PCI_ROM_ADDRESS1:
508                 *value = 0;
509                 break;
510
511         case PCI_INTERRUPT_LINE:
512                 /* LINE PIN MIN_GNT MAX_LAT */
513                 *value = 0;
514                 break;
515
516         default:
517                 *value = 0xffffffff;
518                 return PCIBIOS_BAD_REGISTER_NUMBER;
519         }
520
521         if (size == 2)
522                 *value = (*value >> (8 * (where & 3))) & 0xffff;
523         else if (size == 1)
524                 *value = (*value >> (8 * (where & 3))) & 0xff;
525
526         return PCIBIOS_SUCCESSFUL;
527 }
528
529 /* Write to the PCI-to-PCI bridge configuration space */
530 static int mvebu_sw_pci_bridge_write(struct mvebu_pcie_port *port,
531                                      unsigned int where, int size, u32 value)
532 {
533         struct mvebu_sw_pci_bridge *bridge = &port->bridge;
534         u32 mask, reg;
535         int err;
536
537         if (size == 4)
538                 mask = 0x0;
539         else if (size == 2)
540                 mask = ~(0xffff << ((where & 3) * 8));
541         else if (size == 1)
542                 mask = ~(0xff << ((where & 3) * 8));
543         else
544                 return PCIBIOS_BAD_REGISTER_NUMBER;
545
546         err = mvebu_sw_pci_bridge_read(port, where & ~3, 4, &reg);
547         if (err)
548                 return err;
549
550         value = (reg & mask) | value << ((where & 3) * 8);
551
552         switch (where & ~3) {
553         case PCI_COMMAND:
554         {
555                 u32 old = bridge->command;
556
557                 if (!mvebu_has_ioport(port))
558                         value &= ~PCI_COMMAND_IO;
559
560                 bridge->command = value & 0xffff;
561                 if ((old ^ bridge->command) & PCI_COMMAND_IO)
562                         mvebu_pcie_handle_iobase_change(port);
563                 if ((old ^ bridge->command) & PCI_COMMAND_MEMORY)
564                         mvebu_pcie_handle_membase_change(port);
565                 break;
566         }
567
568         case PCI_BASE_ADDRESS_0 ... PCI_BASE_ADDRESS_1:
569                 bridge->bar[((where & ~3) - PCI_BASE_ADDRESS_0) / 4] = value;
570                 break;
571
572         case PCI_IO_BASE:
573                 /*
574                  * We also keep bit 1 set, it is a read-only bit that
575                  * indicates we support 32 bits addressing for the
576                  * I/O
577                  */
578                 bridge->iobase = (value & 0xff) | PCI_IO_RANGE_TYPE_32;
579                 bridge->iolimit = ((value >> 8) & 0xff) | PCI_IO_RANGE_TYPE_32;
580                 mvebu_pcie_handle_iobase_change(port);
581                 break;
582
583         case PCI_MEMORY_BASE:
584                 bridge->membase = value & 0xffff;
585                 bridge->memlimit = value >> 16;
586                 mvebu_pcie_handle_membase_change(port);
587                 break;
588
589         case PCI_IO_BASE_UPPER16:
590                 bridge->iobaseupper = value & 0xffff;
591                 bridge->iolimitupper = value >> 16;
592                 mvebu_pcie_handle_iobase_change(port);
593                 break;
594
595         case PCI_PRIMARY_BUS:
596                 bridge->primary_bus             = value & 0xff;
597                 bridge->secondary_bus           = (value >> 8) & 0xff;
598                 bridge->subordinate_bus         = (value >> 16) & 0xff;
599                 bridge->secondary_latency_timer = (value >> 24) & 0xff;
600                 mvebu_pcie_set_local_bus_nr(port, bridge->secondary_bus);
601                 break;
602
603         default:
604                 break;
605         }
606
607         return PCIBIOS_SUCCESSFUL;
608 }
609
610 static inline struct mvebu_pcie *sys_to_pcie(struct pci_sys_data *sys)
611 {
612         return sys->private_data;
613 }
614
615 static struct mvebu_pcie_port *mvebu_pcie_find_port(struct mvebu_pcie *pcie,
616                                                     struct pci_bus *bus,
617                                                     int devfn)
618 {
619         int i;
620
621         for (i = 0; i < pcie->nports; i++) {
622                 struct mvebu_pcie_port *port = &pcie->ports[i];
623
624                 if (bus->number == 0 && port->devfn == devfn)
625                         return port;
626                 if (bus->number != 0 &&
627                     bus->number >= port->bridge.secondary_bus &&
628                     bus->number <= port->bridge.subordinate_bus)
629                         return port;
630         }
631
632         return NULL;
633 }
634
635 /* PCI configuration space write function */
636 static int mvebu_pcie_wr_conf(struct pci_bus *bus, u32 devfn,
637                               int where, int size, u32 val)
638 {
639         struct mvebu_pcie *pcie = sys_to_pcie(bus->sysdata);
640         struct mvebu_pcie_port *port;
641         int ret;
642
643         port = mvebu_pcie_find_port(pcie, bus, devfn);
644         if (!port)
645                 return PCIBIOS_DEVICE_NOT_FOUND;
646
647         /* Access the emulated PCI-to-PCI bridge */
648         if (bus->number == 0)
649                 return mvebu_sw_pci_bridge_write(port, where, size, val);
650
651         if (!mvebu_pcie_link_up(port))
652                 return PCIBIOS_DEVICE_NOT_FOUND;
653
654         /*
655          * On the secondary bus, we don't want to expose any other
656          * device than the device physically connected in the PCIe
657          * slot, visible in slot 0. In slot 1, there's a special
658          * Marvell device that only makes sense when the Armada is
659          * used as a PCIe endpoint.
660          */
661         if (bus->number == port->bridge.secondary_bus &&
662             PCI_SLOT(devfn) != 0)
663                 return PCIBIOS_DEVICE_NOT_FOUND;
664
665         /* Access the real PCIe interface */
666         ret = mvebu_pcie_hw_wr_conf(port, bus, devfn,
667                                     where, size, val);
668
669         return ret;
670 }
671
672 /* PCI configuration space read function */
673 static int mvebu_pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where,
674                               int size, u32 *val)
675 {
676         struct mvebu_pcie *pcie = sys_to_pcie(bus->sysdata);
677         struct mvebu_pcie_port *port;
678         int ret;
679
680         port = mvebu_pcie_find_port(pcie, bus, devfn);
681         if (!port) {
682                 *val = 0xffffffff;
683                 return PCIBIOS_DEVICE_NOT_FOUND;
684         }
685
686         /* Access the emulated PCI-to-PCI bridge */
687         if (bus->number == 0)
688                 return mvebu_sw_pci_bridge_read(port, where, size, val);
689
690         if (!mvebu_pcie_link_up(port)) {
691                 *val = 0xffffffff;
692                 return PCIBIOS_DEVICE_NOT_FOUND;
693         }
694
695         /*
696          * On the secondary bus, we don't want to expose any other
697          * device than the device physically connected in the PCIe
698          * slot, visible in slot 0. In slot 1, there's a special
699          * Marvell device that only makes sense when the Armada is
700          * used as a PCIe endpoint.
701          */
702         if (bus->number == port->bridge.secondary_bus &&
703             PCI_SLOT(devfn) != 0) {
704                 *val = 0xffffffff;
705                 return PCIBIOS_DEVICE_NOT_FOUND;
706         }
707
708         /* Access the real PCIe interface */
709         ret = mvebu_pcie_hw_rd_conf(port, bus, devfn,
710                                     where, size, val);
711
712         return ret;
713 }
714
715 static struct pci_ops mvebu_pcie_ops = {
716         .read = mvebu_pcie_rd_conf,
717         .write = mvebu_pcie_wr_conf,
718 };
719
720 static int mvebu_pcie_setup(int nr, struct pci_sys_data *sys)
721 {
722         struct mvebu_pcie *pcie = sys_to_pcie(sys);
723         int i;
724
725         pcie->mem.name = "PCI MEM";
726         pcie->realio.name = "PCI I/O";
727
728         if (request_resource(&iomem_resource, &pcie->mem))
729                 return 0;
730
731         if (resource_size(&pcie->realio) != 0) {
732                 if (request_resource(&ioport_resource, &pcie->realio)) {
733                         release_resource(&pcie->mem);
734                         return 0;
735                 }
736                 pci_add_resource_offset(&sys->resources, &pcie->realio,
737                                         sys->io_offset);
738         }
739         pci_add_resource_offset(&sys->resources, &pcie->mem, sys->mem_offset);
740         pci_add_resource(&sys->resources, &pcie->busn);
741
742         for (i = 0; i < pcie->nports; i++) {
743                 struct mvebu_pcie_port *port = &pcie->ports[i];
744
745                 if (!port->base)
746                         continue;
747                 mvebu_pcie_setup_hw(port);
748         }
749
750         return 1;
751 }
752
753 static struct pci_bus *mvebu_pcie_scan_bus(int nr, struct pci_sys_data *sys)
754 {
755         struct mvebu_pcie *pcie = sys_to_pcie(sys);
756         struct pci_bus *bus;
757
758         bus = pci_create_root_bus(&pcie->pdev->dev, sys->busnr,
759                                   &mvebu_pcie_ops, sys, &sys->resources);
760         if (!bus)
761                 return NULL;
762
763         pci_scan_child_bus(bus);
764
765         return bus;
766 }
767
768 static resource_size_t mvebu_pcie_align_resource(struct pci_dev *dev,
769                                                  const struct resource *res,
770                                                  resource_size_t start,
771                                                  resource_size_t size,
772                                                  resource_size_t align)
773 {
774         if (dev->bus->number != 0)
775                 return start;
776
777         /*
778          * On the PCI-to-PCI bridge side, the I/O windows must have at
779          * least a 64 KB size and the memory windows must have at
780          * least a 1 MB size. Moreover, MBus windows need to have a
781          * base address aligned on their size, and their size must be
782          * a power of two. This means that if the BAR doesn't have a
783          * power of two size, several MBus windows will actually be
784          * created. We need to ensure that the biggest MBus window
785          * (which will be the first one) is aligned on its size, which
786          * explains the rounddown_pow_of_two() being done here.
787          */
788         if (res->flags & IORESOURCE_IO)
789                 return round_up(start, max_t(resource_size_t, SZ_64K,
790                                              rounddown_pow_of_two(size)));
791         else if (res->flags & IORESOURCE_MEM)
792                 return round_up(start, max_t(resource_size_t, SZ_1M,
793                                              rounddown_pow_of_two(size)));
794         else
795                 return start;
796 }
797
798 static void mvebu_pcie_enable(struct mvebu_pcie *pcie)
799 {
800         struct hw_pci hw;
801
802         memset(&hw, 0, sizeof(hw));
803
804 #ifdef CONFIG_PCI_MSI
805         hw.msi_ctrl = pcie->msi;
806 #endif
807
808         hw.nr_controllers = 1;
809         hw.private_data   = (void **)&pcie;
810         hw.setup          = mvebu_pcie_setup;
811         hw.scan           = mvebu_pcie_scan_bus;
812         hw.map_irq        = of_irq_parse_and_map_pci;
813         hw.ops            = &mvebu_pcie_ops;
814         hw.align_resource = mvebu_pcie_align_resource;
815
816         pci_common_init(&hw);
817 }
818
819 /*
820  * Looks up the list of register addresses encoded into the reg =
821  * <...> property for one that matches the given port/lane. Once
822  * found, maps it.
823  */
824 static void __iomem *mvebu_pcie_map_registers(struct platform_device *pdev,
825                                               struct device_node *np,
826                                               struct mvebu_pcie_port *port)
827 {
828         struct resource regs;
829         int ret = 0;
830
831         ret = of_address_to_resource(np, 0, &regs);
832         if (ret)
833                 return ERR_PTR(ret);
834
835         return devm_ioremap_resource(&pdev->dev, &regs);
836 }
837
838 #define DT_FLAGS_TO_TYPE(flags)       (((flags) >> 24) & 0x03)
839 #define    DT_TYPE_IO                 0x1
840 #define    DT_TYPE_MEM32              0x2
841 #define DT_CPUADDR_TO_TARGET(cpuaddr) (((cpuaddr) >> 56) & 0xFF)
842 #define DT_CPUADDR_TO_ATTR(cpuaddr)   (((cpuaddr) >> 48) & 0xFF)
843
844 static int mvebu_get_tgt_attr(struct device_node *np, int devfn,
845                               unsigned long type,
846                               unsigned int *tgt,
847                               unsigned int *attr)
848 {
849         const int na = 3, ns = 2;
850         const __be32 *range;
851         int rlen, nranges, rangesz, pna, i;
852
853         *tgt = -1;
854         *attr = -1;
855
856         range = of_get_property(np, "ranges", &rlen);
857         if (!range)
858                 return -EINVAL;
859
860         pna = of_n_addr_cells(np);
861         rangesz = pna + na + ns;
862         nranges = rlen / sizeof(__be32) / rangesz;
863
864         for (i = 0; i < nranges; i++, range += rangesz) {
865                 u32 flags = of_read_number(range, 1);
866                 u32 slot = of_read_number(range + 1, 1);
867                 u64 cpuaddr = of_read_number(range + na, pna);
868                 unsigned long rtype;
869
870                 if (DT_FLAGS_TO_TYPE(flags) == DT_TYPE_IO)
871                         rtype = IORESOURCE_IO;
872                 else if (DT_FLAGS_TO_TYPE(flags) == DT_TYPE_MEM32)
873                         rtype = IORESOURCE_MEM;
874                 else
875                         continue;
876
877                 if (slot == PCI_SLOT(devfn) && type == rtype) {
878                         *tgt = DT_CPUADDR_TO_TARGET(cpuaddr);
879                         *attr = DT_CPUADDR_TO_ATTR(cpuaddr);
880                         return 0;
881                 }
882         }
883
884         return -ENOENT;
885 }
886
887 static void mvebu_pcie_msi_enable(struct mvebu_pcie *pcie)
888 {
889         struct device_node *msi_node;
890
891         msi_node = of_parse_phandle(pcie->pdev->dev.of_node,
892                                     "msi-parent", 0);
893         if (!msi_node)
894                 return;
895
896         pcie->msi = of_pci_find_msi_chip_by_node(msi_node);
897
898         if (pcie->msi)
899                 pcie->msi->dev = &pcie->pdev->dev;
900 }
901
902 static int mvebu_pcie_probe(struct platform_device *pdev)
903 {
904         struct mvebu_pcie *pcie;
905         struct device_node *np = pdev->dev.of_node;
906         struct device_node *child;
907         int i, ret;
908
909         pcie = devm_kzalloc(&pdev->dev, sizeof(struct mvebu_pcie),
910                             GFP_KERNEL);
911         if (!pcie)
912                 return -ENOMEM;
913
914         pcie->pdev = pdev;
915         platform_set_drvdata(pdev, pcie);
916
917         /* Get the PCIe memory and I/O aperture */
918         mvebu_mbus_get_pcie_mem_aperture(&pcie->mem);
919         if (resource_size(&pcie->mem) == 0) {
920                 dev_err(&pdev->dev, "invalid memory aperture size\n");
921                 return -EINVAL;
922         }
923
924         mvebu_mbus_get_pcie_io_aperture(&pcie->io);
925
926         if (resource_size(&pcie->io) != 0) {
927                 pcie->realio.flags = pcie->io.flags;
928                 pcie->realio.start = PCIBIOS_MIN_IO;
929                 pcie->realio.end = min_t(resource_size_t,
930                                          IO_SPACE_LIMIT,
931                                          resource_size(&pcie->io));
932         } else
933                 pcie->realio = pcie->io;
934
935         /* Get the bus range */
936         ret = of_pci_parse_bus_range(np, &pcie->busn);
937         if (ret) {
938                 dev_err(&pdev->dev, "failed to parse bus-range property: %d\n",
939                         ret);
940                 return ret;
941         }
942
943         i = 0;
944         for_each_child_of_node(pdev->dev.of_node, child) {
945                 if (!of_device_is_available(child))
946                         continue;
947                 i++;
948         }
949
950         pcie->ports = devm_kzalloc(&pdev->dev, i *
951                                    sizeof(struct mvebu_pcie_port),
952                                    GFP_KERNEL);
953         if (!pcie->ports)
954                 return -ENOMEM;
955
956         i = 0;
957         for_each_child_of_node(pdev->dev.of_node, child) {
958                 struct mvebu_pcie_port *port = &pcie->ports[i];
959                 enum of_gpio_flags flags;
960
961                 if (!of_device_is_available(child))
962                         continue;
963
964                 port->pcie = pcie;
965
966                 if (of_property_read_u32(child, "marvell,pcie-port",
967                                          &port->port)) {
968                         dev_warn(&pdev->dev,
969                                  "ignoring PCIe DT node, missing pcie-port property\n");
970                         continue;
971                 }
972
973                 if (of_property_read_u32(child, "marvell,pcie-lane",
974                                          &port->lane))
975                         port->lane = 0;
976
977                 port->name = kasprintf(GFP_KERNEL, "pcie%d.%d",
978                                        port->port, port->lane);
979
980                 port->devfn = of_pci_get_devfn(child);
981                 if (port->devfn < 0)
982                         continue;
983
984                 ret = mvebu_get_tgt_attr(np, port->devfn, IORESOURCE_MEM,
985                                          &port->mem_target, &port->mem_attr);
986                 if (ret < 0) {
987                         dev_err(&pdev->dev, "PCIe%d.%d: cannot get tgt/attr for mem window\n",
988                                 port->port, port->lane);
989                         continue;
990                 }
991
992                 if (resource_size(&pcie->io) != 0)
993                         mvebu_get_tgt_attr(np, port->devfn, IORESOURCE_IO,
994                                            &port->io_target, &port->io_attr);
995                 else {
996                         port->io_target = -1;
997                         port->io_attr = -1;
998                 }
999
1000                 port->reset_gpio = of_get_named_gpio_flags(child,
1001                                                    "reset-gpios", 0, &flags);
1002                 if (gpio_is_valid(port->reset_gpio)) {
1003                         u32 reset_udelay = 20000;
1004
1005                         port->reset_active_low = flags & OF_GPIO_ACTIVE_LOW;
1006                         port->reset_name = kasprintf(GFP_KERNEL,
1007                                      "pcie%d.%d-reset", port->port, port->lane);
1008                         of_property_read_u32(child, "reset-delay-us",
1009                                              &reset_udelay);
1010
1011                         ret = devm_gpio_request_one(&pdev->dev,
1012                             port->reset_gpio, GPIOF_DIR_OUT, port->reset_name);
1013                         if (ret) {
1014                                 if (ret == -EPROBE_DEFER)
1015                                         return ret;
1016                                 continue;
1017                         }
1018
1019                         gpio_set_value(port->reset_gpio,
1020                                        (port->reset_active_low) ? 1 : 0);
1021                         msleep(reset_udelay/1000);
1022                 }
1023
1024                 port->clk = of_clk_get_by_name(child, NULL);
1025                 if (IS_ERR(port->clk)) {
1026                         dev_err(&pdev->dev, "PCIe%d.%d: cannot get clock\n",
1027                                port->port, port->lane);
1028                         continue;
1029                 }
1030
1031                 ret = clk_prepare_enable(port->clk);
1032                 if (ret)
1033                         continue;
1034
1035                 port->base = mvebu_pcie_map_registers(pdev, child, port);
1036                 if (IS_ERR(port->base)) {
1037                         dev_err(&pdev->dev, "PCIe%d.%d: cannot map registers\n",
1038                                 port->port, port->lane);
1039                         port->base = NULL;
1040                         clk_disable_unprepare(port->clk);
1041                         continue;
1042                 }
1043
1044                 mvebu_pcie_set_local_dev_nr(port, 1);
1045
1046                 port->dn = child;
1047                 mvebu_sw_pci_bridge_init(port);
1048                 i++;
1049         }
1050
1051         pcie->nports = i;
1052
1053         for (i = 0; i < (IO_SPACE_LIMIT - SZ_64K); i += SZ_64K)
1054                 pci_ioremap_io(i, pcie->io.start + i);
1055
1056         mvebu_pcie_msi_enable(pcie);
1057         mvebu_pcie_enable(pcie);
1058
1059         return 0;
1060 }
1061
1062 static const struct of_device_id mvebu_pcie_of_match_table[] = {
1063         { .compatible = "marvell,armada-xp-pcie", },
1064         { .compatible = "marvell,armada-370-pcie", },
1065         { .compatible = "marvell,dove-pcie", },
1066         { .compatible = "marvell,kirkwood-pcie", },
1067         {},
1068 };
1069 MODULE_DEVICE_TABLE(of, mvebu_pcie_of_match_table);
1070
1071 static struct platform_driver mvebu_pcie_driver = {
1072         .driver = {
1073                 .name = "mvebu-pcie",
1074                 .of_match_table = mvebu_pcie_of_match_table,
1075                 /* driver unloading/unbinding currently not supported */
1076                 .suppress_bind_attrs = true,
1077         },
1078         .probe = mvebu_pcie_probe,
1079 };
1080 module_platform_driver(mvebu_pcie_driver);
1081
1082 MODULE_AUTHOR("Thomas Petazzoni <thomas.petazzoni@free-electrons.com>");
1083 MODULE_DESCRIPTION("Marvell EBU PCIe driver");
1084 MODULE_LICENSE("GPL v2");