From 70f0d2aabdd087cc7ee0034fc5c180c0773c37df Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Wed, 8 Apr 2020 11:49:08 -0700 Subject: [PATCH] mhi: core: Add support to re-try requesting firmware image In case firmware request fails to find firmware in default location, re-try with fall back location. This is done by adding fall back firmware image location in controller structure and firmware request is sent again using fall back location. Send a status call back to controller when re-try is done. Change-Id: I252fa2721df335cbff11b8894adb9ad8cf7bf54f Signed-off-by: Hemant Kumar --- drivers/bus/mhi/core/mhi_boot.c | 17 +++++++++++++++-- include/linux/mhi.h | 2 ++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/bus/mhi/core/mhi_boot.c b/drivers/bus/mhi/core/mhi_boot.c index e90237b19b89..d324f0a0c9bc 100644 --- a/drivers/bus/mhi/core/mhi_boot.c +++ b/drivers/bus/mhi/core/mhi_boot.c @@ -566,8 +566,21 @@ void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl) ret = request_firmware(&firmware, fw_name, mhi_cntrl->dev); if (ret) { - MHI_ERR("Error loading firmware, ret:%d\n", ret); - return; + if (!mhi_cntrl->fw_image_fallback) { + MHI_ERR("Error loading fw, ret:%d\n", ret); + return; + } + + /* re-try with fall back fw image */ + ret = request_firmware(&firmware, mhi_cntrl->fw_image_fallback, + mhi_cntrl->dev); + if (ret) { + MHI_ERR("Error loading fw_fb, ret:%d\n", ret); + return; + } + + mhi_cntrl->status_cb(mhi_cntrl, mhi_cntrl->priv_data, + MHI_CB_FW_FALLBACK_IMG); } size = (mhi_cntrl->fbc_download) ? mhi_cntrl->sbl_size : firmware->size; diff --git a/include/linux/mhi.h b/include/linux/mhi.h index cc9c4f57f436..ca2b00005b9a 100644 --- a/include/linux/mhi.h +++ b/include/linux/mhi.h @@ -45,6 +45,7 @@ enum MHI_CB { MHI_CB_EE_MISSION_MODE, MHI_CB_SYS_ERROR, MHI_CB_FATAL_ERROR, + MHI_CB_FW_FALLBACK_IMG, }; /** @@ -288,6 +289,7 @@ struct mhi_controller { /* fw images */ const char *fw_image; + const char *fw_image_fallback; const char *edl_image; /* mhi host manages downloading entire fbc images */