123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. */
- #ifndef _MHI_QCOM_
- #define _MHI_QCOM_
- #define MHI_PCIE_VENDOR_ID (0x17cb)
- #define MHI_PCIE_DEBUG_ID (0xffff)
- /* runtime suspend timer */
- #define MHI_RPM_SUSPEND_TMR_MS (250)
- #define MHI_PCI_BAR_NUM (0)
- #define MHI_MAX_SFR_LEN (256)
- #define PCI_INVALID_READ(val) ((val) == U32_MAX)
- #define MHI_IPC_LOG_PAGES (100)
- #define MHI_CNTRL_LOG(fmt, ...) do { \
- struct mhi_qcom_priv *mhi_priv = \
- mhi_controller_get_privdata(mhi_cntrl); \
- ipc_log_string(mhi_priv->cntrl_ipc_log, "[I][%s] " fmt, __func__, \
- ##__VA_ARGS__); \
- } while (0)
- #define MHI_CNTRL_ERR(fmt, ...) do { \
- struct mhi_qcom_priv *mhi_priv = \
- mhi_controller_get_privdata(mhi_cntrl); \
- pr_err("[E][%s] " fmt, __func__, ##__VA_ARGS__); \
- ipc_log_string(mhi_priv->cntrl_ipc_log, "[E][%s] " fmt, __func__, \
- ##__VA_ARGS__); \
- } while (0)
- extern const char * const mhi_ee_str[MHI_EE_MAX];
- #define TO_MHI_EXEC_STR(ee) (ee >= MHI_EE_MAX ? "INVALID_EE" : mhi_ee_str[ee])
- enum mhi_debug_mode {
- MHI_DEBUG_OFF,
- MHI_DEBUG_ON, /* delayed power up */
- MHI_DEBUG_NO_LPM, /* delayed power up, low power modes disabled */
- MHI_DEBUG_MODE_MAX,
- };
- extern const char * const mhi_debug_mode_str[MHI_DEBUG_MODE_MAX];
- #define TO_MHI_DEBUG_MODE_STR(mode) \
- (mode >= MHI_DEBUG_MODE_MAX ? "Invalid" : mhi_debug_mode_str[mode])
- enum mhi_suspend_mode {
- MHI_ACTIVE_STATE,
- MHI_DEFAULT_SUSPEND,
- MHI_FAST_LINK_OFF,
- MHI_FAST_LINK_ON,
- MHI_SUSPEND_MODE_MAX,
- };
- extern const char * const mhi_suspend_mode_str[MHI_SUSPEND_MODE_MAX];
- #define TO_MHI_SUSPEND_MODE_STR(mode) \
- (mode >= MHI_SUSPEND_MODE_MAX ? "Invalid" : mhi_suspend_mode_str[mode])
- /**
- * struct mhi_pci_dev_info - MHI PCI device specific information
- * @config: MHI controller configuration
- * @device_id: PCI device ID
- * @name: name of the PCI module
- * @fw_image: firmware path (if any)
- * @edl_image: emergency download mode firmware path (if any)
- * @bar_num: PCI base address register to use for MHI MMIO register space
- * @dma_data_width: DMA transfer word size (32 or 64 bits)
- */
- struct mhi_pci_dev_info {
- const struct mhi_controller_config *config;
- unsigned int device_id;
- const char *name;
- const char *fw_image;
- const char *edl_image;
- unsigned int bar_num;
- unsigned int dma_data_width;
- bool allow_m1;
- bool skip_forced_suspend;
- bool sfr_support;
- bool timesync;
- bool drv_support;
- };
- struct mhi_qcom_priv {
- const struct mhi_pci_dev_info *dev_info;
- struct work_struct fatal_worker;
- void *cntrl_ipc_log;
- void *arch_info;
- bool powered_on;
- bool mdm_state;
- bool disable_pci_lpm;
- enum mhi_suspend_mode suspend_mode;
- bool driver_remove;
- };
- void mhi_deinit_pci_dev(struct pci_dev *pci_dev,
- const struct mhi_pci_dev_info *dev_info);
- int mhi_qcom_pci_probe(struct pci_dev *pci_dev,
- struct mhi_controller *mhi_cntrl,
- struct mhi_qcom_priv *mhi_priv);
- #ifdef CONFIG_ARCH_QCOM
- int mhi_arch_pcie_init(struct mhi_controller *mhi_cntrl);
- void mhi_arch_pcie_deinit(struct mhi_controller *mhi_cntrl);
- int mhi_arch_link_suspend(struct mhi_controller *mhi_cntrl);
- int mhi_arch_link_resume(struct mhi_controller *mhi_cntrl);
- void mhi_arch_mission_mode_enter(struct mhi_controller *mhi_cntrl);
- u64 mhi_arch_time_get(struct mhi_controller *mhi_cntrl);
- int mhi_arch_link_lpm_disable(struct mhi_controller *mhi_cntrl);
- int mhi_arch_link_lpm_enable(struct mhi_controller *mhi_cntrl);
- #else
- static inline int mhi_arch_pcie_init(struct mhi_controller *mhi_cntrl)
- {
- return 0;
- }
- static inline void mhi_arch_pcie_deinit(struct mhi_controller *mhi_cntrl)
- {
- }
- static inline int mhi_arch_link_suspend(struct mhi_controller *mhi_cntrl)
- {
- return 0;
- }
- static inline int mhi_arch_link_resume(struct mhi_controller *mhi_cntrl)
- {
- return 0;
- }
- static inline void mhi_arch_mission_mode_enter(struct mhi_controller *mhi_cntrl)
- {
- }
- static inline u64 mhi_arch_time_get(struct mhi_controller *mhi_cntrl)
- {
- return 0;
- }
- static inline int mhi_arch_link_lpm_disable(struct mhi_controller *mhi_cntrl)
- {
- return 0;
- }
- static inline int mhi_arch_link_lpm_enable(struct mhi_controller *mhi_cntrl)
- {
- return 0;
- }
- #endif
- #endif /* _MHI_QCOM_ */
|