Lines Matching full:pci

15 #include <linux/pci-epc.h>
16 #include <linux/pci-epf.h>
39 static void __dw_pcie_ep_reset_bar(struct dw_pcie *pci, u8 func_no, in __dw_pcie_ep_reset_bar() argument
42 struct dw_pcie_ep *ep = &pci->ep; in __dw_pcie_ep_reset_bar()
46 dw_pcie_dbi_ro_wr_en(pci); in __dw_pcie_ep_reset_bar()
53 dw_pcie_dbi_ro_wr_dis(pci); in __dw_pcie_ep_reset_bar()
58 * @pci: DWC PCI device
61 void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar) in dw_pcie_ep_reset_bar() argument
65 funcs = pci->ep.epc->max_functions; in dw_pcie_ep_reset_bar()
68 __dw_pcie_ep_reset_bar(pci, func_no, bar, 0); in dw_pcie_ep_reset_bar()
107 * @pci: DWC PCI device
113 int dw_pcie_ep_hide_ext_capability(struct dw_pcie *pci, u8 prev_cap, u8 cap) in dw_pcie_ep_hide_ext_capability() argument
118 prev_cap_offset = dw_pcie_find_ext_capability(pci, prev_cap); in dw_pcie_ep_hide_ext_capability()
122 prev_cap_header = dw_pcie_readl_dbi(pci, prev_cap_offset); in dw_pcie_ep_hide_ext_capability()
124 cap_header = dw_pcie_readl_dbi(pci, cap_offset); in dw_pcie_ep_hide_ext_capability()
136 dw_pcie_dbi_ro_wr_en(pci); in dw_pcie_ep_hide_ext_capability()
137 dw_pcie_writel_dbi(pci, prev_cap_offset, prev_cap_header); in dw_pcie_ep_hide_ext_capability()
138 dw_pcie_dbi_ro_wr_dis(pci); in dw_pcie_ep_hide_ext_capability()
148 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_write_header() local
150 dw_pcie_dbi_ro_wr_en(pci); in dw_pcie_ep_write_header()
164 dw_pcie_dbi_ro_wr_dis(pci); in dw_pcie_ep_write_header()
175 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_inbound_atu() local
178 free_win = find_first_zero_bit(ep->ib_window_map, pci->num_ib_windows); in dw_pcie_ep_inbound_atu()
182 if (free_win >= pci->num_ib_windows) { in dw_pcie_ep_inbound_atu()
183 dev_err(pci->dev, "No free inbound window\n"); in dw_pcie_ep_inbound_atu()
187 ret = dw_pcie_prog_ep_inbound_atu(pci, func_no, free_win, type, in dw_pcie_ep_inbound_atu()
190 dev_err(pci->dev, "Failed to program IB window\n"); in dw_pcie_ep_inbound_atu()
207 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_outbound_atu() local
211 free_win = find_first_zero_bit(ep->ob_window_map, pci->num_ob_windows); in dw_pcie_ep_outbound_atu()
212 if (free_win >= pci->num_ob_windows) { in dw_pcie_ep_outbound_atu()
213 dev_err(pci->dev, "No free outbound window\n"); in dw_pcie_ep_outbound_atu()
218 ret = dw_pcie_prog_outbound_atu(pci, atu); in dw_pcie_ep_outbound_atu()
232 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_clear_bar() local
239 __dw_pcie_ep_reset_bar(pci, func_no, bar, epf_bar->flags); in dw_pcie_ep_clear_bar()
241 dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_IB, atu_index); in dw_pcie_ep_clear_bar()
247 static unsigned int dw_pcie_ep_get_rebar_offset(struct dw_pcie *pci, in dw_pcie_ep_get_rebar_offset() argument
254 offset = dw_pcie_find_ext_capability(pci, PCI_EXT_CAP_ID_REBAR); in dw_pcie_ep_get_rebar_offset()
258 reg = dw_pcie_readl_dbi(pci, offset + PCI_REBAR_CTRL); in dw_pcie_ep_get_rebar_offset()
262 reg = dw_pcie_readl_dbi(pci, offset + PCI_REBAR_CTRL); in dw_pcie_ep_get_rebar_offset()
274 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_set_bar_resizable() local
283 rebar_offset = dw_pcie_ep_get_rebar_offset(pci, bar); in dw_pcie_ep_set_bar_resizable()
291 dw_pcie_dbi_ro_wr_en(pci); in dw_pcie_ep_set_bar_resizable()
313 rebar_ctrl = dw_pcie_readl_dbi(pci, rebar_offset + PCI_REBAR_CTRL); in dw_pcie_ep_set_bar_resizable()
315 dw_pcie_writel_dbi(pci, rebar_offset + PCI_REBAR_CTRL, rebar_ctrl); in dw_pcie_ep_set_bar_resizable()
322 dw_pcie_writel_dbi(pci, rebar_offset + PCI_REBAR_CAP, rebar_cap); in dw_pcie_ep_set_bar_resizable()
324 dw_pcie_dbi_ro_wr_dis(pci); in dw_pcie_ep_set_bar_resizable()
332 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_set_bar_programmable() local
338 dw_pcie_dbi_ro_wr_en(pci); in dw_pcie_ep_set_bar_programmable()
348 dw_pcie_dbi_ro_wr_dis(pci); in dw_pcie_ep_set_bar_programmable()
370 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_set_bar() local
387 * calling clear_bar() would clear the BAR's PCI address assigned by the in dw_pcie_ep_set_bar()
402 * that would clear the BAR's PCI address assigned by the host. in dw_pcie_ep_set_bar()
425 dev_err(pci->dev, "Invalid BAR type\n"); in dw_pcie_ep_set_bar()
452 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_find_index() local
454 for_each_set_bit(index, ep->ob_window_map, pci->num_ob_windows) { in dw_pcie_find_index()
468 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_align_addr() local
469 u64 mask = pci->region_align - 1; in dw_pcie_ep_align_addr()
484 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_unmap_addr() local
486 ret = dw_pcie_find_index(ep, addr - pci->parent_bus_offset, in dw_pcie_ep_unmap_addr()
492 dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_OB, atu_index); in dw_pcie_ep_unmap_addr()
501 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_map_addr() local
506 atu.parent_bus_addr = addr - pci->parent_bus_offset; in dw_pcie_ep_map_addr()
511 dev_err(pci->dev, "Failed to enable address\n"); in dw_pcie_ep_map_addr()
542 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_set_msi() local
554 dw_pcie_dbi_ro_wr_en(pci); in dw_pcie_ep_set_msi()
556 dw_pcie_dbi_ro_wr_dis(pci); in dw_pcie_ep_set_msi()
585 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_set_msix() local
593 dw_pcie_dbi_ro_wr_en(pci); in dw_pcie_ep_set_msix()
599 dw_pcie_writew_dbi(pci, reg, val); in dw_pcie_ep_set_msix()
609 dw_pcie_dbi_ro_wr_dis(pci); in dw_pcie_ep_set_msix()
628 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_stop() local
630 dw_pcie_stop_link(pci); in dw_pcie_ep_stop()
636 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_start() local
638 return dw_pcie_start_link(pci); in dw_pcie_ep_start()
678 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_raise_intx_irq() local
679 struct device *dev = pci->dev; in dw_pcie_ep_raise_intx_irq()
712 /* Raise MSI per the PCI Local Bus Specification Revision 3.0, 6.8.1. */ in dw_pcie_ep_raise_msi_irq()
756 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_raise_msix_irq_doorbell() local
767 dw_pcie_writel_dbi(pci, PCIE_MSIX_DOORBELL, msg_data); in dw_pcie_ep_raise_msix_irq_doorbell()
783 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_raise_msix_irq() local
810 dev_dbg(pci->dev, "MSI-X entry ctrl set\n"); in dw_pcie_ep_raise_msix_irq()
837 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_cleanup() local
839 dwc_pcie_debugfs_deinit(pci); in dw_pcie_ep_cleanup()
840 dw_pcie_edma_remove(pci); in dw_pcie_ep_cleanup()
864 static void dw_pcie_ep_init_non_sticky_registers(struct dw_pcie *pci) in dw_pcie_ep_init_non_sticky_registers() argument
866 struct dw_pcie_ep *ep = &pci->ep; in dw_pcie_ep_init_non_sticky_registers()
872 offset = dw_pcie_find_ext_capability(pci, PCI_EXT_CAP_ID_REBAR); in dw_pcie_ep_init_non_sticky_registers()
874 dw_pcie_dbi_ro_wr_en(pci); in dw_pcie_ep_init_non_sticky_registers()
877 reg = dw_pcie_readl_dbi(pci, offset + PCI_REBAR_CTRL); in dw_pcie_ep_init_non_sticky_registers()
899 val = dw_pcie_readl_dbi(pci, offset + PCI_REBAR_CTRL); in dw_pcie_ep_init_non_sticky_registers()
906 dw_pcie_writel_dbi(pci, offset + PCI_REBAR_CAP, val); in dw_pcie_ep_init_non_sticky_registers()
910 dw_pcie_setup(pci); in dw_pcie_ep_init_non_sticky_registers()
911 dw_pcie_dbi_ro_wr_dis(pci); in dw_pcie_ep_init_non_sticky_registers()
924 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_init_registers() local
926 struct device *dev = pci->dev; in dw_pcie_ep_init_registers()
934 hdr_type = dw_pcie_readb_dbi(pci, PCI_HEADER_TYPE) & in dw_pcie_ep_init_registers()
937 dev_err(pci->dev, in dw_pcie_ep_init_registers()
943 dw_pcie_version_detect(pci); in dw_pcie_ep_init_registers()
945 dw_pcie_iatu_detect(pci); in dw_pcie_ep_init_registers()
947 ret = dw_pcie_edma_detect(pci); in dw_pcie_ep_init_registers()
953 ep->ib_window_map = devm_bitmap_zalloc(dev, pci->num_ib_windows, in dw_pcie_ep_init_registers()
960 ep->ob_window_map = devm_bitmap_zalloc(dev, pci->num_ob_windows, in dw_pcie_ep_init_registers()
967 addr = devm_kcalloc(dev, pci->num_ob_windows, sizeof(phys_addr_t), in dw_pcie_ep_init_registers()
996 ptm_cap_base = dw_pcie_find_ext_capability(pci, PCI_EXT_CAP_ID_PTM); in dw_pcie_ep_init_registers()
1003 dw_pcie_dbi_ro_wr_en(pci); in dw_pcie_ep_init_registers()
1004 reg = dw_pcie_readl_dbi(pci, ptm_cap_base + PCI_PTM_CAP); in dw_pcie_ep_init_registers()
1006 dw_pcie_writel_dbi(pci, ptm_cap_base + PCI_PTM_CAP, reg); in dw_pcie_ep_init_registers()
1008 reg = dw_pcie_readl_dbi(pci, ptm_cap_base + PCI_PTM_CAP); in dw_pcie_ep_init_registers()
1010 dw_pcie_writel_dbi(pci, ptm_cap_base + PCI_PTM_CAP, reg); in dw_pcie_ep_init_registers()
1011 dw_pcie_dbi_ro_wr_dis(pci); in dw_pcie_ep_init_registers()
1014 dw_pcie_ep_init_non_sticky_registers(pci); in dw_pcie_ep_init_registers()
1016 dwc_pcie_debugfs_init(pci); in dw_pcie_ep_init_registers()
1021 dw_pcie_edma_remove(pci); in dw_pcie_ep_init_registers()
1049 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_linkdown() local
1058 dw_pcie_ep_init_non_sticky_registers(pci); in dw_pcie_ep_linkdown()
1066 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_get_resources() local
1067 struct device *dev = pci->dev; in dw_pcie_ep_get_resources()
1074 ret = dw_pcie_get_resources(pci); in dw_pcie_ep_get_resources()
1089 pci->parent_bus_offset = dw_pcie_parent_bus_offset(pci, "addr_space", in dw_pcie_ep_get_resources()
1112 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_init() local
1113 struct device *dev = pci->dev; in dw_pcie_ep_init()