Lines Matching full:fn
19 static u8 cdns_pcie_get_fn_from_vfn(struct cdns_pcie *pcie, u8 fn, u8 vfn) in cdns_pcie_get_fn_from_vfn() argument
25 return fn; in cdns_pcie_get_fn_from_vfn()
27 first_vf_offset = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_SRIOV_VF_OFFSET); in cdns_pcie_get_fn_from_vfn()
28 stride = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_SRIOV_VF_STRIDE); in cdns_pcie_get_fn_from_vfn()
29 fn = fn + first_vf_offset + ((vfn - 1) * stride); in cdns_pcie_get_fn_from_vfn()
31 return fn; in cdns_pcie_get_fn_from_vfn()
34 static int cdns_pcie_ep_write_header(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_write_header() argument
47 cdns_pcie_ep_fn_writew(pcie, fn, reg, hdr->deviceid); in cdns_pcie_ep_write_header()
51 cdns_pcie_ep_fn_writew(pcie, fn, PCI_DEVICE_ID, hdr->deviceid); in cdns_pcie_ep_write_header()
52 cdns_pcie_ep_fn_writeb(pcie, fn, PCI_REVISION_ID, hdr->revid); in cdns_pcie_ep_write_header()
53 cdns_pcie_ep_fn_writeb(pcie, fn, PCI_CLASS_PROG, hdr->progif_code); in cdns_pcie_ep_write_header()
54 cdns_pcie_ep_fn_writew(pcie, fn, PCI_CLASS_DEVICE, in cdns_pcie_ep_write_header()
56 cdns_pcie_ep_fn_writeb(pcie, fn, PCI_CACHE_LINE_SIZE, in cdns_pcie_ep_write_header()
58 cdns_pcie_ep_fn_writew(pcie, fn, PCI_SUBSYSTEM_ID, hdr->subsys_id); in cdns_pcie_ep_write_header()
59 cdns_pcie_ep_fn_writeb(pcie, fn, PCI_INTERRUPT_PIN, hdr->interrupt_pin); in cdns_pcie_ep_write_header()
65 if (fn == 0) { in cdns_pcie_ep_write_header()
76 static int cdns_pcie_ep_set_bar(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_set_bar() argument
80 struct cdns_pcie_epf *epf = &ep->epf[fn]; in cdns_pcie_ep_set_bar()
123 reg = CDNS_PCIE_LM_EP_VFUNC_BAR_CFG(bar, fn); in cdns_pcie_ep_set_bar()
125 reg = CDNS_PCIE_LM_EP_FUNC_BAR_CFG(bar, fn); in cdns_pcie_ep_set_bar()
137 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_set_bar()
138 cdns_pcie_writel(pcie, CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR0(fn, bar), in cdns_pcie_ep_set_bar()
140 cdns_pcie_writel(pcie, CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR1(fn, bar), in cdns_pcie_ep_set_bar()
150 static void cdns_pcie_ep_clear_bar(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_clear_bar() argument
154 struct cdns_pcie_epf *epf = &ep->epf[fn]; in cdns_pcie_ep_clear_bar()
160 reg = CDNS_PCIE_LM_EP_VFUNC_BAR_CFG(bar, fn); in cdns_pcie_ep_clear_bar()
162 reg = CDNS_PCIE_LM_EP_FUNC_BAR_CFG(bar, fn); in cdns_pcie_ep_clear_bar()
174 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_clear_bar()
175 cdns_pcie_writel(pcie, CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR0(fn, bar), 0); in cdns_pcie_ep_clear_bar()
176 cdns_pcie_writel(pcie, CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR1(fn, bar), 0); in cdns_pcie_ep_clear_bar()
183 static int cdns_pcie_ep_map_addr(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_map_addr() argument
197 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_map_addr()
198 cdns_pcie_set_outbound_region(pcie, 0, fn, r, false, addr, pci_addr, size); in cdns_pcie_ep_map_addr()
206 static void cdns_pcie_ep_unmap_addr(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_unmap_addr() argument
226 static int cdns_pcie_ep_set_msi(struct pci_epc *epc, u8 fn, u8 vfn, u8 mmc) in cdns_pcie_ep_set_msi() argument
233 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_set_msi()
239 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_FLAGS); in cdns_pcie_ep_set_msi()
243 cdns_pcie_ep_fn_writew(pcie, fn, cap + PCI_MSI_FLAGS, flags); in cdns_pcie_ep_set_msi()
248 static int cdns_pcie_ep_get_msi(struct pci_epc *epc, u8 fn, u8 vfn) in cdns_pcie_ep_get_msi() argument
255 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_get_msi()
258 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_FLAGS); in cdns_pcie_ep_get_msi()
290 static int cdns_pcie_ep_set_msix(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_set_msix() argument
299 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_set_msix()
302 val = cdns_pcie_ep_fn_readw(pcie, fn, reg); in cdns_pcie_ep_set_msix()
305 cdns_pcie_ep_fn_writew(pcie, fn, reg, val); in cdns_pcie_ep_set_msix()
310 cdns_pcie_ep_fn_writel(pcie, fn, reg, val); in cdns_pcie_ep_set_msix()
315 cdns_pcie_ep_fn_writel(pcie, fn, reg, val); in cdns_pcie_ep_set_msix()
320 static void cdns_pcie_ep_assert_intx(struct cdns_pcie_ep *ep, u8 fn, u8 intx, in cdns_pcie_ep_assert_intx() argument
333 ep->irq_pci_fn != fn)) { in cdns_pcie_ep_assert_intx()
335 cdns_pcie_set_outbound_region_for_normal_msg(pcie, 0, fn, 0, in cdns_pcie_ep_assert_intx()
338 ep->irq_pci_fn = fn; in cdns_pcie_ep_assert_intx()
350 status = cdns_pcie_ep_fn_readw(pcie, fn, PCI_STATUS); in cdns_pcie_ep_assert_intx()
353 cdns_pcie_ep_fn_writew(pcie, fn, PCI_STATUS, status); in cdns_pcie_ep_assert_intx()
363 static int cdns_pcie_ep_send_legacy_irq(struct cdns_pcie_ep *ep, u8 fn, u8 vfn, in cdns_pcie_ep_send_legacy_irq() argument
368 cmd = cdns_pcie_ep_fn_readw(&ep->pcie, fn, PCI_COMMAND); in cdns_pcie_ep_send_legacy_irq()
372 cdns_pcie_ep_assert_intx(ep, fn, intx, true); in cdns_pcie_ep_send_legacy_irq()
377 cdns_pcie_ep_assert_intx(ep, fn, intx, false); in cdns_pcie_ep_send_legacy_irq()
381 static int cdns_pcie_ep_send_msi_irq(struct cdns_pcie_ep *ep, u8 fn, u8 vfn, in cdns_pcie_ep_send_msi_irq() argument
390 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_send_msi_irq()
393 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_FLAGS); in cdns_pcie_ep_send_msi_irq()
405 data = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_DATA_64); in cdns_pcie_ep_send_msi_irq()
409 pci_addr = cdns_pcie_ep_fn_readl(pcie, fn, cap + PCI_MSI_ADDRESS_HI); in cdns_pcie_ep_send_msi_irq()
411 pci_addr |= cdns_pcie_ep_fn_readl(pcie, fn, cap + PCI_MSI_ADDRESS_LO); in cdns_pcie_ep_send_msi_irq()
416 ep->irq_pci_fn != fn)) { in cdns_pcie_ep_send_msi_irq()
418 cdns_pcie_set_outbound_region(pcie, 0, fn, 0, in cdns_pcie_ep_send_msi_irq()
424 ep->irq_pci_fn = fn; in cdns_pcie_ep_send_msi_irq()
431 static int cdns_pcie_ep_map_msi_irq(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_map_msi_irq() argument
445 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_map_msi_irq()
448 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_FLAGS); in cdns_pcie_ep_map_msi_irq()
460 data = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_DATA_64); in cdns_pcie_ep_map_msi_irq()
464 pci_addr = cdns_pcie_ep_fn_readl(pcie, fn, cap + PCI_MSI_ADDRESS_HI); in cdns_pcie_ep_map_msi_irq()
466 pci_addr |= cdns_pcie_ep_fn_readl(pcie, fn, cap + PCI_MSI_ADDRESS_LO); in cdns_pcie_ep_map_msi_irq()
470 ret = cdns_pcie_ep_map_addr(epc, fn, vfn, addr, in cdns_pcie_ep_map_msi_irq()
484 static int cdns_pcie_ep_send_msix_irq(struct cdns_pcie_ep *ep, u8 fn, u8 vfn, in cdns_pcie_ep_send_msix_irq() argument
497 epf = &ep->epf[fn]; in cdns_pcie_ep_send_msix_irq()
501 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_send_msix_irq()
504 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSIX_FLAGS); in cdns_pcie_ep_send_msix_irq()
509 tbl_offset = cdns_pcie_ep_fn_readl(pcie, fn, reg); in cdns_pcie_ep_send_msix_irq()
519 ep->irq_pci_fn != fn) { in cdns_pcie_ep_send_msix_irq()
521 cdns_pcie_set_outbound_region(pcie, 0, fn, 0, in cdns_pcie_ep_send_msix_irq()
527 ep->irq_pci_fn = fn; in cdns_pcie_ep_send_msix_irq()
534 static int cdns_pcie_ep_raise_irq(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_raise_irq() argument
548 return cdns_pcie_ep_send_legacy_irq(ep, fn, vfn, 0); in cdns_pcie_ep_raise_irq()
551 return cdns_pcie_ep_send_msi_irq(ep, fn, vfn, interrupt_num); in cdns_pcie_ep_raise_irq()
554 return cdns_pcie_ep_send_msix_irq(ep, fn, vfn, interrupt_num); in cdns_pcie_ep_raise_irq()