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
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 */
453 struct dw_pcie_ep ep; member
473 container_of((endpoint), struct dw_pcie, ep)
475 int dw_pcie_get_resources(struct dw_pcie *pci);
477 void dw_pcie_version_detect(struct dw_pcie *pci);
479 u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap);
480 u16 dw_pcie_find_ext_capability(struct dw_pcie *pci, u8 cap);
485 u32 dw_pcie_read_dbi(struct dw_pcie *pci, u32 reg, size_t size);
486 void dw_pcie_write_dbi(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
487 void dw_pcie_write_dbi2(struct dw_pcie *pci, u32 reg, size_t size, u32 val);
488 int dw_pcie_link_up(struct dw_pcie *pci);
489 void dw_pcie_upconfig_setup(struct dw_pcie *pci);
490 int dw_pcie_wait_for_link(struct dw_pcie *pci);
491 int dw_pcie_prog_outbound_atu(struct dw_pcie *pci,
493 int dw_pcie_prog_inbound_atu(struct dw_pcie *pci, int index, int type,
495 int dw_pcie_prog_ep_inbound_atu(struct dw_pcie *pci, u8 func_no, int index,
497 void dw_pcie_disable_atu(struct dw_pcie *pci, u32 dir, int index);
498 void dw_pcie_setup(struct dw_pcie *pci);
499 void dw_pcie_iatu_detect(struct dw_pcie *pci);
500 int dw_pcie_edma_detect(struct dw_pcie *pci);
501 void dw_pcie_edma_remove(struct dw_pcie *pci);
503 static inline void dw_pcie_writel_dbi(struct dw_pcie *pci, u32 reg, u32 val) in dw_pcie_writel_dbi() argument
505 dw_pcie_write_dbi(pci, reg, 0x4, val); in dw_pcie_writel_dbi()
508 static inline u32 dw_pcie_readl_dbi(struct dw_pcie *pci, u32 reg) in dw_pcie_readl_dbi() argument
510 return dw_pcie_read_dbi(pci, reg, 0x4); in dw_pcie_readl_dbi()
513 static inline void dw_pcie_writew_dbi(struct dw_pcie *pci, u32 reg, u16 val) in dw_pcie_writew_dbi() argument
515 dw_pcie_write_dbi(pci, reg, 0x2, val); in dw_pcie_writew_dbi()
518 static inline u16 dw_pcie_readw_dbi(struct dw_pcie *pci, u32 reg) in dw_pcie_readw_dbi() argument
520 return dw_pcie_read_dbi(pci, reg, 0x2); in dw_pcie_readw_dbi()
523 static inline void dw_pcie_writeb_dbi(struct dw_pcie *pci, u32 reg, u8 val) in dw_pcie_writeb_dbi() argument
525 dw_pcie_write_dbi(pci, reg, 0x1, val); in dw_pcie_writeb_dbi()
528 static inline u8 dw_pcie_readb_dbi(struct dw_pcie *pci, u32 reg) in dw_pcie_readb_dbi() argument
530 return dw_pcie_read_dbi(pci, reg, 0x1); in dw_pcie_readb_dbi()
533 static inline void dw_pcie_writel_dbi2(struct dw_pcie *pci, u32 reg, u32 val) in dw_pcie_writel_dbi2() argument
535 dw_pcie_write_dbi2(pci, reg, 0x4, val); in dw_pcie_writel_dbi2()
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() local
555 return dw_pcie_read_dbi(pci, offset + reg, size); 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() local
564 dw_pcie_write_dbi(pci, offset + reg, size, val); 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() local
622 dw_pcie_write_dbi2(pci, offset + reg, size, val); 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()
631 static inline void dw_pcie_dbi_ro_wr_en(struct dw_pcie *pci) in dw_pcie_dbi_ro_wr_en() argument
637 val = dw_pcie_readl_dbi(pci, reg); in dw_pcie_dbi_ro_wr_en()
639 dw_pcie_writel_dbi(pci, reg, val); in dw_pcie_dbi_ro_wr_en()
642 static inline void dw_pcie_dbi_ro_wr_dis(struct dw_pcie *pci) in dw_pcie_dbi_ro_wr_dis() argument
648 val = dw_pcie_readl_dbi(pci, reg); in dw_pcie_dbi_ro_wr_dis()
650 dw_pcie_writel_dbi(pci, reg, val); in dw_pcie_dbi_ro_wr_dis()
653 static inline int dw_pcie_start_link(struct dw_pcie *pci) in dw_pcie_start_link() argument
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()
661 static inline void dw_pcie_stop_link(struct dw_pcie *pci) in dw_pcie_stop_link() argument
663 if (pci->ops && pci->ops->stop_link) in dw_pcie_stop_link()
664 pci->ops->stop_link(pci); in dw_pcie_stop_link()
667 static inline enum dw_pcie_ltssm dw_pcie_get_ltssm(struct dw_pcie *pci) in dw_pcie_get_ltssm() argument
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()
674 val = dw_pcie_readl_dbi(pci, PCIE_PORT_DEBUG0); in dw_pcie_get_ltssm()
680 int dw_pcie_suspend_noirq(struct dw_pcie *pci);
681 int dw_pcie_resume_noirq(struct dw_pcie *pci);
690 static inline int dw_pcie_suspend_noirq(struct dw_pcie *pci) in dw_pcie_suspend_noirq() argument
695 static inline int dw_pcie_resume_noirq(struct dw_pcie *pci) in dw_pcie_resume_noirq() argument
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,
745 void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar);
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
799 static inline void dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar) in dw_pcie_ep_reset_bar() 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