Lines Matching refs:ep
27 dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no) in dw_pcie_ep_get_func_from_ep() argument
31 list_for_each_entry(ep_func, &ep->func_list, list) { in dw_pcie_ep_get_func_from_ep()
42 struct dw_pcie_ep *ep = &pci->ep; in __dw_pcie_ep_reset_bar() local
47 dw_pcie_ep_writel_dbi2(ep, func_no, reg, 0x0); in __dw_pcie_ep_reset_bar()
48 dw_pcie_ep_writel_dbi(ep, func_no, reg, 0x0); in __dw_pcie_ep_reset_bar()
50 dw_pcie_ep_writel_dbi2(ep, func_no, reg + 4, 0x0); in __dw_pcie_ep_reset_bar()
51 dw_pcie_ep_writel_dbi(ep, func_no, reg + 4, 0x0); in __dw_pcie_ep_reset_bar()
65 funcs = pci->ep.epc->max_functions; in dw_pcie_ep_reset_bar()
72 static u8 __dw_pcie_ep_find_next_cap(struct dw_pcie_ep *ep, u8 func_no, in __dw_pcie_ep_find_next_cap() argument
81 reg = dw_pcie_ep_readw_dbi(ep, func_no, cap_ptr); in __dw_pcie_ep_find_next_cap()
91 return __dw_pcie_ep_find_next_cap(ep, func_no, next_cap_ptr, cap); in __dw_pcie_ep_find_next_cap()
94 static u8 dw_pcie_ep_find_capability(struct dw_pcie_ep *ep, u8 func_no, u8 cap) in dw_pcie_ep_find_capability() argument
99 reg = dw_pcie_ep_readw_dbi(ep, func_no, PCI_CAPABILITY_LIST); in dw_pcie_ep_find_capability()
102 return __dw_pcie_ep_find_next_cap(ep, func_no, next_cap_ptr, cap); in dw_pcie_ep_find_capability()
147 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_write_header() local
148 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_write_header()
151 dw_pcie_ep_writew_dbi(ep, func_no, PCI_VENDOR_ID, hdr->vendorid); in dw_pcie_ep_write_header()
152 dw_pcie_ep_writew_dbi(ep, func_no, PCI_DEVICE_ID, hdr->deviceid); in dw_pcie_ep_write_header()
153 dw_pcie_ep_writeb_dbi(ep, func_no, PCI_REVISION_ID, hdr->revid); in dw_pcie_ep_write_header()
154 dw_pcie_ep_writeb_dbi(ep, func_no, PCI_CLASS_PROG, hdr->progif_code); in dw_pcie_ep_write_header()
155 dw_pcie_ep_writew_dbi(ep, func_no, PCI_CLASS_DEVICE, in dw_pcie_ep_write_header()
157 dw_pcie_ep_writeb_dbi(ep, func_no, PCI_CACHE_LINE_SIZE, in dw_pcie_ep_write_header()
159 dw_pcie_ep_writew_dbi(ep, func_no, PCI_SUBSYSTEM_VENDOR_ID, in dw_pcie_ep_write_header()
161 dw_pcie_ep_writew_dbi(ep, func_no, PCI_SUBSYSTEM_ID, hdr->subsys_id); in dw_pcie_ep_write_header()
162 dw_pcie_ep_writeb_dbi(ep, func_no, PCI_INTERRUPT_PIN, in dw_pcie_ep_write_header()
169 static int dw_pcie_ep_inbound_atu(struct dw_pcie_ep *ep, u8 func_no, int type, in dw_pcie_ep_inbound_atu() argument
175 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_inbound_atu()
177 if (!ep->bar_to_atu[bar]) in dw_pcie_ep_inbound_atu()
178 free_win = find_first_zero_bit(ep->ib_window_map, pci->num_ib_windows); in dw_pcie_ep_inbound_atu()
180 free_win = ep->bar_to_atu[bar] - 1; in dw_pcie_ep_inbound_atu()
198 ep->bar_to_atu[bar] = free_win + 1; in dw_pcie_ep_inbound_atu()
199 set_bit(free_win, ep->ib_window_map); in dw_pcie_ep_inbound_atu()
204 static int dw_pcie_ep_outbound_atu(struct dw_pcie_ep *ep, in dw_pcie_ep_outbound_atu() argument
207 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_outbound_atu()
211 free_win = find_first_zero_bit(ep->ob_window_map, pci->num_ob_windows); in dw_pcie_ep_outbound_atu()
222 set_bit(free_win, ep->ob_window_map); in dw_pcie_ep_outbound_atu()
223 ep->outbound_addr[free_win] = atu->parent_bus_addr; in dw_pcie_ep_outbound_atu()
231 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_clear_bar() local
232 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_clear_bar()
234 u32 atu_index = ep->bar_to_atu[bar] - 1; in dw_pcie_ep_clear_bar()
236 if (!ep->bar_to_atu[bar]) in dw_pcie_ep_clear_bar()
242 clear_bit(atu_index, ep->ib_window_map); in dw_pcie_ep_clear_bar()
243 ep->epf_bar[bar] = NULL; in dw_pcie_ep_clear_bar()
244 ep->bar_to_atu[bar] = 0; in dw_pcie_ep_clear_bar()
271 static int dw_pcie_ep_set_bar_resizable(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_set_bar_resizable() argument
274 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_set_bar_resizable()
300 dw_pcie_ep_writel_dbi2(ep, func_no, reg, BIT(0)); in dw_pcie_ep_set_bar_resizable()
301 dw_pcie_ep_writel_dbi(ep, func_no, reg, flags); in dw_pcie_ep_set_bar_resizable()
304 dw_pcie_ep_writel_dbi2(ep, func_no, reg + 4, 0); in dw_pcie_ep_set_bar_resizable()
305 dw_pcie_ep_writel_dbi(ep, func_no, reg + 4, 0); in dw_pcie_ep_set_bar_resizable()
329 static int dw_pcie_ep_set_bar_programmable(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_set_bar_programmable() argument
332 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_set_bar_programmable()
340 dw_pcie_ep_writel_dbi2(ep, func_no, reg, lower_32_bits(size - 1)); in dw_pcie_ep_set_bar_programmable()
341 dw_pcie_ep_writel_dbi(ep, func_no, reg, flags); in dw_pcie_ep_set_bar_programmable()
344 dw_pcie_ep_writel_dbi2(ep, func_no, reg + 4, upper_32_bits(size - 1)); in dw_pcie_ep_set_bar_programmable()
345 dw_pcie_ep_writel_dbi(ep, func_no, reg + 4, 0); in dw_pcie_ep_set_bar_programmable()
353 static enum pci_epc_bar_type dw_pcie_ep_get_bar_type(struct dw_pcie_ep *ep, in dw_pcie_ep_get_bar_type() argument
358 if (!ep->ops->get_features) in dw_pcie_ep_get_bar_type()
361 epc_features = ep->ops->get_features(ep); in dw_pcie_ep_get_bar_type()
369 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_set_bar() local
370 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_set_bar()
390 if (ep->epf_bar[bar]) { in dw_pcie_ep_set_bar()
395 if (ep->epf_bar[bar]->barno != bar || in dw_pcie_ep_set_bar()
396 ep->epf_bar[bar]->size != size || in dw_pcie_ep_set_bar()
397 ep->epf_bar[bar]->flags != flags) in dw_pcie_ep_set_bar()
407 bar_type = dw_pcie_ep_get_bar_type(ep, bar); in dw_pcie_ep_set_bar()
418 ret = dw_pcie_ep_set_bar_programmable(ep, func_no, epf_bar); in dw_pcie_ep_set_bar()
421 ret = dw_pcie_ep_set_bar_resizable(ep, func_no, epf_bar); in dw_pcie_ep_set_bar()
438 ret = dw_pcie_ep_inbound_atu(ep, func_no, type, epf_bar->phys_addr, bar, in dw_pcie_ep_set_bar()
443 ep->epf_bar[bar] = epf_bar; in dw_pcie_ep_set_bar()
448 static int dw_pcie_find_index(struct dw_pcie_ep *ep, phys_addr_t addr, in dw_pcie_find_index() argument
452 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_find_index()
454 for_each_set_bit(index, ep->ob_window_map, pci->num_ob_windows) { in dw_pcie_find_index()
455 if (ep->outbound_addr[index] != addr) in dw_pcie_find_index()
467 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_align_addr() local
468 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_align_addr()
483 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_unmap_addr() local
484 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_unmap_addr()
486 ret = dw_pcie_find_index(ep, addr - pci->parent_bus_offset, in dw_pcie_ep_unmap_addr()
491 ep->outbound_addr[atu_index] = 0; in dw_pcie_ep_unmap_addr()
493 clear_bit(atu_index, ep->ob_window_map); in dw_pcie_ep_unmap_addr()
500 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_map_addr() local
501 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_map_addr()
509 ret = dw_pcie_ep_outbound_atu(ep, &atu); in dw_pcie_ep_map_addr()
520 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_get_msi() local
524 ep_func = dw_pcie_ep_get_func_from_ep(ep, func_no); in dw_pcie_ep_get_msi()
529 val = dw_pcie_ep_readw_dbi(ep, func_no, reg); in dw_pcie_ep_get_msi()
541 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_set_msi() local
542 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_set_msi()
547 ep_func = dw_pcie_ep_get_func_from_ep(ep, func_no); in dw_pcie_ep_set_msi()
552 val = dw_pcie_ep_readw_dbi(ep, func_no, reg); in dw_pcie_ep_set_msi()
556 dw_pcie_ep_writew_dbi(ep, func_no, reg, val); in dw_pcie_ep_set_msi()
564 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_get_msix() local
568 ep_func = dw_pcie_ep_get_func_from_ep(ep, func_no); in dw_pcie_ep_get_msix()
573 val = dw_pcie_ep_readw_dbi(ep, func_no, reg); in dw_pcie_ep_get_msix()
585 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_set_msix() local
586 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_set_msix()
590 ep_func = dw_pcie_ep_get_func_from_ep(ep, func_no); in dw_pcie_ep_set_msix()
597 val = dw_pcie_ep_readw_dbi(ep, func_no, reg); in dw_pcie_ep_set_msix()
604 dw_pcie_ep_writel_dbi(ep, func_no, reg, val); in dw_pcie_ep_set_msix()
608 dw_pcie_ep_writel_dbi(ep, func_no, reg, val); in dw_pcie_ep_set_msix()
618 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_raise_irq() local
620 if (!ep->ops->raise_irq) in dw_pcie_ep_raise_irq()
623 return ep->ops->raise_irq(ep, func_no, type, interrupt_num); in dw_pcie_ep_raise_irq()
628 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_stop() local
629 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_stop()
636 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_start() local
637 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_start()
645 struct dw_pcie_ep *ep = epc_get_drvdata(epc); in dw_pcie_ep_get_features() local
647 if (!ep->ops->get_features) in dw_pcie_ep_get_features()
650 return ep->ops->get_features(ep); in dw_pcie_ep_get_features()
677 int dw_pcie_ep_raise_intx_irq(struct dw_pcie_ep *ep, u8 func_no) in dw_pcie_ep_raise_intx_irq() argument
679 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_raise_intx_irq()
696 int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_raise_msi_irq() argument
701 struct pci_epc *epc = ep->epc; in dw_pcie_ep_raise_msi_irq()
709 ep_func = dw_pcie_ep_get_func_from_ep(ep, func_no); in dw_pcie_ep_raise_msi_irq()
715 msg_ctrl = dw_pcie_ep_readw_dbi(ep, func_no, reg); in dw_pcie_ep_raise_msi_irq()
718 msg_addr_lower = dw_pcie_ep_readl_dbi(ep, func_no, reg); in dw_pcie_ep_raise_msi_irq()
721 msg_addr_upper = dw_pcie_ep_readl_dbi(ep, func_no, reg); in dw_pcie_ep_raise_msi_irq()
723 msg_data = dw_pcie_ep_readw_dbi(ep, func_no, reg); in dw_pcie_ep_raise_msi_irq()
727 msg_data = dw_pcie_ep_readw_dbi(ep, func_no, reg); in dw_pcie_ep_raise_msi_irq()
732 ret = dw_pcie_ep_map_addr(epc, func_no, 0, ep->msi_mem_phys, msg_addr, in dw_pcie_ep_raise_msi_irq()
737 writel(msg_data | (interrupt_num - 1), ep->msi_mem + offset); in dw_pcie_ep_raise_msi_irq()
739 dw_pcie_ep_unmap_addr(epc, func_no, 0, ep->msi_mem_phys); in dw_pcie_ep_raise_msi_irq()
754 int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_raise_msix_irq_doorbell() argument
757 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_raise_msix_irq_doorbell()
761 ep_func = dw_pcie_ep_get_func_from_ep(ep, func_no); in dw_pcie_ep_raise_msix_irq_doorbell()
781 int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_raise_msix_irq() argument
784 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_raise_msix_irq()
787 struct pci_epc *epc = ep->epc; in dw_pcie_ep_raise_msix_irq()
796 ep_func = dw_pcie_ep_get_func_from_ep(ep, func_no); in dw_pcie_ep_raise_msix_irq()
801 tbl_offset = dw_pcie_ep_readl_dbi(ep, func_no, reg); in dw_pcie_ep_raise_msix_irq()
805 msix_tbl = ep->epf_bar[bir]->addr + tbl_offset; in dw_pcie_ep_raise_msix_irq()
816 ret = dw_pcie_ep_map_addr(epc, func_no, 0, ep->msi_mem_phys, msg_addr, in dw_pcie_ep_raise_msix_irq()
821 writel(msg_data, ep->msi_mem + offset); in dw_pcie_ep_raise_msix_irq()
823 dw_pcie_ep_unmap_addr(epc, func_no, 0, ep->msi_mem_phys); in dw_pcie_ep_raise_msix_irq()
836 void dw_pcie_ep_cleanup(struct dw_pcie_ep *ep) in dw_pcie_ep_cleanup() argument
838 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_cleanup()
852 void dw_pcie_ep_deinit(struct dw_pcie_ep *ep) in dw_pcie_ep_deinit() argument
854 struct pci_epc *epc = ep->epc; in dw_pcie_ep_deinit()
856 dw_pcie_ep_cleanup(ep); in dw_pcie_ep_deinit()
858 pci_epc_mem_free_addr(epc, ep->msi_mem_phys, ep->msi_mem, in dw_pcie_ep_deinit()
867 struct dw_pcie_ep *ep = &pci->ep; in dw_pcie_ep_init_non_sticky_registers() local
901 if (ep->epf_bar[bar]) in dw_pcie_ep_init_non_sticky_registers()
902 pci_epc_bar_size_to_rebar_cap(ep->epf_bar[bar]->size, &val); in dw_pcie_ep_init_non_sticky_registers()
922 int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep) in dw_pcie_ep_init_registers() argument
924 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_init_registers()
927 struct pci_epc *epc = ep->epc; in dw_pcie_ep_init_registers()
952 if (!ep->ib_window_map) { 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()
955 if (!ep->ib_window_map) in dw_pcie_ep_init_registers()
959 if (!ep->ob_window_map) { 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()
962 if (!ep->ob_window_map) in dw_pcie_ep_init_registers()
966 if (!ep->outbound_addr) { in dw_pcie_ep_init_registers()
971 ep->outbound_addr = addr; in dw_pcie_ep_init_registers()
976 ep_func = dw_pcie_ep_get_func_from_ep(ep, func_no); in dw_pcie_ep_init_registers()
985 ep_func->msi_cap = dw_pcie_ep_find_capability(ep, func_no, in dw_pcie_ep_init_registers()
987 ep_func->msix_cap = dw_pcie_ep_find_capability(ep, func_no, in dw_pcie_ep_init_registers()
990 list_add_tail(&ep_func->list, &ep->func_list); in dw_pcie_ep_init_registers()
993 if (ep->ops->init) in dw_pcie_ep_init_registers()
994 ep->ops->init(ep); in dw_pcie_ep_init_registers()
1031 void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) in dw_pcie_ep_linkup() argument
1033 struct pci_epc *epc = ep->epc; in dw_pcie_ep_linkup()
1047 void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep) in dw_pcie_ep_linkdown() argument
1049 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_linkdown()
1050 struct pci_epc *epc = ep->epc; in dw_pcie_ep_linkdown()
1064 static int dw_pcie_ep_get_resources(struct dw_pcie_ep *ep) in dw_pcie_ep_get_resources() argument
1066 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_get_resources()
1070 struct pci_epc *epc = ep->epc; in dw_pcie_ep_get_resources()
1082 ep->phys_base = res->start; in dw_pcie_ep_get_resources()
1083 ep->addr_size = resource_size(res); in dw_pcie_ep_get_resources()
1090 ep->phys_base); in dw_pcie_ep_get_resources()
1108 int dw_pcie_ep_init(struct dw_pcie_ep *ep) in dw_pcie_ep_init() argument
1112 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_init()
1115 INIT_LIST_HEAD(&ep->func_list); in dw_pcie_ep_init()
1123 ep->epc = epc; in dw_pcie_ep_init()
1124 epc_set_drvdata(epc, ep); in dw_pcie_ep_init()
1126 ret = dw_pcie_ep_get_resources(ep); in dw_pcie_ep_init()
1130 if (ep->ops->pre_init) in dw_pcie_ep_init()
1131 ep->ops->pre_init(ep); in dw_pcie_ep_init()
1133 ret = pci_epc_mem_init(epc, ep->phys_base, ep->addr_size, in dw_pcie_ep_init()
1134 ep->page_size); in dw_pcie_ep_init()
1140 ep->msi_mem = pci_epc_mem_alloc_addr(epc, &ep->msi_mem_phys, in dw_pcie_ep_init()
1142 if (!ep->msi_mem) { in dw_pcie_ep_init()