Lines Matching +full:pcie +full:- +full:5

1 /* SPDX-License-Identifier: GPL-2.0 */
3 // Cadence PCIe controller driver.
4 // Author: Cyrille Pitchen <cyrille.pitchen@free-electrons.com>
11 #include <linux/pci-epf.h>
67 (GENMASK(7, 5) << ((b) * 8))
69 (((c) << ((b) * 8 + 5)) & CDNS_PCIE_LM_EP_FUNC_BAR_CFG_BAR_CTRL_MASK(b))
76 #define CDNS_PCIE_LM_RC_BAR_CFG_BAR0_APERTURE_MASK GENMASK(5, 0)
117 (((aperture) - 2) << ((bar) * 8))
145 /* Region r Outbound AXI to PCIe Address Translation Register 0 */
148 #define CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_NBITS_MASK GENMASK(5, 0)
150 (((nbits) - 1) & CDNS_PCIE_AT_OB_REGION_PCI_ADDR0_NBITS_MASK)
158 /* Region r Outbound AXI to PCIe Address Translation Register 1 */
162 /* Region r Outbound PCIe Descriptor Register 0 */
178 /* Region r Outbound PCIe Descriptor Register 1 */
188 #define CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS_MASK GENMASK(5, 0)
190 (((nbits) - 1) & CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS_MASK)
196 /* Root Port BAR Inbound PCIe to AXI Address Translation Register */
199 #define CDNS_PCIE_AT_IB_RP_BAR_ADDR0_NBITS_MASK GENMASK(5, 0)
201 (((nbits) - 1) & CDNS_PCIE_AT_IB_RP_BAR_ADDR0_NBITS_MASK)
217 RP_BAR_UNDEFINED = -1,
231 /* Endpoint Function BAR Inbound PCIe to AXI Address Translation Register */
238 #define CDNS_PCIE_NORMAL_MSG_ROUTING_MASK GENMASK(7, 5)
240 (((route) << 5) & CDNS_PCIE_NORMAL_MSG_ROUTING_MASK)
249 int (*start_link)(struct cdns_pcie *pcie);
250 void (*stop_link)(struct cdns_pcie *pcie);
251 bool (*link_up)(struct cdns_pcie *pcie);
252 u64 (*cpu_addr_fixup)(struct cdns_pcie *pcie, u64 cpu_addr);
256 * struct cdns_pcie - private data for Cadence PCIe controller drivers
259 * @dev: PCIe controller
260 * @is_rc: tell whether the PCIe controller mode is Root Complex or Endpoint.
264 * @ops: Platform-specific ops to control various inputs from Cadence PCIe
279 * struct cdns_pcie_rc - private data for this PCIe Root Complex driver
280 * @pcie: Cadence PCIe controller
289 * @quirk_retrain_flag: Retrain link as quirk for PCIe Gen2
293 struct cdns_pcie pcie; member
304 * struct cdns_pcie_epf - Structure to hold info about endpoint function
314 * struct cdns_pcie_ep - private data for this PCIe endpoint controller driver
315 * @pcie: Cadence PCIe controller
323 * IRQ) TLP through the PCIe bus.
329 * @lock: spin lock to disable interrupts while modifying PCIe controller
337 struct cdns_pcie pcie; member
355 static inline void cdns_pcie_writel(struct cdns_pcie *pcie, u32 reg, u32 value) in cdns_pcie_writel() argument
357 writel(value, pcie->reg_base + reg); in cdns_pcie_writel()
360 static inline u32 cdns_pcie_readl(struct cdns_pcie *pcie, u32 reg) in cdns_pcie_readl() argument
362 return readl(pcie->reg_base + reg); in cdns_pcie_readl()
365 static inline u16 cdns_pcie_readw(struct cdns_pcie *pcie, u32 reg) in cdns_pcie_readw() argument
367 return readw(pcie->reg_base + reg); in cdns_pcie_readw()
370 static inline u8 cdns_pcie_readb(struct cdns_pcie *pcie, u32 reg) in cdns_pcie_readb() argument
372 return readb(pcie->reg_base + reg); in cdns_pcie_readb()
375 static inline int cdns_pcie_read_cfg_byte(struct cdns_pcie *pcie, int where, in cdns_pcie_read_cfg_byte() argument
378 *val = cdns_pcie_readb(pcie, where); in cdns_pcie_read_cfg_byte()
382 static inline int cdns_pcie_read_cfg_word(struct cdns_pcie *pcie, int where, in cdns_pcie_read_cfg_word() argument
385 *val = cdns_pcie_readw(pcie, where); in cdns_pcie_read_cfg_word()
389 static inline int cdns_pcie_read_cfg_dword(struct cdns_pcie *pcie, int where, in cdns_pcie_read_cfg_dword() argument
392 *val = cdns_pcie_readl(pcie, where); in cdns_pcie_read_cfg_dword()
410 return (val >> (8 * offset)) & ((1 << (size * 8)) - 1); in cdns_pcie_read_sz()
430 mask = ~(((1 << (size * 8)) - 1) << (offset * 8)); in cdns_pcie_write_sz()
437 static inline void cdns_pcie_rp_writeb(struct cdns_pcie *pcie, in cdns_pcie_rp_writeb() argument
440 void __iomem *addr = pcie->reg_base + CDNS_PCIE_RP_BASE + reg; in cdns_pcie_rp_writeb()
445 static inline void cdns_pcie_rp_writew(struct cdns_pcie *pcie, in cdns_pcie_rp_writew() argument
448 void __iomem *addr = pcie->reg_base + CDNS_PCIE_RP_BASE + reg; in cdns_pcie_rp_writew()
453 static inline u16 cdns_pcie_rp_readw(struct cdns_pcie *pcie, u32 reg) in cdns_pcie_rp_readw() argument
455 void __iomem *addr = pcie->reg_base + CDNS_PCIE_RP_BASE + reg; in cdns_pcie_rp_readw()
461 static inline void cdns_pcie_ep_fn_writeb(struct cdns_pcie *pcie, u8 fn, in cdns_pcie_ep_fn_writeb() argument
464 void __iomem *addr = pcie->reg_base + CDNS_PCIE_EP_FUNC_BASE(fn) + reg; in cdns_pcie_ep_fn_writeb()
469 static inline void cdns_pcie_ep_fn_writew(struct cdns_pcie *pcie, u8 fn, in cdns_pcie_ep_fn_writew() argument
472 void __iomem *addr = pcie->reg_base + CDNS_PCIE_EP_FUNC_BASE(fn) + reg; in cdns_pcie_ep_fn_writew()
477 static inline void cdns_pcie_ep_fn_writel(struct cdns_pcie *pcie, u8 fn, in cdns_pcie_ep_fn_writel() argument
480 writel(value, pcie->reg_base + CDNS_PCIE_EP_FUNC_BASE(fn) + reg); in cdns_pcie_ep_fn_writel()
483 static inline u16 cdns_pcie_ep_fn_readw(struct cdns_pcie *pcie, u8 fn, u32 reg) in cdns_pcie_ep_fn_readw() argument
485 void __iomem *addr = pcie->reg_base + CDNS_PCIE_EP_FUNC_BASE(fn) + reg; in cdns_pcie_ep_fn_readw()
490 static inline u32 cdns_pcie_ep_fn_readl(struct cdns_pcie *pcie, u8 fn, u32 reg) in cdns_pcie_ep_fn_readl() argument
492 return readl(pcie->reg_base + CDNS_PCIE_EP_FUNC_BASE(fn) + reg); in cdns_pcie_ep_fn_readl()
495 static inline int cdns_pcie_start_link(struct cdns_pcie *pcie) in cdns_pcie_start_link() argument
497 if (pcie->ops && pcie->ops->start_link) in cdns_pcie_start_link()
498 return pcie->ops->start_link(pcie); in cdns_pcie_start_link()
503 static inline void cdns_pcie_stop_link(struct cdns_pcie *pcie) in cdns_pcie_stop_link() argument
505 if (pcie->ops && pcie->ops->stop_link) in cdns_pcie_stop_link()
506 pcie->ops->stop_link(pcie); in cdns_pcie_stop_link()
509 static inline bool cdns_pcie_link_up(struct cdns_pcie *pcie) in cdns_pcie_link_up() argument
511 if (pcie->ops && pcie->ops->link_up) in cdns_pcie_link_up()
512 return pcie->ops->link_up(pcie); in cdns_pcie_link_up()
565 u8 cdns_pcie_find_capability(struct cdns_pcie *pcie, u8 cap);
566 u16 cdns_pcie_find_ext_capability(struct cdns_pcie *pcie, u8 cap);
568 void cdns_pcie_detect_quiet_min_delay_set(struct cdns_pcie *pcie);
570 void cdns_pcie_set_outbound_region(struct cdns_pcie *pcie, u8 busnr, u8 fn,
574 void cdns_pcie_set_outbound_region_for_normal_msg(struct cdns_pcie *pcie,
578 void cdns_pcie_reset_outbound_region(struct cdns_pcie *pcie, u32 r);
579 void cdns_pcie_disable_phy(struct cdns_pcie *pcie);
580 int cdns_pcie_enable_phy(struct cdns_pcie *pcie);
581 int cdns_pcie_init_phy(struct device *dev, struct cdns_pcie *pcie);