i2c: cadence: Implement save restore
[linux-2.6-microblaze.git] / drivers / staging / mt7621-pci / pci-mt7621.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * BRIEF MODULE DESCRIPTION
4  *     PCI init for Ralink RT2880 solution
5  *
6  * Copyright 2007 Ralink Inc. (bruce_chang@ralinktech.com.tw)
7  *
8  * May 2007 Bruce Chang
9  * Initial Release
10  *
11  * May 2009 Bruce Chang
12  * support RT2880/RT3883 PCIe
13  *
14  * May 2011 Bruce Chang
15  * support RT6855/MT7620 PCIe
16  */
17
18 #include <linux/bitops.h>
19 #include <linux/clk.h>
20 #include <linux/delay.h>
21 #include <linux/gpio/consumer.h>
22 #include <linux/module.h>
23 #include <linux/of.h>
24 #include <linux/of_address.h>
25 #include <linux/of_pci.h>
26 #include <linux/of_platform.h>
27 #include <linux/pci.h>
28 #include <linux/phy/phy.h>
29 #include <linux/platform_device.h>
30 #include <linux/reset.h>
31 #include <linux/sys_soc.h>
32
33 /* MediaTek specific configuration registers */
34 #define PCIE_FTS_NUM                    0x70c
35 #define PCIE_FTS_NUM_MASK               GENMASK(15, 8)
36 #define PCIE_FTS_NUM_L0(x)              (((x) & 0xff) << 8)
37
38 /* Host-PCI bridge registers */
39 #define RALINK_PCI_PCICFG_ADDR          0x0000
40 #define RALINK_PCI_PCIMSK_ADDR          0x000C
41 #define RALINK_PCI_CONFIG_ADDR          0x0020
42 #define RALINK_PCI_CONFIG_DATA          0x0024
43 #define RALINK_PCI_MEMBASE              0x0028
44 #define RALINK_PCI_IOBASE               0x002C
45
46 /* PCIe RC control registers */
47 #define RALINK_PCI_ID                   0x0030
48 #define RALINK_PCI_CLASS                0x0034
49 #define RALINK_PCI_SUBID                0x0038
50 #define RALINK_PCI_STATUS               0x0050
51
52 /* Some definition values */
53 #define PCIE_REVISION_ID                BIT(0)
54 #define PCIE_CLASS_CODE                 (0x60400 << 8)
55 #define PCIE_BAR_MAP_MAX                GENMASK(30, 16)
56 #define PCIE_BAR_ENABLE                 BIT(0)
57 #define PCIE_PORT_INT_EN(x)             BIT(20 + (x))
58 #define PCIE_PORT_LINKUP                BIT(0)
59
60 #define PERST_DELAY_MS                  100
61
62 /**
63  * struct mt7621_pcie_port - PCIe port information
64  * @base: I/O mapped register base
65  * @list: port list
66  * @pcie: pointer to PCIe host info
67  * @clk: pointer to the port clock gate
68  * @phy: pointer to PHY control block
69  * @pcie_rst: pointer to port reset control
70  * @gpio_rst: gpio reset
71  * @slot: port slot
72  * @enabled: indicates if port is enabled
73  */
74 struct mt7621_pcie_port {
75         void __iomem *base;
76         struct list_head list;
77         struct mt7621_pcie *pcie;
78         struct clk *clk;
79         struct phy *phy;
80         struct reset_control *pcie_rst;
81         struct gpio_desc *gpio_rst;
82         u32 slot;
83         bool enabled;
84 };
85
86 /**
87  * struct mt7621_pcie - PCIe host information
88  * @base: IO Mapped Register Base
89  * @dev: Pointer to PCIe device
90  * @ports: pointer to PCIe port information
91  * @resets_inverted: depends on chip revision
92  * reset lines are inverted.
93  */
94 struct mt7621_pcie {
95         void __iomem *base;
96         struct device *dev;
97         struct list_head ports;
98         bool resets_inverted;
99 };
100
101 static inline u32 pcie_read(struct mt7621_pcie *pcie, u32 reg)
102 {
103         return readl_relaxed(pcie->base + reg);
104 }
105
106 static inline void pcie_write(struct mt7621_pcie *pcie, u32 val, u32 reg)
107 {
108         writel_relaxed(val, pcie->base + reg);
109 }
110
111 static inline void pcie_rmw(struct mt7621_pcie *pcie, u32 reg, u32 clr, u32 set)
112 {
113         u32 val = readl_relaxed(pcie->base + reg);
114
115         val &= ~clr;
116         val |= set;
117         writel_relaxed(val, pcie->base + reg);
118 }
119
120 static inline u32 pcie_port_read(struct mt7621_pcie_port *port, u32 reg)
121 {
122         return readl_relaxed(port->base + reg);
123 }
124
125 static inline void pcie_port_write(struct mt7621_pcie_port *port,
126                                    u32 val, u32 reg)
127 {
128         writel_relaxed(val, port->base + reg);
129 }
130
131 static inline u32 mt7621_pci_get_cfgaddr(unsigned int bus, unsigned int slot,
132                                          unsigned int func, unsigned int where)
133 {
134         return (((where & 0xF00) >> 8) << 24) | (bus << 16) | (slot << 11) |
135                 (func << 8) | (where & 0xfc) | 0x80000000;
136 }
137
138 static void __iomem *mt7621_pcie_map_bus(struct pci_bus *bus,
139                                          unsigned int devfn, int where)
140 {
141         struct mt7621_pcie *pcie = bus->sysdata;
142         u32 address = mt7621_pci_get_cfgaddr(bus->number, PCI_SLOT(devfn),
143                                              PCI_FUNC(devfn), where);
144
145         writel_relaxed(address, pcie->base + RALINK_PCI_CONFIG_ADDR);
146
147         return pcie->base + RALINK_PCI_CONFIG_DATA + (where & 3);
148 }
149
150 struct pci_ops mt7621_pci_ops = {
151         .map_bus        = mt7621_pcie_map_bus,
152         .read           = pci_generic_config_read,
153         .write          = pci_generic_config_write,
154 };
155
156 static u32 read_config(struct mt7621_pcie *pcie, unsigned int dev, u32 reg)
157 {
158         u32 address = mt7621_pci_get_cfgaddr(0, dev, 0, reg);
159
160         pcie_write(pcie, address, RALINK_PCI_CONFIG_ADDR);
161         return pcie_read(pcie, RALINK_PCI_CONFIG_DATA);
162 }
163
164 static void write_config(struct mt7621_pcie *pcie, unsigned int dev,
165                          u32 reg, u32 val)
166 {
167         u32 address = mt7621_pci_get_cfgaddr(0, dev, 0, reg);
168
169         pcie_write(pcie, address, RALINK_PCI_CONFIG_ADDR);
170         pcie_write(pcie, val, RALINK_PCI_CONFIG_DATA);
171 }
172
173 static inline void mt7621_rst_gpio_pcie_assert(struct mt7621_pcie_port *port)
174 {
175         if (port->gpio_rst)
176                 gpiod_set_value(port->gpio_rst, 1);
177 }
178
179 static inline void mt7621_rst_gpio_pcie_deassert(struct mt7621_pcie_port *port)
180 {
181         if (port->gpio_rst)
182                 gpiod_set_value(port->gpio_rst, 0);
183 }
184
185 static inline bool mt7621_pcie_port_is_linkup(struct mt7621_pcie_port *port)
186 {
187         return (pcie_port_read(port, RALINK_PCI_STATUS) & PCIE_PORT_LINKUP) != 0;
188 }
189
190 static inline void mt7621_control_assert(struct mt7621_pcie_port *port)
191 {
192         struct mt7621_pcie *pcie = port->pcie;
193
194         if (pcie->resets_inverted)
195                 reset_control_assert(port->pcie_rst);
196         else
197                 reset_control_deassert(port->pcie_rst);
198 }
199
200 static inline void mt7621_control_deassert(struct mt7621_pcie_port *port)
201 {
202         struct mt7621_pcie *pcie = port->pcie;
203
204         if (pcie->resets_inverted)
205                 reset_control_deassert(port->pcie_rst);
206         else
207                 reset_control_assert(port->pcie_rst);
208 }
209
210 static int setup_cm_memory_region(struct pci_host_bridge *host)
211 {
212         struct mt7621_pcie *pcie = pci_host_bridge_priv(host);
213         struct device *dev = pcie->dev;
214         struct resource_entry *entry;
215         resource_size_t mask;
216
217         entry = resource_list_first_type(&host->windows, IORESOURCE_MEM);
218         if (!entry) {
219                 dev_err(dev, "Cannot get memory resource\n");
220                 return -EINVAL;
221         }
222
223         if (mips_cps_numiocu(0)) {
224                 /*
225                  * FIXME: hardware doesn't accept mask values with 1s after
226                  * 0s (e.g. 0xffef), so it would be great to warn if that's
227                  * about to happen
228                  */
229                 mask = ~(entry->res->end - entry->res->start);
230
231                 write_gcr_reg1_base(entry->res->start);
232                 write_gcr_reg1_mask(mask | CM_GCR_REGn_MASK_CMTGT_IOCU0);
233                 dev_info(dev, "PCI coherence region base: 0x%08llx, mask/settings: 0x%08llx\n",
234                          (unsigned long long)read_gcr_reg1_base(),
235                          (unsigned long long)read_gcr_reg1_mask());
236         }
237
238         return 0;
239 }
240
241 static int mt7621_pcie_parse_port(struct mt7621_pcie *pcie,
242                                   struct device_node *node,
243                                   int slot)
244 {
245         struct mt7621_pcie_port *port;
246         struct device *dev = pcie->dev;
247         struct platform_device *pdev = to_platform_device(dev);
248         char name[10];
249         int err;
250
251         port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);
252         if (!port)
253                 return -ENOMEM;
254
255         port->base = devm_platform_ioremap_resource(pdev, slot + 1);
256         if (IS_ERR(port->base))
257                 return PTR_ERR(port->base);
258
259         port->clk = devm_get_clk_from_child(dev, node, NULL);
260         if (IS_ERR(port->clk)) {
261                 dev_err(dev, "failed to get pcie%d clock\n", slot);
262                 return PTR_ERR(port->clk);
263         }
264
265         port->pcie_rst = of_reset_control_get_exclusive(node, NULL);
266         if (PTR_ERR(port->pcie_rst) == -EPROBE_DEFER) {
267                 dev_err(dev, "failed to get pcie%d reset control\n", slot);
268                 return PTR_ERR(port->pcie_rst);
269         }
270
271         snprintf(name, sizeof(name), "pcie-phy%d", slot);
272         port->phy = devm_of_phy_get(dev, node, name);
273         if (IS_ERR(port->phy)) {
274                 dev_err(dev, "failed to get pcie-phy%d\n", slot);
275                 err = PTR_ERR(port->phy);
276                 goto remove_reset;
277         }
278
279         port->gpio_rst = devm_gpiod_get_index_optional(dev, "reset", slot,
280                                                        GPIOD_OUT_LOW);
281         if (IS_ERR(port->gpio_rst)) {
282                 dev_err(dev, "Failed to get GPIO for PCIe%d\n", slot);
283                 err = PTR_ERR(port->gpio_rst);
284                 goto remove_reset;
285         }
286
287         port->slot = slot;
288         port->pcie = pcie;
289
290         INIT_LIST_HEAD(&port->list);
291         list_add_tail(&port->list, &pcie->ports);
292
293         return 0;
294
295 remove_reset:
296         reset_control_put(port->pcie_rst);
297         return err;
298 }
299
300 static int mt7621_pcie_parse_dt(struct mt7621_pcie *pcie)
301 {
302         struct device *dev = pcie->dev;
303         struct platform_device *pdev = to_platform_device(dev);
304         struct device_node *node = dev->of_node, *child;
305         int err;
306
307         pcie->base = devm_platform_ioremap_resource(pdev, 0);
308         if (IS_ERR(pcie->base))
309                 return PTR_ERR(pcie->base);
310
311         for_each_available_child_of_node(node, child) {
312                 int slot;
313
314                 err = of_pci_get_devfn(child);
315                 if (err < 0) {
316                         of_node_put(child);
317                         dev_err(dev, "failed to parse devfn: %d\n", err);
318                         return err;
319                 }
320
321                 slot = PCI_SLOT(err);
322
323                 err = mt7621_pcie_parse_port(pcie, child, slot);
324                 if (err) {
325                         of_node_put(child);
326                         return err;
327                 }
328         }
329
330         return 0;
331 }
332
333 static int mt7621_pcie_init_port(struct mt7621_pcie_port *port)
334 {
335         struct mt7621_pcie *pcie = port->pcie;
336         struct device *dev = pcie->dev;
337         u32 slot = port->slot;
338         int err;
339
340         err = phy_init(port->phy);
341         if (err) {
342                 dev_err(dev, "failed to initialize port%d phy\n", slot);
343                 return err;
344         }
345
346         err = phy_power_on(port->phy);
347         if (err) {
348                 dev_err(dev, "failed to power on port%d phy\n", slot);
349                 phy_exit(port->phy);
350                 return err;
351         }
352
353         port->enabled = true;
354
355         return 0;
356 }
357
358 static void mt7621_pcie_reset_assert(struct mt7621_pcie *pcie)
359 {
360         struct mt7621_pcie_port *port;
361
362         list_for_each_entry(port, &pcie->ports, list) {
363                 /* PCIe RC reset assert */
364                 mt7621_control_assert(port);
365
366                 /* PCIe EP reset assert */
367                 mt7621_rst_gpio_pcie_assert(port);
368         }
369
370         msleep(PERST_DELAY_MS);
371 }
372
373 static void mt7621_pcie_reset_rc_deassert(struct mt7621_pcie *pcie)
374 {
375         struct mt7621_pcie_port *port;
376
377         list_for_each_entry(port, &pcie->ports, list)
378                 mt7621_control_deassert(port);
379 }
380
381 static void mt7621_pcie_reset_ep_deassert(struct mt7621_pcie *pcie)
382 {
383         struct mt7621_pcie_port *port;
384
385         list_for_each_entry(port, &pcie->ports, list)
386                 mt7621_rst_gpio_pcie_deassert(port);
387
388         msleep(PERST_DELAY_MS);
389 }
390
391 static void mt7621_pcie_init_ports(struct mt7621_pcie *pcie)
392 {
393         struct device *dev = pcie->dev;
394         struct mt7621_pcie_port *port, *tmp;
395         int err;
396
397         mt7621_pcie_reset_assert(pcie);
398         mt7621_pcie_reset_rc_deassert(pcie);
399
400         list_for_each_entry_safe(port, tmp, &pcie->ports, list) {
401                 u32 slot = port->slot;
402
403                 if (slot == 1) {
404                         port->enabled = true;
405                         continue;
406                 }
407
408                 err = mt7621_pcie_init_port(port);
409                 if (err) {
410                         dev_err(dev, "Initiating port %d failed\n", slot);
411                         list_del(&port->list);
412                 }
413         }
414
415         mt7621_pcie_reset_ep_deassert(pcie);
416
417         tmp = NULL;
418         list_for_each_entry(port, &pcie->ports, list) {
419                 u32 slot = port->slot;
420
421                 if (!mt7621_pcie_port_is_linkup(port)) {
422                         dev_err(dev, "pcie%d no card, disable it (RST & CLK)\n",
423                                 slot);
424                         mt7621_control_assert(port);
425                         clk_disable_unprepare(port->clk);
426                         port->enabled = false;
427
428                         if (slot == 0) {
429                                 tmp = port;
430                                 continue;
431                         }
432
433                         if (slot == 1 && tmp && !tmp->enabled)
434                                 phy_power_off(tmp->phy);
435                 }
436         }
437 }
438
439 static void mt7621_pcie_enable_port(struct mt7621_pcie_port *port)
440 {
441         struct mt7621_pcie *pcie = port->pcie;
442         u32 slot = port->slot;
443         u32 val;
444
445         /* enable pcie interrupt */
446         val = pcie_read(pcie, RALINK_PCI_PCIMSK_ADDR);
447         val |= PCIE_PORT_INT_EN(slot);
448         pcie_write(pcie, val, RALINK_PCI_PCIMSK_ADDR);
449
450         /* map 2G DDR region */
451         pcie_port_write(port, PCIE_BAR_MAP_MAX | PCIE_BAR_ENABLE,
452                         PCI_BASE_ADDRESS_0);
453
454         /* configure class code and revision ID */
455         pcie_port_write(port, PCIE_CLASS_CODE | PCIE_REVISION_ID,
456                         RALINK_PCI_CLASS);
457
458         /* configure RC FTS number to 250 when it leaves L0s */
459         val = read_config(pcie, slot, PCIE_FTS_NUM);
460         val &= ~PCIE_FTS_NUM_MASK;
461         val |= PCIE_FTS_NUM_L0(0x50);
462         write_config(pcie, slot, PCIE_FTS_NUM, val);
463 }
464
465 static int mt7621_pcie_enable_ports(struct pci_host_bridge *host)
466 {
467         struct mt7621_pcie *pcie = pci_host_bridge_priv(host);
468         struct device *dev = pcie->dev;
469         struct mt7621_pcie_port *port;
470         struct resource_entry *entry;
471         int err;
472
473         entry = resource_list_first_type(&host->windows, IORESOURCE_IO);
474         if (!entry) {
475                 dev_err(dev, "Cannot get io resource\n");
476                 return -EINVAL;
477         }
478
479         /* Setup MEMWIN and IOWIN */
480         pcie_write(pcie, 0xffffffff, RALINK_PCI_MEMBASE);
481         pcie_write(pcie, entry->res->start, RALINK_PCI_IOBASE);
482
483         list_for_each_entry(port, &pcie->ports, list) {
484                 if (port->enabled) {
485                         err = clk_prepare_enable(port->clk);
486                         if (err) {
487                                 dev_err(dev, "enabling clk pcie%d\n",
488                                         port->slot);
489                                 return err;
490                         }
491
492                         mt7621_pcie_enable_port(port);
493                         dev_info(dev, "PCIE%d enabled\n", port->slot);
494                 }
495         }
496
497         return 0;
498 }
499
500 static int mt7621_pcie_register_host(struct pci_host_bridge *host)
501 {
502         struct mt7621_pcie *pcie = pci_host_bridge_priv(host);
503
504         host->ops = &mt7621_pci_ops;
505         host->sysdata = pcie;
506         return pci_host_probe(host);
507 }
508
509 static const struct soc_device_attribute mt7621_pci_quirks_match[] = {
510         { .soc_id = "mt7621", .revision = "E2" }
511 };
512
513 static int mt7621_pci_probe(struct platform_device *pdev)
514 {
515         struct device *dev = &pdev->dev;
516         const struct soc_device_attribute *attr;
517         struct mt7621_pcie_port *port;
518         struct mt7621_pcie *pcie;
519         struct pci_host_bridge *bridge;
520         int err;
521
522         if (!dev->of_node)
523                 return -ENODEV;
524
525         bridge = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
526         if (!bridge)
527                 return -ENOMEM;
528
529         pcie = pci_host_bridge_priv(bridge);
530         pcie->dev = dev;
531         platform_set_drvdata(pdev, pcie);
532         INIT_LIST_HEAD(&pcie->ports);
533
534         attr = soc_device_match(mt7621_pci_quirks_match);
535         if (attr)
536                 pcie->resets_inverted = true;
537
538         err = mt7621_pcie_parse_dt(pcie);
539         if (err) {
540                 dev_err(dev, "Parsing DT failed\n");
541                 return err;
542         }
543
544         mt7621_pcie_init_ports(pcie);
545
546         err = mt7621_pcie_enable_ports(bridge);
547         if (err) {
548                 dev_err(dev, "Error enabling pcie ports\n");
549                 goto remove_resets;
550         }
551
552         err = setup_cm_memory_region(bridge);
553         if (err) {
554                 dev_err(dev, "Error setting up iocu mem regions\n");
555                 goto remove_resets;
556         }
557
558         return mt7621_pcie_register_host(bridge);
559
560 remove_resets:
561         list_for_each_entry(port, &pcie->ports, list)
562                 reset_control_put(port->pcie_rst);
563
564         return err;
565 }
566
567 static int mt7621_pci_remove(struct platform_device *pdev)
568 {
569         struct mt7621_pcie *pcie = platform_get_drvdata(pdev);
570         struct mt7621_pcie_port *port;
571
572         list_for_each_entry(port, &pcie->ports, list)
573                 reset_control_put(port->pcie_rst);
574
575         return 0;
576 }
577
578 static const struct of_device_id mt7621_pci_ids[] = {
579         { .compatible = "mediatek,mt7621-pci" },
580         {},
581 };
582 MODULE_DEVICE_TABLE(of, mt7621_pci_ids);
583
584 static struct platform_driver mt7621_pci_driver = {
585         .probe = mt7621_pci_probe,
586         .remove = mt7621_pci_remove,
587         .driver = {
588                 .name = "mt7621-pci",
589                 .of_match_table = of_match_ptr(mt7621_pci_ids),
590         },
591 };
592 builtin_platform_driver(mt7621_pci_driver);