Lines Matching full:pci
20 #include "../../pci.h"
44 .name = "PCI-MSI",
64 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_handle_msi_irq() local
69 status = dw_pcie_readl_dbi(pci, PCIE_MSI_INTR0_STATUS + in dw_handle_msi_irq()
106 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pci_setup_msi_msg() local
116 dev_dbg(pci->dev, "msi#%d address_hi %#x address_lo %#x\n", in dw_pci_setup_msi_msg()
123 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pci_bottom_mask() local
134 dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_MASK + res, pp->irq_mask[ctrl]); in dw_pci_bottom_mask()
142 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pci_bottom_unmask() local
153 dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_MASK + res, pp->irq_mask[ctrl]); in dw_pci_bottom_unmask()
161 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pci_bottom_ack() local
168 dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_STATUS + res, BIT(bit)); in dw_pci_bottom_ack()
229 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_allocate_domains() local
230 struct fwnode_handle *fwnode = of_node_to_fwnode(pci->dev->of_node); in dw_pcie_allocate_domains()
235 dev_err(pci->dev, "Failed to create IRQ domain\n"); in dw_pcie_allocate_domains()
245 dev_err(pci->dev, "Failed to create MSI domain\n"); in dw_pcie_allocate_domains()
269 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_msi_init() local
276 dw_pcie_writel_dbi(pci, PCIE_MSI_ADDR_LO, lower_32_bits(msi_target)); in dw_pcie_msi_init()
277 dw_pcie_writel_dbi(pci, PCIE_MSI_ADDR_HI, upper_32_bits(msi_target)); in dw_pcie_msi_init()
282 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_parse_split_msi_irq() local
283 struct device *dev = pci->dev; in dw_pcie_parse_split_msi_irq()
322 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_msi_host_init() local
323 struct device *dev = pci->dev; in dw_pcie_msi_host_init()
397 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_host_request_msg_tlp_res() local
403 res = devm_kzalloc(pci->dev, sizeof(*res), GFP_KERNEL); in dw_pcie_host_request_msg_tlp_res()
411 res->start = win->res->end - pci->region_align + 1; in dw_pcie_host_request_msg_tlp_res()
416 if (!devm_request_resource(pci->dev, win->res, res)) in dw_pcie_host_request_msg_tlp_res()
423 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_host_get_resources() local
424 struct device *dev = pci->dev; in dw_pcie_host_get_resources()
430 ret = dw_pcie_get_resources(pci); in dw_pcie_host_get_resources()
459 pci->parent_bus_offset = dw_pcie_parent_bus_offset(pci, "config", in dw_pcie_host_get_resources()
466 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_host_init() local
467 struct device *dev = pci->dev; in dw_pcie_host_init()
522 dw_pcie_version_detect(pci); in dw_pcie_host_init()
524 dw_pcie_iatu_detect(pci); in dw_pcie_host_init()
538 ret = dw_pcie_edma_detect(pci); in dw_pcie_host_init()
546 if (!dw_pcie_link_up(pci)) { in dw_pcie_host_init()
547 ret = dw_pcie_start_link(pci); in dw_pcie_host_init()
559 dw_pcie_wait_for_link(pci); in dw_pcie_host_init()
570 dwc_pcie_debugfs_init(pci); in dw_pcie_host_init()
575 dw_pcie_stop_link(pci); in dw_pcie_host_init()
578 dw_pcie_edma_remove(pci); in dw_pcie_host_init()
594 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_host_deinit() local
596 dwc_pcie_debugfs_deinit(pci); in dw_pcie_host_deinit()
601 dw_pcie_stop_link(pci); in dw_pcie_host_deinit()
603 dw_pcie_edma_remove(pci); in dw_pcie_host_deinit()
617 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_other_conf_map_bus() local
625 * SError upon PCI configuration transactions issued when the link in dw_pcie_other_conf_map_bus()
630 if (!dw_pcie_link_up(pci)) in dw_pcie_other_conf_map_bus()
642 atu.parent_bus_addr = pp->cfg0_base - pci->parent_bus_offset; in dw_pcie_other_conf_map_bus()
646 ret = dw_pcie_prog_outbound_atu(pci, &atu); in dw_pcie_other_conf_map_bus()
657 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_rd_other_conf() local
667 atu.parent_bus_addr = pp->io_base - pci->parent_bus_offset; in dw_pcie_rd_other_conf()
671 ret = dw_pcie_prog_outbound_atu(pci, &atu); in dw_pcie_rd_other_conf()
683 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_wr_other_conf() local
693 atu.parent_bus_addr = pp->io_base - pci->parent_bus_offset; in dw_pcie_wr_other_conf()
697 ret = dw_pcie_prog_outbound_atu(pci, &atu); in dw_pcie_wr_other_conf()
714 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_own_conf_map_bus() local
719 return pci->dbi_base + where; in dw_pcie_own_conf_map_bus()
731 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_iatu_setup() local
737 if (!pci->num_ob_windows) { in dw_pcie_iatu_setup()
738 dev_err(pci->dev, "No outbound iATU found\n"); in dw_pcie_iatu_setup()
746 for (i = 0; i < pci->num_ob_windows; i++) in dw_pcie_iatu_setup()
747 dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_OB, i); in dw_pcie_iatu_setup()
749 for (i = 0; i < pci->num_ib_windows; i++) in dw_pcie_iatu_setup()
750 dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_IB, i); in dw_pcie_iatu_setup()
757 if (pci->num_ob_windows <= ++i) in dw_pcie_iatu_setup()
762 atu.parent_bus_addr = entry->res->start - pci->parent_bus_offset; in dw_pcie_iatu_setup()
772 ret = dw_pcie_prog_outbound_atu(pci, &atu); in dw_pcie_iatu_setup()
774 dev_err(pci->dev, "Failed to set MEM range %pr\n", in dw_pcie_iatu_setup()
781 if (pci->num_ob_windows > ++i) { in dw_pcie_iatu_setup()
784 atu.parent_bus_addr = pp->io_base - pci->parent_bus_offset; in dw_pcie_iatu_setup()
788 ret = dw_pcie_prog_outbound_atu(pci, &atu); in dw_pcie_iatu_setup()
790 dev_err(pci->dev, "Failed to set IO range %pr\n", in dw_pcie_iatu_setup()
799 if (pci->num_ob_windows <= i) in dw_pcie_iatu_setup()
800 dev_warn(pci->dev, "Ranges exceed outbound iATU size (%d)\n", in dw_pcie_iatu_setup()
801 pci->num_ob_windows); in dw_pcie_iatu_setup()
810 if (pci->num_ib_windows <= i) in dw_pcie_iatu_setup()
813 ret = dw_pcie_prog_inbound_atu(pci, i++, PCIE_ATU_TYPE_MEM, in dw_pcie_iatu_setup()
818 dev_err(pci->dev, "Failed to set DMA range %pr\n", in dw_pcie_iatu_setup()
824 if (pci->num_ib_windows <= i) in dw_pcie_iatu_setup()
825 dev_warn(pci->dev, "Dma-ranges exceed inbound iATU size (%u)\n", in dw_pcie_iatu_setup()
826 pci->num_ib_windows); in dw_pcie_iatu_setup()
833 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in dw_pcie_setup_rc() local
841 dw_pcie_dbi_ro_wr_en(pci); in dw_pcie_setup_rc()
843 dw_pcie_setup(pci); in dw_pcie_setup_rc()
850 dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_MASK + in dw_pcie_setup_rc()
853 dw_pcie_writel_dbi(pci, PCIE_MSI_INTR0_ENABLE + in dw_pcie_setup_rc()
862 dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, 0x00000004); in dw_pcie_setup_rc()
863 dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_1, 0x00000000); in dw_pcie_setup_rc()
866 val = dw_pcie_readl_dbi(pci, PCI_INTERRUPT_LINE); in dw_pcie_setup_rc()
869 dw_pcie_writel_dbi(pci, PCI_INTERRUPT_LINE, val); in dw_pcie_setup_rc()
872 val = dw_pcie_readl_dbi(pci, PCI_PRIMARY_BUS); in dw_pcie_setup_rc()
875 dw_pcie_writel_dbi(pci, PCI_PRIMARY_BUS, val); in dw_pcie_setup_rc()
878 val = dw_pcie_readl_dbi(pci, PCI_COMMAND); in dw_pcie_setup_rc()
882 dw_pcie_writel_dbi(pci, PCI_COMMAND, val); in dw_pcie_setup_rc()
895 dw_pcie_writel_dbi(pci, PCI_BASE_ADDRESS_0, 0); in dw_pcie_setup_rc()
898 dw_pcie_writew_dbi(pci, PCI_CLASS_DEVICE, PCI_CLASS_BRIDGE_PCI); in dw_pcie_setup_rc()
900 val = dw_pcie_readl_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL); in dw_pcie_setup_rc()
902 dw_pcie_writel_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL, val); in dw_pcie_setup_rc()
904 dw_pcie_dbi_ro_wr_dis(pci); in dw_pcie_setup_rc()
910 static int dw_pcie_pme_turn_off(struct dw_pcie *pci) in dw_pcie_pme_turn_off() argument
916 if (pci->num_ob_windows <= pci->pp.msg_atu_index) in dw_pcie_pme_turn_off()
919 if (!pci->pp.msg_res) in dw_pcie_pme_turn_off()
925 atu.size = resource_size(pci->pp.msg_res); in dw_pcie_pme_turn_off()
926 atu.index = pci->pp.msg_atu_index; in dw_pcie_pme_turn_off()
928 atu.parent_bus_addr = pci->pp.msg_res->start - pci->parent_bus_offset; in dw_pcie_pme_turn_off()
930 ret = dw_pcie_prog_outbound_atu(pci, &atu); in dw_pcie_pme_turn_off()
934 mem = ioremap(pci->pp.msg_res->start, pci->region_align); in dw_pcie_pme_turn_off()
946 int dw_pcie_suspend_noirq(struct dw_pcie *pci) in dw_pcie_suspend_noirq() argument
948 u8 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP); in dw_pcie_suspend_noirq()
956 if (dw_pcie_readw_dbi(pci, offset + PCI_EXP_LNKCTL) & PCI_EXP_LNKCTL_ASPM_L1) in dw_pcie_suspend_noirq()
959 if (pci->pp.ops->pme_turn_off) { in dw_pcie_suspend_noirq()
960 pci->pp.ops->pme_turn_off(&pci->pp); in dw_pcie_suspend_noirq()
962 ret = dw_pcie_pme_turn_off(pci); in dw_pcie_suspend_noirq()
971 PCIE_PME_TO_L2_TIMEOUT_US, false, pci); in dw_pcie_suspend_noirq()
974 dev_err(pci->dev, "Timeout waiting for L2 entry! LTSSM: 0x%x\n", val); in dw_pcie_suspend_noirq()
985 dw_pcie_stop_link(pci); in dw_pcie_suspend_noirq()
986 if (pci->pp.ops->deinit) in dw_pcie_suspend_noirq()
987 pci->pp.ops->deinit(&pci->pp); in dw_pcie_suspend_noirq()
989 pci->suspended = true; in dw_pcie_suspend_noirq()
995 int dw_pcie_resume_noirq(struct dw_pcie *pci) in dw_pcie_resume_noirq() argument
999 if (!pci->suspended) in dw_pcie_resume_noirq()
1002 pci->suspended = false; in dw_pcie_resume_noirq()
1004 if (pci->pp.ops->init) { in dw_pcie_resume_noirq()
1005 ret = pci->pp.ops->init(&pci->pp); in dw_pcie_resume_noirq()
1007 dev_err(pci->dev, "Host init failed: %d\n", ret); in dw_pcie_resume_noirq()
1012 dw_pcie_setup_rc(&pci->pp); in dw_pcie_resume_noirq()
1014 ret = dw_pcie_start_link(pci); in dw_pcie_resume_noirq()
1018 ret = dw_pcie_wait_for_link(pci); in dw_pcie_resume_noirq()