1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Synopsys DesignWare PCIe host controller driver
4 *
5 * Copyright (C) 2013 Samsung Electronics Co., Ltd.
6 * https://www.samsung.com
7 *
8 * Author: Jingoo Han <jg1.han@samsung.com>
9 */
10
11 #include <linux/align.h>
12 #include <linux/bitops.h>
13 #include <linux/delay.h>
14 #include <linux/of.h>
15 #include <linux/of_platform.h>
16 #include <linux/sizes.h>
17 #include <linux/types.h>
18
19 #include "../../pci.h"
20 #include "pcie-designware.h"
21
dw_pcie_version_detect(struct dw_pcie * pci)22 void dw_pcie_version_detect(struct dw_pcie *pci)
23 {
24 u32 ver;
25
26 /* The content of the CSR is zero on DWC PCIe older than v4.70a */
27 ver = dw_pcie_readl_dbi(pci, PCIE_VERSION_NUMBER);
28 if (!ver)
29 return;
30
31 if (pci->version && pci->version != ver)
32 dev_warn(pci->dev, "Versions don't match (%08x != %08x)\n",
33 pci->version, ver);
34 else
35 pci->version = ver;
36
37 ver = dw_pcie_readl_dbi(pci, PCIE_VERSION_TYPE);
38
39 if (pci->type && pci->type != ver)
40 dev_warn(pci->dev, "Types don't match (%08x != %08x)\n",
41 pci->type, ver);
42 else
43 pci->type = ver;
44 }
45
46 /*
47 * These interfaces resemble the pci_find_*capability() interfaces, but these
48 * are for configuring host controllers, which are bridges *to* PCI devices but
49 * are not PCI devices themselves.
50 */
__dw_pcie_find_next_cap(struct dw_pcie * pci,u8 cap_ptr,u8 cap)51 static u8 __dw_pcie_find_next_cap(struct dw_pcie *pci, u8 cap_ptr,
52 u8 cap)
53 {
54 u8 cap_id, next_cap_ptr;
55 u16 reg;
56
57 if (!cap_ptr)
58 return 0;
59
60 reg = dw_pcie_readw_dbi(pci, cap_ptr);
61 cap_id = (reg & 0x00ff);
62
63 if (cap_id > PCI_CAP_ID_MAX)
64 return 0;
65
66 if (cap_id == cap)
67 return cap_ptr;
68
69 next_cap_ptr = (reg & 0xff00) >> 8;
70 return __dw_pcie_find_next_cap(pci, next_cap_ptr, cap);
71 }
72
dw_pcie_find_capability(struct dw_pcie * pci,u8 cap)73 u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap)
74 {
75 u8 next_cap_ptr;
76 u16 reg;
77
78 reg = dw_pcie_readw_dbi(pci, PCI_CAPABILITY_LIST);
79 next_cap_ptr = (reg & 0x00ff);
80
81 return __dw_pcie_find_next_cap(pci, next_cap_ptr, cap);
82 }
83 EXPORT_SYMBOL_GPL(dw_pcie_find_capability);
84
dw_pcie_find_next_ext_capability(struct dw_pcie * pci,u16 start,u8 cap)85 static u16 dw_pcie_find_next_ext_capability(struct dw_pcie *pci, u16 start,
86 u8 cap)
87 {
88 u32 header;
89 int ttl;
90 int pos = PCI_CFG_SPACE_SIZE;
91
92 /* minimum 8 bytes per capability */
93 ttl = (PCI_CFG_SPACE_EXP_SIZE - PCI_CFG_SPACE_SIZE) / 8;
94
95 if (start)
96 pos = start;
97
98 header = dw_pcie_readl_dbi(pci, pos);
99 /*
100 * If we have no capabilities, this is indicated by cap ID,
101 * cap version and next pointer all being 0.
102 */
103 if (header == 0)
104 return 0;
105
106 while (ttl-- > 0) {
107 if (PCI_EXT_CAP_ID(header) == cap && pos != start)
108 return pos;
109
110 pos = PCI_EXT_CAP_NEXT(header);
111 if (pos < PCI_CFG_SPACE_SIZE)
112 break;
113
114 header = dw_pcie_readl_dbi(pci, pos);
115 }
116
117 return 0;
118 }
119
dw_pcie_find_ext_capability(struct dw_pcie * pci,u8 cap)120 u16 dw_pcie_find_ext_capability(struct dw_pcie *pci, u8 cap)
121 {
122 return dw_pcie_find_next_ext_capability(pci, 0, cap);
123 }
124 EXPORT_SYMBOL_GPL(dw_pcie_find_ext_capability);
125
dw_pcie_read(void __iomem * addr,int size,u32 * val)126 int dw_pcie_read(void __iomem *addr, int size, u32 *val)
127 {
128 if (!IS_ALIGNED((uintptr_t)addr, size)) {
129 *val = 0;
130 return PCIBIOS_BAD_REGISTER_NUMBER;
131 }
132
133 if (size == 4) {
134 *val = readl(addr);
135 } else if (size == 2) {
136 *val = readw(addr);
137 } else if (size == 1) {
138 *val = readb(addr);
139 } else {
140 *val = 0;
141 return PCIBIOS_BAD_REGISTER_NUMBER;
142 }
143
144 return PCIBIOS_SUCCESSFUL;
145 }
146 EXPORT_SYMBOL_GPL(dw_pcie_read);
147
dw_pcie_write(void __iomem * addr,int size,u32 val)148 int dw_pcie_write(void __iomem *addr, int size, u32 val)
149 {
150 if (!IS_ALIGNED((uintptr_t)addr, size))
151 return PCIBIOS_BAD_REGISTER_NUMBER;
152
153 if (size == 4)
154 writel(val, addr);
155 else if (size == 2)
156 writew(val, addr);
157 else if (size == 1)
158 writeb(val, addr);
159 else
160 return PCIBIOS_BAD_REGISTER_NUMBER;
161
162 return PCIBIOS_SUCCESSFUL;
163 }
164 EXPORT_SYMBOL_GPL(dw_pcie_write);
165
dw_pcie_read_dbi(struct dw_pcie * pci,u32 reg,size_t size)166 u32 dw_pcie_read_dbi(struct dw_pcie *pci, u32 reg, size_t size)
167 {
168 int ret;
169 u32 val;
170
171 if (pci->ops && pci->ops->read_dbi)
172 return pci->ops->read_dbi(pci, pci->dbi_base, reg, size);
173
174 ret = dw_pcie_read(pci->dbi_base + reg, size, &val);
175 if (ret)
176 dev_err(pci->dev, "Read DBI address failed\n");
177
178 return val;
179 }
180 EXPORT_SYMBOL_GPL(dw_pcie_read_dbi);
181
dw_pcie_write_dbi(struct dw_pcie * pci,u32 reg,size_t size,u32 val)182 void dw_pcie_write_dbi(struct dw_pcie *pci, u32 reg, size_t size, u32 val)
183 {
184 int ret;
185
186 if (pci->ops && pci->ops->write_dbi) {
187 pci->ops->write_dbi(pci, pci->dbi_base, reg, size, val);
188 return;
189 }
190
191 ret = dw_pcie_write(pci->dbi_base + reg, size, val);
192 if (ret)
193 dev_err(pci->dev, "Write DBI address failed\n");
194 }
195 EXPORT_SYMBOL_GPL(dw_pcie_write_dbi);
196
dw_pcie_write_dbi2(struct dw_pcie * pci,u32 reg,size_t size,u32 val)197 void dw_pcie_write_dbi2(struct dw_pcie *pci, u32 reg, size_t size, u32 val)
198 {
199 int ret;
200
201 if (pci->ops && pci->ops->write_dbi2) {
202 pci->ops->write_dbi2(pci, pci->dbi_base2, reg, size, val);
203 return;
204 }
205
206 ret = dw_pcie_write(pci->dbi_base2 + reg, size, val);
207 if (ret)
208 dev_err(pci->dev, "write DBI address failed\n");
209 }
210
dw_pcie_select_atu(struct dw_pcie * pci,u32 dir,u32 index)211 static inline void __iomem *dw_pcie_select_atu(struct dw_pcie *pci, u32 dir,
212 u32 index)
213 {
214 if (pci->iatu_unroll_enabled)
215 return pci->atu_base + PCIE_ATU_UNROLL_BASE(dir, index);
216
217 dw_pcie_writel_dbi(pci, PCIE_ATU_VIEWPORT, dir | index);
218 return pci->atu_base;
219 }
220
dw_pcie_readl_atu(struct dw_pcie * pci,u32 dir,u32 index,u32 reg)221 static u32 dw_pcie_readl_atu(struct dw_pcie *pci, u32 dir, u32 index, u32 reg)
222 {
223 void __iomem *base;
224 int ret;
225 u32 val;
226
227 base = dw_pcie_select_atu(pci, dir, index);
228
229 if (pci->ops && pci->ops->read_dbi)
230 return pci->ops->read_dbi(pci, base, reg, 4);
231
232 ret = dw_pcie_read(base + reg, 4, &val);
233 if (ret)
234 dev_err(pci->dev, "Read ATU address failed\n");
235
236 return val;
237 }
238
dw_pcie_writel_atu(struct dw_pcie * pci,u32 dir,u32 index,u32 reg,u32 val)239 static void dw_pcie_writel_atu(struct dw_pcie *pci, u32 dir, u32 index,
240 u32 reg, u32 val)
241 {
242 void __iomem *base;
243 int ret;
244
245 base = dw_pcie_select_atu(pci, dir, index);
246
247 if (pci->ops && pci->ops->write_dbi) {
248 pci->ops->write_dbi(pci, base, reg, 4, val);
249 return;
250 }
251
252 ret = dw_pcie_write(base + reg, 4, val);
253 if (ret)
254 dev_err(pci->dev, "Write ATU address failed\n");
255 }
256
dw_pcie_readl_atu_ob(struct dw_pcie * pci,u32 index,u32 reg)257 static inline u32 dw_pcie_readl_atu_ob(struct dw_pcie *pci, u32 index, u32 reg)
258 {
259 return dw_pcie_readl_atu(pci, PCIE_ATU_REGION_DIR_OB, index, reg);
260 }
261
dw_pcie_writel_atu_ob(struct dw_pcie * pci,u32 index,u32 reg,u32 val)262 static inline void dw_pcie_writel_atu_ob(struct dw_pcie *pci, u32 index, u32 reg,
263 u32 val)
264 {
265 dw_pcie_writel_atu(pci, PCIE_ATU_REGION_DIR_OB, index, reg, val);
266 }
267
dw_pcie_enable_ecrc(u32 val)268 static inline u32 dw_pcie_enable_ecrc(u32 val)
269 {
270 /*
271 * DesignWare core version 4.90A has a design issue where the 'TD'
272 * bit in the Control register-1 of the ATU outbound region acts
273 * like an override for the ECRC setting, i.e., the presence of TLP
274 * Digest (ECRC) in the outgoing TLPs is solely determined by this
275 * bit. This is contrary to the PCIe spec which says that the
276 * enablement of the ECRC is solely determined by the AER
277 * registers.
278 *
279 * Because of this, even when the ECRC is enabled through AER
280 * registers, the transactions going through ATU won't have TLP
281 * Digest as there is no way the PCI core AER code could program
282 * the TD bit which is specific to the DesignWare core.
283 *
284 * The best way to handle this scenario is to program the TD bit
285 * always. It affects only the traffic from root port to downstream
286 * devices.
287 *
288 * At this point,
289 * When ECRC is enabled in AER registers, everything works normally
290 * When ECRC is NOT enabled in AER registers, then,
291 * on Root Port:- TLP Digest (DWord size) gets appended to each packet
292 * even through it is not required. Since downstream
293 * TLPs are mostly for configuration accesses and BAR
294 * accesses, they are not in critical path and won't
295 * have much negative effect on the performance.
296 * on End Point:- TLP Digest is received for some/all the packets coming
297 * from the root port. TLP Digest is ignored because,
298 * as per the PCIe Spec r5.0 v1.0 section 2.2.3
299 * "TLP Digest Rules", when an endpoint receives TLP
300 * Digest when its ECRC check functionality is disabled
301 * in AER registers, received TLP Digest is just ignored.
302 * Since there is no issue or error reported either side, best way to
303 * handle the scenario is to program TD bit by default.
304 */
305
306 return val | PCIE_ATU_TD;
307 }
308
__dw_pcie_prog_outbound_atu(struct dw_pcie * pci,u8 func_no,int index,int type,u64 cpu_addr,u64 pci_addr,u64 size)309 static int __dw_pcie_prog_outbound_atu(struct dw_pcie *pci, u8 func_no,
310 int index, int type, u64 cpu_addr,
311 u64 pci_addr, u64 size)
312 {
313 u32 retries, val;
314 u64 limit_addr;
315
316 if (pci->ops && pci->ops->cpu_addr_fixup)
317 cpu_addr = pci->ops->cpu_addr_fixup(pci, cpu_addr);
318
319 limit_addr = cpu_addr + size - 1;
320
321 if ((limit_addr & ~pci->region_limit) != (cpu_addr & ~pci->region_limit) ||
322 !IS_ALIGNED(cpu_addr, pci->region_align) ||
323 !IS_ALIGNED(pci_addr, pci->region_align) || !size) {
324 return -EINVAL;
325 }
326
327 dw_pcie_writel_atu_ob(pci, index, PCIE_ATU_LOWER_BASE,
328 lower_32_bits(cpu_addr));
329 dw_pcie_writel_atu_ob(pci, index, PCIE_ATU_UPPER_BASE,
330 upper_32_bits(cpu_addr));
331
332 dw_pcie_writel_atu_ob(pci, index, PCIE_ATU_LIMIT,
333 lower_32_bits(limit_addr));
334 if (dw_pcie_ver_is_ge(pci, 460A))
335 dw_pcie_writel_atu_ob(pci, index, PCIE_ATU_UPPER_LIMIT,
336 upper_32_bits(limit_addr));
337
338 dw_pcie_writel_atu_ob(pci, index, PCIE_ATU_LOWER_TARGET,
339 lower_32_bits(pci_addr));
340 dw_pcie_writel_atu_ob(pci, index, PCIE_ATU_UPPER_TARGET,
341 upper_32_bits(pci_addr));
342
343 val = type | PCIE_ATU_FUNC_NUM(func_no);
344 if (upper_32_bits(limit_addr) > upper_32_bits(cpu_addr) &&
345 dw_pcie_ver_is_ge(pci, 460A))
346 val |= PCIE_ATU_INCREASE_REGION_SIZE;
347 if (dw_pcie_ver_is(pci, 490A))
348 val = dw_pcie_enable_ecrc(val);
349 dw_pcie_writel_atu_ob(pci, index, PCIE_ATU_REGION_CTRL1, val);
350
351 dw_pcie_writel_atu_ob(pci, index, PCIE_ATU_REGION_CTRL2, PCIE_ATU_ENABLE);
352
353 /*
354 * Make sure ATU enable takes effect before any subsequent config
355 * and I/O accesses.
356 */
357 for (retries = 0; retries < LINK_WAIT_MAX_IATU_RETRIES; retries++) {
358 val = dw_pcie_readl_atu_ob(pci, index, PCIE_ATU_REGION_CTRL2);
359 if (val & PCIE_ATU_ENABLE)
360 return 0;
361
362 mdelay(LINK_WAIT_IATU);
363 }
364
365 dev_err(pci->dev, "Outbound iATU is not being enabled\n");
366
367 return -ETIMEDOUT;
368 }
369
dw_pcie_prog_outbound_atu(struct dw_pcie * pci,int index,int type,u64 cpu_addr,u64 pci_addr,u64 size)370 int dw_pcie_prog_outbound_atu(struct dw_pcie *pci, int index, int type,
371 u64 cpu_addr, u64 pci_addr, u64 size)
372 {
373 return __dw_pcie_prog_outbound_atu(pci, 0, index, type,
374 cpu_addr, pci_addr, size);
375 }
376
dw_pcie_prog_ep_outbound_atu(struct dw_pcie * pci,u8 func_no,int index,int type,u64 cpu_addr,u64 pci_addr,u64 size)377 int dw_pcie_prog_ep_outbound_atu(struct dw_pcie *pci, u8 func_no, int index,
378 int type, u64 cpu_addr, u64 pci_addr,
379 u64 size)
380 {
381 return __dw_pcie_prog_outbound_atu(pci, func_no, index, type,
382 cpu_addr, pci_addr, size);
383 }
384
dw_pcie_readl_atu_ib(struct dw_pcie * pci,u32 index,u32 reg)385 static inline u32 dw_pcie_readl_atu_ib(struct dw_pcie *pci, u32 index, u32 reg)
386 {
387 return dw_pcie_readl_atu(pci, PCIE_ATU_REGION_DIR_IB, index, reg);
388 }
389
dw_pcie_writel_atu_ib(struct dw_pcie * pci,u32 index,u32 reg,u32 val)390 static inline void dw_pcie_writel_atu_ib(struct dw_pcie *pci, u32 index, u32 reg,
391 u32 val)
392 {
393 dw_pcie_writel_atu(pci, PCIE_ATU_REGION_DIR_IB, index, reg, val);
394 }
395
dw_pcie_prog_inbound_atu(struct dw_pcie * pci,u8 func_no,int index,int type,u64 cpu_addr,u8 bar)396 int dw_pcie_prog_inbound_atu(struct dw_pcie *pci, u8 func_no, int index,
397 int type, u64 cpu_addr, u8 bar)
398 {
399 u32 retries, val;
400
401 if (!IS_ALIGNED(cpu_addr, pci->region_align))
402 return -EINVAL;
403
404 dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_LOWER_TARGET,
405 lower_32_bits(cpu_addr));
406 dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_UPPER_TARGET,
407 upper_32_bits(cpu_addr));
408
409 dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_REGION_CTRL1, type |
410 PCIE_ATU_FUNC_NUM(func_no));
411 dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_REGION_CTRL2,
412 PCIE_ATU_ENABLE | PCIE_ATU_FUNC_NUM_MATCH_EN |
413 PCIE_ATU_BAR_MODE_ENABLE | (bar << 8));
414
415 /*
416 * Make sure ATU enable takes effect before any subsequent config
417 * and I/O accesses.
418 */
419 for (retries = 0; retries < LINK_WAIT_MAX_IATU_RETRIES; retries++) {
420 val = dw_pcie_readl_atu_ib(pci, index, PCIE_ATU_REGION_CTRL2);
421 if (val & PCIE_ATU_ENABLE)
422 return 0;
423
424 mdelay(LINK_WAIT_IATU);
425 }
426
427 dev_err(pci->dev, "Inbound iATU is not being enabled\n");
428
429 return -ETIMEDOUT;
430 }
431
dw_pcie_disable_atu(struct dw_pcie * pci,u32 dir,int index)432 void dw_pcie_disable_atu(struct dw_pcie *pci, u32 dir, int index)
433 {
434 dw_pcie_writel_atu(pci, dir, index, PCIE_ATU_REGION_CTRL2, 0);
435 }
436
dw_pcie_wait_for_link(struct dw_pcie * pci)437 int dw_pcie_wait_for_link(struct dw_pcie *pci)
438 {
439 u32 offset, val;
440 int retries;
441
442 /* Check if the link is up or not */
443 for (retries = 0; retries < LINK_WAIT_MAX_RETRIES; retries++) {
444 if (dw_pcie_link_up(pci))
445 break;
446
447 usleep_range(LINK_WAIT_USLEEP_MIN, LINK_WAIT_USLEEP_MAX);
448 }
449
450 if (retries >= LINK_WAIT_MAX_RETRIES) {
451 dev_err(pci->dev, "Phy link never came up\n");
452 return -ETIMEDOUT;
453 }
454
455 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
456 val = dw_pcie_readw_dbi(pci, offset + PCI_EXP_LNKSTA);
457
458 dev_info(pci->dev, "PCIe Gen.%u x%u link up\n",
459 FIELD_GET(PCI_EXP_LNKSTA_CLS, val),
460 FIELD_GET(PCI_EXP_LNKSTA_NLW, val));
461
462 return 0;
463 }
464 EXPORT_SYMBOL_GPL(dw_pcie_wait_for_link);
465
dw_pcie_link_up(struct dw_pcie * pci)466 int dw_pcie_link_up(struct dw_pcie *pci)
467 {
468 u32 val;
469
470 if (pci->ops && pci->ops->link_up)
471 return pci->ops->link_up(pci);
472
473 val = dw_pcie_readl_dbi(pci, PCIE_PORT_DEBUG1);
474 return ((val & PCIE_PORT_DEBUG1_LINK_UP) &&
475 (!(val & PCIE_PORT_DEBUG1_LINK_IN_TRAINING)));
476 }
477 EXPORT_SYMBOL_GPL(dw_pcie_link_up);
478
dw_pcie_upconfig_setup(struct dw_pcie * pci)479 void dw_pcie_upconfig_setup(struct dw_pcie *pci)
480 {
481 u32 val;
482
483 val = dw_pcie_readl_dbi(pci, PCIE_PORT_MULTI_LANE_CTRL);
484 val |= PORT_MLTI_UPCFG_SUPPORT;
485 dw_pcie_writel_dbi(pci, PCIE_PORT_MULTI_LANE_CTRL, val);
486 }
487 EXPORT_SYMBOL_GPL(dw_pcie_upconfig_setup);
488
dw_pcie_link_set_max_speed(struct dw_pcie * pci,u32 link_gen)489 static void dw_pcie_link_set_max_speed(struct dw_pcie *pci, u32 link_gen)
490 {
491 u32 cap, ctrl2, link_speed;
492 u8 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
493
494 cap = dw_pcie_readl_dbi(pci, offset + PCI_EXP_LNKCAP);
495 ctrl2 = dw_pcie_readl_dbi(pci, offset + PCI_EXP_LNKCTL2);
496 ctrl2 &= ~PCI_EXP_LNKCTL2_TLS;
497
498 switch (pcie_link_speed[link_gen]) {
499 case PCIE_SPEED_2_5GT:
500 link_speed = PCI_EXP_LNKCTL2_TLS_2_5GT;
501 break;
502 case PCIE_SPEED_5_0GT:
503 link_speed = PCI_EXP_LNKCTL2_TLS_5_0GT;
504 break;
505 case PCIE_SPEED_8_0GT:
506 link_speed = PCI_EXP_LNKCTL2_TLS_8_0GT;
507 break;
508 case PCIE_SPEED_16_0GT:
509 link_speed = PCI_EXP_LNKCTL2_TLS_16_0GT;
510 break;
511 default:
512 /* Use hardware capability */
513 link_speed = FIELD_GET(PCI_EXP_LNKCAP_SLS, cap);
514 ctrl2 &= ~PCI_EXP_LNKCTL2_HASD;
515 break;
516 }
517
518 dw_pcie_writel_dbi(pci, offset + PCI_EXP_LNKCTL2, ctrl2 | link_speed);
519
520 cap &= ~((u32)PCI_EXP_LNKCAP_SLS);
521 dw_pcie_writel_dbi(pci, offset + PCI_EXP_LNKCAP, cap | link_speed);
522
523 }
524
dw_pcie_iatu_unroll_enabled(struct dw_pcie * pci)525 static bool dw_pcie_iatu_unroll_enabled(struct dw_pcie *pci)
526 {
527 u32 val;
528
529 val = dw_pcie_readl_dbi(pci, PCIE_ATU_VIEWPORT);
530 if (val == 0xffffffff)
531 return true;
532
533 return false;
534 }
535
dw_pcie_iatu_detect_regions(struct dw_pcie * pci)536 static void dw_pcie_iatu_detect_regions(struct dw_pcie *pci)
537 {
538 int max_region, ob, ib;
539 u32 val, min, dir;
540 u64 max;
541
542 if (pci->iatu_unroll_enabled) {
543 max_region = min((int)pci->atu_size / 512, 256);
544 } else {
545 dw_pcie_writel_dbi(pci, PCIE_ATU_VIEWPORT, 0xFF);
546 max_region = dw_pcie_readl_dbi(pci, PCIE_ATU_VIEWPORT) + 1;
547 }
548
549 for (ob = 0; ob < max_region; ob++) {
550 dw_pcie_writel_atu_ob(pci, ob, PCIE_ATU_LOWER_TARGET, 0x11110000);
551 val = dw_pcie_readl_atu_ob(pci, ob, PCIE_ATU_LOWER_TARGET);
552 if (val != 0x11110000)
553 break;
554 }
555
556 for (ib = 0; ib < max_region; ib++) {
557 dw_pcie_writel_atu_ib(pci, ib, PCIE_ATU_LOWER_TARGET, 0x11110000);
558 val = dw_pcie_readl_atu_ib(pci, ib, PCIE_ATU_LOWER_TARGET);
559 if (val != 0x11110000)
560 break;
561 }
562
563 if (ob) {
564 dir = PCIE_ATU_REGION_DIR_OB;
565 } else if (ib) {
566 dir = PCIE_ATU_REGION_DIR_IB;
567 } else {
568 dev_err(pci->dev, "No iATU regions found\n");
569 return;
570 }
571
572 dw_pcie_writel_atu(pci, dir, 0, PCIE_ATU_LIMIT, 0x0);
573 min = dw_pcie_readl_atu(pci, dir, 0, PCIE_ATU_LIMIT);
574
575 if (dw_pcie_ver_is_ge(pci, 460A)) {
576 dw_pcie_writel_atu(pci, dir, 0, PCIE_ATU_UPPER_LIMIT, 0xFFFFFFFF);
577 max = dw_pcie_readl_atu(pci, dir, 0, PCIE_ATU_UPPER_LIMIT);
578 } else {
579 max = 0;
580 }
581
582 pci->num_ob_windows = ob;
583 pci->num_ib_windows = ib;
584 pci->region_align = 1 << fls(min);
585 pci->region_limit = (max << 32) | (SZ_4G - 1);
586 }
587
dw_pcie_iatu_detect(struct dw_pcie * pci)588 void dw_pcie_iatu_detect(struct dw_pcie *pci)
589 {
590 struct platform_device *pdev = to_platform_device(pci->dev);
591
592 pci->iatu_unroll_enabled = dw_pcie_iatu_unroll_enabled(pci);
593 if (pci->iatu_unroll_enabled) {
594 if (!pci->atu_base) {
595 struct resource *res =
596 platform_get_resource_byname(pdev, IORESOURCE_MEM, "atu");
597 if (res) {
598 pci->atu_size = resource_size(res);
599 pci->atu_base = devm_ioremap_resource(pci->dev, res);
600 }
601 if (!pci->atu_base || IS_ERR(pci->atu_base))
602 pci->atu_base = pci->dbi_base + DEFAULT_DBI_ATU_OFFSET;
603 }
604
605 if (!pci->atu_size)
606 /* Pick a minimal default, enough for 8 in and 8 out windows */
607 pci->atu_size = SZ_4K;
608 } else {
609 pci->atu_base = pci->dbi_base + PCIE_ATU_VIEWPORT_BASE;
610 pci->atu_size = PCIE_ATU_VIEWPORT_SIZE;
611 }
612
613 dw_pcie_iatu_detect_regions(pci);
614
615 dev_info(pci->dev, "iATU unroll: %s\n", pci->iatu_unroll_enabled ?
616 "enabled" : "disabled");
617
618 dev_info(pci->dev, "iATU regions: %u ob, %u ib, align %uK, limit %lluG\n",
619 pci->num_ob_windows, pci->num_ib_windows,
620 pci->region_align / SZ_1K, (pci->region_limit + 1) / SZ_1G);
621 }
622
dw_pcie_setup(struct dw_pcie * pci)623 void dw_pcie_setup(struct dw_pcie *pci)
624 {
625 struct device_node *np = pci->dev->of_node;
626 u32 val;
627
628 if (pci->link_gen > 0)
629 dw_pcie_link_set_max_speed(pci, pci->link_gen);
630
631 /* Configure Gen1 N_FTS */
632 if (pci->n_fts[0]) {
633 val = dw_pcie_readl_dbi(pci, PCIE_PORT_AFR);
634 val &= ~(PORT_AFR_N_FTS_MASK | PORT_AFR_CC_N_FTS_MASK);
635 val |= PORT_AFR_N_FTS(pci->n_fts[0]);
636 val |= PORT_AFR_CC_N_FTS(pci->n_fts[0]);
637 dw_pcie_writel_dbi(pci, PCIE_PORT_AFR, val);
638 }
639
640 /* Configure Gen2+ N_FTS */
641 if (pci->n_fts[1]) {
642 val = dw_pcie_readl_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL);
643 val &= ~PORT_LOGIC_N_FTS_MASK;
644 val |= pci->n_fts[1];
645 dw_pcie_writel_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL, val);
646 }
647
648 if (of_property_read_bool(np, "snps,enable-cdm-check")) {
649 val = dw_pcie_readl_dbi(pci, PCIE_PL_CHK_REG_CONTROL_STATUS);
650 val |= PCIE_PL_CHK_REG_CHK_REG_CONTINUOUS |
651 PCIE_PL_CHK_REG_CHK_REG_START;
652 dw_pcie_writel_dbi(pci, PCIE_PL_CHK_REG_CONTROL_STATUS, val);
653 }
654
655 val = dw_pcie_readl_dbi(pci, PCIE_PORT_LINK_CONTROL);
656 val &= ~PORT_LINK_FAST_LINK_MODE;
657 val |= PORT_LINK_DLL_LINK_EN;
658 dw_pcie_writel_dbi(pci, PCIE_PORT_LINK_CONTROL, val);
659
660 of_property_read_u32(np, "num-lanes", &pci->num_lanes);
661 if (!pci->num_lanes) {
662 dev_dbg(pci->dev, "Using h/w default number of lanes\n");
663 return;
664 }
665
666 /* Set the number of lanes */
667 val &= ~PORT_LINK_FAST_LINK_MODE;
668 val &= ~PORT_LINK_MODE_MASK;
669 switch (pci->num_lanes) {
670 case 1:
671 val |= PORT_LINK_MODE_1_LANES;
672 break;
673 case 2:
674 val |= PORT_LINK_MODE_2_LANES;
675 break;
676 case 4:
677 val |= PORT_LINK_MODE_4_LANES;
678 break;
679 case 8:
680 val |= PORT_LINK_MODE_8_LANES;
681 break;
682 default:
683 dev_err(pci->dev, "num-lanes %u: invalid value\n", pci->num_lanes);
684 return;
685 }
686 dw_pcie_writel_dbi(pci, PCIE_PORT_LINK_CONTROL, val);
687
688 /* Set link width speed control register */
689 val = dw_pcie_readl_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL);
690 val &= ~PORT_LOGIC_LINK_WIDTH_MASK;
691 switch (pci->num_lanes) {
692 case 1:
693 val |= PORT_LOGIC_LINK_WIDTH_1_LANES;
694 break;
695 case 2:
696 val |= PORT_LOGIC_LINK_WIDTH_2_LANES;
697 break;
698 case 4:
699 val |= PORT_LOGIC_LINK_WIDTH_4_LANES;
700 break;
701 case 8:
702 val |= PORT_LOGIC_LINK_WIDTH_8_LANES;
703 break;
704 }
705 dw_pcie_writel_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL, val);
706 }
707