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>
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)
52 /* DWC PCIe controller capabilities */
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
387 void (*pre_init)(struct dw_pcie_ep *ep);
388 void (*init)(struct dw_pcie_ep *ep);
389 int (*raise_irq)(struct dw_pcie_ep *ep, u8 func_no,
391 const struct pci_epc_features* (*get_features)(struct dw_pcie_ep *ep);
399 unsigned int (*get_dbi_offset)(struct dw_pcie_ep *ep, u8 func_no);
400 unsigned int (*get_dbi2_offset)(struct dw_pcie_ep *ep, u8 func_no);
407 u8 msix_cap; /* MSI-X capability offset */
427 u64 (*cpu_addr_fixup)(struct dw_pcie *pcie, u64 cpu_addr);
428 u32 (*read_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
430 void (*write_dbi)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
432 void (*write_dbi2)(struct dw_pcie *pcie, void __iomem *base, u32 reg,
434 int (*link_up)(struct dw_pcie *pcie);
435 enum dw_pcie_ltssm (*get_ltssm)(struct dw_pcie *pcie);
436 int (*start_link)(struct dw_pcie *pcie);
437 void (*stop_link)(struct dw_pcie *pcie);
453 struct dw_pcie_ep ep; member
473 container_of((endpoint), struct dw_pcie, ep)
538 static inline unsigned int dw_pcie_ep_get_dbi_offset(struct dw_pcie_ep *ep, in dw_pcie_ep_get_dbi_offset() argument
543 if (ep->ops->get_dbi_offset) in dw_pcie_ep_get_dbi_offset()
544 dbi_offset = ep->ops->get_dbi_offset(ep, func_no); in dw_pcie_ep_get_dbi_offset()
549 static inline u32 dw_pcie_ep_read_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_read_dbi() argument
552 unsigned int offset = dw_pcie_ep_get_dbi_offset(ep, func_no); in dw_pcie_ep_read_dbi()
553 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_read_dbi()
558 static inline void dw_pcie_ep_write_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_write_dbi() argument
561 unsigned int offset = dw_pcie_ep_get_dbi_offset(ep, func_no); in dw_pcie_ep_write_dbi()
562 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_write_dbi()
567 static inline void dw_pcie_ep_writel_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_writel_dbi() argument
570 dw_pcie_ep_write_dbi(ep, func_no, reg, 0x4, val); in dw_pcie_ep_writel_dbi()
573 static inline u32 dw_pcie_ep_readl_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_readl_dbi() argument
576 return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x4); in dw_pcie_ep_readl_dbi()
579 static inline void dw_pcie_ep_writew_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_writew_dbi() argument
582 dw_pcie_ep_write_dbi(ep, func_no, reg, 0x2, val); in dw_pcie_ep_writew_dbi()
585 static inline u16 dw_pcie_ep_readw_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_readw_dbi() argument
588 return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x2); in dw_pcie_ep_readw_dbi()
591 static inline void dw_pcie_ep_writeb_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_writeb_dbi() argument
594 dw_pcie_ep_write_dbi(ep, func_no, reg, 0x1, val); in dw_pcie_ep_writeb_dbi()
597 static inline u8 dw_pcie_ep_readb_dbi(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_readb_dbi() argument
600 return dw_pcie_ep_read_dbi(ep, func_no, reg, 0x1); in dw_pcie_ep_readb_dbi()
603 static inline unsigned int dw_pcie_ep_get_dbi2_offset(struct dw_pcie_ep *ep, in dw_pcie_ep_get_dbi2_offset() argument
608 if (ep->ops->get_dbi2_offset) in dw_pcie_ep_get_dbi2_offset()
609 dbi2_offset = ep->ops->get_dbi2_offset(ep, func_no); in dw_pcie_ep_get_dbi2_offset()
610 else if (ep->ops->get_dbi_offset) /* for backward compatibility */ in dw_pcie_ep_get_dbi2_offset()
611 dbi2_offset = ep->ops->get_dbi_offset(ep, func_no); in dw_pcie_ep_get_dbi2_offset()
616 static inline void dw_pcie_ep_write_dbi2(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_write_dbi2() argument
619 unsigned int offset = dw_pcie_ep_get_dbi2_offset(ep, func_no); in dw_pcie_ep_write_dbi2()
620 struct dw_pcie *pci = to_dw_pcie_from_ep(ep); in dw_pcie_ep_write_dbi2()
625 static inline void dw_pcie_ep_writel_dbi2(struct dw_pcie_ep *ep, u8 func_no, in dw_pcie_ep_writel_dbi2() argument
628 dw_pcie_ep_write_dbi2(ep, func_no, reg, 0x4, val); in dw_pcie_ep_writel_dbi2()
655 if (pci->ops && pci->ops->start_link) in dw_pcie_start_link()
656 return pci->ops->start_link(pci); in dw_pcie_start_link()
663 if (pci->ops && pci->ops->stop_link) in dw_pcie_stop_link()
664 pci->ops->stop_link(pci); in dw_pcie_stop_link()
671 if (pci->ops && pci->ops->get_ltssm) in dw_pcie_get_ltssm()
672 return pci->ops->get_ltssm(pci); in dw_pcie_get_ltssm()
732 void dw_pcie_ep_linkup(struct dw_pcie_ep *ep);
733 void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep);
734 int dw_pcie_ep_init(struct dw_pcie_ep *ep);
735 int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep);
736 void dw_pcie_ep_deinit(struct dw_pcie_ep *ep);
737 void dw_pcie_ep_cleanup(struct dw_pcie_ep *ep);
738 int dw_pcie_ep_raise_intx_irq(struct dw_pcie_ep *ep, u8 func_no);
739 int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
741 int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
743 int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep, u8 func_no,
747 dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no);
749 static inline void dw_pcie_ep_linkup(struct dw_pcie_ep *ep) in dw_pcie_ep_linkup() argument
753 static inline void dw_pcie_ep_linkdown(struct dw_pcie_ep *ep) in dw_pcie_ep_linkdown() argument
757 static inline int dw_pcie_ep_init(struct dw_pcie_ep *ep) in dw_pcie_ep_init() argument
762 static inline int dw_pcie_ep_init_registers(struct dw_pcie_ep *ep) in dw_pcie_ep_init_registers() argument
767 static inline void dw_pcie_ep_deinit(struct dw_pcie_ep *ep) in dw_pcie_ep_deinit() argument
771 static inline void dw_pcie_ep_cleanup(struct dw_pcie_ep *ep) in dw_pcie_ep_cleanup() argument
775 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
780 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
786 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
792 static inline int dw_pcie_ep_raise_msix_irq_doorbell(struct dw_pcie_ep *ep, in dw_pcie_ep_raise_msix_irq_doorbell() argument
804 dw_pcie_ep_get_func_from_ep(struct dw_pcie_ep *ep, u8 func_no) in dw_pcie_ep_get_func_from_ep() argument