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:
Mahesh Kumar Sharma
2021-07-19 19:28:15 -07:00
parent bd838c2746
commit bb30cd0803
4 changed files with 24 additions and 64 deletions

View File

@@ -92,7 +92,7 @@ static void mmrm_sw_print_client_data(struct mmrm_sw_clk_mgr_info *sinfo,
u32 i, j; u32 i, j;
for (i = 0; i < MMRM_VDD_LEVEL_MAX; i++) { 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__, __func__,
tbl_entry->clk_src_id, tbl_entry->clk_src_id,
cset->corner_tbl[i].name, 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]); tbl_entry->leak_pwr[i]);
for (j = 0; j < MMRM_VDD_LEVEL_MAX; j++) { 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__, __func__,
tbl_entry->clk_src_id, tbl_entry->clk_src_id,
(tbl_entry->dyn_pwr[i] + tbl_entry->leak_pwr[i]), (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 c = 0;
u32 clk_client_src_id = 0; u32 clk_client_src_id = 0;
d_mpr_h("%s: entering\n", __func__);
mutex_lock(&sw_clk_mgr->lock); mutex_lock(&sw_clk_mgr->lock);
/* check if entry is free in table */ /* check if entry is free in table */
@@ -286,7 +284,6 @@ static struct mmrm_client *mmrm_sw_clk_client_register(
exit_found: exit_found:
mutex_unlock(&sw_clk_mgr->lock); mutex_unlock(&sw_clk_mgr->lock);
d_mpr_h("%s: exiting with success\n", __func__);
return clk_client; return clk_client;
err_fail_update_entry: err_fail_update_entry:
@@ -302,7 +299,7 @@ err_nofree_entry:
err_already_registered: err_already_registered:
mutex_unlock(&sw_clk_mgr->lock); 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; 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_client_tbl_entry *tbl_entry;
struct mmrm_sw_clk_mgr_info *sinfo = &(sw_clk_mgr->data.sw_info); struct mmrm_sw_clk_mgr_info *sinfo = &(sw_clk_mgr->data.sw_info);
d_mpr_h("%s: entering\n", __func__);
/* validate the client ptr */ /* validate the client ptr */
if (!client) { if (!client) {
d_mpr_e("%s: invalid client\n"); 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); mutex_unlock(&sw_clk_mgr->lock);
d_mpr_h("%s: exiting with success\n", __func__);
return rc; return rc;
err_invalid_client: err_invalid_client:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error = %d\n", __func__, rc);
return rc; return rc;
} }
@@ -508,7 +502,6 @@ static int mmrm_sw_throttle_low_priority_client(
u32 now_cur_ma, min_cur_ma; u32 now_cur_ma, min_cur_ma;
long clk_min_level = MMRM_VDD_LEVEL_LOW_SVS; long clk_min_level = MMRM_VDD_LEVEL_LOW_SVS;
d_mpr_h("%s: entering\n", __func__);
init_completion(&timeout); init_completion(&timeout);
for (i = 0; i < sinfo->throttle_clients_data_length ; i++) { 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 */ /* Clearing the reserve flag */
tbl_entry_throttle_client->reserve = tbl_entry_throttle_client->reserve & 0; tbl_entry_throttle_client->reserve = tbl_entry_throttle_client->reserve & 0;
d_mpr_h("%s: exiting\n", __func__);
} }
err_clk_set_fail: err_clk_set_fail:
return rc; return rc;
@@ -803,7 +795,7 @@ err_invalid_client_data:
err_invalid_clk_val: err_invalid_clk_val:
err_peak_overshoot: err_peak_overshoot:
err_clk_set_fail: err_clk_set_fail:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error = %d\n", __func__, rc);
return 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_data *client_data,
struct mmrm_client_res_value *val) struct mmrm_client_res_value *val)
{ {
d_mpr_h("%s: entering\n", __func__);
/* TBD: add support for set val in range */ /* TBD: add support for set val in range */
return mmrm_sw_clk_client_setval(sw_clk_mgr, client, client_data, return mmrm_sw_clk_client_setval(sw_clk_mgr, client, client_data,
val->cur); 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_client_tbl_entry *tbl_entry;
struct mmrm_sw_clk_mgr_info *sinfo = &(sw_clk_mgr->data.sw_info); struct mmrm_sw_clk_mgr_info *sinfo = &(sw_clk_mgr->data.sw_info);
d_mpr_h("%s: entering\n", __func__);
/* validate input params */ /* validate input params */
if (!client) { if (!client) {
d_mpr_e("%s: invalid client\n"); 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->cur = tbl_entry->clk_rate;
val->max = tbl_entry->clk_rate; val->max = tbl_entry->clk_rate;
d_mpr_h("%s: exiting with success\n", __func__);
return rc; return rc;
err_invalid_client: err_invalid_client:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error = %d\n", __func__, rc);
return 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 mmrm_sw_clk_client_tbl_entry *tbl_entry;
struct nom_clk_src_info *nom_tbl_entry; struct nom_clk_src_info *nom_tbl_entry;
d_mpr_h("%s: entering\n", __func__);
/* read all resource entries */ /* read all resource entries */
for (c = 0; c < sinfo->tot_clk_clients; c++) { for (c = 0; c < sinfo->tot_clk_clients; c++) {
tbl_entry = &sinfo->clk_client_tbl[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]); tbl_entry->leak_pwr[MMRM_VDD_LEVEL_NOM]);
} }
d_mpr_h("%s: exiting\n", __func__);
return rc; return rc;
} }
@@ -915,8 +899,6 @@ int mmrm_init_sw_clk_mgr(void *driver_data)
struct mmrm_clk_mgr *sw_clk_mgr = NULL; struct mmrm_clk_mgr *sw_clk_mgr = NULL;
u32 tbl_size = 0; u32 tbl_size = 0;
d_mpr_h("%s: entering\n", __func__);
/* mmrm_sw_clk_mgr */ /* mmrm_sw_clk_mgr */
sw_clk_mgr = kzalloc(sizeof(*sw_clk_mgr), GFP_KERNEL); sw_clk_mgr = kzalloc(sizeof(*sw_clk_mgr), GFP_KERNEL);
if (!sw_clk_mgr) { 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; sw_clk_mgr->clk_client_ops = &clk_client_swops;
drv_data->clk_mgr = sw_clk_mgr; drv_data->clk_mgr = sw_clk_mgr;
d_mpr_h("%s: exiting with success\n", __func__);
return rc; return rc;
err_fail_prep_tbl: err_fail_prep_tbl:
@@ -985,7 +966,7 @@ err_fail_clk_tbl:
kfree(sw_clk_mgr); kfree(sw_clk_mgr);
drv_data->clk_mgr = NULL; drv_data->clk_mgr = NULL;
err_fail_sw_clk_mgr: err_fail_sw_clk_mgr:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error = %d\n", __func__, rc);
return rc; return rc;
} }

View File

@@ -46,8 +46,6 @@ struct dentry *msm_mmrm_debugfs_init(void)
struct dentry *dir; struct dentry *dir;
int file_val; int file_val;
d_mpr_h("%s: entering\n", __func__);
/* create a directory in debugfs root (/sys/kernel/debug) */ /* create a directory in debugfs root (/sys/kernel/debug) */
dir = debugfs_create_dir("msm_mmrm", NULL); dir = debugfs_create_dir("msm_mmrm", NULL);
if (IS_ERR_OR_NULL(dir)) { 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("allow_multiple_register", 0644, dir, &msm_mmrm_allow_multiple_register);
debugfs_create_u8("enable_throttle_feature", 0644, dir, &msm_mmrm_enable_throttle_feature); debugfs_create_u8("enable_throttle_feature", 0644, dir, &msm_mmrm_enable_throttle_feature);
d_mpr_h("%s: exiting\n", __func__);
return dir; return dir;
failed_create_dir: failed_create_dir:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error\n", __func__);
return NULL; return NULL;
} }
void msm_mmrm_debugfs_deinit(struct dentry *dir) void msm_mmrm_debugfs_deinit(struct dentry *dir)
{ {
d_mpr_h("%s: entering\n", __func__);
debugfs_remove_recursive(dir); debugfs_remove_recursive(dir);
d_mpr_h("%s: exiting\n", __func__);
} }

View File

@@ -23,6 +23,7 @@ enum mmrm_msg_prio {
MMRM_HIGH = 0x000002, MMRM_HIGH = 0x000002,
MMRM_LOW = 0x000004, MMRM_LOW = 0x000004,
MMRM_WARN = 0x000008, MMRM_WARN = 0x000008,
MMRM_POWER = 0x000010,
MMRM_PRINTK = 0x010000, MMRM_PRINTK = 0x010000,
MMRM_FTRACE = 0x020000, 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_h(__fmt, ...) dprintk(MMRM_HIGH, __fmt, ##__VA_ARGS__)
#define d_mpr_l(__fmt, ...) dprintk(MMRM_LOW, __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_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) static inline char *get_debug_level_str(int level)
{ {
@@ -57,6 +59,8 @@ static inline char *get_debug_level_str(int level)
return "low "; return "low ";
case MMRM_WARN: case MMRM_WARN:
return "warn"; return "warn";
case MMRM_POWER:
return "power";
default: default:
return "????"; return "????";
} }

View File

@@ -35,7 +35,7 @@ struct mmrm_client *mmrm_client_register(struct mmrm_client_desc *client_desc)
{ {
struct mmrm_client *client = NULL; struct mmrm_client *client = NULL;
d_mpr_h("%s: entering\n", __func__);
/* check for null input */ /* check for null input */
if (!client_desc) { if (!client_desc) {
@@ -62,7 +62,6 @@ struct mmrm_client *mmrm_client_register(struct mmrm_client_desc *client_desc)
goto err_exit; goto err_exit;
} }
d_mpr_h("%s: exiting\n", __func__);
return client; return client;
err_exit: err_exit:
@@ -75,7 +74,6 @@ int mmrm_client_deregister(struct mmrm_client *client)
{ {
int rc = 0; int rc = 0;
d_mpr_h("%s: entering\n", __func__);
/* check for null input */ /* check for null input */
if (!client) { if (!client) {
@@ -101,11 +99,10 @@ int mmrm_client_deregister(struct mmrm_client *client)
__func__, client->client_type); __func__, client->client_type);
} }
d_mpr_h("%s: exiting\n", __func__);
return rc; return rc;
err_exit: err_exit:
d_mpr_e("%s: error exit\n", __func__); d_mpr_e("%s: error = %d\n", __func__, rc);
return rc; return rc;
} }
EXPORT_SYMBOL(mmrm_client_deregister); EXPORT_SYMBOL(mmrm_client_deregister);
@@ -115,8 +112,6 @@ int mmrm_client_set_value(struct mmrm_client *client,
{ {
int rc = 0; int rc = 0;
d_mpr_h("%s: entering\n", __func__);
/* check for null input */ /* check for null input */
if (!client || !client_data) { if (!client || !client_data) {
d_mpr_e("%s: invalid input client(%pK) client_data(%pK)\n", 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); __func__, client->client_type);
} }
d_mpr_h("%s: exiting\n", __func__);
return rc; return rc;
err_exit: err_exit:
d_mpr_e("%s: error exit\n", __func__); d_mpr_e("%s: error = %d\n", __func__, rc);
return rc; return rc;
} }
EXPORT_SYMBOL(mmrm_client_set_value); EXPORT_SYMBOL(mmrm_client_set_value);
@@ -158,8 +152,6 @@ int mmrm_client_set_value_in_range(struct mmrm_client *client,
{ {
int rc = 0; int rc = 0;
d_mpr_h("%s: entering\n", __func__);
/* check for null input */ /* check for null input */
if (!client || !client_data || !val) { if (!client || !client_data || !val) {
d_mpr_e( d_mpr_e(
@@ -187,11 +179,10 @@ int mmrm_client_set_value_in_range(struct mmrm_client *client,
__func__, client->client_type); __func__, client->client_type);
} }
d_mpr_h("%s: exiting\n", __func__);
return rc; return rc;
err_exit: err_exit:
d_mpr_e("%s: error exit\n", __func__); d_mpr_e("%s: error = %d\n", __func__, rc);
return rc; return rc;
} }
EXPORT_SYMBOL(mmrm_client_set_value_in_range); EXPORT_SYMBOL(mmrm_client_set_value_in_range);
@@ -201,8 +192,6 @@ int mmrm_client_get_value(struct mmrm_client *client,
{ {
int rc = 0; int rc = 0;
d_mpr_h("%s: entering\n", __func__);
/* check for null input */ /* check for null input */
if (!client || !val) { if (!client || !val) {
d_mpr_e("%s: invalid input client(%pK) val(%pK)\n", 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); __func__, client->client_type);
} }
d_mpr_h("%s: exiting\n", __func__);
return rc; return rc;
err_exit: err_exit:
d_mpr_e("%s: error exit\n", __func__); d_mpr_e("%s: error = %d\n", __func__, rc);
return rc; return rc;
} }
EXPORT_SYMBOL(mmrm_client_get_value); EXPORT_SYMBOL(mmrm_client_get_value);
@@ -242,8 +230,6 @@ static int msm_mmrm_probe_init(struct platform_device *pdev)
{ {
int rc = 0; int rc = 0;
d_mpr_h("%s: entering\n", __func__);
drv_data = kzalloc(sizeof(*drv_data), GFP_KERNEL); drv_data = kzalloc(sizeof(*drv_data), GFP_KERNEL);
if (!drv_data) { if (!drv_data) {
d_mpr_e("%s: unable to allocate memory for mmrm driver\n", 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; goto err_mmrm_init;
} }
d_mpr_h("%s: exiting with success\n", __func__);
return rc; return rc;
err_mmrm_init: err_mmrm_init:
@@ -290,7 +275,7 @@ err_read_pltfrm_rsc:
err_get_drv_data: err_get_drv_data:
RESET_DRV_DATA(drv_data); RESET_DRV_DATA(drv_data);
err_no_mem: err_no_mem:
d_mpr_e("%s: error exit\n", __func__); d_mpr_e("%s: error = %d\n", __func__, rc);
return rc; return rc;
} }
@@ -298,18 +283,18 @@ static int msm_mmrm_probe(struct platform_device *pdev)
{ {
int rc = -EINVAL; int rc = -EINVAL;
d_mpr_h("%s: entering\n", __func__); d_mpr_h("%s\n", __func__);
VERIFY_PDEV(pdev) VERIFY_PDEV(pdev)
if (of_device_is_compatible(pdev->dev.of_node, "qcom,msm-mmrm")) if (of_device_is_compatible(pdev->dev.of_node, "qcom,msm-mmrm"))
return msm_mmrm_probe_init(pdev); 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; return rc;
err_exit: err_exit:
d_mpr_e("%s: error exit\n", __func__); d_mpr_e("%s: error = %d\n", __func__, rc);
return rc; return rc;
} }
@@ -331,11 +316,10 @@ static int msm_mmrm_remove(struct platform_device *pdev)
dev_set_drvdata(&pdev->dev, NULL); dev_set_drvdata(&pdev->dev, NULL);
RESET_DRV_DATA(drv_data); RESET_DRV_DATA(drv_data);
d_mpr_h("%s: exiting with success\n", __func__);
return rc; return rc;
err_exit: err_exit:
d_mpr_e("%s: error exit\n", __func__); d_mpr_e("%s: error = %d\n", __func__, rc);
return rc; return rc;
} }
@@ -359,8 +343,6 @@ static int __init msm_mmrm_init(void)
{ {
int rc = 0; int rc = 0;
d_mpr_h("%s: entering\n", __func__);
rc = platform_driver_register(&msm_mmrm_driver); rc = platform_driver_register(&msm_mmrm_driver);
if (rc) { if (rc) {
d_mpr_e("%s: failed to register platform driver\n", 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; goto err_platform_drv_reg;
} }
d_mpr_h("%s: exiting\n", __func__); d_mpr_h("%s: success\n", __func__);
return rc; return rc;
err_platform_drv_reg: err_platform_drv_reg:
d_mpr_e("%s: error exit\n", __func__); d_mpr_e("%s: error = %d\n", __func__, rc);
return rc; return rc;
} }
static void __exit msm_mmrm_exit(void) static void __exit msm_mmrm_exit(void)
{ {
d_mpr_h("%s: entering\n", __func__);
platform_driver_unregister(&msm_mmrm_driver); platform_driver_unregister(&msm_mmrm_driver);
d_mpr_h("%s: exiting\n", __func__);
} }
module_init(msm_mmrm_init); module_init(msm_mmrm_init);