1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * MediaTek PCIe host controller driver.
4 *
5 * Copyright (c) 2020 MediaTek Inc.
6 * Author: Jianjun Wang <jianjun.wang@mediatek.com>
7 */
8
9 #include <linux/bitfield.h>
10 #include <linux/clk.h>
11 #include <linux/clk-provider.h>
12 #include <linux/delay.h>
13 #include <linux/iopoll.h>
14 #include <linux/irq.h>
15 #include <linux/irqchip/irq-msi-lib.h>
16 #include <linux/irqchip/chained_irq.h>
17 #include <linux/irqdomain.h>
18 #include <linux/kernel.h>
19 #include <linux/mfd/syscon.h>
20 #include <linux/module.h>
21 #include <linux/msi.h>
22 #include <linux/of_device.h>
23 #include <linux/of_pci.h>
24 #include <linux/pci.h>
25 #include <linux/pci-pwrctrl.h>
26 #include <linux/phy/phy.h>
27 #include <linux/platform_device.h>
28 #include <linux/pm_domain.h>
29 #include <linux/pm_runtime.h>
30 #include <linux/regmap.h>
31 #include <linux/reset.h>
32
33 #include "pci-host-common.h"
34 #include "../pci.h"
35
36 #define PCIE_BASE_CFG_REG 0x14
37 #define PCIE_BASE_CFG_SPEED GENMASK(15, 8)
38
39 #define PCIE_SETTING_REG 0x80
40 #define PCIE_SETTING_LINK_WIDTH GENMASK(11, 8)
41 #define PCIE_SETTING_GEN_SUPPORT GENMASK(14, 12)
42 #define PCIE_PCI_IDS_1 0x9c
43 #define PCI_CLASS(class) (class << 8)
44 #define PCIE_RC_MODE BIT(0)
45
46 #define PCIE_EQ_PRESET_01_REG 0x100
47 #define PCIE_VAL_LN0_DOWNSTREAM GENMASK(6, 0)
48 #define PCIE_VAL_LN0_UPSTREAM GENMASK(14, 8)
49 #define PCIE_VAL_LN1_DOWNSTREAM GENMASK(22, 16)
50 #define PCIE_VAL_LN1_UPSTREAM GENMASK(30, 24)
51
52 #define PCIE_CFGNUM_REG 0x140
53 #define PCIE_CFG_DEVFN(devfn) ((devfn) & GENMASK(7, 0))
54 #define PCIE_CFG_BUS(bus) (((bus) << 8) & GENMASK(15, 8))
55 #define PCIE_CFG_BYTE_EN(bytes) (((bytes) << 16) & GENMASK(19, 16))
56 #define PCIE_CFG_FORCE_BYTE_EN BIT(20)
57 #define PCIE_CFG_OFFSET_ADDR 0x1000
58 #define PCIE_CFG_HEADER(bus, devfn) \
59 (PCIE_CFG_BUS(bus) | PCIE_CFG_DEVFN(devfn))
60
61 #define PCIE_RST_CTRL_REG 0x148
62 #define PCIE_MAC_RSTB BIT(0)
63 #define PCIE_PHY_RSTB BIT(1)
64 #define PCIE_BRG_RSTB BIT(2)
65 #define PCIE_PE_RSTB BIT(3)
66
67 /*
68 * As described in the datasheet of MediaTek PCIe Gen3 controller, wait 10ms
69 * after setting PCIE_BRG_RSTB, and before accessing PCIe internal registers.
70 */
71 #define PCIE_BRG_RST_RDY_MS 10
72
73 #define PCIE_LTSSM_STATUS_REG 0x150
74 #define PCIE_LTSSM_STATE_MASK GENMASK(28, 24)
75 #define PCIE_LTSSM_STATE(val) ((val & PCIE_LTSSM_STATE_MASK) >> 24)
76 #define PCIE_LTSSM_STATE_L2_IDLE 0x14
77
78 #define PCIE_LINK_STATUS_REG 0x154
79 #define PCIE_PORT_LINKUP BIT(8)
80
81 #define PCIE_MSI_SET_NUM 8
82 #define PCIE_MSI_IRQS_PER_SET 32
83 #define PCIE_MSI_IRQS_NUM \
84 (PCIE_MSI_IRQS_PER_SET * PCIE_MSI_SET_NUM)
85
86 #define PCIE_INT_ENABLE_REG 0x180
87 #define PCIE_MSI_ENABLE GENMASK(PCIE_MSI_SET_NUM + 8 - 1, 8)
88 #define PCIE_MSI_SHIFT 8
89 #define PCIE_INTX_SHIFT 24
90 #define PCIE_INTX_ENABLE \
91 GENMASK(PCIE_INTX_SHIFT + PCI_NUM_INTX - 1, PCIE_INTX_SHIFT)
92
93 #define PCIE_INT_STATUS_REG 0x184
94 #define PCIE_MSI_SET_ENABLE_REG 0x190
95 #define PCIE_MSI_SET_ENABLE GENMASK(PCIE_MSI_SET_NUM - 1, 0)
96
97 #define PCIE_PIPE4_PIE8_REG 0x338
98 #define PCIE_K_FINETUNE_MAX GENMASK(5, 0)
99 #define PCIE_K_FINETUNE_ERR GENMASK(7, 6)
100 #define PCIE_K_PRESET_TO_USE GENMASK(18, 8)
101 #define PCIE_K_PHYPARAM_QUERY BIT(19)
102 #define PCIE_K_QUERY_TIMEOUT BIT(20)
103 #define PCIE_K_PRESET_TO_USE_16G GENMASK(31, 21)
104
105 #define PCIE_MSI_SET_BASE_REG 0xc00
106 #define PCIE_MSI_SET_OFFSET 0x10
107 #define PCIE_MSI_SET_STATUS_OFFSET 0x04
108 #define PCIE_MSI_SET_ENABLE_OFFSET 0x08
109
110 #define PCIE_MSI_SET_ADDR_HI_BASE 0xc80
111 #define PCIE_MSI_SET_ADDR_HI_OFFSET 0x04
112
113 #define PCIE_RESOURCE_CTRL_REG 0xd2c
114 #define PCIE_RSRC_SYS_CLK_RDY_TIME_MASK GENMASK(7, 0)
115
116 #define PCIE_ICMD_PM_REG 0x198
117 #define PCIE_TURN_OFF_LINK BIT(4)
118
119 #define PCIE_MISC_CTRL_REG 0x348
120 #define PCIE_DISABLE_DVFSRC_VLT_REQ BIT(1)
121
122 #define PCIE_TRANS_TABLE_BASE_REG 0x800
123 #define PCIE_ATR_SRC_ADDR_MSB_OFFSET 0x4
124 #define PCIE_ATR_TRSL_ADDR_LSB_OFFSET 0x8
125 #define PCIE_ATR_TRSL_ADDR_MSB_OFFSET 0xc
126 #define PCIE_ATR_TRSL_PARAM_OFFSET 0x10
127 #define PCIE_ATR_TLB_SET_OFFSET 0x20
128
129 #define PCIE_MAX_TRANS_TABLES 8
130 #define PCIE_ATR_EN BIT(0)
131 #define PCIE_ATR_SIZE(size) \
132 (((((size) - 1) << 1) & GENMASK(6, 1)) | PCIE_ATR_EN)
133 #define PCIE_ATR_ID(id) ((id) & GENMASK(3, 0))
134 #define PCIE_ATR_TYPE_MEM PCIE_ATR_ID(0)
135 #define PCIE_ATR_TYPE_IO PCIE_ATR_ID(1)
136 #define PCIE_ATR_TLP_TYPE(type) (((type) << 16) & GENMASK(18, 16))
137 #define PCIE_ATR_TLP_TYPE_MEM PCIE_ATR_TLP_TYPE(0)
138 #define PCIE_ATR_TLP_TYPE_IO PCIE_ATR_TLP_TYPE(2)
139
140 #define MAX_NUM_PHY_RESETS 3
141
142 #define PCIE_MTK_RESET_TIME_US 10
143
144 /* Time in ms needed to complete PCIe reset on EN7581 SoC */
145 #define PCIE_EN7581_RESET_TIME_MS 100
146
147 struct mtk_gen3_pcie;
148
149 #define PCIE_CONF_LINK2_CTL_STS (PCIE_CFG_OFFSET_ADDR + 0xb0)
150 #define PCIE_CONF_LINK2_LCR2_LINK_SPEED GENMASK(3, 0)
151
152 enum mtk_gen3_pcie_flags {
153 SKIP_PCIE_RSTB = BIT(0), /* Skip PERST# assertion during device
154 * probing or suspend/resume phase to
155 * avoid hw bugs/issues.
156 */
157 };
158
159 /**
160 * struct mtk_gen3_pcie_pdata - differentiate between host generations
161 * @power_up: pcie power_up callback
162 * @phy_resets: phy reset lines SoC data.
163 * @sys_clk_rdy_time_us: System clock ready time override (microseconds)
164 * @flags: pcie device flags.
165 */
166 struct mtk_gen3_pcie_pdata {
167 int (*power_up)(struct mtk_gen3_pcie *pcie);
168 struct {
169 const char *id[MAX_NUM_PHY_RESETS];
170 int num_resets;
171 } phy_resets;
172 u8 sys_clk_rdy_time_us;
173 u32 flags;
174 };
175
176 /**
177 * struct mtk_msi_set - MSI information for each set
178 * @base: IO mapped register base
179 * @msg_addr: MSI message address
180 * @saved_irq_state: IRQ enable state saved at suspend time
181 */
182 struct mtk_msi_set {
183 void __iomem *base;
184 phys_addr_t msg_addr;
185 u32 saved_irq_state;
186 };
187
188 /**
189 * struct mtk_gen3_pcie - PCIe port information
190 * @dev: pointer to PCIe device
191 * @base: IO mapped register base
192 * @reg_base: physical register base
193 * @mac_reset: MAC reset control
194 * @phy_resets: PHY reset controllers
195 * @phy: PHY controller block
196 * @clks: PCIe clocks
197 * @num_clks: PCIe clocks count for this port
198 * @max_link_speed: Maximum link speed (PCIe Gen) for this port
199 * @num_lanes: Number of PCIe lanes for this port
200 * @irq: PCIe controller interrupt number
201 * @saved_irq_state: IRQ enable state saved at suspend time
202 * @irq_lock: lock protecting IRQ register access
203 * @intx_domain: legacy INTx IRQ domain
204 * @msi_bottom_domain: MSI IRQ bottom domain
205 * @msi_sets: MSI sets information
206 * @lock: lock protecting IRQ bit map
207 * @msi_irq_in_use: bit map for assigned MSI IRQ
208 * @soc: pointer to SoC-dependent operations
209 */
210 struct mtk_gen3_pcie {
211 struct device *dev;
212 void __iomem *base;
213 phys_addr_t reg_base;
214 struct reset_control *mac_reset;
215 struct reset_control_bulk_data phy_resets[MAX_NUM_PHY_RESETS];
216 struct phy *phy;
217 struct clk_bulk_data *clks;
218 int num_clks;
219 u8 max_link_speed;
220 u8 num_lanes;
221
222 int irq;
223 u32 saved_irq_state;
224 raw_spinlock_t irq_lock;
225 struct irq_domain *intx_domain;
226 struct irq_domain *msi_bottom_domain;
227 struct mtk_msi_set msi_sets[PCIE_MSI_SET_NUM];
228 struct mutex lock;
229 DECLARE_BITMAP(msi_irq_in_use, PCIE_MSI_IRQS_NUM);
230
231 const struct mtk_gen3_pcie_pdata *soc;
232 };
233
234 /* LTSSM state in PCIE_LTSSM_STATUS_REG bit[28:24] */
235 static const char *const ltssm_str[] = {
236 "detect.quiet", /* 0x00 */
237 "detect.active", /* 0x01 */
238 "polling.active", /* 0x02 */
239 "polling.compliance", /* 0x03 */
240 "polling.configuration", /* 0x04 */
241 "config.linkwidthstart", /* 0x05 */
242 "config.linkwidthaccept", /* 0x06 */
243 "config.lanenumwait", /* 0x07 */
244 "config.lanenumaccept", /* 0x08 */
245 "config.complete", /* 0x09 */
246 "config.idle", /* 0x0A */
247 "recovery.receiverlock", /* 0x0B */
248 "recovery.equalization", /* 0x0C */
249 "recovery.speed", /* 0x0D */
250 "recovery.receiverconfig", /* 0x0E */
251 "recovery.idle", /* 0x0F */
252 "L0", /* 0x10 */
253 "L0s", /* 0x11 */
254 "L1.entry", /* 0x12 */
255 "L1.idle", /* 0x13 */
256 "L2.idle", /* 0x14 */
257 "L2.transmitwake", /* 0x15 */
258 "disable", /* 0x16 */
259 "loopback.entry", /* 0x17 */
260 "loopback.active", /* 0x18 */
261 "loopback.exit", /* 0x19 */
262 "hotreset", /* 0x1A */
263 };
264
265 /**
266 * mtk_pcie_config_tlp_header() - Configure a configuration TLP header
267 * @bus: PCI bus to query
268 * @devfn: device/function number
269 * @where: offset in config space
270 * @size: data size in TLP header
271 *
272 * Set byte enable field and device information in configuration TLP header.
273 */
mtk_pcie_config_tlp_header(struct pci_bus * bus,unsigned int devfn,int where,int size)274 static void mtk_pcie_config_tlp_header(struct pci_bus *bus, unsigned int devfn,
275 int where, int size)
276 {
277 struct mtk_gen3_pcie *pcie = bus->sysdata;
278 int bytes;
279 u32 val;
280
281 bytes = (GENMASK(size - 1, 0) & 0xf) << (where & 0x3);
282
283 val = PCIE_CFG_FORCE_BYTE_EN | PCIE_CFG_BYTE_EN(bytes) |
284 PCIE_CFG_HEADER(bus->number, devfn);
285
286 writel_relaxed(val, pcie->base + PCIE_CFGNUM_REG);
287 }
288
mtk_pcie_map_bus(struct pci_bus * bus,unsigned int devfn,int where)289 static void __iomem *mtk_pcie_map_bus(struct pci_bus *bus, unsigned int devfn,
290 int where)
291 {
292 struct mtk_gen3_pcie *pcie = bus->sysdata;
293
294 return pcie->base + PCIE_CFG_OFFSET_ADDR + where;
295 }
296
mtk_pcie_config_read(struct pci_bus * bus,unsigned int devfn,int where,int size,u32 * val)297 static int mtk_pcie_config_read(struct pci_bus *bus, unsigned int devfn,
298 int where, int size, u32 *val)
299 {
300 mtk_pcie_config_tlp_header(bus, devfn, where, size);
301
302 return pci_generic_config_read32(bus, devfn, where, size, val);
303 }
304
mtk_pcie_config_write(struct pci_bus * bus,unsigned int devfn,int where,int size,u32 val)305 static int mtk_pcie_config_write(struct pci_bus *bus, unsigned int devfn,
306 int where, int size, u32 val)
307 {
308 mtk_pcie_config_tlp_header(bus, devfn, where, size);
309
310 if (size <= 2)
311 val <<= (where & 0x3) * 8;
312
313 return pci_generic_config_write32(bus, devfn, where, 4, val);
314 }
315
316 static struct pci_ops mtk_pcie_ops = {
317 .map_bus = mtk_pcie_map_bus,
318 .read = mtk_pcie_config_read,
319 .write = mtk_pcie_config_write,
320 };
321
mtk_pcie_set_trans_table(struct mtk_gen3_pcie * pcie,resource_size_t cpu_addr,resource_size_t pci_addr,resource_size_t size,unsigned long type,int * num)322 static int mtk_pcie_set_trans_table(struct mtk_gen3_pcie *pcie,
323 resource_size_t cpu_addr,
324 resource_size_t pci_addr,
325 resource_size_t size,
326 unsigned long type, int *num)
327 {
328 resource_size_t remaining = size;
329 resource_size_t table_size;
330 resource_size_t addr_align;
331 const char *range_type;
332 void __iomem *table;
333 u32 val;
334
335 while (remaining && (*num < PCIE_MAX_TRANS_TABLES)) {
336 /* Table size needs to be a power of 2 */
337 table_size = BIT(fls(remaining) - 1);
338
339 if (cpu_addr > 0) {
340 addr_align = BIT(ffs(cpu_addr) - 1);
341 table_size = min(table_size, addr_align);
342 }
343
344 /* Minimum size of translate table is 4KiB */
345 if (table_size < 0x1000) {
346 dev_err(pcie->dev, "illegal table size %#llx\n",
347 (unsigned long long)table_size);
348 return -EINVAL;
349 }
350
351 table = pcie->base + PCIE_TRANS_TABLE_BASE_REG + *num * PCIE_ATR_TLB_SET_OFFSET;
352 writel_relaxed(lower_32_bits(cpu_addr) | PCIE_ATR_SIZE(fls(table_size) - 1), table);
353 writel_relaxed(upper_32_bits(cpu_addr), table + PCIE_ATR_SRC_ADDR_MSB_OFFSET);
354 writel_relaxed(lower_32_bits(pci_addr), table + PCIE_ATR_TRSL_ADDR_LSB_OFFSET);
355 writel_relaxed(upper_32_bits(pci_addr), table + PCIE_ATR_TRSL_ADDR_MSB_OFFSET);
356
357 if (type == IORESOURCE_IO) {
358 val = PCIE_ATR_TYPE_IO | PCIE_ATR_TLP_TYPE_IO;
359 range_type = "IO";
360 } else {
361 val = PCIE_ATR_TYPE_MEM | PCIE_ATR_TLP_TYPE_MEM;
362 range_type = "MEM";
363 }
364
365 writel_relaxed(val, table + PCIE_ATR_TRSL_PARAM_OFFSET);
366
367 dev_dbg(pcie->dev, "set %s trans window[%d]: cpu_addr = %#llx, pci_addr = %#llx, size = %#llx\n",
368 range_type, *num, (unsigned long long)cpu_addr,
369 (unsigned long long)pci_addr,
370 (unsigned long long)table_size);
371
372 cpu_addr += table_size;
373 pci_addr += table_size;
374 remaining -= table_size;
375 (*num)++;
376 }
377
378 if (remaining)
379 dev_warn(pcie->dev, "not enough translate table for addr: %#llx, limited to [%d]\n",
380 (unsigned long long)cpu_addr, PCIE_MAX_TRANS_TABLES);
381
382 return 0;
383 }
384
mtk_pcie_enable_msi(struct mtk_gen3_pcie * pcie)385 static void mtk_pcie_enable_msi(struct mtk_gen3_pcie *pcie)
386 {
387 int i;
388 u32 val;
389
390 for (i = 0; i < PCIE_MSI_SET_NUM; i++) {
391 struct mtk_msi_set *msi_set = &pcie->msi_sets[i];
392
393 msi_set->base = pcie->base + PCIE_MSI_SET_BASE_REG +
394 i * PCIE_MSI_SET_OFFSET;
395 msi_set->msg_addr = pcie->reg_base + PCIE_MSI_SET_BASE_REG +
396 i * PCIE_MSI_SET_OFFSET;
397
398 /* Configure the MSI capture address */
399 writel_relaxed(lower_32_bits(msi_set->msg_addr), msi_set->base);
400 writel_relaxed(upper_32_bits(msi_set->msg_addr),
401 pcie->base + PCIE_MSI_SET_ADDR_HI_BASE +
402 i * PCIE_MSI_SET_ADDR_HI_OFFSET);
403 }
404
405 val = readl_relaxed(pcie->base + PCIE_MSI_SET_ENABLE_REG);
406 val |= PCIE_MSI_SET_ENABLE;
407 writel_relaxed(val, pcie->base + PCIE_MSI_SET_ENABLE_REG);
408
409 val = readl_relaxed(pcie->base + PCIE_INT_ENABLE_REG);
410 val |= PCIE_MSI_ENABLE;
411 writel_relaxed(val, pcie->base + PCIE_INT_ENABLE_REG);
412 }
413
mtk_pcie_devices_power_up(struct mtk_gen3_pcie * pcie)414 static int mtk_pcie_devices_power_up(struct mtk_gen3_pcie *pcie)
415 {
416 int err;
417 u32 val;
418
419 /*
420 * Airoha EN7581 has a hw bug asserting/releasing PCIE_PE_RSTB signal
421 * causing occasional PCIe link down. In order to overcome the issue,
422 * PCIE_RSTB signals are not asserted/released at this stage and the
423 * PCIe block is reset using en7523_reset_assert() and
424 * en7581_pci_enable().
425 */
426 if (!(pcie->soc->flags & SKIP_PCIE_RSTB)) {
427 /* Assert all reset signals */
428 val = readl_relaxed(pcie->base + PCIE_RST_CTRL_REG);
429 val |= PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB |
430 PCIE_PE_RSTB;
431 writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
432 }
433
434 err = pci_pwrctrl_power_on_devices(pcie->dev);
435 if (err) {
436 dev_err(pcie->dev, "Failed to power on devices: %pe\n", ERR_PTR(err));
437 return err;
438 }
439
440 /*
441 * Some of MediaTek's chips won't output REFCLK when PCIE_PHY_RSTB is
442 * asserted, we have to de-assert MAC & PHY & BRG reset signals first
443 * to allow the REFCLK to be stable. While PCIE_BRG_RSTB is asserted,
444 * there is a short period during which the PCIe internal register
445 * cannot be accessed, so we need to wait 10ms here.
446 */
447 msleep(PCIE_BRG_RST_RDY_MS);
448
449 if (!(pcie->soc->flags & SKIP_PCIE_RSTB)) {
450 /* De-assert MAC, PHY and BRG reset signals */
451 val &= ~(PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB);
452 writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
453 }
454
455 /*
456 * Described in PCIe CEM specification revision 6.0.
457 *
458 * The deassertion of PERST# should be delayed 100ms (TPVPERL)
459 * for the power and clock to become stable.
460 */
461 msleep(PCIE_T_PVPERL_MS);
462
463 if (!(pcie->soc->flags & SKIP_PCIE_RSTB)) {
464 /* De-assert PERST# signal */
465 val &= ~PCIE_PE_RSTB;
466 writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
467 }
468
469 return 0;
470 }
471
mtk_pcie_devices_power_down(struct mtk_gen3_pcie * pcie)472 static void mtk_pcie_devices_power_down(struct mtk_gen3_pcie *pcie)
473 {
474 u32 val;
475
476 if (!(pcie->soc->flags & SKIP_PCIE_RSTB)) {
477 /* Assert the PERST# pin */
478 val = readl_relaxed(pcie->base + PCIE_RST_CTRL_REG);
479 val |= PCIE_PE_RSTB;
480 writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
481 }
482
483 pci_pwrctrl_power_off_devices(pcie->dev);
484 }
485
mtk_pcie_startup_port(struct mtk_gen3_pcie * pcie)486 static int mtk_pcie_startup_port(struct mtk_gen3_pcie *pcie)
487 {
488 struct resource_entry *entry;
489 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
490 unsigned int table_index = 0;
491 int err;
492 u32 val;
493
494 /* Set as RC mode and set controller PCIe Gen speed restriction, if any */
495 val = readl_relaxed(pcie->base + PCIE_SETTING_REG);
496 val |= PCIE_RC_MODE;
497 if (pcie->max_link_speed) {
498 val &= ~PCIE_SETTING_GEN_SUPPORT;
499
500 /* Can enable link speed support only from Gen2 onwards */
501 if (pcie->max_link_speed >= 2)
502 val |= FIELD_PREP(PCIE_SETTING_GEN_SUPPORT,
503 GENMASK(pcie->max_link_speed - 2, 0));
504 }
505 if (pcie->num_lanes) {
506 val &= ~PCIE_SETTING_LINK_WIDTH;
507
508 /* Zero means one lane, each bit activates x2/x4/x8/x16 */
509 if (pcie->num_lanes > 1)
510 val |= FIELD_PREP(PCIE_SETTING_LINK_WIDTH,
511 GENMASK(fls(pcie->num_lanes >> 2), 0));
512 }
513 writel_relaxed(val, pcie->base + PCIE_SETTING_REG);
514
515 /* Set Link Control 2 (LNKCTL2) speed restriction, if any */
516 if (pcie->max_link_speed) {
517 val = readl_relaxed(pcie->base + PCIE_CONF_LINK2_CTL_STS);
518 FIELD_MODIFY(PCIE_CONF_LINK2_LCR2_LINK_SPEED, &val, pcie->max_link_speed);
519 writel_relaxed(val, pcie->base + PCIE_CONF_LINK2_CTL_STS);
520 }
521
522 /* If parameter is present, adjust SYS_CLK_RDY_TIME to avoid glitching */
523 if (pcie->soc->sys_clk_rdy_time_us) {
524 val = readl_relaxed(pcie->base + PCIE_RESOURCE_CTRL_REG);
525 FIELD_MODIFY(PCIE_RSRC_SYS_CLK_RDY_TIME_MASK, &val,
526 pcie->soc->sys_clk_rdy_time_us);
527 writel_relaxed(val, pcie->base + PCIE_RESOURCE_CTRL_REG);
528 }
529
530 /* Set class code */
531 val = readl_relaxed(pcie->base + PCIE_PCI_IDS_1);
532 val &= ~GENMASK(31, 8);
533 val |= PCI_CLASS(PCI_CLASS_BRIDGE_PCI_NORMAL);
534 writel_relaxed(val, pcie->base + PCIE_PCI_IDS_1);
535
536 /* Mask all INTx interrupts */
537 val = readl_relaxed(pcie->base + PCIE_INT_ENABLE_REG);
538 val &= ~PCIE_INTX_ENABLE;
539 writel_relaxed(val, pcie->base + PCIE_INT_ENABLE_REG);
540
541 /* Disable DVFSRC voltage request */
542 val = readl_relaxed(pcie->base + PCIE_MISC_CTRL_REG);
543 val |= PCIE_DISABLE_DVFSRC_VLT_REQ;
544 writel_relaxed(val, pcie->base + PCIE_MISC_CTRL_REG);
545
546 mtk_pcie_enable_msi(pcie);
547
548 /* Set PCIe translation windows */
549 resource_list_for_each_entry(entry, &host->windows) {
550 struct resource *res = entry->res;
551 unsigned long type = resource_type(res);
552 resource_size_t cpu_addr;
553 resource_size_t pci_addr;
554 resource_size_t size;
555
556 if (type == IORESOURCE_IO)
557 cpu_addr = pci_pio_to_address(res->start);
558 else if (type == IORESOURCE_MEM)
559 cpu_addr = res->start;
560 else
561 continue;
562
563 pci_addr = res->start - entry->offset;
564 size = resource_size(res);
565 err = mtk_pcie_set_trans_table(pcie, cpu_addr, pci_addr, size,
566 type, &table_index);
567 if (err)
568 return err;
569 }
570
571 err = mtk_pcie_devices_power_up(pcie);
572 if (err)
573 return err;
574
575 /* Check if the link is up or not */
576 err = readl_poll_timeout(pcie->base + PCIE_LINK_STATUS_REG, val,
577 !!(val & PCIE_PORT_LINKUP), 20,
578 PCI_PM_D3COLD_WAIT * USEC_PER_MSEC);
579 if (err) {
580 const char *ltssm_state;
581 int ltssm_index;
582
583 val = readl_relaxed(pcie->base + PCIE_LTSSM_STATUS_REG);
584 ltssm_index = PCIE_LTSSM_STATE(val);
585 ltssm_state = ltssm_index >= ARRAY_SIZE(ltssm_str) ?
586 "Unknown state" : ltssm_str[ltssm_index];
587 dev_err(pcie->dev,
588 "PCIe link down, current LTSSM state: %s (%#x)\n",
589 ltssm_state, val);
590 goto err_power_down_device;
591 }
592
593 pci_host_common_link_train_delay(pcie->max_link_speed);
594
595 return 0;
596
597 err_power_down_device:
598 mtk_pcie_devices_power_down(pcie);
599 return err;
600 }
601
602 #define MTK_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \
603 MSI_FLAG_USE_DEF_CHIP_OPS | \
604 MSI_FLAG_NO_AFFINITY | \
605 MSI_FLAG_PCI_MSI_MASK_PARENT)
606
607 #define MTK_MSI_FLAGS_SUPPORTED (MSI_GENERIC_FLAGS_MASK | \
608 MSI_FLAG_PCI_MSIX | \
609 MSI_FLAG_MULTI_PCI_MSI)
610
611 static const struct msi_parent_ops mtk_msi_parent_ops = {
612 .required_flags = MTK_MSI_FLAGS_REQUIRED,
613 .supported_flags = MTK_MSI_FLAGS_SUPPORTED,
614 .bus_select_token = DOMAIN_BUS_PCI_MSI,
615 .chip_flags = MSI_CHIP_FLAG_SET_ACK,
616 .prefix = "MTK3-",
617 .init_dev_msi_info = msi_lib_init_dev_msi_info,
618 };
619
mtk_compose_msi_msg(struct irq_data * data,struct msi_msg * msg)620 static void mtk_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
621 {
622 struct mtk_msi_set *msi_set = irq_data_get_irq_chip_data(data);
623 struct mtk_gen3_pcie *pcie = data->domain->host_data;
624 unsigned long hwirq;
625
626 hwirq = data->hwirq % PCIE_MSI_IRQS_PER_SET;
627
628 msg->address_hi = upper_32_bits(msi_set->msg_addr);
629 msg->address_lo = lower_32_bits(msi_set->msg_addr);
630 msg->data = hwirq;
631 dev_dbg(pcie->dev, "msi#%#lx address_hi %#x address_lo %#x data %d\n",
632 hwirq, msg->address_hi, msg->address_lo, msg->data);
633 }
634
mtk_msi_bottom_irq_ack(struct irq_data * data)635 static void mtk_msi_bottom_irq_ack(struct irq_data *data)
636 {
637 struct mtk_msi_set *msi_set = irq_data_get_irq_chip_data(data);
638 unsigned long hwirq;
639
640 hwirq = data->hwirq % PCIE_MSI_IRQS_PER_SET;
641
642 writel_relaxed(BIT(hwirq), msi_set->base + PCIE_MSI_SET_STATUS_OFFSET);
643 }
644
mtk_msi_bottom_irq_mask(struct irq_data * data)645 static void mtk_msi_bottom_irq_mask(struct irq_data *data)
646 {
647 struct mtk_msi_set *msi_set = irq_data_get_irq_chip_data(data);
648 struct mtk_gen3_pcie *pcie = data->domain->host_data;
649 unsigned long hwirq, flags;
650 u32 val;
651
652 hwirq = data->hwirq % PCIE_MSI_IRQS_PER_SET;
653
654 raw_spin_lock_irqsave(&pcie->irq_lock, flags);
655 val = readl_relaxed(msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET);
656 val &= ~BIT(hwirq);
657 writel_relaxed(val, msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET);
658 raw_spin_unlock_irqrestore(&pcie->irq_lock, flags);
659 }
660
mtk_msi_bottom_irq_unmask(struct irq_data * data)661 static void mtk_msi_bottom_irq_unmask(struct irq_data *data)
662 {
663 struct mtk_msi_set *msi_set = irq_data_get_irq_chip_data(data);
664 struct mtk_gen3_pcie *pcie = data->domain->host_data;
665 unsigned long hwirq, flags;
666 u32 val;
667
668 hwirq = data->hwirq % PCIE_MSI_IRQS_PER_SET;
669
670 raw_spin_lock_irqsave(&pcie->irq_lock, flags);
671 val = readl_relaxed(msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET);
672 val |= BIT(hwirq);
673 writel_relaxed(val, msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET);
674 raw_spin_unlock_irqrestore(&pcie->irq_lock, flags);
675 }
676
677 static struct irq_chip mtk_msi_bottom_irq_chip = {
678 .irq_ack = mtk_msi_bottom_irq_ack,
679 .irq_mask = mtk_msi_bottom_irq_mask,
680 .irq_unmask = mtk_msi_bottom_irq_unmask,
681 .irq_compose_msi_msg = mtk_compose_msi_msg,
682 .name = "MSI",
683 };
684
mtk_msi_bottom_domain_alloc(struct irq_domain * domain,unsigned int virq,unsigned int nr_irqs,void * arg)685 static int mtk_msi_bottom_domain_alloc(struct irq_domain *domain,
686 unsigned int virq, unsigned int nr_irqs,
687 void *arg)
688 {
689 struct mtk_gen3_pcie *pcie = domain->host_data;
690 struct mtk_msi_set *msi_set;
691 int i, hwirq, set_idx;
692
693 mutex_lock(&pcie->lock);
694
695 hwirq = bitmap_find_free_region(pcie->msi_irq_in_use, PCIE_MSI_IRQS_NUM,
696 order_base_2(nr_irqs));
697
698 mutex_unlock(&pcie->lock);
699
700 if (hwirq < 0)
701 return -ENOSPC;
702
703 set_idx = hwirq / PCIE_MSI_IRQS_PER_SET;
704 msi_set = &pcie->msi_sets[set_idx];
705
706 for (i = 0; i < nr_irqs; i++)
707 irq_domain_set_info(domain, virq + i, hwirq + i,
708 &mtk_msi_bottom_irq_chip, msi_set,
709 handle_edge_irq, NULL, NULL);
710
711 return 0;
712 }
713
mtk_msi_bottom_domain_free(struct irq_domain * domain,unsigned int virq,unsigned int nr_irqs)714 static void mtk_msi_bottom_domain_free(struct irq_domain *domain,
715 unsigned int virq, unsigned int nr_irqs)
716 {
717 struct mtk_gen3_pcie *pcie = domain->host_data;
718 struct irq_data *data = irq_domain_get_irq_data(domain, virq);
719
720 mutex_lock(&pcie->lock);
721
722 bitmap_release_region(pcie->msi_irq_in_use, data->hwirq,
723 order_base_2(nr_irqs));
724
725 mutex_unlock(&pcie->lock);
726
727 irq_domain_free_irqs_common(domain, virq, nr_irqs);
728 }
729
730 static const struct irq_domain_ops mtk_msi_bottom_domain_ops = {
731 .alloc = mtk_msi_bottom_domain_alloc,
732 .free = mtk_msi_bottom_domain_free,
733 };
734
mtk_intx_mask(struct irq_data * data)735 static void mtk_intx_mask(struct irq_data *data)
736 {
737 struct mtk_gen3_pcie *pcie = irq_data_get_irq_chip_data(data);
738 unsigned long flags;
739 u32 val;
740
741 raw_spin_lock_irqsave(&pcie->irq_lock, flags);
742 val = readl_relaxed(pcie->base + PCIE_INT_ENABLE_REG);
743 val &= ~BIT(data->hwirq + PCIE_INTX_SHIFT);
744 writel_relaxed(val, pcie->base + PCIE_INT_ENABLE_REG);
745 raw_spin_unlock_irqrestore(&pcie->irq_lock, flags);
746 }
747
mtk_intx_unmask(struct irq_data * data)748 static void mtk_intx_unmask(struct irq_data *data)
749 {
750 struct mtk_gen3_pcie *pcie = irq_data_get_irq_chip_data(data);
751 unsigned long flags;
752 u32 val;
753
754 raw_spin_lock_irqsave(&pcie->irq_lock, flags);
755 val = readl_relaxed(pcie->base + PCIE_INT_ENABLE_REG);
756 val |= BIT(data->hwirq + PCIE_INTX_SHIFT);
757 writel_relaxed(val, pcie->base + PCIE_INT_ENABLE_REG);
758 raw_spin_unlock_irqrestore(&pcie->irq_lock, flags);
759 }
760
761 /**
762 * mtk_intx_eoi() - Clear INTx IRQ status at the end of interrupt
763 * @data: pointer to chip specific data
764 *
765 * As an emulated level IRQ, its interrupt status will remain
766 * until the corresponding de-assert message is received; hence that
767 * the status can only be cleared when the interrupt has been serviced.
768 */
mtk_intx_eoi(struct irq_data * data)769 static void mtk_intx_eoi(struct irq_data *data)
770 {
771 struct mtk_gen3_pcie *pcie = irq_data_get_irq_chip_data(data);
772 unsigned long hwirq;
773
774 hwirq = data->hwirq + PCIE_INTX_SHIFT;
775 writel_relaxed(BIT(hwirq), pcie->base + PCIE_INT_STATUS_REG);
776 }
777
778 static struct irq_chip mtk_intx_irq_chip = {
779 .irq_mask = mtk_intx_mask,
780 .irq_unmask = mtk_intx_unmask,
781 .irq_eoi = mtk_intx_eoi,
782 .name = "INTx",
783 };
784
mtk_pcie_intx_map(struct irq_domain * domain,unsigned int irq,irq_hw_number_t hwirq)785 static int mtk_pcie_intx_map(struct irq_domain *domain, unsigned int irq,
786 irq_hw_number_t hwirq)
787 {
788 irq_set_chip_data(irq, domain->host_data);
789 irq_set_chip_and_handler_name(irq, &mtk_intx_irq_chip,
790 handle_fasteoi_irq, "INTx");
791 return 0;
792 }
793
794 static const struct irq_domain_ops intx_domain_ops = {
795 .map = mtk_pcie_intx_map,
796 };
797
mtk_pcie_init_irq_domains(struct mtk_gen3_pcie * pcie)798 static int mtk_pcie_init_irq_domains(struct mtk_gen3_pcie *pcie)
799 {
800 struct device *dev = pcie->dev;
801 struct device_node *intc_node, *node = dev->of_node;
802 int ret;
803
804 raw_spin_lock_init(&pcie->irq_lock);
805
806 /* Setup INTx */
807 intc_node = of_get_child_by_name(node, "interrupt-controller");
808 if (!intc_node) {
809 dev_err(dev, "missing interrupt-controller node\n");
810 return -ENODEV;
811 }
812
813 pcie->intx_domain = irq_domain_create_linear(of_fwnode_handle(intc_node), PCI_NUM_INTX,
814 &intx_domain_ops, pcie);
815 if (!pcie->intx_domain) {
816 dev_err(dev, "failed to create INTx IRQ domain\n");
817 ret = -ENODEV;
818 goto out_put_node;
819 }
820
821 /* Setup MSI */
822 mutex_init(&pcie->lock);
823
824 struct irq_domain_info info = {
825 .fwnode = dev_fwnode(dev),
826 .ops = &mtk_msi_bottom_domain_ops,
827 .host_data = pcie,
828 .size = PCIE_MSI_IRQS_NUM,
829 };
830
831 pcie->msi_bottom_domain = msi_create_parent_irq_domain(&info, &mtk_msi_parent_ops);
832 if (!pcie->msi_bottom_domain) {
833 dev_err(dev, "failed to create MSI bottom domain\n");
834 ret = -ENODEV;
835 goto err_msi_bottom_domain;
836 }
837
838 of_node_put(intc_node);
839 return 0;
840
841 err_msi_bottom_domain:
842 irq_domain_remove(pcie->intx_domain);
843 out_put_node:
844 of_node_put(intc_node);
845 return ret;
846 }
847
mtk_pcie_irq_teardown(struct mtk_gen3_pcie * pcie)848 static void mtk_pcie_irq_teardown(struct mtk_gen3_pcie *pcie)
849 {
850 irq_set_chained_handler_and_data(pcie->irq, NULL, NULL);
851
852 if (pcie->intx_domain)
853 irq_domain_remove(pcie->intx_domain);
854
855 if (pcie->msi_bottom_domain)
856 irq_domain_remove(pcie->msi_bottom_domain);
857
858 irq_dispose_mapping(pcie->irq);
859 }
860
mtk_pcie_msi_handler(struct mtk_gen3_pcie * pcie,int set_idx)861 static void mtk_pcie_msi_handler(struct mtk_gen3_pcie *pcie, int set_idx)
862 {
863 struct mtk_msi_set *msi_set = &pcie->msi_sets[set_idx];
864 unsigned long msi_enable, msi_status;
865 irq_hw_number_t bit, hwirq;
866
867 msi_enable = readl_relaxed(msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET);
868
869 do {
870 msi_status = readl_relaxed(msi_set->base +
871 PCIE_MSI_SET_STATUS_OFFSET);
872 msi_status &= msi_enable;
873 if (!msi_status)
874 break;
875
876 for_each_set_bit(bit, &msi_status, PCIE_MSI_IRQS_PER_SET) {
877 hwirq = bit + set_idx * PCIE_MSI_IRQS_PER_SET;
878 generic_handle_domain_irq(pcie->msi_bottom_domain, hwirq);
879 }
880 } while (true);
881 }
882
mtk_pcie_irq_handler(struct irq_desc * desc)883 static void mtk_pcie_irq_handler(struct irq_desc *desc)
884 {
885 struct mtk_gen3_pcie *pcie = irq_desc_get_handler_data(desc);
886 struct irq_chip *irqchip = irq_desc_get_chip(desc);
887 unsigned long status;
888 irq_hw_number_t irq_bit = PCIE_INTX_SHIFT;
889
890 chained_irq_enter(irqchip, desc);
891
892 status = readl_relaxed(pcie->base + PCIE_INT_STATUS_REG);
893 for_each_set_bit_from(irq_bit, &status, PCI_NUM_INTX +
894 PCIE_INTX_SHIFT)
895 generic_handle_domain_irq(pcie->intx_domain,
896 irq_bit - PCIE_INTX_SHIFT);
897
898 irq_bit = PCIE_MSI_SHIFT;
899 for_each_set_bit_from(irq_bit, &status, PCIE_MSI_SET_NUM +
900 PCIE_MSI_SHIFT) {
901 mtk_pcie_msi_handler(pcie, irq_bit - PCIE_MSI_SHIFT);
902
903 writel_relaxed(BIT(irq_bit), pcie->base + PCIE_INT_STATUS_REG);
904 }
905
906 chained_irq_exit(irqchip, desc);
907 }
908
mtk_pcie_setup_irq(struct mtk_gen3_pcie * pcie)909 static int mtk_pcie_setup_irq(struct mtk_gen3_pcie *pcie)
910 {
911 struct device *dev = pcie->dev;
912 struct platform_device *pdev = to_platform_device(dev);
913 int err;
914
915 pcie->irq = platform_get_irq(pdev, 0);
916 if (pcie->irq < 0)
917 return pcie->irq;
918
919 err = mtk_pcie_init_irq_domains(pcie);
920 if (err)
921 return err;
922
923 irq_set_chained_handler_and_data(pcie->irq, mtk_pcie_irq_handler, pcie);
924
925 return 0;
926 }
927
mtk_pcie_parse_port(struct mtk_gen3_pcie * pcie)928 static int mtk_pcie_parse_port(struct mtk_gen3_pcie *pcie)
929 {
930 int i, ret, num_resets = pcie->soc->phy_resets.num_resets;
931 struct device *dev = pcie->dev;
932 struct platform_device *pdev = to_platform_device(dev);
933 struct resource *regs;
934 u32 num_lanes;
935
936 regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcie-mac");
937 if (!regs)
938 return -EINVAL;
939 pcie->base = devm_ioremap_resource(dev, regs);
940 if (IS_ERR(pcie->base))
941 return dev_err_probe(dev, PTR_ERR(pcie->base), "failed to map register base\n");
942
943 pcie->reg_base = regs->start;
944
945 for (i = 0; i < num_resets; i++)
946 pcie->phy_resets[i].id = pcie->soc->phy_resets.id[i];
947
948 ret = devm_reset_control_bulk_get_optional_shared(dev, num_resets,
949 pcie->phy_resets);
950 if (ret)
951 return dev_err_probe(dev, ret, "failed to get PHY bulk reset\n");
952
953 pcie->mac_reset = devm_reset_control_get_optional_exclusive(dev, "mac");
954 if (IS_ERR(pcie->mac_reset))
955 return dev_err_probe(dev, PTR_ERR(pcie->mac_reset), "failed to get MAC reset\n");
956
957 pcie->phy = devm_phy_optional_get(dev, "pcie-phy");
958 if (IS_ERR(pcie->phy))
959 return dev_err_probe(dev, PTR_ERR(pcie->phy), "failed to get PHY\n");
960
961 pcie->num_clks = devm_clk_bulk_get_all(dev, &pcie->clks);
962 if (pcie->num_clks < 0)
963 return dev_err_probe(dev, pcie->num_clks, "failed to get clocks\n");
964
965 ret = of_property_read_u32(dev->of_node, "num-lanes", &num_lanes);
966 if (ret == 0) {
967 if (num_lanes == 0 || num_lanes > 16 ||
968 (num_lanes != 1 && num_lanes % 2))
969 dev_warn(dev, "invalid num-lanes, using controller defaults\n");
970 else
971 pcie->num_lanes = num_lanes;
972 }
973
974 return 0;
975 }
976
mtk_pcie_en7581_power_up(struct mtk_gen3_pcie * pcie)977 static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
978 {
979 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
980 struct device *dev = pcie->dev;
981 struct resource_entry *entry;
982 struct regmap *pbus_regmap;
983 u32 val, args[2], size;
984 resource_size_t addr;
985 int err;
986
987 /*
988 * The controller may have been left out of reset by the bootloader
989 * so make sure that we get a clean start by asserting resets here.
990 */
991 reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
992 pcie->phy_resets);
993
994 /* Wait for the time needed to complete the reset lines assert. */
995 msleep(PCIE_EN7581_RESET_TIME_MS);
996
997 /*
998 * Configure PBus base address and base address mask to allow the
999 * hw to detect if a given address is accessible on PCIe controller.
1000 */
1001 pbus_regmap = syscon_regmap_lookup_by_phandle_args(dev->of_node,
1002 "mediatek,pbus-csr",
1003 ARRAY_SIZE(args),
1004 args);
1005 if (IS_ERR(pbus_regmap))
1006 return PTR_ERR(pbus_regmap);
1007
1008 entry = resource_list_first_type(&host->windows, IORESOURCE_MEM);
1009 if (!entry)
1010 return -ENODEV;
1011
1012 addr = entry->res->start - entry->offset;
1013 regmap_write(pbus_regmap, args[0], lower_32_bits(addr));
1014 size = lower_32_bits(resource_size(entry->res));
1015 regmap_write(pbus_regmap, args[1], GENMASK(31, __fls(size)));
1016
1017 /*
1018 * Unlike the other MediaTek Gen3 controllers, the Airoha EN7581
1019 * requires PHY initialization and power-on before PHY reset deassert.
1020 */
1021 err = phy_init(pcie->phy);
1022 if (err) {
1023 dev_err(dev, "failed to initialize PHY\n");
1024 return err;
1025 }
1026
1027 err = phy_power_on(pcie->phy);
1028 if (err) {
1029 dev_err(dev, "failed to power on PHY\n");
1030 goto err_phy_on;
1031 }
1032
1033 err = reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets,
1034 pcie->phy_resets);
1035 if (err) {
1036 dev_err(dev, "failed to deassert PHYs\n");
1037 goto err_phy_deassert;
1038 }
1039
1040 /*
1041 * Wait for the time needed to complete the bulk de-assert above.
1042 * This time is specific for EN7581 SoC.
1043 */
1044 msleep(PCIE_EN7581_RESET_TIME_MS);
1045
1046 pm_runtime_enable(dev);
1047 pm_runtime_get_sync(dev);
1048
1049 val = FIELD_PREP(PCIE_VAL_LN0_DOWNSTREAM, 0x47) |
1050 FIELD_PREP(PCIE_VAL_LN1_DOWNSTREAM, 0x47) |
1051 FIELD_PREP(PCIE_VAL_LN0_UPSTREAM, 0x41) |
1052 FIELD_PREP(PCIE_VAL_LN1_UPSTREAM, 0x41);
1053 writel_relaxed(val, pcie->base + PCIE_EQ_PRESET_01_REG);
1054
1055 val = PCIE_K_PHYPARAM_QUERY | PCIE_K_QUERY_TIMEOUT |
1056 FIELD_PREP(PCIE_K_PRESET_TO_USE_16G, 0x80) |
1057 FIELD_PREP(PCIE_K_PRESET_TO_USE, 0x2) |
1058 FIELD_PREP(PCIE_K_FINETUNE_MAX, 0xf);
1059 writel_relaxed(val, pcie->base + PCIE_PIPE4_PIE8_REG);
1060
1061 err = clk_bulk_prepare_enable(pcie->num_clks, pcie->clks);
1062 if (err) {
1063 dev_err(dev, "failed to prepare clock\n");
1064 goto err_clk_prepare_enable;
1065 }
1066
1067 /*
1068 * Airoha EN7581 performs PCIe reset via clk callbacks since it has a
1069 * hw issue with PCIE_PE_RSTB signal. Add wait for the time needed to
1070 * complete the PCIe reset.
1071 */
1072 msleep(PCIE_T_PVPERL_MS);
1073
1074 return 0;
1075
1076 err_clk_prepare_enable:
1077 pm_runtime_put_sync(dev);
1078 pm_runtime_disable(dev);
1079 reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
1080 pcie->phy_resets);
1081 err_phy_deassert:
1082 phy_power_off(pcie->phy);
1083 err_phy_on:
1084 phy_exit(pcie->phy);
1085
1086 return err;
1087 }
1088
mtk_pcie_power_up(struct mtk_gen3_pcie * pcie)1089 static int mtk_pcie_power_up(struct mtk_gen3_pcie *pcie)
1090 {
1091 struct device *dev = pcie->dev;
1092 int err;
1093
1094 /*
1095 * The controller may have been left out of reset by the bootloader
1096 * so make sure that we get a clean start by asserting resets here.
1097 */
1098 reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
1099 pcie->phy_resets);
1100 reset_control_assert(pcie->mac_reset);
1101 usleep_range(PCIE_MTK_RESET_TIME_US, 2 * PCIE_MTK_RESET_TIME_US);
1102
1103 /* PHY power on and enable pipe clock */
1104 err = reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets,
1105 pcie->phy_resets);
1106 if (err) {
1107 dev_err(dev, "failed to deassert PHYs\n");
1108 return err;
1109 }
1110
1111 err = phy_init(pcie->phy);
1112 if (err) {
1113 dev_err(dev, "failed to initialize PHY\n");
1114 goto err_phy_init;
1115 }
1116
1117 err = phy_power_on(pcie->phy);
1118 if (err) {
1119 dev_err(dev, "failed to power on PHY\n");
1120 goto err_phy_on;
1121 }
1122
1123 /* MAC power on and enable transaction layer clocks */
1124 reset_control_deassert(pcie->mac_reset);
1125
1126 pm_runtime_enable(dev);
1127 pm_runtime_get_sync(dev);
1128
1129 err = clk_bulk_prepare_enable(pcie->num_clks, pcie->clks);
1130 if (err) {
1131 dev_err(dev, "failed to enable clocks\n");
1132 goto err_clk_init;
1133 }
1134
1135 return 0;
1136
1137 err_clk_init:
1138 pm_runtime_put_sync(dev);
1139 pm_runtime_disable(dev);
1140 reset_control_assert(pcie->mac_reset);
1141 phy_power_off(pcie->phy);
1142 err_phy_on:
1143 phy_exit(pcie->phy);
1144 err_phy_init:
1145 reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
1146 pcie->phy_resets);
1147
1148 return err;
1149 }
1150
mtk_pcie_power_down(struct mtk_gen3_pcie * pcie)1151 static void mtk_pcie_power_down(struct mtk_gen3_pcie *pcie)
1152 {
1153 clk_bulk_disable_unprepare(pcie->num_clks, pcie->clks);
1154
1155 pm_runtime_put_sync(pcie->dev);
1156 pm_runtime_disable(pcie->dev);
1157 reset_control_assert(pcie->mac_reset);
1158
1159 phy_power_off(pcie->phy);
1160 phy_exit(pcie->phy);
1161 reset_control_bulk_assert(pcie->soc->phy_resets.num_resets,
1162 pcie->phy_resets);
1163 }
1164
mtk_pcie_get_controller_max_link_speed(struct mtk_gen3_pcie * pcie)1165 static int mtk_pcie_get_controller_max_link_speed(struct mtk_gen3_pcie *pcie)
1166 {
1167 u32 val;
1168 int ret;
1169
1170 val = readl_relaxed(pcie->base + PCIE_BASE_CFG_REG);
1171 val = FIELD_GET(PCIE_BASE_CFG_SPEED, val);
1172 ret = fls(val);
1173
1174 return ret > 0 ? ret : -EINVAL;
1175 }
1176
mtk_pcie_setup(struct mtk_gen3_pcie * pcie)1177 static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie)
1178 {
1179 int err, max_speed;
1180
1181 err = mtk_pcie_parse_port(pcie);
1182 if (err)
1183 return err;
1184
1185 /*
1186 * Deassert the line in order to avoid unbalance in deassert_count
1187 * counter since the bulk is shared.
1188 */
1189 reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets,
1190 pcie->phy_resets);
1191
1192 /* Don't touch the hardware registers before power up */
1193 err = pcie->soc->power_up(pcie);
1194 if (err)
1195 return err;
1196
1197 err = of_pci_get_max_link_speed(pcie->dev->of_node);
1198 if (pcie_get_link_speed(err) != PCI_SPEED_UNKNOWN) {
1199 /* Get the maximum speed supported by the controller */
1200 max_speed = mtk_pcie_get_controller_max_link_speed(pcie);
1201
1202 /* Set max_link_speed only if the controller supports it */
1203 if (max_speed >= 0 && max_speed <= err) {
1204 pcie->max_link_speed = err;
1205 dev_info(pcie->dev,
1206 "maximum controller link speed Gen%d, overriding to Gen%u",
1207 max_speed, pcie->max_link_speed);
1208 }
1209 }
1210
1211 /* Try link up */
1212 err = mtk_pcie_startup_port(pcie);
1213 if (err)
1214 goto err_setup;
1215
1216 return 0;
1217
1218 err_setup:
1219 mtk_pcie_power_down(pcie);
1220
1221 return err;
1222 }
1223
mtk_pcie_probe(struct platform_device * pdev)1224 static int mtk_pcie_probe(struct platform_device *pdev)
1225 {
1226 struct device *dev = &pdev->dev;
1227 struct mtk_gen3_pcie *pcie;
1228 struct pci_host_bridge *host;
1229 int err;
1230
1231 host = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
1232 if (!host)
1233 return -ENOMEM;
1234
1235 pcie = pci_host_bridge_priv(host);
1236
1237 pcie->dev = dev;
1238 pcie->soc = device_get_match_data(dev);
1239 platform_set_drvdata(pdev, pcie);
1240
1241 err = mtk_pcie_setup_irq(pcie);
1242 if (err)
1243 return dev_err_probe(dev, err, "Failed to setup IRQ domains\n");
1244
1245 err = pci_pwrctrl_create_devices(pcie->dev);
1246 if (err) {
1247 dev_err_probe(dev, err, "failed to create pwrctrl devices\n");
1248 goto err_tear_down_irq;
1249 }
1250
1251 err = mtk_pcie_setup(pcie);
1252 if (err)
1253 goto err_destroy_pwrctrl;
1254
1255 host->ops = &mtk_pcie_ops;
1256 host->sysdata = pcie;
1257
1258 err = pci_host_probe(host);
1259 if (err)
1260 goto err_power_down_pcie;
1261
1262 return 0;
1263
1264 err_power_down_pcie:
1265 mtk_pcie_devices_power_down(pcie);
1266 mtk_pcie_power_down(pcie);
1267 err_destroy_pwrctrl:
1268 if (err != -EPROBE_DEFER)
1269 pci_pwrctrl_destroy_devices(pcie->dev);
1270 err_tear_down_irq:
1271 mtk_pcie_irq_teardown(pcie);
1272 return err;
1273 }
1274
mtk_pcie_remove(struct platform_device * pdev)1275 static void mtk_pcie_remove(struct platform_device *pdev)
1276 {
1277 struct mtk_gen3_pcie *pcie = platform_get_drvdata(pdev);
1278 struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie);
1279
1280 pci_lock_rescan_remove();
1281 pci_stop_root_bus(host->bus);
1282 pci_remove_root_bus(host->bus);
1283 pci_unlock_rescan_remove();
1284
1285 mtk_pcie_devices_power_down(pcie);
1286 mtk_pcie_power_down(pcie);
1287 pci_pwrctrl_destroy_devices(pcie->dev);
1288 mtk_pcie_irq_teardown(pcie);
1289 }
1290
mtk_pcie_shutdown(struct platform_device * pdev)1291 static void mtk_pcie_shutdown(struct platform_device *pdev)
1292 {
1293 struct mtk_gen3_pcie *pcie = platform_get_drvdata(pdev);
1294
1295 mtk_pcie_devices_power_down(pcie);
1296 mtk_pcie_power_down(pcie);
1297 }
1298
mtk_pcie_irq_save(struct mtk_gen3_pcie * pcie)1299 static void mtk_pcie_irq_save(struct mtk_gen3_pcie *pcie)
1300 {
1301 int i;
1302
1303 raw_spin_lock(&pcie->irq_lock);
1304
1305 pcie->saved_irq_state = readl_relaxed(pcie->base + PCIE_INT_ENABLE_REG);
1306
1307 for (i = 0; i < PCIE_MSI_SET_NUM; i++) {
1308 struct mtk_msi_set *msi_set = &pcie->msi_sets[i];
1309
1310 msi_set->saved_irq_state = readl_relaxed(msi_set->base +
1311 PCIE_MSI_SET_ENABLE_OFFSET);
1312 }
1313
1314 raw_spin_unlock(&pcie->irq_lock);
1315 }
1316
mtk_pcie_irq_restore(struct mtk_gen3_pcie * pcie)1317 static void mtk_pcie_irq_restore(struct mtk_gen3_pcie *pcie)
1318 {
1319 int i;
1320
1321 raw_spin_lock(&pcie->irq_lock);
1322
1323 writel_relaxed(pcie->saved_irq_state, pcie->base + PCIE_INT_ENABLE_REG);
1324
1325 for (i = 0; i < PCIE_MSI_SET_NUM; i++) {
1326 struct mtk_msi_set *msi_set = &pcie->msi_sets[i];
1327
1328 writel_relaxed(msi_set->saved_irq_state,
1329 msi_set->base + PCIE_MSI_SET_ENABLE_OFFSET);
1330 }
1331
1332 raw_spin_unlock(&pcie->irq_lock);
1333 }
1334
mtk_pcie_turn_off_link(struct mtk_gen3_pcie * pcie)1335 static int mtk_pcie_turn_off_link(struct mtk_gen3_pcie *pcie)
1336 {
1337 u32 val;
1338
1339 val = readl_relaxed(pcie->base + PCIE_ICMD_PM_REG);
1340 val |= PCIE_TURN_OFF_LINK;
1341 writel_relaxed(val, pcie->base + PCIE_ICMD_PM_REG);
1342
1343 /* Check the link is L2 */
1344 return readl_poll_timeout(pcie->base + PCIE_LTSSM_STATUS_REG, val,
1345 (PCIE_LTSSM_STATE(val) ==
1346 PCIE_LTSSM_STATE_L2_IDLE), 20,
1347 50 * USEC_PER_MSEC);
1348 }
1349
mtk_pcie_suspend_noirq(struct device * dev)1350 static int mtk_pcie_suspend_noirq(struct device *dev)
1351 {
1352 struct mtk_gen3_pcie *pcie = dev_get_drvdata(dev);
1353 int err;
1354
1355 /* Trigger link to L2 state */
1356 err = mtk_pcie_turn_off_link(pcie);
1357 if (err) {
1358 dev_err(pcie->dev, "cannot enter L2 state\n");
1359 return err;
1360 }
1361
1362 mtk_pcie_devices_power_down(pcie);
1363 dev_dbg(pcie->dev, "entered L2 states successfully");
1364
1365 mtk_pcie_irq_save(pcie);
1366 mtk_pcie_power_down(pcie);
1367
1368 return 0;
1369 }
1370
mtk_pcie_resume_noirq(struct device * dev)1371 static int mtk_pcie_resume_noirq(struct device *dev)
1372 {
1373 struct mtk_gen3_pcie *pcie = dev_get_drvdata(dev);
1374 int err;
1375
1376 err = pcie->soc->power_up(pcie);
1377 if (err)
1378 return err;
1379
1380 err = mtk_pcie_startup_port(pcie);
1381 if (err)
1382 goto err_power_down;
1383
1384 mtk_pcie_irq_restore(pcie);
1385
1386 return 0;
1387
1388 err_power_down:
1389 mtk_pcie_power_down(pcie);
1390 return err;
1391 }
1392
1393 static const struct dev_pm_ops mtk_pcie_pm_ops = {
1394 NOIRQ_SYSTEM_SLEEP_PM_OPS(mtk_pcie_suspend_noirq,
1395 mtk_pcie_resume_noirq)
1396 };
1397
1398 static const struct mtk_gen3_pcie_pdata mtk_pcie_soc_mt8192 = {
1399 .power_up = mtk_pcie_power_up,
1400 .phy_resets = {
1401 .id[0] = "phy",
1402 .num_resets = 1,
1403 },
1404 };
1405
1406 static const struct mtk_gen3_pcie_pdata mtk_pcie_soc_mt8196 = {
1407 .power_up = mtk_pcie_power_up,
1408 .phy_resets = {
1409 .id[0] = "phy",
1410 .num_resets = 1,
1411 },
1412 .sys_clk_rdy_time_us = 10,
1413 };
1414
1415 static const struct mtk_gen3_pcie_pdata mtk_pcie_soc_en7581 = {
1416 .power_up = mtk_pcie_en7581_power_up,
1417 .phy_resets = {
1418 .id[0] = "phy-lane0",
1419 .id[1] = "phy-lane1",
1420 .id[2] = "phy-lane2",
1421 .num_resets = 3,
1422 },
1423 .flags = SKIP_PCIE_RSTB,
1424 };
1425
1426 static const struct of_device_id mtk_pcie_of_match[] = {
1427 { .compatible = "airoha,en7581-pcie", .data = &mtk_pcie_soc_en7581 },
1428 { .compatible = "mediatek,mt8192-pcie", .data = &mtk_pcie_soc_mt8192 },
1429 { .compatible = "mediatek,mt8196-pcie", .data = &mtk_pcie_soc_mt8196 },
1430 {},
1431 };
1432 MODULE_DEVICE_TABLE(of, mtk_pcie_of_match);
1433
1434 static struct platform_driver mtk_pcie_driver = {
1435 .probe = mtk_pcie_probe,
1436 .remove = mtk_pcie_remove,
1437 .shutdown = mtk_pcie_shutdown,
1438 .driver = {
1439 .name = "mtk-pcie-gen3",
1440 .of_match_table = mtk_pcie_of_match,
1441 .pm = &mtk_pcie_pm_ops,
1442 .probe_type = PROBE_PREFER_ASYNCHRONOUS,
1443 },
1444 };
1445
1446 module_platform_driver(mtk_pcie_driver);
1447 MODULE_DESCRIPTION("MediaTek Gen3 PCIe host controller driver");
1448 MODULE_LICENSE("GPL v2");
1449