From 7eee98e1757cab7b024b62ab4fd1797ec60edbb5 Mon Sep 17 00:00:00 2001 From: Bhaumik Bhatt Date: Thu, 26 Mar 2020 18:19:36 -0700 Subject: [PATCH] mhi: cntrl: qcom: expand debug modes for new device bringup When bringing up a new device attach to the host driver, MHI controller can have more than one debug mode to allow for configurable versions and make it easier to choose firmware images and allow/disallow forced suspend/resume done to choose new PHY settings. Change-Id: Id2ecd98cfbaba40aca96bd167c34bfa5fd03818e Signed-off-by: Bhaumik Bhatt --- drivers/bus/mhi/controllers/mhi_qcom.c | 21 +++++++++++++++++---- drivers/bus/mhi/controllers/mhi_qcom.h | 9 +++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/drivers/bus/mhi/controllers/mhi_qcom.c b/drivers/bus/mhi/controllers/mhi_qcom.c index 7479dcef64de..cd252739c3a2 100644 --- a/drivers/bus/mhi/controllers/mhi_qcom.c +++ b/drivers/bus/mhi/controllers/mhi_qcom.c @@ -403,6 +403,11 @@ static int mhi_force_suspend(struct mhi_controller *mhi_cntrl) MHI_CNTRL_LOG("Entered\n"); + if (debug_mode == MHI_DEBUG_NO_D3 || debug_mode == MHI_FWIMAGE_NO_D3) { + MHI_CNTRL_LOG("Exited due to debug mode:%d\n", debug_mode); + return ret; + } + mutex_lock(&mhi_cntrl->pm_mutex); for (; itr; itr--) { @@ -676,7 +681,7 @@ static struct mhi_controller *mhi_register_controller(struct pci_dev *pci_dev) bool use_s1; u32 addr_win[2]; const char *iommu_dma_type; - int ret, i; + int ret, i, len; if (!of_node) return ERR_PTR(-ENODEV); @@ -752,14 +757,22 @@ static struct mhi_controller *mhi_register_controller(struct pci_dev *pci_dev) if (ret) goto error_register; - for (i = 0; i < ARRAY_SIZE(firmware_table); i++) { + len = ARRAY_SIZE(firmware_table); + for (i = 0; i < len; i++) { firmware_info = firmware_table + i; - /* debug mode always use default */ - if (!debug_mode && mhi_cntrl->dev_id == firmware_info->dev_id) + if (mhi_cntrl->dev_id == firmware_info->dev_id) break; } + if (debug_mode) { + if (debug_mode <= MHI_DEBUG_D3) + firmware_info = firmware_table + (len - 1); + MHI_CNTRL_LOG("fw info: debug_mode:%d dev_id:%d image:%s\n", + debug_mode, firmware_info->dev_id, + firmware_info->fw_image); + } + mhi_cntrl->fw_image = firmware_info->fw_image; mhi_cntrl->edl_image = firmware_info->edl_image; diff --git a/drivers/bus/mhi/controllers/mhi_qcom.h b/drivers/bus/mhi/controllers/mhi_qcom.h index 325be120486c..3b5e74b912c4 100644 --- a/drivers/bus/mhi/controllers/mhi_qcom.h +++ b/drivers/bus/mhi/controllers/mhi_qcom.h @@ -33,6 +33,15 @@ 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_MODE_OFF, + MHI_DEBUG_NO_D3, /* use debug.mbn as fw image and skip first M3/D3 */ + MHI_DEBUG_D3, /* use debug.mbn as fw image and allow first M3/D3 */ + MHI_FWIMAGE_NO_D3, /* use fw image if found and skip first M3/D3 */ + MHI_FWIMAGE_D3, /* use fw image if found and allow first M3/D3 */ + MHI_DEBUG_MODE_MAX = MHI_FWIMAGE_D3, +}; + enum mhi_suspend_mode { MHI_ACTIVE_STATE, MHI_DEFAULT_SUSPEND,