summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormbao <mbao@codeaurora.org>2021-04-22 09:36:04 -0700
committermbao <mbao@codeaurora.org>2021-05-27 19:10:04 -0700
commit0b89bee6d082a08cec8edec121259490aecdaf7b (patch)
treea0e24e71408513ff839f616c14df7b99aa8779af
parentcaa0d033a2dbce42bb047686d01f585b152dc9d2 (diff)
downloadmmrm-0b89bee6d082a08cec8edec121259490aecdaf7b.tar.gz
msm-mmrm: check if mmrm driver has initialized properly, avoid bootup crashes
Change-Id: I973a52eca4ee4ce8283d0ad1b6576ec7f527d037
-rw-r--r--driver/src/msm_mmrm.c43
1 files changed, 34 insertions, 9 deletions
diff --git a/driver/src/msm_mmrm.c b/driver/src/msm_mmrm.c
index 1d2a86b..5ce639f 100644
--- a/driver/src/msm_mmrm.c
+++ b/driver/src/msm_mmrm.c
@@ -43,6 +43,11 @@ struct mmrm_client *mmrm_client_register(struct mmrm_client_desc *client_desc)
goto err_exit;
}
+ if (drv_data == (void *) -EPROBE_DEFER) {
+ d_mpr_e("%s: mmrm probe_init not done\n", __func__);
+ goto err_exit;
+ }
+
/* check for client type, then register */
if (client_desc->client_type == MMRM_CLIENT_CLOCK) {
client = mmrm_clk_client_register(
@@ -61,7 +66,7 @@ struct mmrm_client *mmrm_client_register(struct mmrm_client_desc *client_desc)
return client;
err_exit:
- d_mpr_h("%s: error exit\n", __func__);
+ d_mpr_e("%s: error exit\n", __func__);
return client;
}
EXPORT_SYMBOL(mmrm_client_register);
@@ -79,6 +84,11 @@ int mmrm_client_deregister(struct mmrm_client *client)
goto err_exit;
}
+ if (drv_data == (void *) -EPROBE_DEFER) {
+ d_mpr_e("%s: mmrm probe_init not done\n", __func__);
+ goto err_exit;
+ }
+
/* check for client type, then deregister */
if (client->client_type == MMRM_CLIENT_CLOCK) {
rc = mmrm_clk_client_deregister(drv_data->clk_mgr, client);
@@ -95,7 +105,7 @@ int mmrm_client_deregister(struct mmrm_client *client)
return rc;
err_exit:
- d_mpr_h("%s: error exit\n", __func__);
+ d_mpr_e("%s: error exit\n", __func__);
return rc;
}
EXPORT_SYMBOL(mmrm_client_deregister);
@@ -115,6 +125,11 @@ int mmrm_client_set_value(struct mmrm_client *client,
goto err_exit;
}
+ if (drv_data == (void *) -EPROBE_DEFER) {
+ d_mpr_e("%s: mmrm probe_init not done\n", __func__);
+ goto err_exit;
+ }
+
/* check for client type, then set value */
if (client->client_type == MMRM_CLIENT_CLOCK) {
rc = mmrm_clk_client_setval(drv_data->clk_mgr, client,
@@ -132,7 +147,7 @@ int mmrm_client_set_value(struct mmrm_client *client,
return rc;
err_exit:
- d_mpr_h("%s: error exit\n", __func__);
+ d_mpr_e("%s: error exit\n", __func__);
return rc;
}
EXPORT_SYMBOL(mmrm_client_set_value);
@@ -154,6 +169,11 @@ int mmrm_client_set_value_in_range(struct mmrm_client *client,
goto err_exit;
}
+ if (drv_data == (void *) -EPROBE_DEFER) {
+ d_mpr_e("%s: mmrm probe_init not done\n", __func__);
+ goto err_exit;
+ }
+
/* check for client type, then set value */
if (client->client_type == MMRM_CLIENT_CLOCK) {
rc = mmrm_clk_client_setval_inrange(drv_data->clk_mgr,
@@ -171,7 +191,7 @@ int mmrm_client_set_value_in_range(struct mmrm_client *client,
return rc;
err_exit:
- d_mpr_h("%s: error exit\n", __func__);
+ d_mpr_e("%s: error exit\n", __func__);
return rc;
}
EXPORT_SYMBOL(mmrm_client_set_value_in_range);
@@ -191,6 +211,11 @@ int mmrm_client_get_value(struct mmrm_client *client,
goto err_exit;
}
+ if (drv_data == (void *) -EPROBE_DEFER) {
+ d_mpr_e("%s: mmrm probe_init not done\n", __func__);
+ goto err_exit;
+ }
+
/* check for client type, then get value */
if (client->client_type == MMRM_CLIENT_CLOCK) {
rc = mmrm_clk_client_getval(drv_data->clk_mgr,
@@ -208,7 +233,7 @@ int mmrm_client_get_value(struct mmrm_client *client,
return rc;
err_exit:
- d_mpr_h("%s: error exit\n", __func__);
+ d_mpr_e("%s: error exit\n", __func__);
return rc;
}
EXPORT_SYMBOL(mmrm_client_get_value);
@@ -265,7 +290,7 @@ err_read_pltfrm_rsc:
err_get_drv_data:
RESET_DRV_DATA(drv_data);
err_no_mem:
- d_mpr_h("%s: error exit\n", __func__);
+ d_mpr_e("%s: error exit\n", __func__);
return rc;
}
@@ -284,7 +309,7 @@ static int msm_mmrm_probe(struct platform_device *pdev)
return rc;
err_exit:
- d_mpr_h("%s: error exit\n", __func__);
+ d_mpr_e("%s: error exit\n", __func__);
return rc;
}
@@ -310,7 +335,7 @@ static int msm_mmrm_remove(struct platform_device *pdev)
return rc;
err_exit:
- d_mpr_h("%s: error exit\n", __func__);
+ d_mpr_e("%s: error exit\n", __func__);
return rc;
}
@@ -347,7 +372,7 @@ static int __init msm_mmrm_init(void)
return rc;
err_platform_drv_reg:
- d_mpr_h("%s: error exit\n", __func__);
+ d_mpr_e("%s: error exit\n", __func__);
return rc;
}