msm_mmrm: Add registered mmrm client parameters output
if mmrm client was registered, client register will output dyn_pwr, leak_pwr total pwr, and current Max for mmrm-test-module Change-Id: I34aeef778f42f106780b72543a3458627ce09935 Signed-off-by: mbao <mbao@codeaurora.org>
This commit is contained in:

committad av
Mahesh Kumar Sharma

förälder
e1ade39ea4
incheckning
3b8eae3aa1
@@ -74,18 +74,42 @@ static int mmrm_sw_update_freq(
|
|||||||
|
|
||||||
/* print results */
|
/* print results */
|
||||||
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) clk_rate(%llu) dyn_pwr(%zu) leak_pwr(%zu)\n",
|
d_mpr_h("%s: csid(0x%x) corner(%s) clk_rate(%llu)\n",
|
||||||
__func__,
|
__func__,
|
||||||
tbl_entry->clk_src_id,
|
tbl_entry->clk_src_id,
|
||||||
cset->corner_tbl[i].name,
|
cset->corner_tbl[i].name,
|
||||||
tbl_entry->freq[i],
|
tbl_entry->freq[i]);
|
||||||
tbl_entry->dyn_pwr[i],
|
|
||||||
tbl_entry->leak_pwr[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void mmrm_sw_print_client_data(struct mmrm_sw_clk_mgr_info *sinfo,
|
||||||
|
struct mmrm_sw_clk_client_tbl_entry *tbl_entry)
|
||||||
|
{
|
||||||
|
struct mmrm_driver_data *drv_data = (struct mmrm_driver_data *)sinfo->driver_data;
|
||||||
|
struct mmrm_clk_platform_resources *cres = &drv_data->clk_res;
|
||||||
|
struct voltage_corner_set *cset = &cres->corner_set;
|
||||||
|
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",
|
||||||
|
__func__,
|
||||||
|
tbl_entry->clk_src_id,
|
||||||
|
cset->corner_tbl[i].name,
|
||||||
|
tbl_entry->dyn_pwr[i],
|
||||||
|
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",
|
||||||
|
__func__,
|
||||||
|
tbl_entry->clk_src_id,
|
||||||
|
(tbl_entry->dyn_pwr[i] + tbl_entry->leak_pwr[i]),
|
||||||
|
tbl_entry->current_ma[i][j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int mmrm_sw_update_curr(struct mmrm_sw_clk_mgr_info *sinfo,
|
static int mmrm_sw_update_curr(struct mmrm_sw_clk_mgr_info *sinfo,
|
||||||
struct mmrm_sw_clk_client_tbl_entry *tbl_entry)
|
struct mmrm_sw_clk_client_tbl_entry *tbl_entry)
|
||||||
{
|
{
|
||||||
@@ -96,12 +120,27 @@ static int mmrm_sw_update_curr(struct mmrm_sw_clk_mgr_info *sinfo,
|
|||||||
u32 scaling_factor = 0, voltage_factor = 0;
|
u32 scaling_factor = 0, voltage_factor = 0;
|
||||||
fp_t nom_dyn_pwr, nom_leak_pwr, dyn_sc, leak_sc,
|
fp_t nom_dyn_pwr, nom_leak_pwr, dyn_sc, leak_sc,
|
||||||
volt, dyn_pwr, leak_pwr, pwr_mw, nom_freq;
|
volt, dyn_pwr, leak_pwr, pwr_mw, nom_freq;
|
||||||
|
u32 c;
|
||||||
|
struct nom_clk_src_info *nom_tbl_entry = NULL;
|
||||||
|
|
||||||
nom_dyn_pwr = FP(Q16_INT(tbl_entry->dyn_pwr[MMRM_VDD_LEVEL_NOM]),
|
for (c = 0; c < sinfo->tot_clk_clients; c++) {
|
||||||
Q16_FRAC(tbl_entry->dyn_pwr[MMRM_VDD_LEVEL_NOM]), 100);
|
if (tbl_entry->clk_src_id == sinfo->clk_client_tbl[c].clk_src_id) {
|
||||||
|
nom_tbl_entry = &cres->nom_clk_set.clk_src_tbl[c];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (nom_tbl_entry == NULL) {
|
||||||
|
d_mpr_h("%s: can't find 0x%x clock src ID\n",
|
||||||
|
__func__,
|
||||||
|
tbl_entry->clk_src_id);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
nom_leak_pwr = FP(Q16_INT(tbl_entry->leak_pwr[MMRM_VDD_LEVEL_NOM]),
|
nom_dyn_pwr = FP(Q16_INT(nom_tbl_entry->nom_dyn_pwr),
|
||||||
Q16_FRAC(tbl_entry->leak_pwr[MMRM_VDD_LEVEL_NOM]), 100);
|
Q16_FRAC(nom_tbl_entry->nom_dyn_pwr), 100);
|
||||||
|
|
||||||
|
nom_leak_pwr = FP(Q16_INT(nom_tbl_entry->nom_leak_pwr),
|
||||||
|
Q16_FRAC(nom_tbl_entry->nom_leak_pwr), 100);
|
||||||
|
|
||||||
nom_freq = tbl_entry->freq[MMRM_VDD_LEVEL_NOM];
|
nom_freq = tbl_entry->freq[MMRM_VDD_LEVEL_NOM];
|
||||||
|
|
||||||
@@ -123,28 +162,17 @@ static int mmrm_sw_update_curr(struct mmrm_sw_clk_mgr_info *sinfo,
|
|||||||
dyn_pwr = fp_mult(pwr_mw, dyn_sc);
|
dyn_pwr = fp_mult(pwr_mw, dyn_sc);
|
||||||
leak_pwr = fp_mult(nom_leak_pwr, leak_sc);
|
leak_pwr = fp_mult(nom_leak_pwr, leak_sc);
|
||||||
|
|
||||||
|
tbl_entry->dyn_pwr[i] = fp_round(dyn_pwr);
|
||||||
|
tbl_entry->leak_pwr[i] = fp_round(leak_pwr);
|
||||||
|
|
||||||
for (j = 0; j < MMRM_VDD_LEVEL_MAX; j++) {
|
for (j = 0; j < MMRM_VDD_LEVEL_MAX; j++) {
|
||||||
voltage_factor = cset->corner_tbl[j].volt_factor;
|
voltage_factor = cset->corner_tbl[j].volt_factor;
|
||||||
volt = FP(Q16_INT(voltage_factor), Q16_FRAC(voltage_factor), 100);
|
volt = FP(Q16_INT(voltage_factor), Q16_FRAC(voltage_factor), 100);
|
||||||
|
|
||||||
tbl_entry->current_ma[i][j] = fp_round(fp_div((dyn_pwr+leak_pwr), volt));
|
tbl_entry->current_ma[i][j] = fp_round(fp_div((dyn_pwr+leak_pwr), volt));
|
||||||
|
|
||||||
d_mpr_h("%s: csid(0x%x) corner(%s) dyn_pwr(%zu) leak_pwr(%zu) ",
|
|
||||||
__func__,
|
|
||||||
tbl_entry->clk_src_id,
|
|
||||||
cset->corner_tbl[i].name,
|
|
||||||
fp_round(dyn_pwr),
|
|
||||||
fp_round(leak_pwr));
|
|
||||||
|
|
||||||
d_mpr_h("%s: csid(0x%x) tot_pwr(%d)cur_ma(%d)\n",
|
|
||||||
__func__,
|
|
||||||
tbl_entry->clk_src_id,
|
|
||||||
fp_round(dyn_pwr+leak_pwr),
|
|
||||||
tbl_entry->current_ma[i][j]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mmrm_sw_print_client_data(sinfo, tbl_entry);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,6 +227,9 @@ static struct mmrm_client *mmrm_sw_clk_client_register(
|
|||||||
d_mpr_h("%s: client csid(0x%x) already registered ref:%d\n",
|
d_mpr_h("%s: client csid(0x%x) already registered ref:%d\n",
|
||||||
__func__, tbl_entry->clk_src_id, tbl_entry->ref_count);
|
__func__, tbl_entry->clk_src_id, tbl_entry->ref_count);
|
||||||
clk_client = tbl_entry->client;
|
clk_client = tbl_entry->client;
|
||||||
|
|
||||||
|
mmrm_sw_print_client_data(sinfo, tbl_entry);
|
||||||
|
|
||||||
goto exit_found;
|
goto exit_found;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Referens i nytt ärende
Block a user