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, ®);
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(®);
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