Lines Matching full:fn

22 static u8 cdns_pcie_get_fn_from_vfn(struct cdns_pcie *pcie, u8 fn, u8 vfn)  in cdns_pcie_get_fn_from_vfn()  argument
28 return fn; in cdns_pcie_get_fn_from_vfn()
31 first_vf_offset = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_SRIOV_VF_OFFSET); in cdns_pcie_get_fn_from_vfn()
32 stride = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_SRIOV_VF_STRIDE); in cdns_pcie_get_fn_from_vfn()
33 fn = fn + first_vf_offset + ((vfn - 1) * stride); in cdns_pcie_get_fn_from_vfn()
35 return fn; in cdns_pcie_get_fn_from_vfn()
38 static int cdns_pcie_ep_write_header(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_write_header() argument
52 cdns_pcie_ep_fn_writew(pcie, fn, reg, hdr->deviceid); in cdns_pcie_ep_write_header()
56 cdns_pcie_ep_fn_writew(pcie, fn, PCI_DEVICE_ID, hdr->deviceid); in cdns_pcie_ep_write_header()
57 cdns_pcie_ep_fn_writeb(pcie, fn, PCI_REVISION_ID, hdr->revid); in cdns_pcie_ep_write_header()
58 cdns_pcie_ep_fn_writeb(pcie, fn, PCI_CLASS_PROG, hdr->progif_code); in cdns_pcie_ep_write_header()
59 cdns_pcie_ep_fn_writew(pcie, fn, PCI_CLASS_DEVICE, in cdns_pcie_ep_write_header()
61 cdns_pcie_ep_fn_writeb(pcie, fn, PCI_CACHE_LINE_SIZE, in cdns_pcie_ep_write_header()
63 cdns_pcie_ep_fn_writew(pcie, fn, PCI_SUBSYSTEM_ID, hdr->subsys_id); in cdns_pcie_ep_write_header()
64 cdns_pcie_ep_fn_writeb(pcie, fn, PCI_INTERRUPT_PIN, hdr->interrupt_pin); in cdns_pcie_ep_write_header()
70 if (fn == 0) { in cdns_pcie_ep_write_header()
81 static int cdns_pcie_ep_set_bar(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_set_bar() argument
85 struct cdns_pcie_epf *epf = &ep->epf[fn]; in cdns_pcie_ep_set_bar()
125 reg = CDNS_PCIE_LM_EP_VFUNC_BAR_CFG(bar, fn); in cdns_pcie_ep_set_bar()
127 reg = CDNS_PCIE_LM_EP_FUNC_BAR_CFG(bar, fn); in cdns_pcie_ep_set_bar()
139 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_set_bar()
140 cdns_pcie_writel(pcie, CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR0(fn, bar), in cdns_pcie_ep_set_bar()
142 cdns_pcie_writel(pcie, CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR1(fn, bar), in cdns_pcie_ep_set_bar()
152 static void cdns_pcie_ep_clear_bar(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_clear_bar() argument
156 struct cdns_pcie_epf *epf = &ep->epf[fn]; in cdns_pcie_ep_clear_bar()
162 reg = CDNS_PCIE_LM_EP_VFUNC_BAR_CFG(bar, fn); in cdns_pcie_ep_clear_bar()
164 reg = CDNS_PCIE_LM_EP_FUNC_BAR_CFG(bar, fn); in cdns_pcie_ep_clear_bar()
176 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_clear_bar()
177 cdns_pcie_writel(pcie, CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR0(fn, bar), 0); in cdns_pcie_ep_clear_bar()
178 cdns_pcie_writel(pcie, CDNS_PCIE_AT_IB_EP_FUNC_BAR_ADDR1(fn, bar), 0); in cdns_pcie_ep_clear_bar()
185 static int cdns_pcie_ep_map_addr(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_map_addr() argument
198 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_map_addr()
199 cdns_pcie_set_outbound_region(pcie, 0, fn, r, false, addr, pci_addr, size); in cdns_pcie_ep_map_addr()
207 static void cdns_pcie_ep_unmap_addr(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_unmap_addr() argument
227 static int cdns_pcie_ep_set_msi(struct pci_epc *epc, u8 fn, u8 vfn, u8 nr_irqs) in cdns_pcie_ep_set_msi() argument
236 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_set_msi()
242 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_FLAGS); in cdns_pcie_ep_set_msi()
246 cdns_pcie_ep_fn_writew(pcie, fn, cap + PCI_MSI_FLAGS, flags); in cdns_pcie_ep_set_msi()
251 static int cdns_pcie_ep_get_msi(struct pci_epc *epc, u8 fn, u8 vfn) in cdns_pcie_ep_get_msi() argument
259 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_get_msi()
262 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_FLAGS); in cdns_pcie_ep_get_msi()
295 static int cdns_pcie_ep_set_msix(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_set_msix() argument
304 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_set_msix()
307 val = cdns_pcie_ep_fn_readw(pcie, fn, reg); in cdns_pcie_ep_set_msix()
310 cdns_pcie_ep_fn_writew(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 cdns_pcie_ep_fn_writel(pcie, fn, reg, val); in cdns_pcie_ep_set_msix()
325 static void cdns_pcie_ep_assert_intx(struct cdns_pcie_ep *ep, u8 fn, u8 intx, in cdns_pcie_ep_assert_intx() argument
338 ep->irq_pci_fn != fn)) { in cdns_pcie_ep_assert_intx()
340 cdns_pcie_set_outbound_region_for_normal_msg(pcie, 0, fn, 0, in cdns_pcie_ep_assert_intx()
343 ep->irq_pci_fn = fn; in cdns_pcie_ep_assert_intx()
355 status = cdns_pcie_ep_fn_readw(pcie, fn, PCI_STATUS); in cdns_pcie_ep_assert_intx()
358 cdns_pcie_ep_fn_writew(pcie, fn, PCI_STATUS, status); in cdns_pcie_ep_assert_intx()
367 static int cdns_pcie_ep_send_intx_irq(struct cdns_pcie_ep *ep, u8 fn, u8 vfn, in cdns_pcie_ep_send_intx_irq() argument
372 cmd = cdns_pcie_ep_fn_readw(&ep->pcie, fn, PCI_COMMAND); in cdns_pcie_ep_send_intx_irq()
376 cdns_pcie_ep_assert_intx(ep, fn, intx, true); in cdns_pcie_ep_send_intx_irq()
381 cdns_pcie_ep_assert_intx(ep, fn, intx, false); in cdns_pcie_ep_send_intx_irq()
385 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
394 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_send_msi_irq()
397 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_FLAGS); in cdns_pcie_ep_send_msi_irq()
409 data = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_DATA_64); in cdns_pcie_ep_send_msi_irq()
413 pci_addr = cdns_pcie_ep_fn_readl(pcie, fn, cap + PCI_MSI_ADDRESS_HI); in cdns_pcie_ep_send_msi_irq()
415 pci_addr |= cdns_pcie_ep_fn_readl(pcie, fn, cap + PCI_MSI_ADDRESS_LO); in cdns_pcie_ep_send_msi_irq()
420 ep->irq_pci_fn != fn)) { in cdns_pcie_ep_send_msi_irq()
422 cdns_pcie_set_outbound_region(pcie, 0, fn, 0, in cdns_pcie_ep_send_msi_irq()
428 ep->irq_pci_fn = fn; in cdns_pcie_ep_send_msi_irq()
435 static int cdns_pcie_ep_map_msi_irq(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_map_msi_irq() argument
449 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_map_msi_irq()
452 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_FLAGS); in cdns_pcie_ep_map_msi_irq()
464 data = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_DATA_64); in cdns_pcie_ep_map_msi_irq()
468 pci_addr = cdns_pcie_ep_fn_readl(pcie, fn, cap + PCI_MSI_ADDRESS_HI); in cdns_pcie_ep_map_msi_irq()
470 pci_addr |= cdns_pcie_ep_fn_readl(pcie, fn, cap + PCI_MSI_ADDRESS_LO); in cdns_pcie_ep_map_msi_irq()
474 ret = cdns_pcie_ep_map_addr(epc, fn, vfn, addr, in cdns_pcie_ep_map_msi_irq()
488 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
501 epf = &ep->epf[fn]; in cdns_pcie_ep_send_msix_irq()
505 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_send_msix_irq()
508 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSIX_FLAGS); in cdns_pcie_ep_send_msix_irq()
513 tbl_offset = cdns_pcie_ep_fn_readl(pcie, fn, reg); in cdns_pcie_ep_send_msix_irq()
523 ep->irq_pci_fn != fn) { in cdns_pcie_ep_send_msix_irq()
525 cdns_pcie_set_outbound_region(pcie, 0, fn, 0, in cdns_pcie_ep_send_msix_irq()
531 ep->irq_pci_fn = fn; in cdns_pcie_ep_send_msix_irq()
538 static int cdns_pcie_ep_raise_irq(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_raise_irq() argument
551 return cdns_pcie_ep_send_intx_irq(ep, fn, vfn, 0); in cdns_pcie_ep_raise_irq()
554 return cdns_pcie_ep_send_msi_irq(ep, fn, vfn, interrupt_num); in cdns_pcie_ep_raise_irq()
557 return cdns_pcie_ep_send_msix_irq(ep, fn, vfn, interrupt_num); in cdns_pcie_ep_raise_irq()