msm_mmrm: Add support of power prints
In order to improve debugging of mmrm issues, add support of MMRM power print and remove some unnecessary logging or decrease priority to low. Signed-off-by: Mahesh Kumar Sharma <smahesh@codeaurora.org>
This commit is contained in:
@@ -92,7 +92,7 @@ static void mmrm_sw_print_client_data(struct mmrm_sw_clk_mgr_info *sinfo,
|
||||
u32 i, j;
|
||||
|
||||
for (i = 0; i < MMRM_VDD_LEVEL_MAX; i++) {
|
||||
d_mpr_h("%s: csid(0x%x) corner(%s) dyn_pwr(%zu) leak_pwr(%zu) \n",
|
||||
d_mpr_p("%s: csid(0x%x) corner(%s) dyn_pwr(%zu) leak_pwr(%zu)\n",
|
||||
__func__,
|
||||
tbl_entry->clk_src_id,
|
||||
cset->corner_tbl[i].name,
|
||||
@@ -100,7 +100,7 @@ static void mmrm_sw_print_client_data(struct mmrm_sw_clk_mgr_info *sinfo,
|
||||
tbl_entry->leak_pwr[i]);
|
||||
|
||||
for (j = 0; j < MMRM_VDD_LEVEL_MAX; j++) {
|
||||
d_mpr_h("%s: csid(0x%x) total_pwr(%zu) cur_ma(%zu)\n",
|
||||
d_mpr_p("%s: csid(0x%x) total_pwr(%zu) cur_ma(%zu)\n",
|
||||
__func__,
|
||||
tbl_entry->clk_src_id,
|
||||
(tbl_entry->dyn_pwr[i] + tbl_entry->leak_pwr[i]),
|
||||
@@ -190,8 +190,6 @@ static struct mmrm_client *mmrm_sw_clk_client_register(
|
||||
u32 c = 0;
|
||||
u32 clk_client_src_id = 0;
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
mutex_lock(&sw_clk_mgr->lock);
|
||||
|
||||
/* check if entry is free in table */
|
||||
@@ -286,7 +284,6 @@ static struct mmrm_client *mmrm_sw_clk_client_register(
|
||||
|
||||
exit_found:
|
||||
mutex_unlock(&sw_clk_mgr->lock);
|
||||
d_mpr_h("%s: exiting with success\n", __func__);
|
||||
return clk_client;
|
||||
|
||||
err_fail_update_entry:
|
||||
@@ -302,7 +299,7 @@ err_nofree_entry:
|
||||
err_already_registered:
|
||||
mutex_unlock(&sw_clk_mgr->lock);
|
||||
|
||||
d_mpr_h("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -313,8 +310,6 @@ static int mmrm_sw_clk_client_deregister(struct mmrm_clk_mgr *sw_clk_mgr,
|
||||
struct mmrm_sw_clk_client_tbl_entry *tbl_entry;
|
||||
struct mmrm_sw_clk_mgr_info *sinfo = &(sw_clk_mgr->data.sw_info);
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
/* validate the client ptr */
|
||||
if (!client) {
|
||||
d_mpr_e("%s: invalid client\n");
|
||||
@@ -350,11 +345,10 @@ static int mmrm_sw_clk_client_deregister(struct mmrm_clk_mgr *sw_clk_mgr,
|
||||
|
||||
mutex_unlock(&sw_clk_mgr->lock);
|
||||
|
||||
d_mpr_h("%s: exiting with success\n", __func__);
|
||||
return rc;
|
||||
|
||||
err_invalid_client:
|
||||
d_mpr_h("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -508,7 +502,6 @@ static int mmrm_sw_throttle_low_priority_client(
|
||||
u32 now_cur_ma, min_cur_ma;
|
||||
long clk_min_level = MMRM_VDD_LEVEL_LOW_SVS;
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
init_completion(&timeout);
|
||||
|
||||
for (i = 0; i < sinfo->throttle_clients_data_length ; i++) {
|
||||
@@ -585,7 +578,6 @@ static int mmrm_sw_throttle_low_priority_client(
|
||||
|
||||
/* Clearing the reserve flag */
|
||||
tbl_entry_throttle_client->reserve = tbl_entry_throttle_client->reserve & 0;
|
||||
d_mpr_h("%s: exiting\n", __func__);
|
||||
}
|
||||
err_clk_set_fail:
|
||||
return rc;
|
||||
@@ -803,7 +795,7 @@ err_invalid_client_data:
|
||||
err_invalid_clk_val:
|
||||
err_peak_overshoot:
|
||||
err_clk_set_fail:
|
||||
d_mpr_h("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -812,8 +804,6 @@ static int mmrm_sw_clk_client_setval_inrange(struct mmrm_clk_mgr *sw_clk_mgr,
|
||||
struct mmrm_client_data *client_data,
|
||||
struct mmrm_client_res_value *val)
|
||||
{
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
/* TBD: add support for set val in range */
|
||||
return mmrm_sw_clk_client_setval(sw_clk_mgr, client, client_data,
|
||||
val->cur);
|
||||
@@ -827,8 +817,6 @@ static int mmrm_sw_clk_client_getval(struct mmrm_clk_mgr *sw_clk_mgr,
|
||||
struct mmrm_sw_clk_client_tbl_entry *tbl_entry;
|
||||
struct mmrm_sw_clk_mgr_info *sinfo = &(sw_clk_mgr->data.sw_info);
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
/* validate input params */
|
||||
if (!client) {
|
||||
d_mpr_e("%s: invalid client\n");
|
||||
@@ -856,11 +844,10 @@ static int mmrm_sw_clk_client_getval(struct mmrm_clk_mgr *sw_clk_mgr,
|
||||
val->cur = tbl_entry->clk_rate;
|
||||
val->max = tbl_entry->clk_rate;
|
||||
|
||||
d_mpr_h("%s: exiting with success\n", __func__);
|
||||
return rc;
|
||||
|
||||
err_invalid_client:
|
||||
d_mpr_h("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -880,8 +867,6 @@ static int mmrm_sw_prepare_table(struct mmrm_clk_platform_resources *cres,
|
||||
struct mmrm_sw_clk_client_tbl_entry *tbl_entry;
|
||||
struct nom_clk_src_info *nom_tbl_entry;
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
/* read all resource entries */
|
||||
for (c = 0; c < sinfo->tot_clk_clients; c++) {
|
||||
tbl_entry = &sinfo->clk_client_tbl[c];
|
||||
@@ -901,7 +886,6 @@ static int mmrm_sw_prepare_table(struct mmrm_clk_platform_resources *cres,
|
||||
tbl_entry->leak_pwr[MMRM_VDD_LEVEL_NOM]);
|
||||
}
|
||||
|
||||
d_mpr_h("%s: exiting\n", __func__);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -915,8 +899,6 @@ int mmrm_init_sw_clk_mgr(void *driver_data)
|
||||
struct mmrm_clk_mgr *sw_clk_mgr = NULL;
|
||||
u32 tbl_size = 0;
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
/* mmrm_sw_clk_mgr */
|
||||
sw_clk_mgr = kzalloc(sizeof(*sw_clk_mgr), GFP_KERNEL);
|
||||
if (!sw_clk_mgr) {
|
||||
@@ -976,7 +958,6 @@ int mmrm_init_sw_clk_mgr(void *driver_data)
|
||||
sw_clk_mgr->clk_client_ops = &clk_client_swops;
|
||||
drv_data->clk_mgr = sw_clk_mgr;
|
||||
|
||||
d_mpr_h("%s: exiting with success\n", __func__);
|
||||
return rc;
|
||||
|
||||
err_fail_prep_tbl:
|
||||
@@ -985,7 +966,7 @@ err_fail_clk_tbl:
|
||||
kfree(sw_clk_mgr);
|
||||
drv_data->clk_mgr = NULL;
|
||||
err_fail_sw_clk_mgr:
|
||||
d_mpr_h("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@@ -46,8 +46,6 @@ struct dentry *msm_mmrm_debugfs_init(void)
|
||||
struct dentry *dir;
|
||||
int file_val;
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
/* create a directory in debugfs root (/sys/kernel/debug) */
|
||||
dir = debugfs_create_dir("msm_mmrm", NULL);
|
||||
if (IS_ERR_OR_NULL(dir)) {
|
||||
@@ -66,17 +64,14 @@ struct dentry *msm_mmrm_debugfs_init(void)
|
||||
debugfs_create_u8("allow_multiple_register", 0644, dir, &msm_mmrm_allow_multiple_register);
|
||||
debugfs_create_u8("enable_throttle_feature", 0644, dir, &msm_mmrm_enable_throttle_feature);
|
||||
|
||||
d_mpr_h("%s: exiting\n", __func__);
|
||||
return dir;
|
||||
|
||||
failed_create_dir:
|
||||
d_mpr_h("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error\n", __func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void msm_mmrm_debugfs_deinit(struct dentry *dir)
|
||||
{
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
debugfs_remove_recursive(dir);
|
||||
d_mpr_h("%s: exiting\n", __func__);
|
||||
}
|
||||
|
@@ -23,6 +23,7 @@ enum mmrm_msg_prio {
|
||||
MMRM_HIGH = 0x000002,
|
||||
MMRM_LOW = 0x000004,
|
||||
MMRM_WARN = 0x000008,
|
||||
MMRM_POWER = 0x000010,
|
||||
MMRM_PRINTK = 0x010000,
|
||||
MMRM_FTRACE = 0x020000,
|
||||
};
|
||||
@@ -45,6 +46,7 @@ extern u8 msm_mmrm_allow_multiple_register;
|
||||
#define d_mpr_h(__fmt, ...) dprintk(MMRM_HIGH, __fmt, ##__VA_ARGS__)
|
||||
#define d_mpr_l(__fmt, ...) dprintk(MMRM_LOW, __fmt, ##__VA_ARGS__)
|
||||
#define d_mpr_w(__fmt, ...) dprintk(MMRM_WARN, __fmt, ##__VA_ARGS__)
|
||||
#define d_mpr_p(__fmt, ...) dprintk(MMRM_POWER, __fmt, ##__VA_ARGS__)
|
||||
|
||||
static inline char *get_debug_level_str(int level)
|
||||
{
|
||||
@@ -57,6 +59,8 @@ static inline char *get_debug_level_str(int level)
|
||||
return "low ";
|
||||
case MMRM_WARN:
|
||||
return "warn";
|
||||
case MMRM_POWER:
|
||||
return "power";
|
||||
default:
|
||||
return "????";
|
||||
}
|
||||
|
@@ -35,7 +35,7 @@ struct mmrm_client *mmrm_client_register(struct mmrm_client_desc *client_desc)
|
||||
{
|
||||
struct mmrm_client *client = NULL;
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
|
||||
/* check for null input */
|
||||
if (!client_desc) {
|
||||
@@ -62,7 +62,6 @@ struct mmrm_client *mmrm_client_register(struct mmrm_client_desc *client_desc)
|
||||
goto err_exit;
|
||||
}
|
||||
|
||||
d_mpr_h("%s: exiting\n", __func__);
|
||||
return client;
|
||||
|
||||
err_exit:
|
||||
@@ -75,7 +74,6 @@ int mmrm_client_deregister(struct mmrm_client *client)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
/* check for null input */
|
||||
if (!client) {
|
||||
@@ -101,11 +99,10 @@ int mmrm_client_deregister(struct mmrm_client *client)
|
||||
__func__, client->client_type);
|
||||
}
|
||||
|
||||
d_mpr_h("%s: exiting\n", __func__);
|
||||
return rc;
|
||||
|
||||
err_exit:
|
||||
d_mpr_e("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(mmrm_client_deregister);
|
||||
@@ -115,8 +112,6 @@ int mmrm_client_set_value(struct mmrm_client *client,
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
/* check for null input */
|
||||
if (!client || !client_data) {
|
||||
d_mpr_e("%s: invalid input client(%pK) client_data(%pK)\n",
|
||||
@@ -143,11 +138,10 @@ int mmrm_client_set_value(struct mmrm_client *client,
|
||||
__func__, client->client_type);
|
||||
}
|
||||
|
||||
d_mpr_h("%s: exiting\n", __func__);
|
||||
return rc;
|
||||
|
||||
err_exit:
|
||||
d_mpr_e("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(mmrm_client_set_value);
|
||||
@@ -158,8 +152,6 @@ int mmrm_client_set_value_in_range(struct mmrm_client *client,
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
/* check for null input */
|
||||
if (!client || !client_data || !val) {
|
||||
d_mpr_e(
|
||||
@@ -187,11 +179,10 @@ int mmrm_client_set_value_in_range(struct mmrm_client *client,
|
||||
__func__, client->client_type);
|
||||
}
|
||||
|
||||
d_mpr_h("%s: exiting\n", __func__);
|
||||
return rc;
|
||||
|
||||
err_exit:
|
||||
d_mpr_e("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(mmrm_client_set_value_in_range);
|
||||
@@ -201,8 +192,6 @@ int mmrm_client_get_value(struct mmrm_client *client,
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
/* check for null input */
|
||||
if (!client || !val) {
|
||||
d_mpr_e("%s: invalid input client(%pK) val(%pK)\n",
|
||||
@@ -229,11 +218,10 @@ int mmrm_client_get_value(struct mmrm_client *client,
|
||||
__func__, client->client_type);
|
||||
}
|
||||
|
||||
d_mpr_h("%s: exiting\n", __func__);
|
||||
return rc;
|
||||
|
||||
err_exit:
|
||||
d_mpr_e("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(mmrm_client_get_value);
|
||||
@@ -242,8 +230,6 @@ static int msm_mmrm_probe_init(struct platform_device *pdev)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
drv_data = kzalloc(sizeof(*drv_data), GFP_KERNEL);
|
||||
if (!drv_data) {
|
||||
d_mpr_e("%s: unable to allocate memory for mmrm driver\n",
|
||||
@@ -280,7 +266,6 @@ static int msm_mmrm_probe_init(struct platform_device *pdev)
|
||||
goto err_mmrm_init;
|
||||
}
|
||||
|
||||
d_mpr_h("%s: exiting with success\n", __func__);
|
||||
return rc;
|
||||
|
||||
err_mmrm_init:
|
||||
@@ -290,7 +275,7 @@ err_read_pltfrm_rsc:
|
||||
err_get_drv_data:
|
||||
RESET_DRV_DATA(drv_data);
|
||||
err_no_mem:
|
||||
d_mpr_e("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -298,18 +283,18 @@ static int msm_mmrm_probe(struct platform_device *pdev)
|
||||
{
|
||||
int rc = -EINVAL;
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
d_mpr_h("%s\n", __func__);
|
||||
|
||||
VERIFY_PDEV(pdev)
|
||||
|
||||
if (of_device_is_compatible(pdev->dev.of_node, "qcom,msm-mmrm"))
|
||||
return msm_mmrm_probe_init(pdev);
|
||||
|
||||
d_mpr_h("%s: exiting: no compatible device node\n", __func__);
|
||||
d_mpr_e("%s: no compatible device node\n", __func__);
|
||||
return rc;
|
||||
|
||||
err_exit:
|
||||
d_mpr_e("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -331,11 +316,10 @@ static int msm_mmrm_remove(struct platform_device *pdev)
|
||||
dev_set_drvdata(&pdev->dev, NULL);
|
||||
RESET_DRV_DATA(drv_data);
|
||||
|
||||
d_mpr_h("%s: exiting with success\n", __func__);
|
||||
return rc;
|
||||
|
||||
err_exit:
|
||||
d_mpr_e("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -359,8 +343,6 @@ static int __init msm_mmrm_init(void)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
|
||||
rc = platform_driver_register(&msm_mmrm_driver);
|
||||
if (rc) {
|
||||
d_mpr_e("%s: failed to register platform driver\n",
|
||||
@@ -368,19 +350,17 @@ static int __init msm_mmrm_init(void)
|
||||
goto err_platform_drv_reg;
|
||||
}
|
||||
|
||||
d_mpr_h("%s: exiting\n", __func__);
|
||||
d_mpr_h("%s: success\n", __func__);
|
||||
return rc;
|
||||
|
||||
err_platform_drv_reg:
|
||||
d_mpr_e("%s: error exit\n", __func__);
|
||||
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void __exit msm_mmrm_exit(void)
|
||||
{
|
||||
d_mpr_h("%s: entering\n", __func__);
|
||||
platform_driver_unregister(&msm_mmrm_driver);
|
||||
d_mpr_h("%s: exiting\n", __func__);
|
||||
}
|
||||
|
||||
module_init(msm_mmrm_init);
|
||||
|
Reference in New Issue
Block a user