Lines Matching +full:pci +full:- +full:ep

1 /* SPDX-License-Identifier: GPL-2.0 */
17 #include <linux/dma-mapping.h>
22 #include <linux/pci.h>
25 #include <linux/pci-epc.h>
26 #include <linux/pci-epf.h>
28 /* DWC PCIe IP-core versions (native support since v4.70a) */
38 ((_pci)->version _op DW_PCIE_VER_ ## _ver)
58 test_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps)
61 set_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps)
71 /* Synopsys-specific PCIe configuration registers */
149 * iATU inbound and outbound windows CSRs. Before the IP-core v4.80a each
151 * viewport selector. The iATU/eDMA CSRs space was re-designed in DWC PCIe
193 * eDMA CSRs. DW PCIe IP-core v4.70a and older had the eDMA registers accessible
232 * iATU Unroll-specific register definitions
245 * RAS-DES register definitions
385 void (*pre_init)(struct dw_pcie_ep *ep);
386 void (*init)(struct dw_pcie_ep *ep);
387 int (*raise_irq)(struct dw_pcie_ep *ep, u8 func_no,
389 const struct pci_epc_features* (*get_features)(struct dw_pcie_ep *ep);
397 unsigned int (*get_dbi_offset)(struct dw_pcie_ep *ep, u8 func_no);
398 unsigned int (*get_dbi2_offset)(struct dw_pcie_ep *ep, u8 func_no);
405 u8 msix_cap; /* MSI-X capability offset */
451 struct dw_pcie_ep ep; member
471 container_of((endpoint), struct dw_pcie, ep)
473 int dw_pcie_get_resources(struct dw_pcie *pci);
475 void dw_pcie_version_detect(struct dw_pcie *pci);
477 u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap);
478 u16 dw_pcie_find_ext_capability(struct dw_pcie *pci, u8 cap);
483 u32 dw_pcie_read_dbi(struct dw_pcie *pci, u32 reg, size_t size);
484 void dw_pcie_write_dbi(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
485 void dw_pcie_write_dbi2(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
486 int dw_pcie_link_up(struct dw_pcie *pci);
487 void dw_pcie_upconfig_setup(struct dw_pcie *pci);
488 int dw_pcie_wait_for_link(struct dw_pcie *pci);
489 int dw_pcie_prog_outbound_atu(struct dw_pcie *pci,
491 int dw_pcie_prog_inbound_atu(struct dw_pcie *pci, int index, int type,
493 int dw_pcie_prog_ep_inbound_atu(struct dw_pcie *pci, u8 func_no, int index,
495 void dw_pcie_disable_atu(struct dw_pcie *pci, u32 dir, int index);
496 void dw_pcie_setup(struct dw_pcie *pci);
497 void dw_pcie_iatu_detect(struct dw_pcie *pci);
498 int dw_pcie_edma_detect(struct dw_pcie *pci);
499 void dw_pcie_edma_remove(struct dw_pcie *pci);
501 int dw_pcie_suspend_noirq(struct dw_pcie *pci);
502 int dw_pcie_resume_noirq(struct dw_pcie *pci);
504 static inline void dw_pcie_writel_dbi(struct dw_pcie *pci, u32 reg, u32 val) in dw_pcie_writel_dbi() argument
506 dw_pcie_write_dbi(pci, reg, 0x4, val); in dw_pcie_writel_dbi()
509 static inline u32 dw_pcie_readl_dbi(struct dw_pcie *pci, u32 reg) in dw_pcie_readl_dbi() argument
511 return dw_pcie_read_dbi(pci, reg, 0x4); in dw_pcie_readl_dbi()
514 static inline void dw_pcie_writew_dbi(struct dw_pcie *pci, u32 reg, u16 val) in dw_pcie_writew_dbi() argument
516 dw_pcie_write_dbi(pci, reg, 0x2, val); in dw_pcie_writew_dbi()
519 static inline u16 dw_pcie_readw_dbi(struct dw_pcie *pci, u32 reg) in dw_pcie_readw_dbi() argument
521 return dw_pcie_read_dbi(pci, reg, 0x2); in dw_pcie_readw_dbi()
524 static inline void dw_pcie_writeb_dbi(struct dw_pcie *pci, u32 reg, u8 val) in dw_pcie_writeb_dbi() argument
526 dw_pcie_write_dbi(pci, reg, 0x1, val); in dw_pcie_writeb_dbi()
529 static inline u8 dw_pcie_readb_dbi(struct dw_pcie *pci, u32 reg) in dw_pcie_readb_dbi() argument
531 return dw_pcie_read_dbi(pci, reg, 0x1); in dw_pcie_readb_dbi()
534 static inline void dw_pcie_writel_dbi2(struct dw_pcie *pci, u32 reg, u32 val) in dw_pcie_writel_dbi2() argument
536 dw_pcie_write_dbi2(pci, reg, 0x4, val); in dw_pcie_writel_dbi2()
539 static inline unsigned int dw_pcie_ep_get_dbi_offset(struct dw_pcie_ep *ep, in dw_pcie_ep_get_dbi_offset() argument
544 if (ep->ops->get_dbi_offset) in dw_pcie_ep_get_dbi_offset()
545 dbi_offset = ep->ops->get_dbi_offset(ep, func_no); in dw_pcie_ep_get_dbi_offset()
550 static inline u32 dw_pcie_ep_read_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_read_dbi() argument
553 unsigned int offset = dw_pcie_ep_get_dbi_offset(ep, func_no); in dw_pcie_ep_read_dbi()
554 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_read_dbi() local
556 return dw_pcie_read_dbi(pci, offset + reg, size); in dw_pcie_ep_read_dbi()
559 static inline void dw_pcie_ep_write_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_write_dbi() argument
562 unsigned int offset = dw_pcie_ep_get_dbi_offset(ep, func_no); in dw_pcie_ep_write_dbi()
563 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_write_dbi() local
565 dw_pcie_write_dbi(pci, offset + reg, size, val); in dw_pcie_ep_write_dbi()
568 static inline void dw_pcie_ep_writel_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_writel_dbi() argument
571 dw_pcie_ep_write_dbi(ep, func_no, reg, 0x4, val); in dw_pcie_ep_writel_dbi()
574 static inline u32 dw_pcie_ep_readl_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_readl_dbi() argument
577 return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x4); in dw_pcie_ep_readl_dbi()
580 static inline void dw_pcie_ep_writew_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_writew_dbi() argument
583 dw_pcie_ep_write_dbi(ep, func_no, reg, 0x2, val); in dw_pcie_ep_writew_dbi()
586 static inline u16 dw_pcie_ep_readw_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_readw_dbi() argument
589 return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x2); in dw_pcie_ep_readw_dbi()
592 static inline void dw_pcie_ep_writeb_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_writeb_dbi() argument
595 dw_pcie_ep_write_dbi(ep, func_no, reg, 0x1, val); in dw_pcie_ep_writeb_dbi()
598 static inline u8 dw_pcie_ep_readb_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_readb_dbi() argument
601 return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x1); in dw_pcie_ep_readb_dbi()
604 static inline unsigned int dw_pcie_ep_get_dbi2_offset(struct dw_pcie_ep *ep, in dw_pcie_ep_get_dbi2_offset() argument
609 if (ep->ops->get_dbi2_offset) in dw_pcie_ep_get_dbi2_offset()
610 dbi2_offset = ep->ops->get_dbi2_offset(ep, func_no); in dw_pcie_ep_get_dbi2_offset()
611 else if (ep->ops->get_dbi_offset) /* for backward compatibility */ in dw_pcie_ep_get_dbi2_offset()
612 dbi2_offset = ep->ops->get_dbi_offset(ep, func_no); in dw_pcie_ep_get_dbi2_offset()
617 static inline void dw_pcie_ep_write_dbi2(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_write_dbi2() argument
620 unsigned int offset = dw_pcie_ep_get_dbi2_offset(ep, func_no); in dw_pcie_ep_write_dbi2()
621 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_write_dbi2() local
623 dw_pcie_write_dbi2(pci, offset + reg, size, val); in dw_pcie_ep_write_dbi2()
626 static inline void dw_pcie_ep_writel_dbi2(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_writel_dbi2() argument
629 dw_pcie_ep_write_dbi2(ep, func_no, reg, 0x4, val); in dw_pcie_ep_writel_dbi2()
632 static inline void dw_pcie_dbi_ro_wr_en(struct dw_pcie *pci) in dw_pcie_dbi_ro_wr_en() argument
638 val = dw_pcie_readl_dbi(pci, reg); in dw_pcie_dbi_ro_wr_en()
640 dw_pcie_writel_dbi(pci, reg, val); in dw_pcie_dbi_ro_wr_en()
643 static inline void dw_pcie_dbi_ro_wr_dis(struct dw_pcie *pci) in dw_pcie_dbi_ro_wr_dis() argument
649 val = dw_pcie_readl_dbi(pci, reg); in dw_pcie_dbi_ro_wr_dis()
651 dw_pcie_writel_dbi(pci, reg, val); in dw_pcie_dbi_ro_wr_dis()
654 static inline int dw_pcie_start_link(struct dw_pcie *pci) in dw_pcie_start_link() argument
656 if (pci->ops && pci->ops->start_link) in dw_pcie_start_link()
657 return pci->ops->start_link(pci); in dw_pcie_start_link()
662 static inline void dw_pcie_stop_link(struct dw_pcie *pci) in dw_pcie_stop_link() argument
664 if (pci->ops && pci->ops->stop_link) in dw_pcie_stop_link()
665 pci->ops->stop_link(pci); in dw_pcie_stop_link()
668 static inline enum dw_pcie_ltssm dw_pcie_get_ltssm(struct dw_pcie *pci) in dw_pcie_get_ltssm() argument
672 if (pci->ops && pci->ops->get_ltssm) in dw_pcie_get_ltssm()
673 return pci->ops->get_ltssm(pci); in dw_pcie_get_ltssm()
675 val = dw_pcie_readl_dbi(pci, PCIE_PORT_DEBUG0); in dw_pcie_get_ltssm()
721 void dw_pcie_ep_linkup(struct dw_pcie_ep *ep);
722 void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep);
723 int dw_pcie_ep_init(struct dw_pcie_ep *ep);
724 int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep);
725 void dw_pcie_ep_deinit(struct dw_pcie_ep *ep);
726 void dw_pcie_ep_cleanup(struct dw_pcie_ep *ep);
727 int dw_pcie_ep_raise_intx_irq(struct dw_pcie_ep *ep, u8 func_no);
728 int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
730 int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
732 int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep, u8 func_no,
734 void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar);
736 dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no);
738 static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) in dw_pcie_ep_linkup() argument
742 static inline void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep) in dw_pcie_ep_linkdown() argument
746 static inline int dw_pcie_ep_init(struct dw_pcie_ep *ep) in dw_pcie_ep_init() argument
751 static inline int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep) in dw_pcie_ep_init_registers() argument
756 static inline void dw_pcie_ep_deinit(struct dw_pcie_ep *ep) in dw_pcie_ep_deinit() argument
760 static inline void dw_pcie_ep_cleanup(struct dw_pcie_ep *ep) in dw_pcie_ep_cleanup() argument
764 static inline int dw_pcie_ep_raise_intx_irq(struct dw_pcie_ep *ep, u8 func_no) in dw_pcie_ep_raise_intx_irq() argument
769 static inline int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_raise_msi_irq() argument
775 static inline int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_raise_msix_irq() argument
781 static inline int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep, in dw_pcie_ep_raise_msix_irq_doorbell() argument
788 static inline void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar) in dw_pcie_ep_reset_bar() argument
793 dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no) in dw_pcie_ep_get_func_from_ep() argument