Lines Matching +full:pci +full:- +full:dev
1 // SPDX-License-Identifier: GPL-2.0
20 #include "../../pci.h"
21 #include "pcie-designware.h"
44 .name = "PCI-MSI",
63 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_handle_msi_irq() local
65 num_ctrls = pp->num_vectors / MAX_MSI_IRQS_PER_CTRL; in dw_handle_msi_irq()
68 status = dw_pcie_readl_dbi(pci, PCIE_MSI_INTR0_STATUS + in dw_handle_msi_irq()
78 generic_handle_domain_irq(pp->irq_domain, in dw_handle_msi_irq()
105 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pci_setup_msi_msg() local
108 msi_target = (u64)pp->msi_data; in dw_pci_setup_msi_msg()
110 msg->address_lo = lower_32_bits(msi_target); in dw_pci_setup_msi_msg()
111 msg->address_hi = upper_32_bits(msi_target); in dw_pci_setup_msi_msg()
113 msg->data = d->hwirq; in dw_pci_setup_msi_msg()
115 dev_dbg(pci->dev, "msi#%d address_hi %#x address_lo %#x\n", in dw_pci_setup_msi_msg()
116 (int)d->hwirq, msg->address_hi, msg->address_lo); in dw_pci_setup_msi_msg()
122 return -EINVAL; in dw_pci_msi_set_affinity()
128 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pci_bottom_mask() local
132 raw_spin_lock_irqsave(&pp->lock, flags); in dw_pci_bottom_mask()
134 ctrl = d->hwirq / MAX_MSI_IRQS_PER_CTRL; in dw_pci_bottom_mask()
136 bit = d->hwirq % MAX_MSI_IRQS_PER_CTRL; in dw_pci_bottom_mask()
138 pp->irq_mask[ctrl] |= BIT(bit); in dw_pci_bottom_mask()
139 dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_MASK + res, pp->irq_mask[ctrl]); in dw_pci_bottom_mask()
141 raw_spin_unlock_irqrestore(&pp->lock, flags); in dw_pci_bottom_mask()
147 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pci_bottom_unmask() local
151 raw_spin_lock_irqsave(&pp->lock, flags); in dw_pci_bottom_unmask()
153 ctrl = d->hwirq / MAX_MSI_IRQS_PER_CTRL; in dw_pci_bottom_unmask()
155 bit = d->hwirq % MAX_MSI_IRQS_PER_CTRL; in dw_pci_bottom_unmask()
157 pp->irq_mask[ctrl] &= ~BIT(bit); in dw_pci_bottom_unmask()
158 dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_MASK + res, pp->irq_mask[ctrl]); in dw_pci_bottom_unmask()
160 raw_spin_unlock_irqrestore(&pp->lock, flags); in dw_pci_bottom_unmask()
166 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pci_bottom_ack() local
169 ctrl = d->hwirq / MAX_MSI_IRQS_PER_CTRL; in dw_pci_bottom_ack()
171 bit = d->hwirq % MAX_MSI_IRQS_PER_CTRL; in dw_pci_bottom_ack()
173 dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_STATUS + res, BIT(bit)); in dw_pci_bottom_ack()
177 .name = "DWPCI-MSI",
189 struct dw_pcie_rp *pp = domain->host_data; in dw_pcie_irq_domain_alloc()
194 raw_spin_lock_irqsave(&pp->lock, flags); in dw_pcie_irq_domain_alloc()
196 bit = bitmap_find_free_region(pp->msi_irq_in_use, pp->num_vectors, in dw_pcie_irq_domain_alloc()
199 raw_spin_unlock_irqrestore(&pp->lock, flags); in dw_pcie_irq_domain_alloc()
202 return -ENOSPC; in dw_pcie_irq_domain_alloc()
206 pp->msi_irq_chip, in dw_pcie_irq_domain_alloc()
217 struct dw_pcie_rp *pp = domain->host_data; in dw_pcie_irq_domain_free()
220 raw_spin_lock_irqsave(&pp->lock, flags); in dw_pcie_irq_domain_free()
222 bitmap_release_region(pp->msi_irq_in_use, d->hwirq, in dw_pcie_irq_domain_free()
225 raw_spin_unlock_irqrestore(&pp->lock, flags); in dw_pcie_irq_domain_free()
235 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_allocate_domains() local
236 struct fwnode_handle *fwnode = of_node_to_fwnode(pci->dev->of_node); in dw_pcie_allocate_domains()
238 pp->irq_domain = irq_domain_create_linear(fwnode, pp->num_vectors, in dw_pcie_allocate_domains()
240 if (!pp->irq_domain) { in dw_pcie_allocate_domains()
241 dev_err(pci->dev, "Failed to create IRQ domain\n"); in dw_pcie_allocate_domains()
242 return -ENOMEM; in dw_pcie_allocate_domains()
245 irq_domain_update_bus_token(pp->irq_domain, DOMAIN_BUS_NEXUS); in dw_pcie_allocate_domains()
247 pp->msi_domain = pci_msi_create_irq_domain(fwnode, in dw_pcie_allocate_domains()
249 pp->irq_domain); in dw_pcie_allocate_domains()
250 if (!pp->msi_domain) { in dw_pcie_allocate_domains()
251 dev_err(pci->dev, "Failed to create MSI domain\n"); in dw_pcie_allocate_domains()
252 irq_domain_remove(pp->irq_domain); in dw_pcie_allocate_domains()
253 return -ENOMEM; in dw_pcie_allocate_domains()
264 if (pp->msi_irq[ctrl] > 0) in dw_pcie_free_msi()
265 irq_set_chained_handler_and_data(pp->msi_irq[ctrl], in dw_pcie_free_msi()
269 irq_domain_remove(pp->msi_domain); in dw_pcie_free_msi()
270 irq_domain_remove(pp->irq_domain); in dw_pcie_free_msi()
275 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_msi_init() local
276 u64 msi_target = (u64)pp->msi_data; in dw_pcie_msi_init()
278 if (!pci_msi_enabled() || !pp->has_msi_ctrl) in dw_pcie_msi_init()
282 dw_pcie_writel_dbi(pci, PCIE_MSI_ADDR_LO, lower_32_bits(msi_target)); in dw_pcie_msi_init()
283 dw_pcie_writel_dbi(pci, PCIE_MSI_ADDR_HI, upper_32_bits(msi_target)); in dw_pcie_msi_init()
288 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_parse_split_msi_irq() local
289 struct device *dev = pci->dev; in dw_pcie_parse_split_msi_irq() local
290 struct platform_device *pdev = to_platform_device(dev); in dw_pcie_parse_split_msi_irq()
300 if (irq == -ENXIO) in dw_pcie_parse_split_msi_irq()
303 return dev_err_probe(dev, irq, in dw_pcie_parse_split_msi_irq()
307 pp->msi_irq[ctrl] = irq; in dw_pcie_parse_split_msi_irq()
312 return -ENXIO; in dw_pcie_parse_split_msi_irq()
315 if (pp->num_vectors > max_vectors) { in dw_pcie_parse_split_msi_irq()
316 dev_warn(dev, "Exceeding number of MSI vectors, limiting to %u\n", in dw_pcie_parse_split_msi_irq()
318 pp->num_vectors = max_vectors; in dw_pcie_parse_split_msi_irq()
320 if (!pp->num_vectors) in dw_pcie_parse_split_msi_irq()
321 pp->num_vectors = max_vectors; in dw_pcie_parse_split_msi_irq()
328 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_msi_host_init() local
329 struct device *dev = pci->dev; in dw_pcie_msi_host_init() local
330 struct platform_device *pdev = to_platform_device(dev); in dw_pcie_msi_host_init()
336 pp->irq_mask[ctrl] = ~0; in dw_pcie_msi_host_init()
338 if (!pp->msi_irq[0]) { in dw_pcie_msi_host_init()
340 if (ret < 0 && ret != -ENXIO) in dw_pcie_msi_host_init()
344 if (!pp->num_vectors) in dw_pcie_msi_host_init()
345 pp->num_vectors = MSI_DEF_NUM_VECTORS; in dw_pcie_msi_host_init()
346 num_ctrls = pp->num_vectors / MAX_MSI_IRQS_PER_CTRL; in dw_pcie_msi_host_init()
348 if (!pp->msi_irq[0]) { in dw_pcie_msi_host_init()
349 pp->msi_irq[0] = platform_get_irq_byname_optional(pdev, "msi"); in dw_pcie_msi_host_init()
350 if (pp->msi_irq[0] < 0) { in dw_pcie_msi_host_init()
351 pp->msi_irq[0] = platform_get_irq(pdev, 0); in dw_pcie_msi_host_init()
352 if (pp->msi_irq[0] < 0) in dw_pcie_msi_host_init()
353 return pp->msi_irq[0]; in dw_pcie_msi_host_init()
357 dev_dbg(dev, "Using %d MSI vectors\n", pp->num_vectors); in dw_pcie_msi_host_init()
359 pp->msi_irq_chip = &dw_pci_msi_bottom_irq_chip; in dw_pcie_msi_host_init()
366 if (pp->msi_irq[ctrl] > 0) in dw_pcie_msi_host_init()
367 irq_set_chained_handler_and_data(pp->msi_irq[ctrl], in dw_pcie_msi_host_init()
372 * Even though the iMSI-RX Module supports 64-bit addresses some in dw_pcie_msi_host_init()
373 * peripheral PCIe devices may lack 64-bit message support. In in dw_pcie_msi_host_init()
378 * done by allocating from the artificially limited DMA-coherent in dw_pcie_msi_host_init()
381 ret = dma_set_coherent_mask(dev, DMA_BIT_MASK(32)); in dw_pcie_msi_host_init()
383 …dev_warn(dev, "Failed to set DMA mask to 32-bit. Devices with only 32-bit MSI support may not work… in dw_pcie_msi_host_init()
385 msi_vaddr = dmam_alloc_coherent(dev, sizeof(u64), &pp->msi_data, in dw_pcie_msi_host_init()
388 dev_err(dev, "Failed to alloc and map MSI data\n"); in dw_pcie_msi_host_init()
390 return -ENOMEM; in dw_pcie_msi_host_init()
398 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_host_init() local
399 struct device *dev = pci->dev; in dw_pcie_host_init() local
400 struct device_node *np = dev->of_node; in dw_pcie_host_init()
401 struct platform_device *pdev = to_platform_device(dev); in dw_pcie_host_init()
407 raw_spin_lock_init(&pp->lock); in dw_pcie_host_init()
409 ret = dw_pcie_get_resources(pci); in dw_pcie_host_init()
415 pp->cfg0_size = resource_size(res); in dw_pcie_host_init()
416 pp->cfg0_base = res->start; in dw_pcie_host_init()
418 pp->va_cfg0_base = devm_pci_remap_cfg_resource(dev, res); in dw_pcie_host_init()
419 if (IS_ERR(pp->va_cfg0_base)) in dw_pcie_host_init()
420 return PTR_ERR(pp->va_cfg0_base); in dw_pcie_host_init()
422 dev_err(dev, "Missing *config* reg space\n"); in dw_pcie_host_init()
423 return -ENODEV; in dw_pcie_host_init()
426 bridge = devm_pci_alloc_host_bridge(dev, 0); in dw_pcie_host_init()
428 return -ENOMEM; in dw_pcie_host_init()
430 pp->bridge = bridge; in dw_pcie_host_init()
433 win = resource_list_first_type(&bridge->windows, IORESOURCE_IO); in dw_pcie_host_init()
435 pp->io_size = resource_size(win->res); in dw_pcie_host_init()
436 pp->io_bus_addr = win->res->start - win->offset; in dw_pcie_host_init()
437 pp->io_base = pci_pio_to_address(win->res->start); in dw_pcie_host_init()
441 bridge->ops = &dw_pcie_ops; in dw_pcie_host_init()
442 bridge->child_ops = &dw_child_pcie_ops; in dw_pcie_host_init()
444 if (pp->ops->host_init) { in dw_pcie_host_init()
445 ret = pp->ops->host_init(pp); in dw_pcie_host_init()
451 pp->has_msi_ctrl = !(pp->ops->msi_host_init || in dw_pcie_host_init()
452 of_property_read_bool(np, "msi-parent") || in dw_pcie_host_init()
453 of_property_read_bool(np, "msi-map")); in dw_pcie_host_init()
459 if (!pp->has_msi_ctrl && !pp->num_vectors) { in dw_pcie_host_init()
460 pp->num_vectors = MSI_DEF_NUM_VECTORS; in dw_pcie_host_init()
461 } else if (pp->num_vectors > MAX_MSI_IRQS) { in dw_pcie_host_init()
462 dev_err(dev, "Invalid number of vectors\n"); in dw_pcie_host_init()
463 ret = -EINVAL; in dw_pcie_host_init()
467 if (pp->ops->msi_host_init) { in dw_pcie_host_init()
468 ret = pp->ops->msi_host_init(pp); in dw_pcie_host_init()
471 } else if (pp->has_msi_ctrl) { in dw_pcie_host_init()
478 dw_pcie_version_detect(pci); in dw_pcie_host_init()
480 dw_pcie_iatu_detect(pci); in dw_pcie_host_init()
482 ret = dw_pcie_edma_detect(pci); in dw_pcie_host_init()
490 if (!dw_pcie_link_up(pci)) { in dw_pcie_host_init()
491 ret = dw_pcie_start_link(pci); in dw_pcie_host_init()
497 dw_pcie_wait_for_link(pci); in dw_pcie_host_init()
499 bridge->sysdata = pp; in dw_pcie_host_init()
508 dw_pcie_stop_link(pci); in dw_pcie_host_init()
511 dw_pcie_edma_remove(pci); in dw_pcie_host_init()
514 if (pp->has_msi_ctrl) in dw_pcie_host_init()
518 if (pp->ops->host_deinit) in dw_pcie_host_init()
519 pp->ops->host_deinit(pp); in dw_pcie_host_init()
527 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_host_deinit() local
529 pci_stop_root_bus(pp->bridge->bus); in dw_pcie_host_deinit()
530 pci_remove_root_bus(pp->bridge->bus); in dw_pcie_host_deinit()
532 dw_pcie_stop_link(pci); in dw_pcie_host_deinit()
534 dw_pcie_edma_remove(pci); in dw_pcie_host_deinit()
536 if (pp->has_msi_ctrl) in dw_pcie_host_deinit()
539 if (pp->ops->host_deinit) in dw_pcie_host_deinit()
540 pp->ops->host_deinit(pp); in dw_pcie_host_deinit()
547 struct dw_pcie_rp *pp = bus->sysdata; in dw_pcie_other_conf_map_bus()
548 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_other_conf_map_bus() local
555 * SError upon PCI configuration transactions issued when the link in dw_pcie_other_conf_map_bus()
560 if (!dw_pcie_link_up(pci)) in dw_pcie_other_conf_map_bus()
563 busdev = PCIE_ATU_BUS(bus->number) | PCIE_ATU_DEV(PCI_SLOT(devfn)) | in dw_pcie_other_conf_map_bus()
566 if (pci_is_root_bus(bus->parent)) in dw_pcie_other_conf_map_bus()
571 ret = dw_pcie_prog_outbound_atu(pci, 0, type, pp->cfg0_base, busdev, in dw_pcie_other_conf_map_bus()
572 pp->cfg0_size); in dw_pcie_other_conf_map_bus()
576 return pp->va_cfg0_base + where; in dw_pcie_other_conf_map_bus()
582 struct dw_pcie_rp *pp = bus->sysdata; in dw_pcie_rd_other_conf()
583 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_rd_other_conf() local
590 if (pp->cfg0_io_shared) { in dw_pcie_rd_other_conf()
591 ret = dw_pcie_prog_outbound_atu(pci, 0, PCIE_ATU_TYPE_IO, in dw_pcie_rd_other_conf()
592 pp->io_base, pp->io_bus_addr, in dw_pcie_rd_other_conf()
593 pp->io_size); in dw_pcie_rd_other_conf()
604 struct dw_pcie_rp *pp = bus->sysdata; in dw_pcie_wr_other_conf()
605 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_wr_other_conf() local
612 if (pp->cfg0_io_shared) { in dw_pcie_wr_other_conf()
613 ret = dw_pcie_prog_outbound_atu(pci, 0, PCIE_ATU_TYPE_IO, in dw_pcie_wr_other_conf()
614 pp->io_base, pp->io_bus_addr, in dw_pcie_wr_other_conf()
615 pp->io_size); in dw_pcie_wr_other_conf()
631 struct dw_pcie_rp *pp = bus->sysdata; in dw_pcie_own_conf_map_bus()
632 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_own_conf_map_bus() local
637 return pci->dbi_base + where; in dw_pcie_own_conf_map_bus()
649 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_iatu_setup() local
654 if (!pci->num_ob_windows) { in dw_pcie_iatu_setup()
655 dev_err(pci->dev, "No outbound iATU found\n"); in dw_pcie_iatu_setup()
656 return -EINVAL; in dw_pcie_iatu_setup()
661 * the MEM/IO (dma-)ranges setups. in dw_pcie_iatu_setup()
663 for (i = 0; i < pci->num_ob_windows; i++) in dw_pcie_iatu_setup()
664 dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_OB, i); in dw_pcie_iatu_setup()
666 for (i = 0; i < pci->num_ib_windows; i++) in dw_pcie_iatu_setup()
667 dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_IB, i); in dw_pcie_iatu_setup()
670 resource_list_for_each_entry(entry, &pp->bridge->windows) { in dw_pcie_iatu_setup()
671 if (resource_type(entry->res) != IORESOURCE_MEM) in dw_pcie_iatu_setup()
674 if (pci->num_ob_windows <= ++i) in dw_pcie_iatu_setup()
677 ret = dw_pcie_prog_outbound_atu(pci, i, PCIE_ATU_TYPE_MEM, in dw_pcie_iatu_setup()
678 entry->res->start, in dw_pcie_iatu_setup()
679 entry->res->start - entry->offset, in dw_pcie_iatu_setup()
680 resource_size(entry->res)); in dw_pcie_iatu_setup()
682 dev_err(pci->dev, "Failed to set MEM range %pr\n", in dw_pcie_iatu_setup()
683 entry->res); in dw_pcie_iatu_setup()
688 if (pp->io_size) { in dw_pcie_iatu_setup()
689 if (pci->num_ob_windows > ++i) { in dw_pcie_iatu_setup()
690 ret = dw_pcie_prog_outbound_atu(pci, i, PCIE_ATU_TYPE_IO, in dw_pcie_iatu_setup()
691 pp->io_base, in dw_pcie_iatu_setup()
692 pp->io_bus_addr, in dw_pcie_iatu_setup()
693 pp->io_size); in dw_pcie_iatu_setup()
695 dev_err(pci->dev, "Failed to set IO range %pr\n", in dw_pcie_iatu_setup()
696 entry->res); in dw_pcie_iatu_setup()
700 pp->cfg0_io_shared = true; in dw_pcie_iatu_setup()
704 if (pci->num_ob_windows <= i) in dw_pcie_iatu_setup()
705 dev_warn(pci->dev, "Ranges exceed outbound iATU size (%d)\n", in dw_pcie_iatu_setup()
706 pci->num_ob_windows); in dw_pcie_iatu_setup()
709 resource_list_for_each_entry(entry, &pp->bridge->dma_ranges) { in dw_pcie_iatu_setup()
710 if (resource_type(entry->res) != IORESOURCE_MEM) in dw_pcie_iatu_setup()
713 if (pci->num_ib_windows <= i) in dw_pcie_iatu_setup()
716 ret = dw_pcie_prog_inbound_atu(pci, i++, PCIE_ATU_TYPE_MEM, in dw_pcie_iatu_setup()
717 entry->res->start, in dw_pcie_iatu_setup()
718 entry->res->start - entry->offset, in dw_pcie_iatu_setup()
719 resource_size(entry->res)); in dw_pcie_iatu_setup()
721 dev_err(pci->dev, "Failed to set DMA range %pr\n", in dw_pcie_iatu_setup()
722 entry->res); in dw_pcie_iatu_setup()
727 if (pci->num_ib_windows <= i) in dw_pcie_iatu_setup()
728 dev_warn(pci->dev, "Dma-ranges exceed inbound iATU size (%u)\n", in dw_pcie_iatu_setup()
729 pci->num_ib_windows); in dw_pcie_iatu_setup()
736 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_setup_rc() local
741 * Enable DBI read-only registers for writing/updating configuration. in dw_pcie_setup_rc()
744 dw_pcie_dbi_ro_wr_en(pci); in dw_pcie_setup_rc()
746 dw_pcie_setup(pci); in dw_pcie_setup_rc()
748 if (pp->has_msi_ctrl) { in dw_pcie_setup_rc()
749 num_ctrls = pp->num_vectors / MAX_MSI_IRQS_PER_CTRL; in dw_pcie_setup_rc()
753 dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_MASK + in dw_pcie_setup_rc()
755 pp->irq_mask[ctrl]); in dw_pcie_setup_rc()
756 dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_ENABLE + in dw_pcie_setup_rc()
765 dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, 0x00000004); in dw_pcie_setup_rc()
766 dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_1, 0x00000000); in dw_pcie_setup_rc()
769 val = dw_pcie_readl_dbi(pci, PCI_INTERRUPT_LINE); in dw_pcie_setup_rc()
772 dw_pcie_writel_dbi(pci, PCI_INTERRUPT_LINE, val); in dw_pcie_setup_rc()
775 val = dw_pcie_readl_dbi(pci, PCI_PRIMARY_BUS); in dw_pcie_setup_rc()
778 dw_pcie_writel_dbi(pci, PCI_PRIMARY_BUS, val); in dw_pcie_setup_rc()
781 val = dw_pcie_readl_dbi(pci, PCI_COMMAND); in dw_pcie_setup_rc()
785 dw_pcie_writel_dbi(pci, PCI_COMMAND, val); in dw_pcie_setup_rc()
792 if (pp->bridge->child_ops == &dw_child_pcie_ops) { in dw_pcie_setup_rc()
798 dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, 0); in dw_pcie_setup_rc()
801 dw_pcie_writew_dbi(pci, PCI_CLASS_DEVICE, PCI_CLASS_BRIDGE_PCI); in dw_pcie_setup_rc()
803 val = dw_pcie_readl_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL); in dw_pcie_setup_rc()
805 dw_pcie_writel_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL, val); in dw_pcie_setup_rc()
807 dw_pcie_dbi_ro_wr_dis(pci); in dw_pcie_setup_rc()
813 int dw_pcie_suspend_noirq(struct dw_pcie *pci) in dw_pcie_suspend_noirq() argument
815 u8 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP); in dw_pcie_suspend_noirq()
823 if (dw_pcie_readw_dbi(pci, offset + PCI_EXP_LNKCTL) & PCI_EXP_LNKCTL_ASPM_L1) in dw_pcie_suspend_noirq()
826 if (dw_pcie_get_ltssm(pci) <= DW_PCIE_LTSSM_DETECT_ACT) in dw_pcie_suspend_noirq()
829 if (!pci->pp.ops->pme_turn_off) in dw_pcie_suspend_noirq()
832 pci->pp.ops->pme_turn_off(&pci->pp); in dw_pcie_suspend_noirq()
836 PCIE_PME_TO_L2_TIMEOUT_US, false, pci); in dw_pcie_suspend_noirq()
838 dev_err(pci->dev, "Timeout waiting for L2 entry! LTSSM: 0x%x\n", val); in dw_pcie_suspend_noirq()
842 if (pci->pp.ops->host_deinit) in dw_pcie_suspend_noirq()
843 pci->pp.ops->host_deinit(&pci->pp); in dw_pcie_suspend_noirq()
845 pci->suspended = true; in dw_pcie_suspend_noirq()
851 int dw_pcie_resume_noirq(struct dw_pcie *pci) in dw_pcie_resume_noirq() argument
855 if (!pci->suspended) in dw_pcie_resume_noirq()
858 pci->suspended = false; in dw_pcie_resume_noirq()
860 if (pci->pp.ops->host_init) { in dw_pcie_resume_noirq()
861 ret = pci->pp.ops->host_init(&pci->pp); in dw_pcie_resume_noirq()
863 dev_err(pci->dev, "Host init failed: %d\n", ret); in dw_pcie_resume_noirq()
868 dw_pcie_setup_rc(&pci->pp); in dw_pcie_resume_noirq()
870 ret = dw_pcie_start_link(pci); in dw_pcie_resume_noirq()
874 ret = dw_pcie_wait_for_link(pci); in dw_pcie_resume_noirq()