Lines Matching +full:pcie +full:- +full:ep
1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Synopsys DesignWare PCIe host controller driver
17 #include <linux/dma-mapping.h>
23 #include <linux/pci-ecam.h>
26 #include <linux/pci-epc.h>
27 #include <linux/pci-epf.h>
31 /* DWC PCIe IP-core versions (native support since v4.70a) */
41 ((_pci)->version _op DW_PCIE_VER_ ## _ver)
55 /* DWC PCIe controller capabilities */
61 test_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps)
64 set_bit(DW_PCIE_CAP_ ## _cap, &(_pci)->caps)
70 /* Synopsys-specific PCIe configuration registers */
148 * iATU inbound and outbound windows CSRs. Before the IP-core v4.80a each
150 * 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
437 void (*pre_init)(struct dw_pcie_ep *ep);
438 void (*init)(struct dw_pcie_ep *ep);
439 int (*raise_irq)(struct dw_pcie_ep *ep, u8 func_no,
441 const struct pci_epc_features* (*get_features)(struct dw_pcie_ep *ep);
449 unsigned int (*get_dbi_offset)(struct dw_pcie_ep *ep, u8 func_no);
450 unsigned int (*get_dbi2_offset)(struct dw_pcie_ep *ep, u8 func_no);
457 u8 msix_cap; /* MSI-X capability offset */
477 u64 (*cpu_addr_fixup)(struct dw_pcie *pcie, u64 cpu_addr);
478 u32 (*read_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
480 void (*write_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
482 void (*write_dbi2)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
484 bool (*link_up)(struct dw_pcie *pcie);
485 enum dw_pcie_ltssm (*get_ltssm)(struct dw_pcie *pcie);
486 int (*start_link)(struct dw_pcie *pcie);
487 void (*stop_link)(struct dw_pcie *pcie);
510 struct dw_pcie_ep ep; member
547 container_of((endpoint), struct dw_pcie, ep)
640 static inline unsigned int dw_pcie_ep_get_dbi_offset(struct dw_pcie_ep *ep, in dw_pcie_ep_get_dbi_offset() argument
645 if (ep->ops->get_dbi_offset) in dw_pcie_ep_get_dbi_offset()
646 dbi_offset = ep->ops->get_dbi_offset(ep, func_no); in dw_pcie_ep_get_dbi_offset()
651 static inline u32 dw_pcie_ep_read_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_read_dbi() argument
654 unsigned int offset = dw_pcie_ep_get_dbi_offset(ep, func_no); in dw_pcie_ep_read_dbi()
655 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_read_dbi()
660 static inline void dw_pcie_ep_write_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_write_dbi() argument
663 unsigned int offset = dw_pcie_ep_get_dbi_offset(ep, func_no); in dw_pcie_ep_write_dbi()
664 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_write_dbi()
669 static inline void dw_pcie_ep_writel_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_writel_dbi() argument
672 dw_pcie_ep_write_dbi(ep, func_no, reg, 0x4, val); in dw_pcie_ep_writel_dbi()
675 static inline u32 dw_pcie_ep_readl_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_readl_dbi() argument
678 return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x4); in dw_pcie_ep_readl_dbi()
681 static inline void dw_pcie_ep_writew_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_writew_dbi() argument
684 dw_pcie_ep_write_dbi(ep, func_no, reg, 0x2, val); in dw_pcie_ep_writew_dbi()
687 static inline u16 dw_pcie_ep_readw_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_readw_dbi() argument
690 return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x2); in dw_pcie_ep_readw_dbi()
693 static inline void dw_pcie_ep_writeb_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_writeb_dbi() argument
696 dw_pcie_ep_write_dbi(ep, func_no, reg, 0x1, val); in dw_pcie_ep_writeb_dbi()
699 static inline u8 dw_pcie_ep_readb_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_readb_dbi() argument
702 return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x1); in dw_pcie_ep_readb_dbi()
705 static inline int dw_pcie_ep_read_cfg_byte(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_read_cfg_byte() argument
708 *val = dw_pcie_ep_readb_dbi(ep, func_no, where); in dw_pcie_ep_read_cfg_byte()
712 static inline int dw_pcie_ep_read_cfg_word(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_read_cfg_word() argument
715 *val = dw_pcie_ep_readw_dbi(ep, func_no, where); in dw_pcie_ep_read_cfg_word()
719 static inline int dw_pcie_ep_read_cfg_dword(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_read_cfg_dword() argument
722 *val = dw_pcie_ep_readl_dbi(ep, func_no, where); in dw_pcie_ep_read_cfg_dword()
726 static inline unsigned int dw_pcie_ep_get_dbi2_offset(struct dw_pcie_ep *ep, in dw_pcie_ep_get_dbi2_offset() argument
731 if (ep->ops->get_dbi2_offset) in dw_pcie_ep_get_dbi2_offset()
732 dbi2_offset = ep->ops->get_dbi2_offset(ep, func_no); in dw_pcie_ep_get_dbi2_offset()
733 else if (ep->ops->get_dbi_offset) /* for backward compatibility */ in dw_pcie_ep_get_dbi2_offset()
734 dbi2_offset = ep->ops->get_dbi_offset(ep, func_no); in dw_pcie_ep_get_dbi2_offset()
739 static inline void dw_pcie_ep_write_dbi2(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_write_dbi2() argument
742 unsigned int offset = dw_pcie_ep_get_dbi2_offset(ep, func_no); in dw_pcie_ep_write_dbi2()
743 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_write_dbi2()
748 static inline void dw_pcie_ep_writel_dbi2(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_writel_dbi2() argument
751 dw_pcie_ep_write_dbi2(ep, func_no, reg, 0x4, val); in dw_pcie_ep_writel_dbi2()
778 if (pci->ops && pci->ops->start_link) in dw_pcie_start_link()
779 return pci->ops->start_link(pci); in dw_pcie_start_link()
786 if (pci->ops && pci->ops->stop_link) in dw_pcie_stop_link()
787 pci->ops->stop_link(pci); in dw_pcie_stop_link()
794 if (pci->ops && pci->ops->get_ltssm) in dw_pcie_get_ltssm()
795 return pci->ops->get_ltssm(pci); in dw_pcie_get_ltssm()
836 return -ENODEV; in dw_pcie_msi_host_init()
869 void dw_pcie_ep_linkup(struct dw_pcie_ep *ep);
870 void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep);
871 int dw_pcie_ep_init(struct dw_pcie_ep *ep);
872 int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep);
873 void dw_pcie_ep_deinit(struct dw_pcie_ep *ep);
874 void dw_pcie_ep_cleanup(struct dw_pcie_ep *ep);
875 int dw_pcie_ep_raise_intx_irq(struct dw_pcie_ep *ep, u8 func_no);
876 int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
878 int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
880 int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep, u8 func_no,
885 dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no);
887 static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) in dw_pcie_ep_linkup() argument
891 static inline void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep) in dw_pcie_ep_linkdown() argument
895 static inline int dw_pcie_ep_init(struct dw_pcie_ep *ep) in dw_pcie_ep_init() argument
900 static inline int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep) in dw_pcie_ep_init_registers() argument
905 static inline void dw_pcie_ep_deinit(struct dw_pcie_ep *ep) in dw_pcie_ep_deinit() argument
909 static inline void dw_pcie_ep_cleanup(struct dw_pcie_ep *ep) in dw_pcie_ep_cleanup() argument
913 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
918 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
924 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
930 static inline int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep, in dw_pcie_ep_raise_msix_irq_doorbell() argument
948 dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no) in dw_pcie_ep_get_func_from_ep() argument