Lines Matching refs: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
196 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_map_addr()
197 cdns_pcie_set_outbound_region(pcie, 0, fn, r, false, addr, pci_addr, size); in cdns_pcie_ep_map_addr()
205 static void cdns_pcie_ep_unmap_addr(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_unmap_addr() argument
225 static int cdns_pcie_ep_set_msi(struct pci_epc *epc, u8 fn, u8 vfn, u8 mmc) in cdns_pcie_ep_set_msi() argument
232 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_set_msi()
238 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_FLAGS); in cdns_pcie_ep_set_msi()
242 cdns_pcie_ep_fn_writew(pcie, fn, cap + PCI_MSI_FLAGS, flags); in cdns_pcie_ep_set_msi()
247 static int cdns_pcie_ep_get_msi(struct pci_epc *epc, u8 fn, u8 vfn) in cdns_pcie_ep_get_msi() argument
254 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_get_msi()
257 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_FLAGS); in cdns_pcie_ep_get_msi()
289 static int cdns_pcie_ep_set_msix(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_set_msix() argument
298 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_set_msix()
301 val = cdns_pcie_ep_fn_readw(pcie, fn, reg); in cdns_pcie_ep_set_msix()
304 cdns_pcie_ep_fn_writew(pcie, fn, reg, val); in cdns_pcie_ep_set_msix()
309 cdns_pcie_ep_fn_writel(pcie, fn, reg, val); in cdns_pcie_ep_set_msix()
314 cdns_pcie_ep_fn_writel(pcie, fn, reg, val); in cdns_pcie_ep_set_msix()
319 static void cdns_pcie_ep_assert_intx(struct cdns_pcie_ep *ep, u8 fn, u8 intx, in cdns_pcie_ep_assert_intx() argument
332 ep->irq_pci_fn != fn)) { in cdns_pcie_ep_assert_intx()
334 cdns_pcie_set_outbound_region_for_normal_msg(pcie, 0, fn, 0, in cdns_pcie_ep_assert_intx()
337 ep->irq_pci_fn = fn; in cdns_pcie_ep_assert_intx()
349 status = cdns_pcie_ep_fn_readw(pcie, fn, PCI_STATUS); in cdns_pcie_ep_assert_intx()
352 cdns_pcie_ep_fn_writew(pcie, fn, PCI_STATUS, status); in cdns_pcie_ep_assert_intx()
362 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
367 cmd = cdns_pcie_ep_fn_readw(&ep->pcie, fn, PCI_COMMAND); in cdns_pcie_ep_send_legacy_irq()
371 cdns_pcie_ep_assert_intx(ep, fn, intx, true); in cdns_pcie_ep_send_legacy_irq()
376 cdns_pcie_ep_assert_intx(ep, fn, intx, false); in cdns_pcie_ep_send_legacy_irq()
380 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
389 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_send_msi_irq()
392 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_FLAGS); in cdns_pcie_ep_send_msi_irq()
404 data = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_DATA_64); in cdns_pcie_ep_send_msi_irq()
408 pci_addr = cdns_pcie_ep_fn_readl(pcie, fn, cap + PCI_MSI_ADDRESS_HI); in cdns_pcie_ep_send_msi_irq()
410 pci_addr |= cdns_pcie_ep_fn_readl(pcie, fn, cap + PCI_MSI_ADDRESS_LO); in cdns_pcie_ep_send_msi_irq()
415 ep->irq_pci_fn != fn)) { in cdns_pcie_ep_send_msi_irq()
417 cdns_pcie_set_outbound_region(pcie, 0, fn, 0, in cdns_pcie_ep_send_msi_irq()
423 ep->irq_pci_fn = fn; in cdns_pcie_ep_send_msi_irq()
430 static int cdns_pcie_ep_map_msi_irq(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_map_msi_irq() argument
444 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_map_msi_irq()
447 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_FLAGS); in cdns_pcie_ep_map_msi_irq()
459 data = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSI_DATA_64); in cdns_pcie_ep_map_msi_irq()
463 pci_addr = cdns_pcie_ep_fn_readl(pcie, fn, cap + PCI_MSI_ADDRESS_HI); in cdns_pcie_ep_map_msi_irq()
465 pci_addr |= cdns_pcie_ep_fn_readl(pcie, fn, cap + PCI_MSI_ADDRESS_LO); in cdns_pcie_ep_map_msi_irq()
469 ret = cdns_pcie_ep_map_addr(epc, fn, vfn, addr, in cdns_pcie_ep_map_msi_irq()
483 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
496 epf = &ep->epf[fn]; in cdns_pcie_ep_send_msix_irq()
500 fn = cdns_pcie_get_fn_from_vfn(pcie, fn, vfn); in cdns_pcie_ep_send_msix_irq()
503 flags = cdns_pcie_ep_fn_readw(pcie, fn, cap + PCI_MSIX_FLAGS); in cdns_pcie_ep_send_msix_irq()
508 tbl_offset = cdns_pcie_ep_fn_readl(pcie, fn, reg); in cdns_pcie_ep_send_msix_irq()
518 ep->irq_pci_fn != fn) { in cdns_pcie_ep_send_msix_irq()
520 cdns_pcie_set_outbound_region(pcie, 0, fn, 0, in cdns_pcie_ep_send_msix_irq()
526 ep->irq_pci_fn = fn; in cdns_pcie_ep_send_msix_irq()
533 static int cdns_pcie_ep_raise_irq(struct pci_epc *epc, u8 fn, u8 vfn, in cdns_pcie_ep_raise_irq() argument
547 return cdns_pcie_ep_send_legacy_irq(ep, fn, vfn, 0); in cdns_pcie_ep_raise_irq()
550 return cdns_pcie_ep_send_msi_irq(ep, fn, vfn, interrupt_num); in cdns_pcie_ep_raise_irq()
553 return cdns_pcie_ep_send_msix_irq(ep, fn, vfn, interrupt_num); in cdns_pcie_ep_raise_irq()