diff --git a/drivers/cam_icp/hfi.c b/drivers/cam_icp/hfi.c index 8b22b06b7d..c38e935baf 100644 --- a/drivers/cam_icp/hfi.c +++ b/drivers/cam_icp/hfi.c @@ -214,6 +214,9 @@ int hfi_write_cmd(void *cmd_ptr) */ wmb(); hfi_irq_raise(g_hfi); + + /* Ensure HOST2ICP trigger is received by FW */ + wmb(); err: mutex_unlock(&hfi_cmd_q_mutex); return rc; diff --git a/drivers/cam_icp/icp_hw/lx7_hw/lx7_core.c b/drivers/cam_icp/icp_hw/lx7_hw/lx7_core.c index f5ddf539ba..e1d727d14d 100644 --- a/drivers/cam_icp/icp_hw/lx7_hw/lx7_core.c +++ b/drivers/cam_icp/icp_hw/lx7_hw/lx7_core.c @@ -695,8 +695,15 @@ static int cam_lx7_core_control( if (core_info->use_sec_pil) { rc = qcom_scm_set_remote_state(state, CAM_FW_PAS_ID); if (rc) - CAM_ERR(CAM_ICP, "remote state set to %s failed rc=%d", - state == TZ_STATE_RESUME ? "resume" : "suspend", rc); + CAM_ERR(CAM_ICP, + "remote state set to %s failed rc=%d IB_status0=0x%x IB_Status1=0x%x PFault=0x%x", + state == TZ_STATE_RESUME ? "resume" : "suspend", rc, + cam_io_r_mb(lx7_info->soc_info.reg_map[LX7_CIRQ_BASE].mem_base + + ICP_LX7_CIRQ_IB_STATUS0), + cam_io_r_mb(lx7_info->soc_info.reg_map[LX7_CIRQ_BASE].mem_base + + ICP_LX7_CIRQ_IB_STATUS1), + cam_io_r_mb(lx7_info->soc_info.reg_map[LX7_CIRQ_BASE].mem_base + + ICP_LX7_CIRQ_PFAULT_INFO)); } else { if (state == TZ_STATE_RESUME) { rc = __cam_lx7_power_resume(lx7_info); diff --git a/drivers/cam_icp/icp_hw/lx7_hw/lx7_reg.h b/drivers/cam_icp/icp_hw/lx7_hw/lx7_reg.h index 16a9383ecf..04e6757e33 100644 --- a/drivers/cam_icp/icp_hw/lx7_hw/lx7_reg.h +++ b/drivers/cam_icp/icp_hw/lx7_hw/lx7_reg.h @@ -30,7 +30,10 @@ #define ICP_LX7_CIRQ_OB_IRQ_CMD 0x10 #define LX7_IRQ_CLEAR_CMD (1 << 1) -#define ICP_LX7_CIRQ_HOST2ICPINT 0x124 +#define ICP_LX7_CIRQ_IB_STATUS0 0x70 +#define ICP_LX7_CIRQ_IB_STATUS1 0x74 +#define ICP_LX7_CIRQ_HOST2ICPINT 0x124 +#define ICP_LX7_CIRQ_PFAULT_INFO 0x128 #define LX7_HOST2ICPINT (1 << 0) #endif /* _CAM_LX7_REG_H_ */