• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * PCIe host controller driver for Rockchip SoCs
4  *
5  * Copyright (C) 2018 Rockchip Electronics Co., Ltd.
6  *        http://www.rock-chips.com
7  *
8  * Author: Simon Xue <xxm@rock-chips.com>
9  */
10 
11 #include <linux/clk.h>
12 #include <linux/delay.h>
13 #include <linux/fs.h>
14 #include <linux/gpio.h>
15 #include <linux/init.h>
16 #include <linux/interrupt.h>
17 #include <linux/irq.h>
18 #include <linux/irqchip/chained_irq.h>
19 #include <linux/irqdomain.h>
20 #include <linux/kernel.h>
21 #include <linux/kthread.h>
22 #include <linux/list.h>
23 #include <linux/mfd/syscon.h>
24 #include <linux/miscdevice.h>
25 #include <linux/module.h>
26 #include <linux/of_address.h>
27 #include <linux/of_device.h>
28 #include <linux/of_gpio.h>
29 #include <linux/of_pci.h>
30 #include <linux/pci.h>
31 #include <linux/phy/phy.h>
32 #include <linux/phy/pcie.h>
33 #include <linux/platform_device.h>
34 #include <linux/poll.h>
35 #include <linux/regmap.h>
36 #include <linux/reset.h>
37 #include <linux/resource.h>
38 #include <linux/signal.h>
39 #include <linux/types.h>
40 #include <linux/uaccess.h>
41 #include <linux/pci-epf.h>
42 
43 #include "pcie-designware.h"
44 #include "../../pci.h"
45 #include "../rockchip-pcie-dma.h"
46 
47 enum rk_pcie_device_mode {
48     RK_PCIE_EP_TYPE,
49     RK_PCIE_RC_TYPE,
50 };
51 
52 struct reset_bulk_data {
53     const char *id;
54     struct reset_control *rst;
55 };
56 
57 #define PCIE_DMA_OFFSET 0x380000
58 #define PCIE_DMA_WR_ENB 0xc
59 #define PCIE_DMA_CTRL_LO 0x200
60 #define PCIE_DMA_CTRL_HI 0x204
61 #define PCIE_DMA_XFERSIZE 0x208
62 #define PCIE_DMA_SAR_PTR_LO 0x20c
63 #define PCIE_DMA_SAR_PTR_HI 0x210
64 #define PCIE_DMA_DAR_PTR_LO 0x214
65 #define PCIE_DMA_DAR_PTR_HI 0x218
66 #define PCIE_DMA_WR_WEILO 0x18
67 #define PCIE_DMA_WR_WEIHI 0x1c
68 #define PCIE_DMA_WR_DOORBELL 0x10
69 #define PCIE_DMA_WR_INT_STATUS 0x4c
70 #define PCIE_DMA_WR_INT_MASK 0x54
71 #define PCIE_DMA_WR_INT_CLEAR 0x58
72 #define PCIE_DMA_RD_INT_STATUS 0xa0
73 #define PCIE_DMA_RD_INT_MASK 0xa8
74 #define PCIE_DMA_RD_INT_CLEAR 0xac
75 
76 /* Parameters for the waiting for iATU enabled routine */
77 #define LINK_WAIT_IATU_MIN 9000
78 #define LINK_WAIT_IATU_MAX 10000
79 
80 #define PCIE_DIRECT_SPEED_CHANGE (0x1 << 17)
81 
82 #define PCIE_TYPE0_STATUS_COMMAND_REG 0x4
83 #define PCIE_TYPE0_BAR0_REG 0x10
84 
85 #define PCIE_CAP_LINK_CONTROL2_LINK_STATUS 0xa0
86 
87 #define PCIE_CLIENT_INTR_STATUS_LEGACY 0x08
88 #define PCIE_CLIENT_INTR_MASK_LEGACY 0x1c
89 #define UNMASK_ALL_LEGACY_INT 0xffff0000
90 #define PCIE_CLIENT_INTR_MASK 0x24
91 #define PCIE_CLIENT_GENERAL_DEBUG 0x104
92 #define PCIE_CLIENT_HOT_RESET_CTRL 0x180
93 #define PCIE_LTSSM_ENABLE_ENHANCE BIT(4)
94 #define PCIE_CLIENT_LTSSM_STATUS 0x300
95 #define SMLH_LINKUP BIT(16)
96 #define RDLH_LINKUP BIT(17)
97 #define PCIE_CLIENT_DBG_FIFO_MODE_CON 0x310
98 #define PCIE_CLIENT_DBG_FIFO_PTN_HIT_D0 0x320
99 #define PCIE_CLIENT_DBG_FIFO_PTN_HIT_D1 0x324
100 #define PCIE_CLIENT_DBG_FIFO_TRN_HIT_D0 0x328
101 #define PCIE_CLIENT_DBG_FIFO_TRN_HIT_D1 0x32c
102 #define PCIE_CLIENT_DBG_FIFO_STATUS 0x350
103 #define PCIE_CLIENT_DBG_TRANSITION_DATA 0xffff0000
104 #define PCIE_CLIENT_DBF_EN 0xffff0003
105 #define RK_PCIE_DBG 0
106 
107 #define PCIE_PHY_LINKUP BIT(0)
108 #define PCIE_DATA_LINKUP BIT(1)
109 
110 #define PCIE_RESBAR_CTRL_REG0_REG 0x2a8
111 #define PCIE_SB_BAR0_MASK_REG 0x100010
112 
113 #define PCIE_PL_ORDER_RULE_CTRL_OFF 0x8B4
114 
115 #define FAKE_MIN_VOL 100000
116 #define FAKE_MAX_VOL 3300000
117 
118 struct rk_pcie {
119     struct dw_pcie *pci;
120     enum rk_pcie_device_mode mode;
121     enum phy_mode phy_mode;
122     int phy_sub_mode;
123     unsigned char bar_to_atu[6];
124     phys_addr_t *outbound_addr;
125     unsigned long *ib_window_map;
126     unsigned long *ob_window_map;
127     unsigned int num_ib_windows;
128     unsigned int num_ob_windows;
129     void __iomem *dbi_base;
130     void __iomem *apb_base;
131     struct phy *phy;
132     struct clk_bulk_data *clks;
133     unsigned int clk_cnt;
134     struct reset_bulk_data *rsts;
135     struct gpio_desc *rst_gpio;
136     phys_addr_t mem_start;
137     size_t mem_size;
138     struct pcie_port pp;
139     struct regmap *usb_pcie_grf;
140     struct regmap *pmu_grf;
141     struct dma_trx_obj *dma_obj;
142     bool in_suspend;
143     bool is_rk1808;
144     bool is_signal_test;
145     bool bifurcation;
146     struct regulator *vpcie3v3;
147     struct irq_domain *irq_domain;
148 };
149 
150 struct rk_pcie_of_data {
151     enum rk_pcie_device_mode mode;
152 };
153 
154 #define to_rk_pcie(x) dev_get_drvdata((x)->dev)
155 static const struct dev_pm_ops rockchip_dw_pcie_pm_ops;
156 
rk_pcie_read(void __iomem * addr,int size,u32 * val)157 static int rk_pcie_read(void __iomem *addr, int size, u32 *val)
158 {
159     if ((uintptr_t)addr & (size - 1)) {
160         *val = 0;
161         return PCIBIOS_BAD_REGISTER_NUMBER;
162     }
163 
164     if (size == 4) {
165         *val = readl(addr);
166     } else if (size == 2) {
167         *val = readw(addr);
168     } else if (size == 1) {
169         *val = readb(addr);
170     } else {
171         *val = 0;
172         return PCIBIOS_BAD_REGISTER_NUMBER;
173     }
174 
175     return PCIBIOS_SUCCESSFUL;
176 }
177 
rk_pcie_write(void __iomem * addr,int size,u32 val)178 static int rk_pcie_write(void __iomem *addr, int size, u32 val)
179 {
180     if ((uintptr_t)addr & (size - 1)) {
181         return PCIBIOS_BAD_REGISTER_NUMBER;
182     }
183 
184     if (size == 4) {
185         writel(val, addr);
186     } else if (size == 2) {
187         writew(val, addr);
188     } else if (size == 1) {
189         writeb(val, addr);
190     } else {
191         return PCIBIOS_BAD_REGISTER_NUMBER;
192     }
193 
194     return PCIBIOS_SUCCESSFUL;
195 }
196 
__rk_pcie_read_apb(struct rk_pcie * rk_pcie,void __iomem * base,u32 reg,size_t size)197 static u32 __rk_pcie_read_apb(struct rk_pcie *rk_pcie, void __iomem *base, u32 reg, size_t size)
198 {
199     int ret;
200     u32 val;
201 
202     ret = rk_pcie_read(base + reg, size, &val);
203     if (ret) {
204         dev_err(rk_pcie->pci->dev, "Read APB address failed\n");
205     }
206 
207     return val;
208 }
209 
__rk_pcie_write_apb(struct rk_pcie * rk_pcie,void __iomem * base,u32 reg,size_t size,u32 val)210 static void __rk_pcie_write_apb(struct rk_pcie *rk_pcie, void __iomem *base, u32 reg, size_t size, u32 val)
211 {
212     int ret;
213 
214     ret = rk_pcie_write(base + reg, size, val);
215     if (ret) {
216         dev_err(rk_pcie->pci->dev, "Write APB address failed\n");
217     }
218 }
219 
rk_pcie_readl_apb(struct rk_pcie * rk_pcie,u32 reg)220 static inline u32 rk_pcie_readl_apb(struct rk_pcie *rk_pcie, u32 reg)
221 {
222     return __rk_pcie_read_apb(rk_pcie, rk_pcie->apb_base, reg, 0x4);
223 }
224 
rk_pcie_writel_apb(struct rk_pcie * rk_pcie,u32 reg,u32 val)225 static inline void rk_pcie_writel_apb(struct rk_pcie *rk_pcie, u32 reg, u32 val)
226 {
227     __rk_pcie_write_apb(rk_pcie, rk_pcie->apb_base, reg, 0x4, val);
228 }
229 
rk_pcie_iatu_unroll_enabled(struct dw_pcie * pci)230 static u8 rk_pcie_iatu_unroll_enabled(struct dw_pcie *pci)
231 {
232     u32 val;
233 
234     val = dw_pcie_readl_dbi(pci, PCIE_ATU_VIEWPORT);
235     if (val == 0xffffffff) {
236         return 1;
237     }
238 
239     return 0;
240 }
241 
rk_pcie_writel_atu(struct dw_pcie * pci,u32 reg,u32 val)242 static void rk_pcie_writel_atu(struct dw_pcie *pci, u32 reg, u32 val)
243 {
244     int ret;
245 
246     if (pci->ops->write_dbi) {
247         pci->ops->write_dbi(pci, pci->atu_base, reg, 0x04, val);
248         return;
249     }
250 
251     ret = dw_pcie_write(pci->atu_base + reg, 0x04, val);
252     if (ret) {
253         dev_err(pci->dev, "Write ATU address failed\n");
254     }
255 }
256 
rk_pcie_writel_ib_unroll(struct dw_pcie * pci,u32 index,u32 reg,u32 val)257 static void rk_pcie_writel_ib_unroll(struct dw_pcie *pci, u32 index, u32 reg, u32 val)
258 {
259     u32 offset = PCIE_GET_ATU_INB_UNR_REG_OFFSET(index);
260 
261     rk_pcie_writel_atu(pci, offset + reg, val);
262 }
263 
rk_pcie_readl_atu(struct dw_pcie * pci,u32 reg)264 static u32 rk_pcie_readl_atu(struct dw_pcie *pci, u32 reg)
265 {
266     int ret;
267     u32 val;
268 
269     if (pci->ops->read_dbi) {
270         return pci->ops->read_dbi(pci, pci->atu_base, reg, 0x04);
271     }
272 
273     ret = dw_pcie_read(pci->atu_base + reg, 0x04, &val);
274     if (ret) {
275         dev_err(pci->dev, "Read ATU address failed\n");
276     }
277 
278     return val;
279 }
280 
rk_pcie_readl_ib_unroll(struct dw_pcie * pci,u32 index,u32 reg)281 static u32 rk_pcie_readl_ib_unroll(struct dw_pcie *pci, u32 index, u32 reg)
282 {
283     u32 offset = PCIE_GET_ATU_INB_UNR_REG_OFFSET(index);
284 
285     return rk_pcie_readl_atu(pci, offset + reg);
286 }
287 
rk_pcie_prog_inbound_atu_unroll(struct dw_pcie * pci,u8 func_no,int index,int bar,u64 cpu_addr,enum dw_pcie_as_type as_type)288 static int rk_pcie_prog_inbound_atu_unroll(struct dw_pcie *pci, u8 func_no, int index, int bar, u64 cpu_addr,
289                                            enum dw_pcie_as_type as_type)
290 {
291     int type;
292     u32 retries, val;
293 
294     rk_pcie_writel_ib_unroll(pci, index, PCIE_ATU_UNR_LOWER_TARGET, lower_32_bits(cpu_addr));
295     rk_pcie_writel_ib_unroll(pci, index, PCIE_ATU_UNR_UPPER_TARGET, upper_32_bits(cpu_addr));
296 
297     switch (as_type) {
298         case DW_PCIE_AS_MEM:
299             type = PCIE_ATU_TYPE_MEM;
300             break;
301         case DW_PCIE_AS_IO:
302             type = PCIE_ATU_TYPE_IO;
303             break;
304         default:
305             return -EINVAL;
306     }
307 
308     rk_pcie_writel_ib_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL1, type | PCIE_ATU_FUNC_NUM(func_no));
309     rk_pcie_writel_ib_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL2,
310                              PCIE_ATU_FUNC_NUM_MATCH_EN | PCIE_ATU_ENABLE | PCIE_ATU_BAR_MODE_ENABLE | (bar << 8));
311 
312     /*
313      * Make sure ATU enable takes effect before any subsequent config
314      * and I/O accesses.
315      */
316     for (retries = 0; retries < LINK_WAIT_MAX_IATU_RETRIES; retries++) {
317         val = rk_pcie_readl_ib_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL2);
318         if (val & PCIE_ATU_ENABLE) {
319             return 0;
320         }
321 
322         mdelay(LINK_WAIT_IATU);
323     }
324     dev_err(pci->dev, "Inbound iATU is not being enabled\n");
325 
326     return -EBUSY;
327 }
328 
rk_pcie_prog_inbound_atu(struct dw_pcie * pci,u8 func_no,int index,int bar,u64 cpu_addr,enum dw_pcie_as_type as_type)329 static int rk_pcie_prog_inbound_atu(struct dw_pcie *pci, u8 func_no, int index, int bar, u64 cpu_addr,
330                                     enum dw_pcie_as_type as_type)
331 {
332     int type;
333     u32 retries, val;
334 
335     if (pci->iatu_unroll_enabled) {
336         return rk_pcie_prog_inbound_atu_unroll(pci, func_no, index, bar, cpu_addr, as_type);
337     }
338 
339     dw_pcie_writel_dbi(pci, PCIE_ATU_VIEWPORT, PCIE_ATU_REGION_INBOUND | index);
340     dw_pcie_writel_dbi(pci, PCIE_ATU_LOWER_TARGET, lower_32_bits(cpu_addr));
341     dw_pcie_writel_dbi(pci, PCIE_ATU_UPPER_TARGET, upper_32_bits(cpu_addr));
342 
343     switch (as_type) {
344         case DW_PCIE_AS_MEM:
345             type = PCIE_ATU_TYPE_MEM;
346             break;
347         case DW_PCIE_AS_IO:
348             type = PCIE_ATU_TYPE_IO;
349             break;
350         default:
351             return -EINVAL;
352     }
353 
354     dw_pcie_writel_dbi(pci, PCIE_ATU_CR1, type | PCIE_ATU_FUNC_NUM(func_no));
355     dw_pcie_writel_dbi(pci, PCIE_ATU_CR2,
356                        PCIE_ATU_ENABLE | PCIE_ATU_FUNC_NUM_MATCH_EN | PCIE_ATU_BAR_MODE_ENABLE | (bar << 8));
357 
358     /*
359      * Make sure ATU enable takes effect before any subsequent config
360      * and I/O accesses.
361      */
362     for (retries = 0; retries < LINK_WAIT_MAX_IATU_RETRIES; retries++) {
363         val = dw_pcie_readl_dbi(pci, PCIE_ATU_CR2);
364         if (val & PCIE_ATU_ENABLE) {
365             return 0;
366         }
367 
368         mdelay(LINK_WAIT_IATU);
369     }
370     dev_err(pci->dev, "Inbound iATU is not being enabled\n");
371 
372     return -EBUSY;
373 }
374 
rk_pcie_ep_inbound_atu(struct rk_pcie * rk_pcie,enum pci_barno bar,dma_addr_t cpu_addr,enum dw_pcie_as_type as_type)375 static int rk_pcie_ep_inbound_atu(struct rk_pcie *rk_pcie, enum pci_barno bar, dma_addr_t cpu_addr,
376                                   enum dw_pcie_as_type as_type)
377 {
378     int ret;
379     u32 free_win;
380     u8 func_no = 0x0;
381 
382     if (rk_pcie->in_suspend) {
383         free_win = rk_pcie->bar_to_atu[bar];
384     } else {
385         free_win = find_first_zero_bit(rk_pcie->ib_window_map, rk_pcie->num_ib_windows);
386         if (free_win >= rk_pcie->num_ib_windows) {
387             dev_err(rk_pcie->pci->dev, "No free inbound window\n");
388             return -EINVAL;
389         }
390     }
391 
392     ret = rk_pcie_prog_inbound_atu(rk_pcie->pci, func_no, free_win, bar, cpu_addr, as_type);
393     if (ret < 0) {
394         dev_err(rk_pcie->pci->dev, "Failed to program IB window\n");
395         return ret;
396     }
397 
398     if (rk_pcie->in_suspend) {
399         return 0;
400     }
401 
402     rk_pcie->bar_to_atu[bar] = free_win;
403     set_bit(free_win, rk_pcie->ib_window_map);
404 
405     return 0;
406 }
407 
rk_pcie_writel_ob_unroll(struct dw_pcie * pci,u32 index,u32 reg,u32 val)408 static void rk_pcie_writel_ob_unroll(struct dw_pcie *pci, u32 index, u32 reg, u32 val)
409 {
410     u32 offset = PCIE_GET_ATU_OUTB_UNR_REG_OFFSET(index);
411 
412     rk_pcie_writel_atu(pci, offset + reg, val);
413 }
414 
rk_pcie_readl_ob_unroll(struct dw_pcie * pci,u32 index,u32 reg)415 static u32 rk_pcie_readl_ob_unroll(struct dw_pcie *pci, u32 index, u32 reg)
416 {
417     u32 offset = PCIE_GET_ATU_OUTB_UNR_REG_OFFSET(index);
418 
419     return rk_pcie_readl_atu(pci, offset + reg);
420 }
421 
rk_pcie_prog_outbound_atu_unroll(struct dw_pcie * pci,u8 func_no,int index,int type,u64 cpu_addr,u64 pci_addr,u32 size)422 static void rk_pcie_prog_outbound_atu_unroll(struct dw_pcie *pci, u8 func_no, int index, int type, u64 cpu_addr,
423                                              u64 pci_addr, u32 size)
424 {
425     u32 retries, val;
426     u64 limit_addr = cpu_addr + size - 1;
427 
428     rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LOWER_BASE, lower_32_bits(cpu_addr));
429     rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_BASE, upper_32_bits(cpu_addr));
430     rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LOWER_LIMIT, lower_32_bits(limit_addr));
431     rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_LIMIT, upper_32_bits(limit_addr));
432     rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LOWER_TARGET, lower_32_bits(pci_addr));
433     rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_TARGET, upper_32_bits(pci_addr));
434     rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL1, type | PCIE_ATU_FUNC_NUM(func_no));
435     rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL2, PCIE_ATU_ENABLE);
436 
437     /*
438      * Make sure ATU enable takes effect before any subsequent config
439      * and I/O accesses.
440      */
441     for (retries = 0; retries < LINK_WAIT_MAX_IATU_RETRIES; retries++) {
442         val = rk_pcie_readl_ob_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL2);
443         if (val & PCIE_ATU_ENABLE) {
444             return;
445         }
446 
447         mdelay(LINK_WAIT_IATU);
448     }
449     dev_err(pci->dev, "Outbound iATU is not being enabled\n");
450 }
451 
rk_pcie_prog_outbound_atu(struct dw_pcie * pci,int index,int type,u64 cpu_addr,u64 pci_addr,u32 size)452 static void rk_pcie_prog_outbound_atu(struct dw_pcie *pci, int index, int type, u64 cpu_addr, u64 pci_addr, u32 size)
453 {
454     u32 retries, val;
455 
456     if (pci->ops->cpu_addr_fixup) {
457         cpu_addr = pci->ops->cpu_addr_fixup(pci, cpu_addr);
458     }
459 
460     if (pci->iatu_unroll_enabled) {
461         rk_pcie_prog_outbound_atu_unroll(pci, 0x0, index, type, cpu_addr, pci_addr, size);
462         return;
463     }
464 
465     dw_pcie_writel_dbi(pci, PCIE_ATU_VIEWPORT, PCIE_ATU_REGION_OUTBOUND | index);
466     dw_pcie_writel_dbi(pci, PCIE_ATU_LOWER_BASE, lower_32_bits(cpu_addr));
467     dw_pcie_writel_dbi(pci, PCIE_ATU_UPPER_BASE, upper_32_bits(cpu_addr));
468     dw_pcie_writel_dbi(pci, PCIE_ATU_LIMIT, lower_32_bits(cpu_addr + size - 1));
469     dw_pcie_writel_dbi(pci, PCIE_ATU_LOWER_TARGET, lower_32_bits(pci_addr));
470     dw_pcie_writel_dbi(pci, PCIE_ATU_UPPER_TARGET, upper_32_bits(pci_addr));
471     dw_pcie_writel_dbi(pci, PCIE_ATU_CR1, type | PCIE_ATU_FUNC_NUM(0x0));
472     dw_pcie_writel_dbi(pci, PCIE_ATU_CR2, PCIE_ATU_ENABLE);
473 
474     /*
475      * Make sure ATU enable takes effect before any subsequent config
476      * and I/O accesses.
477      */
478     for (retries = 0; retries < LINK_WAIT_MAX_IATU_RETRIES; retries++) {
479         val = dw_pcie_readl_dbi(pci, PCIE_ATU_CR2);
480         if (val & PCIE_ATU_ENABLE) {
481             return;
482         }
483 
484         mdelay(LINK_WAIT_IATU);
485     }
486     dev_err(pci->dev, "Outbound iATU is not being enabled\n");
487 }
488 
rk_pcie_ep_outbound_atu(struct rk_pcie * rk_pcie,phys_addr_t phys_addr,u64 pci_addr,size_t size)489 static int rk_pcie_ep_outbound_atu(struct rk_pcie *rk_pcie, phys_addr_t phys_addr, u64 pci_addr, size_t size)
490 {
491     u32 free_win;
492 
493     if (rk_pcie->in_suspend) {
494         free_win = find_first_bit(rk_pcie->ob_window_map, rk_pcie->num_ob_windows);
495     } else {
496         free_win = find_first_zero_bit(rk_pcie->ob_window_map, rk_pcie->num_ob_windows);
497         if (free_win >= rk_pcie->num_ob_windows) {
498             dev_err(rk_pcie->pci->dev, "No free outbound window\n");
499             return -EINVAL;
500         }
501     }
502 
503     rk_pcie_prog_outbound_atu(rk_pcie->pci, free_win, PCIE_ATU_TYPE_MEM, phys_addr, pci_addr, size);
504 
505     if (rk_pcie->in_suspend) {
506         return 0;
507     }
508 
509     set_bit(free_win, rk_pcie->ob_window_map);
510     rk_pcie->outbound_addr[free_win] = phys_addr;
511 
512     return 0;
513 }
514 
__rk_pcie_ep_reset_bar(struct rk_pcie * rk_pcie,enum pci_barno bar,int flags)515 static void __rk_pcie_ep_reset_bar(struct rk_pcie *rk_pcie, enum pci_barno bar, int flags)
516 {
517     u32 reg;
518 
519     reg = PCI_BASE_ADDRESS_0 + (4 * bar);
520     dw_pcie_writel_dbi(rk_pcie->pci, reg, 0x0);
521     if (flags & PCI_BASE_ADDRESS_MEM_TYPE_64) {
522         dw_pcie_writel_dbi(rk_pcie->pci, reg + 4, 0x0);
523     }
524 }
525 
rk_pcie_ep_reset_bar(struct rk_pcie * rk_pcie,enum pci_barno bar)526 static void rk_pcie_ep_reset_bar(struct rk_pcie *rk_pcie, enum pci_barno bar)
527 {
528     __rk_pcie_ep_reset_bar(rk_pcie, bar, 0);
529 }
530 
rk_pcie_ep_atu_init(struct rk_pcie * rk_pcie)531 static int rk_pcie_ep_atu_init(struct rk_pcie *rk_pcie)
532 {
533     int ret;
534     enum pci_barno bar;
535     enum dw_pcie_as_type as_type;
536     dma_addr_t cpu_addr;
537     phys_addr_t phys_addr;
538     u64 pci_addr;
539     size_t size;
540 
541     for (bar = BAR_0; bar <= BAR_5; bar++) {
542         rk_pcie_ep_reset_bar(rk_pcie, bar);
543     }
544 
545     cpu_addr = rk_pcie->mem_start;
546     as_type = DW_PCIE_AS_MEM;
547     ret = rk_pcie_ep_inbound_atu(rk_pcie, BAR_0, cpu_addr, as_type);
548     if (ret) {
549         return ret;
550     }
551 
552     phys_addr = 0x0;
553     pci_addr = 0x0;
554     size = SZ_2G;
555     ret = rk_pcie_ep_outbound_atu(rk_pcie, phys_addr, pci_addr, size);
556     if (ret) {
557         return ret;
558     }
559 
560     return 0;
561 }
562 
rk_pcie_set_mode(struct rk_pcie * rk_pcie)563 static inline void rk_pcie_set_mode(struct rk_pcie *rk_pcie)
564 {
565     switch (rk_pcie->mode) {
566         case RK_PCIE_EP_TYPE:
567             rk_pcie_writel_apb(rk_pcie, 0x0, 0xf00000);
568             break;
569         case RK_PCIE_RC_TYPE:
570             rk_pcie_writel_apb(rk_pcie, 0x0, 0xf00040);
571             /*
572              * Disable order rule for CPL can't pass halted P queue.
573              * Need to check producer-consumer model.
574              * Just for RK1808 platform.
575              */
576             if (rk_pcie->is_rk1808) {
577                 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_PL_ORDER_RULE_CTRL_OFF, 0xff00);
578             }
579             break;
580     }
581 }
582 
rk_pcie_link_status_clear(struct rk_pcie * rk_pcie)583 static inline void rk_pcie_link_status_clear(struct rk_pcie *rk_pcie)
584 {
585     rk_pcie_writel_apb(rk_pcie, PCIE_CLIENT_GENERAL_DEBUG, 0x0);
586 }
587 
rk_pcie_disable_ltssm(struct rk_pcie * rk_pcie)588 static inline void rk_pcie_disable_ltssm(struct rk_pcie *rk_pcie)
589 {
590     rk_pcie_writel_apb(rk_pcie, 0x0, 0xc0008);
591 }
592 
rk_pcie_enable_ltssm(struct rk_pcie * rk_pcie)593 static inline void rk_pcie_enable_ltssm(struct rk_pcie *rk_pcie)
594 {
595     rk_pcie_writel_apb(rk_pcie, 0x0, 0xC000C);
596 }
597 
rk_pcie_link_up(struct dw_pcie * pci)598 static int rk_pcie_link_up(struct dw_pcie *pci)
599 {
600     struct rk_pcie *rk_pcie = to_rk_pcie(pci);
601     u32 val;
602 
603     if (rk_pcie->is_rk1808) {
604         val = rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_GENERAL_DEBUG);
605         if ((val & (PCIE_PHY_LINKUP | PCIE_DATA_LINKUP)) == 0x3 && ((val & GENMASK(15, 10)) >> 10) == 0x11) {
606             return 1;
607         }
608     } else {
609         val = rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_LTSSM_STATUS);
610         if ((val & (RDLH_LINKUP | SMLH_LINKUP)) == 0x30000 && (val & GENMASK(5, 0)) == 0x11) {
611             return 1;
612         }
613     }
614 
615     return 0;
616 }
617 
rk_pcie_enable_debug(struct rk_pcie * rk_pcie)618 static void rk_pcie_enable_debug(struct rk_pcie *rk_pcie)
619 {
620 #if RK_PCIE_DBG
621     if (rk_pcie->is_rk1808 == true) {
622         return;
623     }
624 
625     rk_pcie_writel_apb(rk_pcie, PCIE_CLIENT_DBG_FIFO_PTN_HIT_D0, PCIE_CLIENT_DBG_TRANSITION_DATA);
626     rk_pcie_writel_apb(rk_pcie, PCIE_CLIENT_DBG_FIFO_PTN_HIT_D1, PCIE_CLIENT_DBG_TRANSITION_DATA);
627     rk_pcie_writel_apb(rk_pcie, PCIE_CLIENT_DBG_FIFO_TRN_HIT_D0, PCIE_CLIENT_DBG_TRANSITION_DATA);
628     rk_pcie_writel_apb(rk_pcie, PCIE_CLIENT_DBG_FIFO_TRN_HIT_D1, PCIE_CLIENT_DBG_TRANSITION_DATA);
629     rk_pcie_writel_apb(rk_pcie, PCIE_CLIENT_DBG_FIFO_MODE_CON, PCIE_CLIENT_DBF_EN);
630 #endif
631 }
632 
rk_pcie_debug_dump(struct rk_pcie * rk_pcie)633 static void rk_pcie_debug_dump(struct rk_pcie *rk_pcie)
634 {
635 #if RK_PCIE_DBG
636     u32 loop;
637     struct dw_pcie *pci = rk_pcie->pci;
638 
639     dev_info(pci->dev, "ltssm = 0x%x\n", rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_LTSSM_STATUS));
640     for (loop = 0; loop < 64; loop++) {
641         dev_info(pci->dev, "fifo_status = 0x%x\n", rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_DBG_FIFO_STATUS));
642     }
643 #endif
644 }
645 
rk_pcie_establish_link(struct dw_pcie * pci)646 static int rk_pcie_establish_link(struct dw_pcie *pci)
647 {
648     int retries;
649     struct rk_pcie *rk_pcie = to_rk_pcie(pci);
650 
651     if (dw_pcie_link_up(pci)) {
652         dev_err(pci->dev, "link is already up\n");
653         return 0;
654     }
655 
656     /* Rest the device */
657     gpiod_set_value_cansleep(rk_pcie->rst_gpio, 0);
658 
659     rk_pcie_disable_ltssm(rk_pcie);
660     rk_pcie_link_status_clear(rk_pcie);
661     rk_pcie_enable_debug(rk_pcie);
662 
663     /* Enable LTSSM */
664     rk_pcie_enable_ltssm(rk_pcie);
665 
666     /*
667      * PCIe requires the refclk to be stable for 100µs prior to releasing
668      * PERST.  See table 2-4 in section 2.6.2 AC Specifications of the PCI
669      * Express Card Electromechanical Specification, 1.1. However, we don't
670      * know if the refclk is coming from RC's PHY or external OSC. If it's
671      * from RC, so enabling LTSSM is the just right place to release #PERST.
672      * We need a little more extra time as before, rather than setting just
673      * 100us as we don't know how long should the device need to reset.
674      */
675     msleep(1000);
676     gpiod_set_value_cansleep(rk_pcie->rst_gpio, 1);
677 
678     for (retries = 0; retries < 10; retries++) {
679         if (dw_pcie_link_up(pci)) {
680             dev_info(pci->dev, "PCIe Link up, LTSSM is 0x%x\n", rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_LTSSM_STATUS));
681             rk_pcie_debug_dump(rk_pcie);
682             return 0;
683         }
684 
685         dev_info_ratelimited(pci->dev, "PCIe Linking... LTSSM is 0x%x\n",
686                              rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_LTSSM_STATUS));
687         rk_pcie_debug_dump(rk_pcie);
688         msleep(1000);
689     }
690 
691     dev_err(pci->dev, "PCIe Link Fail\n");
692 
693     return rk_pcie->is_signal_test == true ? 0 : -EINVAL;
694 }
695 
rk_pcie_host_init_dma_trx(struct rk_pcie * rk_pcie)696 static int rk_pcie_host_init_dma_trx(struct rk_pcie *rk_pcie)
697 {
698     rk_pcie->dma_obj = rk_pcie_dma_obj_probe(rk_pcie->pci->dev);
699     if (IS_ERR(rk_pcie->dma_obj)) {
700         dev_err(rk_pcie->pci->dev, "failed to prepare dma object\n");
701         return -EINVAL;
702     }
703 
704     /* Enable client write and read interrupt */
705     rk_pcie_writel_apb(rk_pcie, PCIE_CLIENT_INTR_MASK, 0xc000000);
706 
707     /* Enable core write interrupt */
708     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_MASK, 0x0);
709     /* Enable core read interrupt */
710     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_RD_INT_MASK, 0x0);
711     return 0;
712 }
713 
rk_pcie_ep_setup(struct rk_pcie * rk_pcie)714 static void rk_pcie_ep_setup(struct rk_pcie *rk_pcie)
715 {
716     int ret;
717     u32 val;
718     u32 lanes;
719     struct device *dev = rk_pcie->pci->dev;
720     struct device_node *np = dev->of_node;
721 
722     /* Enable client write and read interrupt */
723     rk_pcie_writel_apb(rk_pcie, PCIE_CLIENT_INTR_MASK, 0xc000000);
724 
725     /* Enable core write interrupt */
726     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_MASK, 0x0);
727     /* Enable core read interrupt */
728     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_RD_INT_MASK, 0x0);
729 
730     ret = of_property_read_u32(np, "num-lanes", &lanes);
731     if (ret) {
732         lanes = 0;
733     }
734 
735     /* Set the number of lanes */
736     val = dw_pcie_readl_dbi(rk_pcie->pci, PCIE_PORT_LINK_CONTROL);
737     val &= ~PORT_LINK_MODE_MASK;
738     switch (lanes) {
739         case 1:
740             val |= PORT_LINK_MODE_1_LANES;
741             break;
742         case 2:
743             val |= PORT_LINK_MODE_2_LANES;
744             break;
745         case 4:
746             val |= PORT_LINK_MODE_4_LANES;
747             break;
748         case 8:
749             val |= PORT_LINK_MODE_8_LANES;
750             break;
751         default:
752             dev_err(dev, "num-lanes %u: invalid value\n", lanes);
753             return;
754     }
755 
756     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_PORT_LINK_CONTROL, val);
757 
758     /* Set link width speed control register */
759     val = dw_pcie_readl_dbi(rk_pcie->pci, PCIE_LINK_WIDTH_SPEED_CONTROL);
760     val &= ~PORT_LOGIC_LINK_WIDTH_MASK;
761     switch (lanes) {
762         case 1:
763             val |= PORT_LOGIC_LINK_WIDTH_1_LANES;
764             break;
765         case 2:
766             val |= PORT_LOGIC_LINK_WIDTH_2_LANES;
767             break;
768         case 4:
769             val |= PORT_LOGIC_LINK_WIDTH_4_LANES;
770             break;
771         case 8:
772             val |= PORT_LOGIC_LINK_WIDTH_8_LANES;
773             break;
774     }
775 
776     val |= PCIE_DIRECT_SPEED_CHANGE;
777 
778     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_LINK_WIDTH_SPEED_CONTROL, val);
779 
780     /* Enable bus master and memory space */
781     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_TYPE0_STATUS_COMMAND_REG, 0x6);
782 
783     /* Resize BAR0 to 4GB */
784     /* bit13-8 set to 6 means 64MB */
785     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_RESBAR_CTRL_REG0_REG, 0x600);
786 
787     /* Set shadow BAR0 according 64MB */
788     val = rk_pcie->mem_size - 1;
789     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_SB_BAR0_MASK_REG, val);
790 
791     /* Set reserved memory address to BAR0 */
792     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_TYPE0_BAR0_REG, rk_pcie->mem_start);
793 }
794 
rk_pcie_ep_win_parse(struct rk_pcie * rk_pcie)795 static int rk_pcie_ep_win_parse(struct rk_pcie *rk_pcie)
796 {
797     int ret;
798     void *addr;
799     struct device *dev = rk_pcie->pci->dev;
800     struct device_node *np = dev->of_node;
801 
802     ret = of_property_read_u32(np, "num-ib-windows", &rk_pcie->num_ib_windows);
803     if (ret < 0) {
804         dev_err(dev, "unable to read *num-ib-windows* property\n");
805         return ret;
806     }
807 
808     if (rk_pcie->num_ib_windows > MAX_IATU_IN) {
809         dev_err(dev, "Invalid *num-ib-windows*\n");
810         return -EINVAL;
811     }
812 
813     ret = of_property_read_u32(np, "num-ob-windows", &rk_pcie->num_ob_windows);
814     if (ret < 0) {
815         dev_err(dev, "Unable to read *num-ob-windows* property\n");
816         return ret;
817     }
818 
819     if (rk_pcie->num_ob_windows > MAX_IATU_OUT) {
820         dev_err(dev, "Invalid *num-ob-windows*\n");
821         return -EINVAL;
822     }
823 
824     rk_pcie->ib_window_map = devm_kcalloc(dev, BITS_TO_LONGS(rk_pcie->num_ib_windows), sizeof(long), GFP_KERNEL);
825     if (!rk_pcie->ib_window_map) {
826         return -ENOMEM;
827     }
828 
829     rk_pcie->ob_window_map = devm_kcalloc(dev, BITS_TO_LONGS(rk_pcie->num_ob_windows), sizeof(long), GFP_KERNEL);
830     if (!rk_pcie->ob_window_map) {
831         return -ENOMEM;
832     }
833 
834     addr = devm_kcalloc(dev, rk_pcie->num_ob_windows, sizeof(phys_addr_t), GFP_KERNEL);
835     if (!addr) {
836         return -ENOMEM;
837     }
838 
839     rk_pcie->outbound_addr = addr;
840 
841     return 0;
842 }
843 
rk_pcie_msi_host_init(struct pcie_port * pp)844 static int rk_pcie_msi_host_init(struct pcie_port *pp)
845 {
846     return 0;
847 }
848 
rk_pcie_host_init(struct pcie_port * pp)849 static int rk_pcie_host_init(struct pcie_port *pp)
850 {
851     int ret;
852     struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
853 
854     dw_pcie_setup_rc(pp);
855 
856     ret = rk_pcie_establish_link(pci);
857 
858     return ret;
859 }
860 
861 static const struct dw_pcie_host_ops rk_pcie_host_ops = {
862     .host_init = rk_pcie_host_init,
863     .msi_host_init = rk_pcie_msi_host_init,
864 };
865 
rk_add_pcie_port(struct rk_pcie * rk_pcie)866 static int rk_add_pcie_port(struct rk_pcie *rk_pcie)
867 {
868     int ret;
869     struct dw_pcie *pci = rk_pcie->pci;
870     struct pcie_port *pp = &pci->pp;
871     struct device *dev = pci->dev;
872 
873     pp->ops = &rk_pcie_host_ops;
874 
875     ret = dw_pcie_host_init(pp);
876     if (ret) {
877         dev_err(dev, "failed to initialize host\n");
878         return ret;
879     }
880 
881     ret = rk_pcie_host_init_dma_trx(rk_pcie);
882     if (ret) {
883         dev_err(dev, "failed to init host dma trx\n");
884         return ret;
885     }
886     return 0;
887 }
888 
rk_pcie_add_ep(struct rk_pcie * rk_pcie)889 static int rk_pcie_add_ep(struct rk_pcie *rk_pcie)
890 {
891     int ret;
892     struct device *dev = rk_pcie->pci->dev;
893     struct device_node *np = dev->of_node;
894     struct device_node *mem;
895     struct resource reg;
896 
897     mem = of_parse_phandle(np, "memory-region", 0);
898     if (!mem) {
899         dev_err(dev, "missing \"memory-region\" property\n");
900         return -ENODEV;
901     }
902 
903     ret = of_address_to_resource(mem, 0, &reg);
904     if (ret < 0) {
905         dev_err(dev, "missing \"reg\" property\n");
906         return ret;
907     }
908 
909     rk_pcie->mem_start = reg.start;
910     rk_pcie->mem_size = resource_size(&reg);
911 
912     ret = rk_pcie_ep_win_parse(rk_pcie);
913     if (ret) {
914         dev_err(dev, "failed to parse ep dts\n");
915         return ret;
916     }
917 
918     rk_pcie->pci->iatu_unroll_enabled = rk_pcie_iatu_unroll_enabled(rk_pcie->pci);
919 
920     ret = rk_pcie_ep_atu_init(rk_pcie);
921     if (ret) {
922         dev_err(dev, "failed to init ep device\n");
923         return ret;
924     }
925 
926     rk_pcie_ep_setup(rk_pcie);
927 
928     ret = rk_pcie_establish_link(rk_pcie->pci);
929     if (ret) {
930         dev_err(dev, "failed to establish pcie link\n");
931         return ret;
932     }
933 
934     rk_pcie->dma_obj = rk_pcie_dma_obj_probe(dev);
935     if (IS_ERR(rk_pcie->dma_obj)) {
936         dev_err(dev, "failed to prepare dma object\n");
937         return -EINVAL;
938     }
939 
940     return 0;
941 }
942 
rk_pcie_clk_deinit(struct rk_pcie * rk_pcie)943 static void rk_pcie_clk_deinit(struct rk_pcie *rk_pcie)
944 {
945     clk_bulk_disable(rk_pcie->clk_cnt, rk_pcie->clks);
946     clk_bulk_unprepare(rk_pcie->clk_cnt, rk_pcie->clks);
947 }
948 
rk_pcie_clk_init(struct rk_pcie * rk_pcie)949 static int rk_pcie_clk_init(struct rk_pcie *rk_pcie)
950 {
951     struct device *dev = rk_pcie->pci->dev;
952     struct property *prop;
953     const char *name;
954     int i = 0, ret, count;
955 
956     count = of_property_count_strings(dev->of_node, "clock-names");
957     if (count < 1) {
958         return -ENODEV;
959     }
960 
961     rk_pcie->clks = devm_kcalloc(dev, count, sizeof(struct clk_bulk_data), GFP_KERNEL);
962     if (!rk_pcie->clks) {
963         return -ENOMEM;
964     }
965 
966     rk_pcie->clk_cnt = count;
967 
968     of_property_for_each_string(dev->of_node, "clock-names", prop, name)
969     {
970         rk_pcie->clks[i].id = name;
971         if (!rk_pcie->clks[i].id) {
972             return -ENOMEM;
973         }
974         i++;
975     }
976 
977     ret = devm_clk_bulk_get(dev, count, rk_pcie->clks);
978     if (ret) {
979         return ret;
980     }
981 
982     ret = clk_bulk_prepare(count, rk_pcie->clks);
983     if (ret) {
984         return ret;
985     }
986 
987     ret = clk_bulk_enable(count, rk_pcie->clks);
988     if (ret) {
989         clk_bulk_unprepare(count, rk_pcie->clks);
990         return ret;
991     }
992 
993     return 0;
994 }
995 
rk_pcie_resource_get(struct platform_device * pdev,struct rk_pcie * rk_pcie)996 static int rk_pcie_resource_get(struct platform_device *pdev, struct rk_pcie *rk_pcie)
997 {
998     struct resource *dbi_base;
999     struct resource *apb_base;
1000 
1001     dbi_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcie-dbi");
1002     if (!dbi_base) {
1003         dev_err(&pdev->dev, "get pcie-dbi failed\n");
1004         return -ENODEV;
1005     }
1006 
1007     rk_pcie->dbi_base = devm_ioremap_resource(&pdev->dev, dbi_base);
1008     if (IS_ERR(rk_pcie->dbi_base)) {
1009         return PTR_ERR(rk_pcie->dbi_base);
1010     }
1011 
1012     rk_pcie->pci->dbi_base = rk_pcie->dbi_base;
1013 
1014     apb_base = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pcie-apb");
1015     if (!apb_base) {
1016         dev_err(&pdev->dev, "get pcie-apb failed\n");
1017         return -ENODEV;
1018     }
1019     rk_pcie->apb_base = devm_ioremap_resource(&pdev->dev, apb_base);
1020     if (IS_ERR(rk_pcie->apb_base)) {
1021         return PTR_ERR(rk_pcie->apb_base);
1022     }
1023 
1024     rk_pcie->rst_gpio = devm_gpiod_get_optional(&pdev->dev, "reset", GPIOD_OUT_HIGH);
1025     if (IS_ERR(rk_pcie->rst_gpio)) {
1026         dev_err(&pdev->dev, "invalid reset-gpios property in node\n");
1027         return PTR_ERR(rk_pcie->rst_gpio);
1028     }
1029 
1030     return 0;
1031 }
1032 
rk_pcie_phy_init(struct rk_pcie * rk_pcie)1033 static int rk_pcie_phy_init(struct rk_pcie *rk_pcie)
1034 {
1035     int ret;
1036     struct device *dev = rk_pcie->pci->dev;
1037 
1038     rk_pcie->phy = devm_phy_get(dev, "pcie-phy");
1039     if (IS_ERR(rk_pcie->phy)) {
1040         if (PTR_ERR(rk_pcie->phy) != -EPROBE_DEFER) {
1041             dev_info(dev, "missing phy\n");
1042         }
1043         return PTR_ERR(rk_pcie->phy);
1044     }
1045 
1046     switch (rk_pcie->mode) {
1047         case RK_PCIE_RC_TYPE:
1048             rk_pcie->phy_mode = PHY_MODE_PCIE; /* make no sense */
1049             rk_pcie->phy_sub_mode = PHY_MODE_PCIE_RC;
1050             break;
1051         case RK_PCIE_EP_TYPE:
1052             rk_pcie->phy_mode = PHY_MODE_PCIE;
1053             rk_pcie->phy_sub_mode = PHY_MODE_PCIE_EP;
1054             break;
1055     }
1056 
1057     ret = phy_set_mode_ext(rk_pcie->phy, rk_pcie->phy_mode, rk_pcie->phy_sub_mode);
1058     if (ret) {
1059         dev_err(dev, "fail to set phy to  mode %s, err %d\n", (rk_pcie->phy_sub_mode == PHY_MODE_PCIE_RC) ? "RC" : "EP",
1060                 ret);
1061         return ret;
1062     }
1063 
1064     if (rk_pcie->bifurcation) {
1065         ret = phy_set_mode_ext(rk_pcie->phy, rk_pcie->phy_mode, PHY_MODE_PCIE_BIFURCATION);
1066     }
1067 
1068     ret = phy_init(rk_pcie->phy);
1069     if (ret < 0) {
1070         dev_err(dev, "fail to init phy, err %d\n", ret);
1071         return ret;
1072     }
1073 
1074     phy_power_on(rk_pcie->phy);
1075 
1076     return 0;
1077 }
1078 
rk_pcie_reset_control_release(struct rk_pcie * rk_pcie)1079 static int rk_pcie_reset_control_release(struct rk_pcie *rk_pcie)
1080 {
1081     struct device *dev = rk_pcie->pci->dev;
1082     struct property *prop;
1083     const char *name;
1084     int ret, count, i = 0;
1085 
1086     count = of_property_count_strings(dev->of_node, "reset-names");
1087     if (count < 1) {
1088         return -ENODEV;
1089     }
1090 
1091     rk_pcie->rsts = devm_kcalloc(dev, count, sizeof(struct reset_bulk_data), GFP_KERNEL);
1092     if (!rk_pcie->rsts) {
1093         return -ENOMEM;
1094     }
1095 
1096     of_property_for_each_string(dev->of_node, "reset-names", prop, name)
1097     {
1098         rk_pcie->rsts[i].id = name;
1099         if (!rk_pcie->rsts[i].id) {
1100             return -ENOMEM;
1101         }
1102         i++;
1103     }
1104 
1105     for (i = 0; i < count; i++) {
1106         rk_pcie->rsts[i].rst = devm_reset_control_get_exclusive(dev, rk_pcie->rsts[i].id);
1107         if (IS_ERR_OR_NULL(rk_pcie->rsts[i].rst)) {
1108             dev_err(dev, "failed to get %s\n", rk_pcie->clks[i].id);
1109             return -PTR_ERR(rk_pcie->rsts[i].rst);
1110         }
1111     }
1112 
1113     for (i = 0; i < count; i++) {
1114         ret = reset_control_deassert(rk_pcie->rsts[i].rst);
1115         if (ret) {
1116             dev_err(dev, "failed to release %s\n", rk_pcie->rsts[i].id);
1117             return ret;
1118         }
1119     }
1120 
1121     return 0;
1122 }
1123 
rk_pcie_reset_grant_ctrl(struct rk_pcie * rk_pcie,bool enable)1124 static int rk_pcie_reset_grant_ctrl(struct rk_pcie *rk_pcie, bool enable)
1125 {
1126     int ret;
1127     u32 val = (0x1 << 18); /* Write mask bit */
1128 
1129     if (enable) {
1130         val |= (0x1 << 0x02);
1131     }
1132 
1133     ret = regmap_write(rk_pcie->usb_pcie_grf, 0x0, val);
1134     return ret;
1135 }
1136 
rk_pcie_start_dma_dwc(struct dma_trx_obj * obj)1137 static void rk_pcie_start_dma_dwc(struct dma_trx_obj *obj)
1138 {
1139     struct rk_pcie *rk_pcie = dev_get_drvdata(obj->dev);
1140 
1141     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_ENB, obj->cur->wr_enb.asdword);
1142     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_CTRL_LO, obj->cur->ctx_reg.ctrllo.asdword);
1143     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_CTRL_HI, obj->cur->ctx_reg.ctrlhi.asdword);
1144     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_XFERSIZE, obj->cur->ctx_reg.xfersize);
1145     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_SAR_PTR_LO, obj->cur->ctx_reg.sarptrlo);
1146     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_SAR_PTR_HI, obj->cur->ctx_reg.sarptrhi);
1147     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_DAR_PTR_LO, obj->cur->ctx_reg.darptrlo);
1148     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_DAR_PTR_HI, obj->cur->ctx_reg.darptrhi);
1149     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_WEILO, obj->cur->wr_weilo.asdword);
1150     dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_DOORBELL, obj->cur->start.asdword);
1151 }
1152 
rk_pcie_config_dma_dwc(struct dma_table * table)1153 static void rk_pcie_config_dma_dwc(struct dma_table *table)
1154 {
1155     table->wr_enb.enb = 0x1;
1156     table->ctx_reg.ctrllo.lie = 0x1;
1157     table->ctx_reg.ctrllo.rie = 0x0;
1158     table->ctx_reg.ctrllo.td = 0x1;
1159     table->ctx_reg.ctrlhi.asdword = 0x0;
1160     table->ctx_reg.xfersize = table->buf_size;
1161     table->ctx_reg.sarptrlo = (u32)(table->local & 0xffffffff);
1162     table->ctx_reg.sarptrhi = (u32)(table->local >> 0x20);
1163     table->ctx_reg.darptrlo = (u32)(table->bus & 0xffffffff);
1164     table->ctx_reg.darptrhi = (u32)(table->bus >> 0x20);
1165     table->wr_weilo.weight0 = 0x0;
1166     table->start.stop = 0x0;
1167     table->start.chnl = PCIE_DMA_CHN0;
1168 }
1169 
rk_pcie_handle_dma_interrupt(struct rk_pcie * rk_pcie)1170 static inline void rk_pcie_handle_dma_interrupt(struct rk_pcie *rk_pcie)
1171 {
1172     struct dma_trx_obj *obj = rk_pcie->dma_obj;
1173 
1174     if (!obj) {
1175         return;
1176     }
1177 
1178     obj->dma_free = true;
1179     obj->irq_num++;
1180 
1181     if (list_empty(&obj->tbl_list)) {
1182         if (obj->dma_free && obj->loop_count >= obj->loop_count_threshold) {
1183             complete(&obj->done);
1184         }
1185     }
1186 }
1187 
rk_pcie_sys_irq_handler(int irq,void * arg)1188 static irqreturn_t rk_pcie_sys_irq_handler(int irq, void *arg)
1189 {
1190     struct rk_pcie *rk_pcie = arg;
1191     u32 chn = 0;
1192     union int_status status;
1193     union int_clear clears;
1194 
1195     status.asdword = dw_pcie_readl_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_STATUS);
1196 
1197     if (rk_pcie->dma_obj && rk_pcie->dma_obj->cur) {
1198         chn = rk_pcie->dma_obj->cur->chn;
1199     }
1200 
1201     if (status.donesta & BIT(0)) {
1202         clears.doneclr = 0x1 << chn;
1203         dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_CLEAR, clears.asdword);
1204         rk_pcie_handle_dma_interrupt(rk_pcie);
1205     }
1206 
1207     if (status.abortsta & BIT(0)) {
1208         dev_err(rk_pcie->pci->dev, "%s, abort\n", __func__);
1209         clears.abortclr = 0x1 << chn;
1210         dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_CLEAR, clears.asdword);
1211     }
1212 
1213     return IRQ_HANDLED;
1214 }
1215 
rk_pcie_request_sys_irq(struct rk_pcie * rk_pcie,struct platform_device * pdev)1216 static int rk_pcie_request_sys_irq(struct rk_pcie *rk_pcie, struct platform_device *pdev)
1217 {
1218     int irq;
1219     int ret;
1220 
1221     irq = platform_get_irq_byname(pdev, "sys");
1222     if (irq < 0) {
1223         dev_err(rk_pcie->pci->dev, "missing sys IRQ resource\n");
1224         return -EINVAL;
1225     }
1226 
1227     ret = devm_request_irq(rk_pcie->pci->dev, irq, rk_pcie_sys_irq_handler, IRQF_SHARED, "pcie-sys", rk_pcie);
1228     if (ret) {
1229         dev_err(rk_pcie->pci->dev, "failed to request PCIe subsystem IRQ\n");
1230         return ret;
1231     }
1232 
1233     return 0;
1234 }
1235 
1236 static const struct rk_pcie_of_data rk_pcie_rc_of_data = {
1237     .mode = RK_PCIE_RC_TYPE,
1238 };
1239 
1240 static const struct rk_pcie_of_data rk_pcie_ep_of_data = {
1241     .mode = RK_PCIE_EP_TYPE,
1242 };
1243 
1244 static const struct of_device_id rk_pcie_of_match[] = {
1245     {
1246         .compatible = "rockchip,rk1808-pcie",
1247         .data = &rk_pcie_rc_of_data,
1248     },
1249     {
1250         .compatible = "rockchip,rk1808-pcie-ep",
1251         .data = &rk_pcie_ep_of_data,
1252     },
1253     {
1254         .compatible = "rockchip,rk3568-pcie",
1255         .data = &rk_pcie_rc_of_data,
1256     },
1257     {
1258         .compatible = "rockchip,rk3568-pcie-ep",
1259         .data = &rk_pcie_ep_of_data,
1260     },
1261     {},
1262 };
1263 
1264 MODULE_DEVICE_TABLE(of, rk_pcie_of_match);
1265 
1266 static const struct dw_pcie_ops dw_pcie_ops = {
1267     .start_link = rk_pcie_establish_link,
1268     .link_up = rk_pcie_link_up,
1269 };
1270 
rk1808_pcie_fixup(struct rk_pcie * rk_pcie,struct device_node * np)1271 static int rk1808_pcie_fixup(struct rk_pcie *rk_pcie, struct device_node *np)
1272 {
1273     int ret;
1274     struct device *dev = rk_pcie->pci->dev;
1275 
1276     rk_pcie->usb_pcie_grf = syscon_regmap_lookup_by_phandle(np, "rockchip,usbpciegrf");
1277     if (IS_ERR(rk_pcie->usb_pcie_grf)) {
1278         dev_err(dev, "failed to find usb_pcie_grf regmap\n");
1279         return PTR_ERR(rk_pcie->usb_pcie_grf);
1280     }
1281 
1282     rk_pcie->pmu_grf = syscon_regmap_lookup_by_phandle(np, "rockchip,pmugrf");
1283     if (IS_ERR(rk_pcie->pmu_grf)) {
1284         dev_err(dev, "failed to find pmugrf regmap\n");
1285         return PTR_ERR(rk_pcie->pmu_grf);
1286     }
1287 
1288     /* Workaround for pcie, switch to PCIe_PRSTNm0 */
1289     ret = regmap_write(rk_pcie->pmu_grf, 0x100, 0x01000100);
1290     if (ret) {
1291         return ret;
1292     }
1293 
1294     ret = regmap_write(rk_pcie->pmu_grf, 0x0, 0x0c000000);
1295     if (ret) {
1296         return ret;
1297     }
1298 
1299     /* release link reset grant */
1300     ret = rk_pcie_reset_grant_ctrl(rk_pcie, true);
1301     return ret;
1302 }
1303 
rk_pcie_fast_link_setup(struct rk_pcie * rk_pcie)1304 static void rk_pcie_fast_link_setup(struct rk_pcie *rk_pcie)
1305 {
1306     u32 val;
1307 
1308     /* LTSSM EN ctrl mode */
1309     val = rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_HOT_RESET_CTRL);
1310     val |= PCIE_LTSSM_ENABLE_ENHANCE | (PCIE_LTSSM_ENABLE_ENHANCE << 0x10);
1311     rk_pcie_writel_apb(rk_pcie, PCIE_CLIENT_HOT_RESET_CTRL, val);
1312 }
1313 
rk_pcie_intx_map(struct irq_domain * domain,unsigned int irq,irq_hw_number_t hwirq)1314 static int rk_pcie_intx_map(struct irq_domain *domain, unsigned int irq, irq_hw_number_t hwirq)
1315 {
1316     irq_set_chip_and_handler(irq, &dummy_irq_chip, handle_simple_irq);
1317     irq_set_chip_data(irq, domain->host_data);
1318 
1319     return 0;
1320 }
1321 
1322 static const struct irq_domain_ops intx_domain_ops = {
1323     .map = rk_pcie_intx_map,
1324 };
1325 
rk_pcie_legacy_int_handler(struct irq_desc * desc)1326 static void rk_pcie_legacy_int_handler(struct irq_desc *desc)
1327 {
1328     struct irq_chip *chip = irq_desc_get_chip(desc);
1329     struct rk_pcie *rockchip = irq_desc_get_handler_data(desc);
1330     struct device *dev = rockchip->pci->dev;
1331     u32 reg;
1332     u32 hwirq;
1333     u32 virq;
1334 
1335     chained_irq_enter(chip, desc);
1336 
1337     reg = rk_pcie_readl_apb(rockchip, PCIE_CLIENT_INTR_STATUS_LEGACY);
1338     reg = reg & 0xf;
1339 
1340     while (reg) {
1341         hwirq = ffs(reg) - 1;
1342         reg &= ~BIT(hwirq);
1343 
1344         virq = irq_find_mapping(rockchip->irq_domain, hwirq);
1345         if (virq) {
1346             generic_handle_irq(virq);
1347         } else {
1348             dev_err(dev, "unexpected IRQ, INT%d\n", hwirq);
1349         }
1350     }
1351 
1352     chained_irq_exit(chip, desc);
1353 }
1354 
rk_pcie_init_irq_domain(struct rk_pcie * rockchip)1355 static int rk_pcie_init_irq_domain(struct rk_pcie *rockchip)
1356 {
1357     struct device *dev = rockchip->pci->dev;
1358     struct device_node *intc = of_get_next_child(dev->of_node, NULL);
1359 
1360     if (!intc) {
1361         dev_err(dev, "missing child interrupt-controller node\n");
1362         return -EINVAL;
1363     }
1364 
1365     rockchip->irq_domain = irq_domain_add_linear(intc, PCI_NUM_INTX, &intx_domain_ops, rockchip);
1366     if (!rockchip->irq_domain) {
1367         dev_err(dev, "failed to get a INTx IRQ domain\n");
1368         return -EINVAL;
1369     }
1370 
1371     return 0;
1372 }
1373 
rk_pcie_enable_power(struct rk_pcie * rk_pcie)1374 static int rk_pcie_enable_power(struct rk_pcie *rk_pcie)
1375 {
1376     int ret = 0;
1377     struct device *dev = rk_pcie->pci->dev;
1378 
1379     if (IS_ERR(rk_pcie->vpcie3v3)) {
1380         return ret;
1381     }
1382 
1383     ret = regulator_set_voltage(rk_pcie->vpcie3v3, FAKE_MAX_VOL, FAKE_MAX_VOL);
1384     if (ret) {
1385         dev_err(dev, "fail to set vpcie3v3 regulator\n");
1386         return ret;
1387     }
1388 
1389     ret = regulator_enable(rk_pcie->vpcie3v3);
1390     if (ret) {
1391         dev_err(dev, "fail to enable vpcie3v3 regulator\n");
1392     }
1393 
1394     return ret;
1395 }
1396 
rk_pcie_disable_power(struct rk_pcie * rk_pcie)1397 static int rk_pcie_disable_power(struct rk_pcie *rk_pcie)
1398 {
1399     int ret = 0;
1400     struct device *dev = rk_pcie->pci->dev;
1401 
1402     if (IS_ERR(rk_pcie->vpcie3v3)) {
1403         return ret;
1404     }
1405 
1406     ret = regulator_set_voltage(rk_pcie->vpcie3v3, FAKE_MIN_VOL, FAKE_MIN_VOL);
1407     if (ret) {
1408         dev_err(dev, "fail to set vpcie3v3 regulator\n");
1409         return ret;
1410     }
1411 
1412     ret = regulator_disable(rk_pcie->vpcie3v3);
1413     if (ret) {
1414         dev_err(dev, "fail to disable vpcie3v3 regulator\n");
1415     }
1416 
1417     return ret;
1418 }
1419 
rk_pcie_really_probe(void * p)1420 static int rk_pcie_really_probe(void *p)
1421 {
1422     struct platform_device *pdev = p;
1423     struct device *dev = &pdev->dev;
1424     struct rk_pcie *rk_pcie;
1425     struct dw_pcie *pci;
1426     int ret;
1427     const struct of_device_id *match;
1428     const struct rk_pcie_of_data *data;
1429     enum rk_pcie_device_mode mode;
1430     struct device_node *np = pdev->dev.of_node;
1431     struct platform_driver *drv = to_platform_driver(dev->driver);
1432     u32 val;
1433     int irq;
1434 
1435     match = of_match_device(rk_pcie_of_match, dev);
1436     if (!match) {
1437         return -EINVAL;
1438     }
1439 
1440     data = (struct rk_pcie_of_data *)match->data;
1441     mode = (enum rk_pcie_device_mode)data->mode;
1442 
1443     rk_pcie = devm_kzalloc(dev, sizeof(*rk_pcie), GFP_KERNEL);
1444     if (!rk_pcie) {
1445         return -ENOMEM;
1446     }
1447 
1448     pci = devm_kzalloc(dev, sizeof(*pci), GFP_KERNEL);
1449     if (!pci) {
1450         return -ENOMEM;
1451     }
1452 
1453     pci->dev = dev;
1454     pci->ops = &dw_pcie_ops;
1455 
1456     rk_pcie->mode = mode;
1457     rk_pcie->pci = pci;
1458 
1459     if (of_device_is_compatible(np, "rockchip,rk1808-pcie") || of_device_is_compatible(np, "rockchip,rk1808-pcie-ep")) {
1460         rk_pcie->is_rk1808 = true;
1461     } else {
1462         rk_pcie->is_rk1808 = false;
1463     }
1464 
1465     if (device_property_read_bool(dev, "rockchip,bifurcation")) {
1466         rk_pcie->bifurcation = true;
1467     }
1468 
1469     ret = rk_pcie_resource_get(pdev, rk_pcie);
1470     if (ret) {
1471         dev_err(dev, "resource init failed\n");
1472         return ret;
1473     }
1474 
1475     /* DON'T MOVE ME: must be enable before phy init */
1476     rk_pcie->vpcie3v3 = devm_regulator_get_optional(dev, "vpcie3v3");
1477     if (IS_ERR(rk_pcie->vpcie3v3)) {
1478         if (PTR_ERR(rk_pcie->vpcie3v3) != -ENODEV) {
1479             return PTR_ERR(rk_pcie->vpcie3v3);
1480         }
1481         dev_info(dev, "no vpcie3v3 regulator found\n");
1482     }
1483 
1484     ret = rk_pcie_enable_power(rk_pcie);
1485     if (ret) {
1486         return ret;
1487     }
1488 
1489     ret = rk_pcie_phy_init(rk_pcie);
1490     if (ret) {
1491         dev_err(dev, "phy init failed\n");
1492         goto disable_vpcie3v3;
1493     }
1494 
1495     ret = rk_pcie_reset_control_release(rk_pcie);
1496     if (ret) {
1497         dev_err(dev, "reset control init failed\n");
1498         goto disable_vpcie3v3;
1499     }
1500 
1501     ret = rk_pcie_request_sys_irq(rk_pcie, pdev);
1502     if (ret) {
1503         dev_err(dev, "pcie irq init failed\n");
1504         goto disable_vpcie3v3;
1505     }
1506 
1507     platform_set_drvdata(pdev, rk_pcie);
1508 
1509     ret = rk_pcie_clk_init(rk_pcie);
1510     if (ret) {
1511         dev_err(dev, "clock init failed\n");
1512         goto disable_vpcie3v3;
1513     }
1514 
1515     dw_pcie_dbi_ro_wr_en(pci);
1516 
1517     if (rk_pcie->is_rk1808) {
1518         ret = rk1808_pcie_fixup(rk_pcie, np);
1519         if (ret) {
1520             goto deinit_clk;
1521         }
1522     } else {
1523         rk_pcie_fast_link_setup(rk_pcie);
1524     }
1525 
1526     /* Legacy interrupt is optional */
1527     ret = rk_pcie_init_irq_domain(rk_pcie);
1528     if (!ret) {
1529         irq = platform_get_irq_byname(pdev, "legacy");
1530         if (irq >= 0) {
1531             irq_set_chained_handler_and_data(irq, rk_pcie_legacy_int_handler, rk_pcie);
1532             /* Unmask all legacy interrupt from INTA~INTD  */
1533             rk_pcie_writel_apb(rk_pcie, PCIE_CLIENT_INTR_MASK_LEGACY, UNMASK_ALL_LEGACY_INT);
1534         }
1535 
1536         dev_info(dev, "missing legacy IRQ resource\n");
1537     }
1538 
1539     /* Set PCIe mode */
1540     rk_pcie_set_mode(rk_pcie);
1541 
1542     /* Force into loopback master mode */
1543     if (device_property_read_bool(dev, "rockchip,lpbk-master")) {
1544         val = dw_pcie_readl_dbi(pci, PCIE_PORT_LINK_CONTROL);
1545         val |= PORT_LINK_LPBK_ENABLE;
1546         dw_pcie_writel_dbi(pci, PCIE_PORT_LINK_CONTROL, val);
1547         rk_pcie->is_signal_test = true;
1548     }
1549 
1550     /* Force into compliance mode */
1551     if (device_property_read_bool(dev, "rockchip,compliance-mode")) {
1552         val = dw_pcie_readl_dbi(pci, PCIE_CAP_LINK_CONTROL2_LINK_STATUS);
1553         val |= BIT(4);
1554         dw_pcie_writel_dbi(pci, PCIE_CAP_LINK_CONTROL2_LINK_STATUS, val);
1555         rk_pcie->is_signal_test = true;
1556     }
1557 
1558     switch (rk_pcie->mode) {
1559         case RK_PCIE_RC_TYPE:
1560             ret = rk_add_pcie_port(rk_pcie);
1561             break;
1562         case RK_PCIE_EP_TYPE:
1563             ret = rk_pcie_add_ep(rk_pcie);
1564             break;
1565     }
1566 
1567     if (rk_pcie->is_signal_test == true) {
1568         return 0;
1569     }
1570 
1571     if (ret) {
1572         goto remove_irq_domain;
1573     }
1574 
1575     if (rk_pcie->dma_obj) {
1576         rk_pcie->dma_obj->start_dma_func = rk_pcie_start_dma_dwc;
1577         rk_pcie->dma_obj->config_dma_func = rk_pcie_config_dma_dwc;
1578     }
1579 
1580     if (rk_pcie->is_rk1808) {
1581         /* hold link reset grant after link-up */
1582         ret = rk_pcie_reset_grant_ctrl(rk_pcie, false);
1583         if (ret) {
1584             goto remove_irq_domain;
1585         }
1586     }
1587 
1588     dw_pcie_dbi_ro_wr_dis(pci);
1589 
1590     device_init_wakeup(dev, true);
1591     drv->driver.pm = &rockchip_dw_pcie_pm_ops;
1592 
1593     return 0;
1594 
1595 remove_irq_domain:
1596     if (rk_pcie->irq_domain) {
1597         irq_domain_remove(rk_pcie->irq_domain);
1598     }
1599 deinit_clk:
1600     rk_pcie_clk_deinit(rk_pcie);
1601 disable_vpcie3v3:
1602     rk_pcie_disable_power(rk_pcie);
1603 
1604     return ret;
1605 }
1606 
rk_pcie_probe(struct platform_device * pdev)1607 static int rk_pcie_probe(struct platform_device *pdev)
1608 {
1609     struct task_struct *tsk;
1610 
1611     tsk = kthread_run(rk_pcie_really_probe, pdev, "rk-pcie");
1612     if (IS_ERR(tsk)) {
1613         dev_err(&pdev->dev, "start rk-pcie thread failed\n");
1614         return PTR_ERR(tsk);
1615     }
1616     return 0;
1617 }
1618 
rockchip_dw_pcie_suspend(struct device * dev)1619 static int __maybe_unused rockchip_dw_pcie_suspend(struct device *dev)
1620 {
1621     struct rk_pcie *rk_pcie = dev_get_drvdata(dev);
1622     int ret;
1623 
1624     rk_pcie_link_status_clear(rk_pcie);
1625     rk_pcie_disable_ltssm(rk_pcie);
1626 
1627     /* make sure assert phy success */
1628     usleep_range(200, 300);
1629 
1630     phy_power_off(rk_pcie->phy);
1631     phy_exit(rk_pcie->phy);
1632 
1633     clk_bulk_disable(rk_pcie->clk_cnt, rk_pcie->clks);
1634 
1635     rk_pcie->in_suspend = true;
1636 
1637     ret = rk_pcie_disable_power(rk_pcie);
1638 
1639     return ret;
1640 }
1641 
rockchip_dw_pcie_resume(struct device * dev)1642 static int __maybe_unused rockchip_dw_pcie_resume(struct device *dev)
1643 {
1644     struct rk_pcie *rk_pcie = dev_get_drvdata(dev);
1645     bool std_rc = rk_pcie->mode == RK_PCIE_RC_TYPE && !rk_pcie->dma_obj;
1646     int ret;
1647 
1648     ret = rk_pcie_enable_power(rk_pcie);
1649     if (ret) {
1650         return ret;
1651     }
1652 
1653     ret = clk_bulk_enable(rk_pcie->clk_cnt, rk_pcie->clks);
1654     if (ret) {
1655         clk_bulk_unprepare(rk_pcie->clk_cnt, rk_pcie->clks);
1656         return ret;
1657     }
1658 
1659     ret = phy_set_mode_ext(rk_pcie->phy, rk_pcie->phy_mode, rk_pcie->phy_sub_mode);
1660     if (ret) {
1661         dev_err(dev, "fail to set phy to mode %s, err %d\n", (rk_pcie->phy_sub_mode == PHY_MODE_PCIE_RC) ? "RC" : "EP",
1662                 ret);
1663         return ret;
1664     }
1665 
1666     ret = phy_init(rk_pcie->phy);
1667     if (ret < 0) {
1668         dev_err(dev, "fail to init phy, err %d\n", ret);
1669         return ret;
1670     }
1671 
1672     phy_power_on(rk_pcie->phy);
1673 
1674     dw_pcie_dbi_ro_wr_en(rk_pcie->pci);
1675 
1676     if (rk_pcie->is_rk1808) {
1677         /* release link reset grant */
1678         ret = rk_pcie_reset_grant_ctrl(rk_pcie, true);
1679         if (ret) {
1680             return ret;
1681         }
1682     } else {
1683         rk_pcie_fast_link_setup(rk_pcie);
1684     }
1685 
1686     /* Set PCIe mode */
1687     rk_pcie_set_mode(rk_pcie);
1688 
1689     if (std_rc) {
1690         dw_pcie_setup_rc(&rk_pcie->pci->pp);
1691     }
1692 
1693     ret = rk_pcie_establish_link(rk_pcie->pci);
1694     if (ret) {
1695         dev_err(dev, "failed to establish pcie link\n");
1696         goto err;
1697     }
1698 
1699     if (std_rc) {
1700         goto std_rc_done;
1701     }
1702 
1703     ret = rk_pcie_ep_atu_init(rk_pcie);
1704     if (ret) {
1705         dev_err(dev, "failed to init ep device\n");
1706         goto err;
1707     }
1708 
1709     rk_pcie_ep_setup(rk_pcie);
1710 
1711     rk_pcie->in_suspend = false;
1712 
1713 std_rc_done:
1714     dw_pcie_dbi_ro_wr_dis(rk_pcie->pci);
1715     /* hold link reset grant after link-up */
1716     if (rk_pcie->is_rk1808) {
1717         ret = rk_pcie_reset_grant_ctrl(rk_pcie, false);
1718         if (ret) {
1719             goto err;
1720         }
1721     }
1722 
1723     return 0;
1724 err:
1725     rk_pcie_disable_power(rk_pcie);
1726 
1727     return ret;
1728 }
1729 
1730 static const struct dev_pm_ops rockchip_dw_pcie_pm_ops = {
1731     SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(rockchip_dw_pcie_suspend, rockchip_dw_pcie_resume)};
1732 
1733 static struct platform_driver rk_plat_pcie_driver = {
1734     .driver =
1735         {
1736             .name = "rk-pcie",
1737             .of_match_table = rk_pcie_of_match,
1738             .suppress_bind_attrs = true,
1739         },
1740 };
1741 
1742 module_platform_driver_probe(rk_plat_pcie_driver, rk_pcie_probe);
1743 
1744 MODULE_AUTHOR("Simon Xue <xxm@rock-chips.com>");
1745 MODULE_DESCRIPTION("RockChip PCIe Controller driver");
1746 MODULE_LICENSE("GPL v2");
1747