msm: cpp: Vote for nominal ahb clock while loading firmware
Use nominal ahb clock value while loading firmware to speedup the firmware load process. Vote to SVS once firmware loading is done. CRs-Fixed: 1077224 Change-Id: I8518d349a7838f9600e32d5b2a5853f7f96f9008 Signed-off-by: Krishnankutty Kolathappilly <kkolatha@codeaurora.org>
This commit is contained in:
parent
8ec8b328f3
commit
6f8df12e68
1 changed files with 22 additions and 10 deletions
|
@ -943,6 +943,13 @@ static int32_t cpp_load_fw(struct cpp_device *cpp_dev, char *fw_name_bin)
|
|||
goto end;
|
||||
}
|
||||
|
||||
rc = cam_config_ahb_clk(NULL, 0, CAM_AHB_CLIENT_CPP,
|
||||
CAM_AHB_NOMINAL_VOTE);
|
||||
if (rc < 0) {
|
||||
pr_err("%s:%d: failed to vote for AHB\n", __func__, __LINE__);
|
||||
goto end;
|
||||
}
|
||||
|
||||
msm_camera_io_w(0x1, cpp_dev->base + MSM_CPP_MICRO_CLKEN_CTL);
|
||||
msm_camera_io_w(0x1, cpp_dev->base +
|
||||
MSM_CPP_MICRO_BOOT_START);
|
||||
|
@ -951,7 +958,7 @@ static int32_t cpp_load_fw(struct cpp_device *cpp_dev, char *fw_name_bin)
|
|||
if (rc) {
|
||||
pr_err("%s:%d] poll command %x failed %d", __func__, __LINE__,
|
||||
MSM_CPP_MSG_ID_CMD, rc);
|
||||
goto end;
|
||||
goto vote;
|
||||
}
|
||||
|
||||
msm_camera_io_w(0xFFFFFFFF, cpp_dev->base +
|
||||
|
@ -961,7 +968,7 @@ static int32_t cpp_load_fw(struct cpp_device *cpp_dev, char *fw_name_bin)
|
|||
if (rc) {
|
||||
pr_err("%s:%d] poll rx empty failed %d",
|
||||
__func__, __LINE__, rc);
|
||||
goto end;
|
||||
goto vote;
|
||||
}
|
||||
/*Start firmware loading*/
|
||||
msm_cpp_write(MSM_CPP_CMD_FW_LOAD, cpp_dev->base);
|
||||
|
@ -971,7 +978,7 @@ static int32_t cpp_load_fw(struct cpp_device *cpp_dev, char *fw_name_bin)
|
|||
if (rc) {
|
||||
pr_err("%s:%d] poll rx empty failed %d",
|
||||
__func__, __LINE__, rc);
|
||||
goto end;
|
||||
goto vote;
|
||||
}
|
||||
for (i = 0; i < cpp_dev->fw->size/4; i++) {
|
||||
msm_cpp_write(*ptr_bin, cpp_dev->base);
|
||||
|
@ -980,7 +987,7 @@ static int32_t cpp_load_fw(struct cpp_device *cpp_dev, char *fw_name_bin)
|
|||
if (rc) {
|
||||
pr_err("%s:%d] poll rx empty failed %d",
|
||||
__func__, __LINE__, rc);
|
||||
goto end;
|
||||
goto vote;
|
||||
}
|
||||
}
|
||||
ptr_bin++;
|
||||
|
@ -993,21 +1000,21 @@ static int32_t cpp_load_fw(struct cpp_device *cpp_dev, char *fw_name_bin)
|
|||
if (rc) {
|
||||
pr_err("%s:%d] poll command %x failed %d", __func__, __LINE__,
|
||||
MSM_CPP_MSG_ID_OK, rc);
|
||||
goto end;
|
||||
goto vote;
|
||||
}
|
||||
|
||||
rc = msm_cpp_poll(cpp_dev->base, MSM_CPP_MSG_ID_CMD);
|
||||
if (rc) {
|
||||
pr_err("%s:%d] poll command %x failed %d", __func__, __LINE__,
|
||||
MSM_CPP_MSG_ID_CMD, rc);
|
||||
goto end;
|
||||
goto vote;
|
||||
}
|
||||
|
||||
rc = msm_cpp_poll_rx_empty(cpp_dev->base);
|
||||
if (rc) {
|
||||
pr_err("%s:%d] poll rx empty failed %d",
|
||||
__func__, __LINE__, rc);
|
||||
goto end;
|
||||
goto vote;
|
||||
}
|
||||
/*Trigger MC to jump to start address*/
|
||||
msm_cpp_write(MSM_CPP_CMD_EXEC_JUMP, cpp_dev->base);
|
||||
|
@ -1017,21 +1024,21 @@ static int32_t cpp_load_fw(struct cpp_device *cpp_dev, char *fw_name_bin)
|
|||
if (rc) {
|
||||
pr_err("%s:%d] poll command %x failed %d", __func__, __LINE__,
|
||||
MSM_CPP_MSG_ID_CMD, rc);
|
||||
goto end;
|
||||
goto vote;
|
||||
}
|
||||
|
||||
rc = msm_cpp_poll(cpp_dev->base, 0x1);
|
||||
if (rc) {
|
||||
pr_err("%s:%d] poll command 0x1 failed %d", __func__, __LINE__,
|
||||
rc);
|
||||
goto end;
|
||||
goto vote;
|
||||
}
|
||||
|
||||
rc = msm_cpp_poll(cpp_dev->base, MSM_CPP_MSG_ID_JUMP_ACK);
|
||||
if (rc) {
|
||||
pr_err("%s:%d] poll command %x failed %d", __func__, __LINE__,
|
||||
MSM_CPP_MSG_ID_JUMP_ACK, rc);
|
||||
goto end;
|
||||
goto vote;
|
||||
}
|
||||
|
||||
rc = msm_cpp_poll(cpp_dev->base, MSM_CPP_MSG_ID_TRAILER);
|
||||
|
@ -1040,6 +1047,11 @@ static int32_t cpp_load_fw(struct cpp_device *cpp_dev, char *fw_name_bin)
|
|||
MSM_CPP_MSG_ID_JUMP_ACK, rc);
|
||||
}
|
||||
|
||||
vote:
|
||||
rc = cam_config_ahb_clk(NULL, 0, CAM_AHB_CLIENT_CPP,
|
||||
CAM_AHB_SVS_VOTE);
|
||||
if (rc < 0)
|
||||
pr_err("%s:%d: failed to vote for AHB\n", __func__, __LINE__);
|
||||
end:
|
||||
return rc;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue