xref: /linux/drivers/pci/controller/dwc/pcie-designware-host.c (revision ca220141fa8ebae09765a242076b2b77338106b0)
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/iopoll.h>
13 #include <linux/irqchip/chained_irq.h>
14 #include <linux/irqchip/irq-msi-lib.h>
15 #include <linux/irqdomain.h>
16 #include <linux/msi.h>
17 #include <linux/of_address.h>
18 #include <linux/of_pci.h>
19 #include <linux/pci_regs.h>
20 #include <linux/platform_device.h>
21 
22 #include "../../pci.h"
23 #include "pcie-designware.h"
24 
25 static struct pci_ops dw_pcie_ops;
26 static struct pci_ops dw_pcie_ecam_ops;
27 static struct pci_ops dw_child_pcie_ops;
28 
29 #ifdef CONFIG_SMP
30 static void dw_irq_noop(struct irq_data *d) { }
31 #endif
32 
33 static bool dw_pcie_init_dev_msi_info(struct device *dev, struct irq_domain *domain,
34 				      struct irq_domain *real_parent, struct msi_domain_info *info)
35 {
36 	if (!msi_lib_init_dev_msi_info(dev, domain, real_parent, info))
37 		return false;
38 
39 #ifdef CONFIG_SMP
40 	info->chip->irq_ack = dw_irq_noop;
41 	info->chip->irq_pre_redirect = irq_chip_pre_redirect_parent;
42 #else
43 	info->chip->irq_ack = irq_chip_ack_parent;
44 #endif
45 	return true;
46 }
47 
48 #define DW_PCIE_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS		| \
49 				    MSI_FLAG_USE_DEF_CHIP_OPS		| \
50 				    MSI_FLAG_PCI_MSI_MASK_PARENT)
51 #define DW_PCIE_MSI_FLAGS_SUPPORTED (MSI_FLAG_MULTI_PCI_MSI		| \
52 				     MSI_FLAG_PCI_MSIX			| \
53 				     MSI_GENERIC_FLAGS_MASK)
54 
55 #define IS_256MB_ALIGNED(x) IS_ALIGNED(x, SZ_256M)
56 
57 static const struct msi_parent_ops dw_pcie_msi_parent_ops = {
58 	.required_flags		= DW_PCIE_MSI_FLAGS_REQUIRED,
59 	.supported_flags	= DW_PCIE_MSI_FLAGS_SUPPORTED,
60 	.bus_select_token	= DOMAIN_BUS_PCI_MSI,
61 	.prefix			= "DW-",
62 	.init_dev_msi_info	= dw_pcie_init_dev_msi_info,
63 };
64 
65 /* MSI int handler */
66 void dw_handle_msi_irq(struct dw_pcie_rp *pp)
67 {
68 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
69 	unsigned int i, num_ctrls;
70 
71 	num_ctrls = pp->num_vectors / MAX_MSI_IRQS_PER_CTRL;
72 
73 	for (i = 0; i < num_ctrls; i++) {
74 		unsigned int reg_off = i * MSI_REG_CTRL_BLOCK_SIZE;
75 		unsigned int irq_off = i * MAX_MSI_IRQS_PER_CTRL;
76 		unsigned long status, pos;
77 
78 		status = dw_pcie_readl_dbi(pci, PCIE_MSI_INTR0_STATUS + reg_off);
79 		if (!status)
80 			continue;
81 
82 		for_each_set_bit(pos, &status, MAX_MSI_IRQS_PER_CTRL)
83 			generic_handle_demux_domain_irq(pp->irq_domain, irq_off + pos);
84 	}
85 }
86 
87 /* Chained MSI interrupt service routine */
88 static void dw_chained_msi_isr(struct irq_desc *desc)
89 {
90 	struct irq_chip *chip = irq_desc_get_chip(desc);
91 	struct dw_pcie_rp *pp;
92 
93 	chained_irq_enter(chip, desc);
94 
95 	pp = irq_desc_get_handler_data(desc);
96 	dw_handle_msi_irq(pp);
97 
98 	chained_irq_exit(chip, desc);
99 }
100 
101 static void dw_pci_setup_msi_msg(struct irq_data *d, struct msi_msg *msg)
102 {
103 	struct dw_pcie_rp *pp = irq_data_get_irq_chip_data(d);
104 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
105 	u64 msi_target = (u64)pp->msi_data;
106 
107 	msg->address_lo = lower_32_bits(msi_target);
108 	msg->address_hi = upper_32_bits(msi_target);
109 	msg->data = d->hwirq;
110 
111 	dev_dbg(pci->dev, "msi#%d address_hi %#x address_lo %#x\n",
112 		(int)d->hwirq, msg->address_hi, msg->address_lo);
113 }
114 
115 static void dw_pci_bottom_mask(struct irq_data *d)
116 {
117 	struct dw_pcie_rp *pp = irq_data_get_irq_chip_data(d);
118 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
119 	unsigned int res, bit, ctrl;
120 
121 	guard(raw_spinlock)(&pp->lock);
122 	ctrl = d->hwirq / MAX_MSI_IRQS_PER_CTRL;
123 	res = ctrl * MSI_REG_CTRL_BLOCK_SIZE;
124 	bit = d->hwirq % MAX_MSI_IRQS_PER_CTRL;
125 
126 	pp->irq_mask[ctrl] |= BIT(bit);
127 	dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_MASK + res, pp->irq_mask[ctrl]);
128 }
129 
130 static void dw_pci_bottom_unmask(struct irq_data *d)
131 {
132 	struct dw_pcie_rp *pp = irq_data_get_irq_chip_data(d);
133 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
134 	unsigned int res, bit, ctrl;
135 
136 	guard(raw_spinlock)(&pp->lock);
137 	ctrl = d->hwirq / MAX_MSI_IRQS_PER_CTRL;
138 	res = ctrl * MSI_REG_CTRL_BLOCK_SIZE;
139 	bit = d->hwirq % MAX_MSI_IRQS_PER_CTRL;
140 
141 	pp->irq_mask[ctrl] &= ~BIT(bit);
142 	dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_MASK + res, pp->irq_mask[ctrl]);
143 }
144 
145 static void dw_pci_bottom_ack(struct irq_data *d)
146 {
147 	struct dw_pcie_rp *pp  = irq_data_get_irq_chip_data(d);
148 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
149 	unsigned int res, bit, ctrl;
150 
151 	ctrl = d->hwirq / MAX_MSI_IRQS_PER_CTRL;
152 	res = ctrl * MSI_REG_CTRL_BLOCK_SIZE;
153 	bit = d->hwirq % MAX_MSI_IRQS_PER_CTRL;
154 
155 	dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_STATUS + res, BIT(bit));
156 }
157 
158 static struct irq_chip dw_pci_msi_bottom_irq_chip = {
159 	.name			= "DWPCI-MSI",
160 	.irq_compose_msi_msg	= dw_pci_setup_msi_msg,
161 	.irq_mask		= dw_pci_bottom_mask,
162 	.irq_unmask		= dw_pci_bottom_unmask,
163 #ifdef CONFIG_SMP
164 	.irq_ack		= dw_irq_noop,
165 	.irq_pre_redirect	= dw_pci_bottom_ack,
166 	.irq_set_affinity	= irq_chip_redirect_set_affinity,
167 #else
168 	.irq_ack		= dw_pci_bottom_ack,
169 #endif
170 };
171 
172 static int dw_pcie_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
173 				    unsigned int nr_irqs, void *args)
174 {
175 	struct dw_pcie_rp *pp = domain->host_data;
176 	int bit;
177 
178 	scoped_guard (raw_spinlock_irq, &pp->lock) {
179 		bit = bitmap_find_free_region(pp->msi_irq_in_use, pp->num_vectors,
180 					      order_base_2(nr_irqs));
181 	}
182 
183 	if (bit < 0)
184 		return -ENOSPC;
185 
186 	for (unsigned int i = 0; i < nr_irqs; i++) {
187 		irq_domain_set_info(domain, virq + i, bit + i, pp->msi_irq_chip,
188 				    pp, handle_edge_irq, NULL, NULL);
189 	}
190 	return 0;
191 }
192 
193 static void dw_pcie_irq_domain_free(struct irq_domain *domain, unsigned int virq,
194 				    unsigned int nr_irqs)
195 {
196 	struct irq_data *d = irq_domain_get_irq_data(domain, virq);
197 	struct dw_pcie_rp *pp = domain->host_data;
198 
199 	guard(raw_spinlock_irq)(&pp->lock);
200 	bitmap_release_region(pp->msi_irq_in_use, d->hwirq, order_base_2(nr_irqs));
201 }
202 
203 static const struct irq_domain_ops dw_pcie_msi_domain_ops = {
204 	.alloc	= dw_pcie_irq_domain_alloc,
205 	.free	= dw_pcie_irq_domain_free,
206 };
207 
208 int dw_pcie_allocate_domains(struct dw_pcie_rp *pp)
209 {
210 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
211 	struct irq_domain_info info = {
212 		.fwnode		= dev_fwnode(pci->dev),
213 		.ops		= &dw_pcie_msi_domain_ops,
214 		.size		= pp->num_vectors,
215 		.host_data	= pp,
216 	};
217 
218 	pp->irq_domain = msi_create_parent_irq_domain(&info, &dw_pcie_msi_parent_ops);
219 	if (!pp->irq_domain) {
220 		dev_err(pci->dev, "Failed to create IRQ domain\n");
221 		return -ENOMEM;
222 	}
223 
224 	return 0;
225 }
226 EXPORT_SYMBOL_GPL(dw_pcie_allocate_domains);
227 
228 void dw_pcie_free_msi(struct dw_pcie_rp *pp)
229 {
230 	u32 ctrl;
231 
232 	for (ctrl = 0; ctrl < MAX_MSI_CTRLS; ctrl++) {
233 		if (pp->msi_irq[ctrl] > 0)
234 			irq_set_chained_handler_and_data(pp->msi_irq[ctrl], NULL, NULL);
235 	}
236 
237 	irq_domain_remove(pp->irq_domain);
238 }
239 EXPORT_SYMBOL_GPL(dw_pcie_free_msi);
240 
241 void dw_pcie_msi_init(struct dw_pcie_rp *pp)
242 {
243 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
244 	u64 msi_target = (u64)pp->msi_data;
245 	u32 ctrl, num_ctrls;
246 
247 	if (!pci_msi_enabled() || !pp->use_imsi_rx)
248 		return;
249 
250 	num_ctrls = pp->num_vectors / MAX_MSI_IRQS_PER_CTRL;
251 
252 	/* Initialize IRQ Status array */
253 	for (ctrl = 0; ctrl < num_ctrls; ctrl++) {
254 		dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_MASK +
255 				    (ctrl * MSI_REG_CTRL_BLOCK_SIZE),
256 				    pp->irq_mask[ctrl]);
257 		dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_ENABLE +
258 				    (ctrl * MSI_REG_CTRL_BLOCK_SIZE),
259 				    ~0);
260 	}
261 
262 	/* Program the msi_data */
263 	dw_pcie_writel_dbi(pci, PCIE_MSI_ADDR_LO, lower_32_bits(msi_target));
264 	dw_pcie_writel_dbi(pci, PCIE_MSI_ADDR_HI, upper_32_bits(msi_target));
265 }
266 EXPORT_SYMBOL_GPL(dw_pcie_msi_init);
267 
268 static int dw_pcie_parse_split_msi_irq(struct dw_pcie_rp *pp)
269 {
270 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
271 	struct device *dev = pci->dev;
272 	struct platform_device *pdev = to_platform_device(dev);
273 	u32 ctrl, max_vectors;
274 	int irq;
275 
276 	/* Parse any "msiX" IRQs described in the devicetree */
277 	for (ctrl = 0; ctrl < MAX_MSI_CTRLS; ctrl++) {
278 		char msi_name[] = "msiX";
279 
280 		msi_name[3] = '0' + ctrl;
281 		irq = platform_get_irq_byname_optional(pdev, msi_name);
282 		if (irq == -ENXIO)
283 			break;
284 		if (irq < 0)
285 			return dev_err_probe(dev, irq,
286 					     "Failed to parse MSI IRQ '%s'\n",
287 					     msi_name);
288 
289 		pp->msi_irq[ctrl] = irq;
290 	}
291 
292 	/* If no "msiX" IRQs, caller should fallback to "msi" IRQ */
293 	if (ctrl == 0)
294 		return -ENXIO;
295 
296 	max_vectors = ctrl * MAX_MSI_IRQS_PER_CTRL;
297 	if (pp->num_vectors > max_vectors) {
298 		dev_warn(dev, "Exceeding number of MSI vectors, limiting to %u\n",
299 			 max_vectors);
300 		pp->num_vectors = max_vectors;
301 	}
302 	if (!pp->num_vectors)
303 		pp->num_vectors = max_vectors;
304 
305 	return 0;
306 }
307 
308 int dw_pcie_msi_host_init(struct dw_pcie_rp *pp)
309 {
310 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
311 	struct device *dev = pci->dev;
312 	struct platform_device *pdev = to_platform_device(dev);
313 	u64 *msi_vaddr = NULL;
314 	int ret;
315 	u32 ctrl, num_ctrls;
316 
317 	for (ctrl = 0; ctrl < MAX_MSI_CTRLS; ctrl++)
318 		pp->irq_mask[ctrl] = ~0;
319 
320 	if (!pp->msi_irq[0]) {
321 		ret = dw_pcie_parse_split_msi_irq(pp);
322 		if (ret < 0 && ret != -ENXIO)
323 			return ret;
324 	}
325 
326 	if (!pp->num_vectors)
327 		pp->num_vectors = MSI_DEF_NUM_VECTORS;
328 	num_ctrls = pp->num_vectors / MAX_MSI_IRQS_PER_CTRL;
329 
330 	if (!pp->msi_irq[0]) {
331 		pp->msi_irq[0] = platform_get_irq_byname_optional(pdev, "msi");
332 		if (pp->msi_irq[0] < 0) {
333 			pp->msi_irq[0] = platform_get_irq(pdev, 0);
334 			if (pp->msi_irq[0] < 0)
335 				return pp->msi_irq[0];
336 		}
337 	}
338 
339 	dev_dbg(dev, "Using %d MSI vectors\n", pp->num_vectors);
340 
341 	pp->msi_irq_chip = &dw_pci_msi_bottom_irq_chip;
342 
343 	ret = dw_pcie_allocate_domains(pp);
344 	if (ret)
345 		return ret;
346 
347 	for (ctrl = 0; ctrl < num_ctrls; ctrl++) {
348 		if (pp->msi_irq[ctrl] > 0)
349 			irq_set_chained_handler_and_data(pp->msi_irq[ctrl],
350 						    dw_chained_msi_isr, pp);
351 	}
352 
353 	/*
354 	 * Even though the iMSI-RX Module supports 64-bit addresses some
355 	 * peripheral PCIe devices may lack 64-bit message support. In
356 	 * order not to miss MSI TLPs from those devices the MSI target
357 	 * address has to be within the lowest 4GB.
358 	 *
359 	 * Per DWC databook r6.21a, section 3.10.2.3, the incoming MWr TLP
360 	 * targeting the MSI_CTRL_ADDR is terminated by the iMSI-RX and never
361 	 * appears on the AXI bus. So MSI_CTRL_ADDR address doesn't need to be
362 	 * mapped and can be any memory that doesn't get allocated for the BAR
363 	 * memory. Since most of the platforms provide 32-bit address for
364 	 * 'config' region, try cfg0_base as the first option for the MSI target
365 	 * address if it's a 32-bit address. Otherwise, try 32-bit and 64-bit
366 	 * coherent memory allocation one by one.
367 	 */
368 	if (!(pp->cfg0_base & GENMASK_ULL(63, 32))) {
369 		pp->msi_data = pp->cfg0_base;
370 		return 0;
371 	}
372 
373 	ret = dma_set_coherent_mask(dev, DMA_BIT_MASK(32));
374 	if (!ret)
375 		msi_vaddr = dmam_alloc_coherent(dev, sizeof(u64), &pp->msi_data,
376 						GFP_KERNEL);
377 
378 	if (!msi_vaddr) {
379 		dev_warn(dev, "Failed to allocate 32-bit MSI address\n");
380 		dma_set_coherent_mask(dev, DMA_BIT_MASK(64));
381 		msi_vaddr = dmam_alloc_coherent(dev, sizeof(u64), &pp->msi_data,
382 						GFP_KERNEL);
383 		if (!msi_vaddr) {
384 			dev_err(dev, "Failed to allocate MSI address\n");
385 			dw_pcie_free_msi(pp);
386 			return -ENOMEM;
387 		}
388 	}
389 
390 	return 0;
391 }
392 EXPORT_SYMBOL_GPL(dw_pcie_msi_host_init);
393 
394 static void dw_pcie_host_request_msg_tlp_res(struct dw_pcie_rp *pp)
395 {
396 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
397 	struct resource_entry *win;
398 	struct resource *res;
399 
400 	win = resource_list_first_type(&pp->bridge->windows, IORESOURCE_MEM);
401 	if (win) {
402 		res = devm_kzalloc(pci->dev, sizeof(*res), GFP_KERNEL);
403 		if (!res)
404 			return;
405 
406 		/*
407 		 * Allocate MSG TLP region of size 'region_align' at the end of
408 		 * the host bridge window.
409 		 */
410 		res->start = win->res->end - pci->region_align + 1;
411 		res->end = win->res->end;
412 		res->name = "msg";
413 		res->flags = win->res->flags | IORESOURCE_BUSY;
414 
415 		if (!devm_request_resource(pci->dev, win->res, res))
416 			pp->msg_res = res;
417 	}
418 }
419 
420 static int dw_pcie_config_ecam_iatu(struct dw_pcie_rp *pp)
421 {
422 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
423 	struct dw_pcie_ob_atu_cfg atu = {0};
424 	resource_size_t bus_range_max;
425 	struct resource_entry *bus;
426 	int ret;
427 
428 	bus = resource_list_first_type(&pp->bridge->windows, IORESOURCE_BUS);
429 
430 	/*
431 	 * Root bus under the host bridge doesn't require any iATU configuration
432 	 * as DBI region will be used to access root bus config space.
433 	 * Immediate bus under Root Bus, needs type 0 iATU configuration and
434 	 * remaining buses need type 1 iATU configuration.
435 	 */
436 	atu.index = 0;
437 	atu.type = PCIE_ATU_TYPE_CFG0;
438 	atu.parent_bus_addr = pp->cfg0_base + SZ_1M;
439 	/* 1MiB is to cover 1 (bus) * 32 (devices) * 8 (functions) */
440 	atu.size = SZ_1M;
441 	atu.ctrl2 = PCIE_ATU_CFG_SHIFT_MODE_ENABLE;
442 	ret = dw_pcie_prog_outbound_atu(pci, &atu);
443 	if (ret)
444 		return ret;
445 
446 	bus_range_max = resource_size(bus->res);
447 
448 	if (bus_range_max < 2)
449 		return 0;
450 
451 	/* Configure remaining buses in type 1 iATU configuration */
452 	atu.index = 1;
453 	atu.type = PCIE_ATU_TYPE_CFG1;
454 	atu.parent_bus_addr = pp->cfg0_base + SZ_2M;
455 	atu.size = (SZ_1M * bus_range_max) - SZ_2M;
456 	atu.ctrl2 = PCIE_ATU_CFG_SHIFT_MODE_ENABLE;
457 
458 	return dw_pcie_prog_outbound_atu(pci, &atu);
459 }
460 
461 static int dw_pcie_create_ecam_window(struct dw_pcie_rp *pp, struct resource *res)
462 {
463 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
464 	struct device *dev = pci->dev;
465 	struct resource_entry *bus;
466 
467 	bus = resource_list_first_type(&pp->bridge->windows, IORESOURCE_BUS);
468 	if (!bus)
469 		return -ENODEV;
470 
471 	pp->cfg = pci_ecam_create(dev, res, bus->res, &pci_generic_ecam_ops);
472 	if (IS_ERR(pp->cfg))
473 		return PTR_ERR(pp->cfg);
474 
475 	return 0;
476 }
477 
478 static bool dw_pcie_ecam_enabled(struct dw_pcie_rp *pp, struct resource *config_res)
479 {
480 	struct resource *bus_range;
481 	u64 nr_buses;
482 
483 	/* Vendor glue drivers may implement their own ECAM mechanism */
484 	if (pp->native_ecam)
485 		return false;
486 
487 	/*
488 	 * PCIe spec r6.0, sec 7.2.2 mandates the base address used for ECAM to
489 	 * be aligned on a 2^(n+20) byte boundary, where n is the number of bits
490 	 * used for representing 'bus' in BDF. Since the DWC cores always use 8
491 	 * bits for representing 'bus', the base address has to be aligned to
492 	 * 2^28 byte boundary, which is 256 MiB.
493 	 */
494 	if (!IS_256MB_ALIGNED(config_res->start))
495 		return false;
496 
497 	bus_range = resource_list_first_type(&pp->bridge->windows, IORESOURCE_BUS)->res;
498 	if (!bus_range)
499 		return false;
500 
501 	nr_buses = resource_size(config_res) >> PCIE_ECAM_BUS_SHIFT;
502 
503 	return nr_buses >= resource_size(bus_range);
504 }
505 
506 static int dw_pcie_host_get_resources(struct dw_pcie_rp *pp)
507 {
508 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
509 	struct device *dev = pci->dev;
510 	struct platform_device *pdev = to_platform_device(dev);
511 	struct resource_entry *win;
512 	struct resource *res;
513 	int ret;
514 
515 	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "config");
516 	if (!res) {
517 		dev_err(dev, "Missing \"config\" reg space\n");
518 		return -ENODEV;
519 	}
520 
521 	pp->cfg0_size = resource_size(res);
522 	pp->cfg0_base = res->start;
523 
524 	pp->ecam_enabled = dw_pcie_ecam_enabled(pp, res);
525 	if (pp->ecam_enabled) {
526 		ret = dw_pcie_create_ecam_window(pp, res);
527 		if (ret)
528 			return ret;
529 
530 		pp->bridge->ops = &dw_pcie_ecam_ops;
531 		pp->bridge->sysdata = pp->cfg;
532 		pp->cfg->priv = pp;
533 	} else {
534 		pp->va_cfg0_base = devm_pci_remap_cfg_resource(dev, res);
535 		if (IS_ERR(pp->va_cfg0_base))
536 			return PTR_ERR(pp->va_cfg0_base);
537 
538 		/* Set default bus ops */
539 		pp->bridge->ops = &dw_pcie_ops;
540 		pp->bridge->child_ops = &dw_child_pcie_ops;
541 		pp->bridge->sysdata = pp;
542 	}
543 
544 	ret = dw_pcie_get_resources(pci);
545 	if (ret) {
546 		if (pp->cfg)
547 			pci_ecam_free(pp->cfg);
548 		return ret;
549 	}
550 
551 	/* Get the I/O range from DT */
552 	win = resource_list_first_type(&pp->bridge->windows, IORESOURCE_IO);
553 	if (win) {
554 		pp->io_size = resource_size(win->res);
555 		pp->io_bus_addr = win->res->start - win->offset;
556 		pp->io_base = pci_pio_to_address(win->res->start);
557 	}
558 
559 	/*
560 	 * visconti_pcie_cpu_addr_fixup() uses pp->io_base, so we have to
561 	 * call dw_pcie_parent_bus_offset() after setting pp->io_base.
562 	 */
563 	pci->parent_bus_offset = dw_pcie_parent_bus_offset(pci, "config",
564 							   pp->cfg0_base);
565 	return 0;
566 }
567 
568 int dw_pcie_host_init(struct dw_pcie_rp *pp)
569 {
570 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
571 	struct device *dev = pci->dev;
572 	struct device_node *np = dev->of_node;
573 	struct pci_host_bridge *bridge;
574 	int ret;
575 
576 	raw_spin_lock_init(&pp->lock);
577 
578 	bridge = devm_pci_alloc_host_bridge(dev, 0);
579 	if (!bridge)
580 		return -ENOMEM;
581 
582 	pp->bridge = bridge;
583 
584 	ret = dw_pcie_host_get_resources(pp);
585 	if (ret)
586 		return ret;
587 
588 	if (pp->ops->init) {
589 		ret = pp->ops->init(pp);
590 		if (ret)
591 			goto err_free_ecam;
592 	}
593 
594 	if (pci_msi_enabled()) {
595 		pp->use_imsi_rx = !(pp->ops->msi_init ||
596 				     of_property_present(np, "msi-parent") ||
597 				     of_property_present(np, "msi-map"));
598 
599 		/*
600 		 * For the use_imsi_rx case the default assignment is handled
601 		 * in the dw_pcie_msi_host_init().
602 		 */
603 		if (!pp->use_imsi_rx && !pp->num_vectors) {
604 			pp->num_vectors = MSI_DEF_NUM_VECTORS;
605 		} else if (pp->num_vectors > MAX_MSI_IRQS) {
606 			dev_err(dev, "Invalid number of vectors\n");
607 			ret = -EINVAL;
608 			goto err_deinit_host;
609 		}
610 
611 		if (pp->ops->msi_init) {
612 			ret = pp->ops->msi_init(pp);
613 			if (ret < 0)
614 				goto err_deinit_host;
615 		} else if (pp->use_imsi_rx) {
616 			ret = dw_pcie_msi_host_init(pp);
617 			if (ret < 0)
618 				goto err_deinit_host;
619 		}
620 	}
621 
622 	dw_pcie_version_detect(pci);
623 
624 	dw_pcie_iatu_detect(pci);
625 
626 	if (pci->num_lanes < 1)
627 		pci->num_lanes = dw_pcie_link_get_max_link_width(pci);
628 
629 	ret = of_pci_get_equalization_presets(dev, &pp->presets, pci->num_lanes);
630 	if (ret)
631 		goto err_free_msi;
632 
633 	/*
634 	 * Allocate the resource for MSG TLP before programming the iATU
635 	 * outbound window in dw_pcie_setup_rc(). Since the allocation depends
636 	 * on the value of 'region_align', this has to be done after
637 	 * dw_pcie_iatu_detect().
638 	 *
639 	 * Glue drivers need to set 'use_atu_msg' before dw_pcie_host_init() to
640 	 * make use of the generic MSG TLP implementation.
641 	 */
642 	if (pp->use_atu_msg)
643 		dw_pcie_host_request_msg_tlp_res(pp);
644 
645 	ret = dw_pcie_edma_detect(pci);
646 	if (ret)
647 		goto err_free_msi;
648 
649 	ret = dw_pcie_setup_rc(pp);
650 	if (ret)
651 		goto err_remove_edma;
652 
653 	if (!dw_pcie_link_up(pci)) {
654 		ret = dw_pcie_start_link(pci);
655 		if (ret)
656 			goto err_remove_edma;
657 	}
658 
659 	/*
660 	 * Only fail on timeout error. Other errors indicate the device may
661 	 * become available later, so continue without failing.
662 	 */
663 	ret = dw_pcie_wait_for_link(pci);
664 	if (ret == -ETIMEDOUT)
665 		goto err_stop_link;
666 
667 	ret = pci_host_probe(bridge);
668 	if (ret)
669 		goto err_stop_link;
670 
671 	if (pp->ops->post_init)
672 		pp->ops->post_init(pp);
673 
674 	dwc_pcie_debugfs_init(pci, DW_PCIE_RC_TYPE);
675 
676 	return 0;
677 
678 err_stop_link:
679 	dw_pcie_stop_link(pci);
680 
681 err_remove_edma:
682 	dw_pcie_edma_remove(pci);
683 
684 err_free_msi:
685 	if (pp->use_imsi_rx)
686 		dw_pcie_free_msi(pp);
687 
688 err_deinit_host:
689 	if (pp->ops->deinit)
690 		pp->ops->deinit(pp);
691 
692 err_free_ecam:
693 	if (pp->cfg)
694 		pci_ecam_free(pp->cfg);
695 
696 	return ret;
697 }
698 EXPORT_SYMBOL_GPL(dw_pcie_host_init);
699 
700 void dw_pcie_host_deinit(struct dw_pcie_rp *pp)
701 {
702 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
703 
704 	dwc_pcie_debugfs_deinit(pci);
705 
706 	pci_stop_root_bus(pp->bridge->bus);
707 	pci_remove_root_bus(pp->bridge->bus);
708 
709 	dw_pcie_stop_link(pci);
710 
711 	dw_pcie_edma_remove(pci);
712 
713 	if (pp->use_imsi_rx)
714 		dw_pcie_free_msi(pp);
715 
716 	if (pp->ops->deinit)
717 		pp->ops->deinit(pp);
718 
719 	if (pp->cfg)
720 		pci_ecam_free(pp->cfg);
721 }
722 EXPORT_SYMBOL_GPL(dw_pcie_host_deinit);
723 
724 static void __iomem *dw_pcie_other_conf_map_bus(struct pci_bus *bus,
725 						unsigned int devfn, int where)
726 {
727 	struct dw_pcie_rp *pp = bus->sysdata;
728 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
729 	struct dw_pcie_ob_atu_cfg atu = { 0 };
730 	int type, ret;
731 	u32 busdev;
732 
733 	/*
734 	 * Checking whether the link is up here is a last line of defense
735 	 * against platforms that forward errors on the system bus as
736 	 * SError upon PCI configuration transactions issued when the link
737 	 * is down. This check is racy by definition and does not stop
738 	 * the system from triggering an SError if the link goes down
739 	 * after this check is performed.
740 	 */
741 	if (!dw_pcie_link_up(pci))
742 		return NULL;
743 
744 	busdev = PCIE_ATU_BUS(bus->number) | PCIE_ATU_DEV(PCI_SLOT(devfn)) |
745 		 PCIE_ATU_FUNC(PCI_FUNC(devfn));
746 
747 	if (pci_is_root_bus(bus->parent))
748 		type = PCIE_ATU_TYPE_CFG0;
749 	else
750 		type = PCIE_ATU_TYPE_CFG1;
751 
752 	atu.type = type;
753 	atu.parent_bus_addr = pp->cfg0_base - pci->parent_bus_offset;
754 	atu.pci_addr = busdev;
755 	atu.size = pp->cfg0_size;
756 
757 	ret = dw_pcie_prog_outbound_atu(pci, &atu);
758 	if (ret)
759 		return NULL;
760 
761 	return pp->va_cfg0_base + where;
762 }
763 
764 static int dw_pcie_rd_other_conf(struct pci_bus *bus, unsigned int devfn,
765 				 int where, int size, u32 *val)
766 {
767 	struct dw_pcie_rp *pp = bus->sysdata;
768 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
769 	struct dw_pcie_ob_atu_cfg atu = { 0 };
770 	int ret;
771 
772 	ret = pci_generic_config_read(bus, devfn, where, size, val);
773 	if (ret != PCIBIOS_SUCCESSFUL)
774 		return ret;
775 
776 	if (pp->cfg0_io_shared) {
777 		atu.type = PCIE_ATU_TYPE_IO;
778 		atu.parent_bus_addr = pp->io_base - pci->parent_bus_offset;
779 		atu.pci_addr = pp->io_bus_addr;
780 		atu.size = pp->io_size;
781 
782 		ret = dw_pcie_prog_outbound_atu(pci, &atu);
783 		if (ret)
784 			return PCIBIOS_SET_FAILED;
785 	}
786 
787 	return PCIBIOS_SUCCESSFUL;
788 }
789 
790 static int dw_pcie_wr_other_conf(struct pci_bus *bus, unsigned int devfn,
791 				 int where, int size, u32 val)
792 {
793 	struct dw_pcie_rp *pp = bus->sysdata;
794 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
795 	struct dw_pcie_ob_atu_cfg atu = { 0 };
796 	int ret;
797 
798 	ret = pci_generic_config_write(bus, devfn, where, size, val);
799 	if (ret != PCIBIOS_SUCCESSFUL)
800 		return ret;
801 
802 	if (pp->cfg0_io_shared) {
803 		atu.type = PCIE_ATU_TYPE_IO;
804 		atu.parent_bus_addr = pp->io_base - pci->parent_bus_offset;
805 		atu.pci_addr = pp->io_bus_addr;
806 		atu.size = pp->io_size;
807 
808 		ret = dw_pcie_prog_outbound_atu(pci, &atu);
809 		if (ret)
810 			return PCIBIOS_SET_FAILED;
811 	}
812 
813 	return PCIBIOS_SUCCESSFUL;
814 }
815 
816 static struct pci_ops dw_child_pcie_ops = {
817 	.map_bus = dw_pcie_other_conf_map_bus,
818 	.read = dw_pcie_rd_other_conf,
819 	.write = dw_pcie_wr_other_conf,
820 };
821 
822 void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus, unsigned int devfn, int where)
823 {
824 	struct dw_pcie_rp *pp = bus->sysdata;
825 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
826 
827 	if (PCI_SLOT(devfn) > 0)
828 		return NULL;
829 
830 	return pci->dbi_base + where;
831 }
832 EXPORT_SYMBOL_GPL(dw_pcie_own_conf_map_bus);
833 
834 static void __iomem *dw_pcie_ecam_conf_map_bus(struct pci_bus *bus, unsigned int devfn, int where)
835 {
836 	struct pci_config_window *cfg = bus->sysdata;
837 	struct dw_pcie_rp *pp = cfg->priv;
838 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
839 	unsigned int busn = bus->number;
840 
841 	if (busn > 0)
842 		return pci_ecam_map_bus(bus, devfn, where);
843 
844 	if (PCI_SLOT(devfn) > 0)
845 		return NULL;
846 
847 	return pci->dbi_base + where;
848 }
849 
850 static struct pci_ops dw_pcie_ops = {
851 	.map_bus = dw_pcie_own_conf_map_bus,
852 	.read = pci_generic_config_read,
853 	.write = pci_generic_config_write,
854 };
855 
856 static struct pci_ops dw_pcie_ecam_ops = {
857 	.map_bus = dw_pcie_ecam_conf_map_bus,
858 	.read = pci_generic_config_read,
859 	.write = pci_generic_config_write,
860 };
861 
862 static int dw_pcie_iatu_setup(struct dw_pcie_rp *pp)
863 {
864 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
865 	struct dw_pcie_ob_atu_cfg atu = { 0 };
866 	struct resource_entry *entry;
867 	int ob_iatu_index;
868 	int ib_iatu_index;
869 	int i, ret;
870 
871 	if (!pci->num_ob_windows) {
872 		dev_err(pci->dev, "No outbound iATU found\n");
873 		return -EINVAL;
874 	}
875 
876 	/*
877 	 * Ensure all out/inbound windows are disabled before proceeding with
878 	 * the MEM/IO (dma-)ranges setups.
879 	 */
880 	for (i = 0; i < pci->num_ob_windows; i++)
881 		dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_OB, i);
882 
883 	for (i = 0; i < pci->num_ib_windows; i++)
884 		dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_IB, i);
885 
886 	/*
887 	 * NOTE: For outbound address translation, outbound iATU at index 0 is
888 	 * reserved for CFG IOs (dw_pcie_other_conf_map_bus()), thus start at
889 	 * index 1.
890 	 *
891 	 * If using ECAM, outbound iATU at index 0 and index 1 is reserved for
892 	 * CFG IOs.
893 	 */
894 	if (pp->ecam_enabled) {
895 		ob_iatu_index = 2;
896 		ret = dw_pcie_config_ecam_iatu(pp);
897 		if (ret) {
898 			dev_err(pci->dev, "Failed to configure iATU in ECAM mode\n");
899 			return ret;
900 		}
901 	} else {
902 		ob_iatu_index = 1;
903 	}
904 
905 	resource_list_for_each_entry(entry, &pp->bridge->windows) {
906 		resource_size_t res_size;
907 
908 		if (resource_type(entry->res) != IORESOURCE_MEM)
909 			continue;
910 
911 		atu.type = PCIE_ATU_TYPE_MEM;
912 		atu.parent_bus_addr = entry->res->start - pci->parent_bus_offset;
913 		atu.pci_addr = entry->res->start - entry->offset;
914 
915 		/* Adjust iATU size if MSG TLP region was allocated before */
916 		if (pp->msg_res && pp->msg_res->parent == entry->res)
917 			res_size = resource_size(entry->res) -
918 					resource_size(pp->msg_res);
919 		else
920 			res_size = resource_size(entry->res);
921 
922 		while (res_size > 0) {
923 			/*
924 			 * Return failure if we run out of windows in the
925 			 * middle. Otherwise, we would end up only partially
926 			 * mapping a single resource.
927 			 */
928 			if (ob_iatu_index >= pci->num_ob_windows) {
929 				dev_err(pci->dev, "Cannot add outbound window for region: %pr\n",
930 					entry->res);
931 				return -ENOMEM;
932 			}
933 
934 			atu.index = ob_iatu_index;
935 			atu.size = MIN(pci->region_limit + 1, res_size);
936 
937 			ret = dw_pcie_prog_outbound_atu(pci, &atu);
938 			if (ret) {
939 				dev_err(pci->dev, "Failed to set MEM range %pr\n",
940 					entry->res);
941 				return ret;
942 			}
943 
944 			ob_iatu_index++;
945 			atu.parent_bus_addr += atu.size;
946 			atu.pci_addr += atu.size;
947 			res_size -= atu.size;
948 		}
949 	}
950 
951 	if (pp->io_size) {
952 		if (ob_iatu_index < pci->num_ob_windows) {
953 			atu.index = ob_iatu_index;
954 			atu.type = PCIE_ATU_TYPE_IO;
955 			atu.parent_bus_addr = pp->io_base - pci->parent_bus_offset;
956 			atu.pci_addr = pp->io_bus_addr;
957 			atu.size = pp->io_size;
958 
959 			ret = dw_pcie_prog_outbound_atu(pci, &atu);
960 			if (ret) {
961 				dev_err(pci->dev, "Failed to set IO range %pr\n",
962 					entry->res);
963 				return ret;
964 			}
965 			ob_iatu_index++;
966 		} else {
967 			/*
968 			 * If there are not enough outbound windows to give I/O
969 			 * space its own iATU, the outbound iATU at index 0 will
970 			 * be shared between I/O space and CFG IOs, by
971 			 * temporarily reconfiguring the iATU to CFG space, in
972 			 * order to do a CFG IO, and then immediately restoring
973 			 * it to I/O space. This is only implemented when using
974 			 * dw_pcie_other_conf_map_bus(), which is not the case
975 			 * when using ECAM.
976 			 */
977 			if (pp->ecam_enabled) {
978 				dev_err(pci->dev, "Cannot add outbound window for I/O\n");
979 				return -ENOMEM;
980 			}
981 			pp->cfg0_io_shared = true;
982 		}
983 	}
984 
985 	if (pp->use_atu_msg) {
986 		if (ob_iatu_index >= pci->num_ob_windows) {
987 			dev_err(pci->dev, "Cannot add outbound window for MSG TLP\n");
988 			return -ENOMEM;
989 		}
990 		pp->msg_atu_index = ob_iatu_index++;
991 	}
992 
993 	ib_iatu_index = 0;
994 	resource_list_for_each_entry(entry, &pp->bridge->dma_ranges) {
995 		resource_size_t res_start, res_size, window_size;
996 
997 		if (resource_type(entry->res) != IORESOURCE_MEM)
998 			continue;
999 
1000 		res_size = resource_size(entry->res);
1001 		res_start = entry->res->start;
1002 		while (res_size > 0) {
1003 			/*
1004 			 * Return failure if we run out of windows in the
1005 			 * middle. Otherwise, we would end up only partially
1006 			 * mapping a single resource.
1007 			 */
1008 			if (ib_iatu_index >= pci->num_ib_windows) {
1009 				dev_err(pci->dev, "Cannot add inbound window for region: %pr\n",
1010 					entry->res);
1011 				return -ENOMEM;
1012 			}
1013 
1014 			window_size = MIN(pci->region_limit + 1, res_size);
1015 			ret = dw_pcie_prog_inbound_atu(pci, ib_iatu_index,
1016 						       PCIE_ATU_TYPE_MEM, res_start,
1017 						       res_start - entry->offset, window_size);
1018 			if (ret) {
1019 				dev_err(pci->dev, "Failed to set DMA range %pr\n",
1020 					entry->res);
1021 				return ret;
1022 			}
1023 
1024 			ib_iatu_index++;
1025 			res_start += window_size;
1026 			res_size -= window_size;
1027 		}
1028 	}
1029 
1030 	return 0;
1031 }
1032 
1033 static void dw_pcie_program_presets(struct dw_pcie_rp *pp, enum pci_bus_speed speed)
1034 {
1035 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
1036 	u8 lane_eq_offset, lane_reg_size, cap_id;
1037 	u8 *presets;
1038 	u32 cap;
1039 	int i;
1040 
1041 	if (speed == PCIE_SPEED_8_0GT) {
1042 		presets = (u8 *)pp->presets.eq_presets_8gts;
1043 		lane_eq_offset =  PCI_SECPCI_LE_CTRL;
1044 		cap_id = PCI_EXT_CAP_ID_SECPCI;
1045 		/* For data rate of 8 GT/S each lane equalization control is 16bits wide*/
1046 		lane_reg_size = 0x2;
1047 	} else if (speed == PCIE_SPEED_16_0GT) {
1048 		presets = pp->presets.eq_presets_Ngts[EQ_PRESET_TYPE_16GTS - 1];
1049 		lane_eq_offset = PCI_PL_16GT_LE_CTRL;
1050 		cap_id = PCI_EXT_CAP_ID_PL_16GT;
1051 		lane_reg_size = 0x1;
1052 	} else if (speed == PCIE_SPEED_32_0GT) {
1053 		presets =  pp->presets.eq_presets_Ngts[EQ_PRESET_TYPE_32GTS - 1];
1054 		lane_eq_offset = PCI_PL_32GT_LE_CTRL;
1055 		cap_id = PCI_EXT_CAP_ID_PL_32GT;
1056 		lane_reg_size = 0x1;
1057 	} else if (speed == PCIE_SPEED_64_0GT) {
1058 		presets =  pp->presets.eq_presets_Ngts[EQ_PRESET_TYPE_64GTS - 1];
1059 		lane_eq_offset = PCI_PL_64GT_LE_CTRL;
1060 		cap_id = PCI_EXT_CAP_ID_PL_64GT;
1061 		lane_reg_size = 0x1;
1062 	} else {
1063 		return;
1064 	}
1065 
1066 	if (presets[0] == PCI_EQ_RESV)
1067 		return;
1068 
1069 	cap = dw_pcie_find_ext_capability(pci, cap_id);
1070 	if (!cap)
1071 		return;
1072 
1073 	/*
1074 	 * Write preset values to the registers byte-by-byte for the given
1075 	 * number of lanes and register size.
1076 	 */
1077 	for (i = 0; i < pci->num_lanes * lane_reg_size; i++)
1078 		dw_pcie_writeb_dbi(pci, cap + lane_eq_offset + i, presets[i]);
1079 }
1080 
1081 static void dw_pcie_config_presets(struct dw_pcie_rp *pp)
1082 {
1083 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
1084 	enum pci_bus_speed speed = pcie_link_speed[pci->max_link_speed];
1085 
1086 	/*
1087 	 * Lane equalization settings need to be applied for all data rates the
1088 	 * controller supports and for all supported lanes.
1089 	 */
1090 
1091 	if (speed >= PCIE_SPEED_8_0GT)
1092 		dw_pcie_program_presets(pp, PCIE_SPEED_8_0GT);
1093 
1094 	if (speed >= PCIE_SPEED_16_0GT)
1095 		dw_pcie_program_presets(pp, PCIE_SPEED_16_0GT);
1096 
1097 	if (speed >= PCIE_SPEED_32_0GT)
1098 		dw_pcie_program_presets(pp, PCIE_SPEED_32_0GT);
1099 
1100 	if (speed >= PCIE_SPEED_64_0GT)
1101 		dw_pcie_program_presets(pp, PCIE_SPEED_64_0GT);
1102 }
1103 
1104 int dw_pcie_setup_rc(struct dw_pcie_rp *pp)
1105 {
1106 	struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
1107 	u32 val;
1108 	int ret;
1109 
1110 	/*
1111 	 * Enable DBI read-only registers for writing/updating configuration.
1112 	 * Write permission gets disabled towards the end of this function.
1113 	 */
1114 	dw_pcie_dbi_ro_wr_en(pci);
1115 
1116 	dw_pcie_setup(pci);
1117 
1118 	dw_pcie_msi_init(pp);
1119 
1120 	/* Setup RC BARs */
1121 	dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, 0x00000004);
1122 	dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_1, 0x00000000);
1123 
1124 	/* Setup interrupt pins */
1125 	val = dw_pcie_readl_dbi(pci, PCI_INTERRUPT_LINE);
1126 	val &= 0xffff00ff;
1127 	val |= 0x00000100;
1128 	dw_pcie_writel_dbi(pci, PCI_INTERRUPT_LINE, val);
1129 
1130 	/* Setup bus numbers */
1131 	val = dw_pcie_readl_dbi(pci, PCI_PRIMARY_BUS);
1132 	val &= 0xff000000;
1133 	val |= 0x00ff0100;
1134 	dw_pcie_writel_dbi(pci, PCI_PRIMARY_BUS, val);
1135 
1136 	/* Setup command register */
1137 	val = dw_pcie_readl_dbi(pci, PCI_COMMAND);
1138 	val &= 0xffff0000;
1139 	val |= PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
1140 		PCI_COMMAND_MASTER | PCI_COMMAND_SERR;
1141 	dw_pcie_writel_dbi(pci, PCI_COMMAND, val);
1142 
1143 	dw_pcie_hide_unsupported_l1ss(pci);
1144 
1145 	dw_pcie_config_presets(pp);
1146 	/*
1147 	 * If the platform provides its own child bus config accesses, it means
1148 	 * the platform uses its own address translation component rather than
1149 	 * ATU, so we should not program the ATU here.
1150 	 */
1151 	if (pp->bridge->child_ops == &dw_child_pcie_ops || pp->ecam_enabled) {
1152 		ret = dw_pcie_iatu_setup(pp);
1153 		if (ret)
1154 			return ret;
1155 	}
1156 
1157 	dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, 0);
1158 
1159 	/* Program correct class for RC */
1160 	dw_pcie_writew_dbi(pci, PCI_CLASS_DEVICE, PCI_CLASS_BRIDGE_PCI);
1161 
1162 	val = dw_pcie_readl_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL);
1163 	val |= PORT_LOGIC_SPEED_CHANGE;
1164 	dw_pcie_writel_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL, val);
1165 
1166 	dw_pcie_dbi_ro_wr_dis(pci);
1167 
1168 	/*
1169 	 * The iMSI-RX module does not support receiving MSI or MSI-X generated
1170 	 * by the Root Port. If iMSI-RX is used as the MSI controller, remove
1171 	 * the MSI and MSI-X capabilities of the Root Port to allow the drivers
1172 	 * to fall back to INTx instead.
1173 	 */
1174 	if (pp->use_imsi_rx) {
1175 		dw_pcie_remove_capability(pci, PCI_CAP_ID_MSI);
1176 		dw_pcie_remove_capability(pci, PCI_CAP_ID_MSIX);
1177 	}
1178 
1179 	return 0;
1180 }
1181 EXPORT_SYMBOL_GPL(dw_pcie_setup_rc);
1182 
1183 static int dw_pcie_pme_turn_off(struct dw_pcie *pci)
1184 {
1185 	struct dw_pcie_ob_atu_cfg atu = { 0 };
1186 	void __iomem *mem;
1187 	int ret;
1188 
1189 	if (pci->num_ob_windows <= pci->pp.msg_atu_index)
1190 		return -ENOSPC;
1191 
1192 	if (!pci->pp.msg_res)
1193 		return -ENOSPC;
1194 
1195 	atu.code = PCIE_MSG_CODE_PME_TURN_OFF;
1196 	atu.routing = PCIE_MSG_TYPE_R_BC;
1197 	atu.type = PCIE_ATU_TYPE_MSG;
1198 	atu.size = resource_size(pci->pp.msg_res);
1199 	atu.index = pci->pp.msg_atu_index;
1200 
1201 	atu.parent_bus_addr = pci->pp.msg_res->start - pci->parent_bus_offset;
1202 
1203 	ret = dw_pcie_prog_outbound_atu(pci, &atu);
1204 	if (ret)
1205 		return ret;
1206 
1207 	mem = ioremap(pci->pp.msg_res->start, pci->region_align);
1208 	if (!mem)
1209 		return -ENOMEM;
1210 
1211 	/* A dummy write is converted to a Msg TLP */
1212 	writel(0, mem);
1213 
1214 	iounmap(mem);
1215 
1216 	return 0;
1217 }
1218 
1219 int dw_pcie_suspend_noirq(struct dw_pcie *pci)
1220 {
1221 	u8 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
1222 	int ret = 0;
1223 	u32 val;
1224 
1225 	if (!dw_pcie_link_up(pci))
1226 		goto stop_link;
1227 
1228 	/*
1229 	 * If L1SS is supported, then do not put the link into L2 as some
1230 	 * devices such as NVMe expect low resume latency.
1231 	 */
1232 	if (dw_pcie_readw_dbi(pci, offset + PCI_EXP_LNKCTL) & PCI_EXP_LNKCTL_ASPM_L1)
1233 		return 0;
1234 
1235 	if (pci->pp.ops->pme_turn_off) {
1236 		pci->pp.ops->pme_turn_off(&pci->pp);
1237 	} else {
1238 		ret = dw_pcie_pme_turn_off(pci);
1239 		if (ret)
1240 			return ret;
1241 	}
1242 
1243 	/*
1244 	 * Some SoCs do not support reading the LTSSM register after
1245 	 * PME_Turn_Off broadcast. For those SoCs, skip waiting for L2/L3 Ready
1246 	 * state and wait 10ms as recommended in PCIe spec r6.0, sec 5.3.3.2.1.
1247 	 */
1248 	if (pci->pp.skip_l23_ready) {
1249 		mdelay(PCIE_PME_TO_L2_TIMEOUT_US/1000);
1250 		goto stop_link;
1251 	}
1252 
1253 	ret = read_poll_timeout(dw_pcie_get_ltssm, val,
1254 				val == DW_PCIE_LTSSM_L2_IDLE ||
1255 				val <= DW_PCIE_LTSSM_DETECT_WAIT,
1256 				PCIE_PME_TO_L2_TIMEOUT_US/10,
1257 				PCIE_PME_TO_L2_TIMEOUT_US, false, pci);
1258 	if (ret) {
1259 		/* Only log message when LTSSM isn't in DETECT or POLL */
1260 		dev_err(pci->dev, "Timeout waiting for L2 entry! LTSSM: 0x%x\n", val);
1261 		return ret;
1262 	}
1263 
1264 	/*
1265 	 * Per PCIe r6.0, sec 5.3.3.2.1, software should wait at least
1266 	 * 100ns after L2/L3 Ready before turning off refclock and
1267 	 * main power. This is harmless when no endpoint is connected.
1268 	 */
1269 	udelay(1);
1270 
1271 stop_link:
1272 	dw_pcie_stop_link(pci);
1273 	if (pci->pp.ops->deinit)
1274 		pci->pp.ops->deinit(&pci->pp);
1275 
1276 	pci->suspended = true;
1277 
1278 	return ret;
1279 }
1280 EXPORT_SYMBOL_GPL(dw_pcie_suspend_noirq);
1281 
1282 int dw_pcie_resume_noirq(struct dw_pcie *pci)
1283 {
1284 	int ret;
1285 
1286 	if (!pci->suspended)
1287 		return 0;
1288 
1289 	pci->suspended = false;
1290 
1291 	if (pci->pp.ops->init) {
1292 		ret = pci->pp.ops->init(&pci->pp);
1293 		if (ret) {
1294 			dev_err(pci->dev, "Host init failed: %d\n", ret);
1295 			return ret;
1296 		}
1297 	}
1298 
1299 	dw_pcie_setup_rc(&pci->pp);
1300 
1301 	ret = dw_pcie_start_link(pci);
1302 	if (ret)
1303 		return ret;
1304 
1305 	ret = dw_pcie_wait_for_link(pci);
1306 	if (ret)
1307 		return ret;
1308 
1309 	if (pci->pp.ops->post_init)
1310 		pci->pp.ops->post_init(&pci->pp);
1311 
1312 	return ret;
1313 }
1314 EXPORT_SYMBOL_GPL(dw_pcie_resume_noirq);
1315