msm: eva: reorder MMRM Dereg in release seq &cleanup

re-order the mmrm deregister call in core release sequence;
set eva mmrm client structure ptr to NULL after deregister;
re-arrange the error handling code;
in mmrm dereg check if clk enabled before call set value to 0,
since already set value to 0 once when unprepare & disable clk.

Change-Id: Ia89919e219ffda94a19b5214e91f1b3adc575086
Signed-off-by: Yu SI <ysi@codeaurora.org>
This commit is contained in:
Yu SI
2021-08-27 19:32:56 -07:00
parent 996985c6e0
commit 16375cefa4
2 changed files with 15 additions and 10 deletions

View File

@@ -1796,7 +1796,7 @@ static int iris_hfi_core_init(void *device)
if (rc) {
dprintk(CVP_ERR, "failed to init queues\n");
rc = -ENOMEM;
goto err_mmrm_dereg;
goto err_core_init;
}
rc = msm_cvp_map_ipcc_regs(&ipcc_iova);
@@ -1809,7 +1809,7 @@ static int iris_hfi_core_init(void *device)
if (rc) {
dprintk(CVP_ERR, "Failed to start core\n");
rc = -ENODEV;
goto err_mmrm_dereg;
goto err_core_init;
}
dev->version = __read_register(dev, CVP_VERSION_INFO);
@@ -1817,12 +1817,12 @@ static int iris_hfi_core_init(void *device)
rc = call_hfi_pkt_op(dev, sys_init, &pkt, 0);
if (rc) {
dprintk(CVP_ERR, "Failed to create sys init pkt\n");
goto err_mmrm_dereg;
goto err_core_init;
}
if (__iface_cmdq_write(dev, &pkt)) {
rc = -ENOTEMPTY;
goto err_mmrm_dereg;
goto err_core_init;
}
rc = call_hfi_pkt_op(dev, sys_image_version, &version_pkt);
@@ -1848,11 +1848,14 @@ static int iris_hfi_core_init(void *device)
dprintk(CVP_CORE, "Core inited successfully\n");
return 0;
err_mmrm_dereg:
msm_cvp_mmrm_deregister(dev);
err_core_init:
__set_state(dev, IRIS_STATE_DEINIT);
__unload_fw(dev);
if (dev->mmrm_cvp)
{
msm_cvp_mmrm_deregister(dev);
}
err_load_fw:
err_no_mem:
dprintk(CVP_ERR, "Core init failed\n");
@@ -1882,6 +1885,9 @@ static int iris_hfi_core_release(void *dev)
__dsp_shutdown(device, 0);
__disable_subcaches(device);
__unload_fw(device);
if (msm_cvp_mmrm_enabled) {
rc = msm_cvp_mmrm_deregister(device);
if (rc) {
@@ -1891,9 +1897,6 @@ static int iris_hfi_core_release(void *dev)
}
}
__disable_subcaches(device);
__unload_fw(device);
/* unlink all sessions from device */
list_for_each_entry_safe(session, next, &device->sess_head, list) {
list_del(&session->list);

View File

@@ -116,7 +116,7 @@ int msm_cvp_mmrm_deregister(struct iris_hfi_device *device)
/* set clk value to 0 before deregister */
iris_hfi_for_each_clock(device, cl) {
if (cl->has_scaling) {
if ((cl->has_scaling) && (__clk_is_enabled(cl->clk))){
// set min freq and cur freq to 0;
rc = msm_cvp_mmrm_set_value_in_range(device,
0, 0);
@@ -135,6 +135,8 @@ int msm_cvp_mmrm_deregister(struct iris_hfi_device *device)
__func__, rc);
}
device->mmrm_cvp = NULL;
return rc;
}