mmrm: Use the rounded value to set clock rate

When client sets a rate, MMRM needs to perform peak power
calculation using rounded rate. Call the Clock driver set_rate
APIs with the rounded rate to maintain consistency. The final
set values are same as before since clock driver also internally
rounds the set rate.

Change-Id: Ib3fe429056ea459ee9edfe348c6c3ff7d950755f
Signed-off-by: Mihir Ganu <quic_mganu@quicinc.com>
This commit is contained in:
Mihir Ganu
2023-04-05 10:14:58 -07:00
parent 56881ef5ef
commit 107ad2515f

View File

@@ -1077,29 +1077,29 @@ static int mmrm_sw_clk_client_setval(struct mmrm_clk_mgr *sw_clk_mgr,
set_clk_rate: set_clk_rate:
if (!tbl_entry->is_crm_client || client_data->drv_type == MMRM_CRM_SW_DRV) { if (!tbl_entry->is_crm_client || client_data->drv_type == MMRM_CRM_SW_DRV) {
d_mpr_h("%s: csid(0x%x) setting clk rate %llu\n", d_mpr_h("%s: csid(0x%x) setting rounded clk rate %llu\n",
__func__, tbl_entry->clk_src_id, clk_val); __func__, tbl_entry->clk_src_id, clk_round_val);
rc = clk_set_rate(tbl_entry->clk, clk_val); rc = clk_set_rate(tbl_entry->clk, clk_round_val);
if (rc) { if (rc) {
d_mpr_e("%s: csid(0x%x) failed to set clk rate %llu\n", d_mpr_e("%s: csid(0x%x) failed to set rounded clk rate %llu\n",
__func__, tbl_entry->clk_src_id, clk_val); __func__, tbl_entry->clk_src_id, clk_round_val);
rc = -EINVAL; rc = -EINVAL;
/* TBD: incase of failure clk_rate is invalid */ /* TBD: incase of failure clk_rate is invalid */
goto err_clk_set_fail; goto err_clk_set_fail;
} }
} else { } else {
d_mpr_h("%s: csid(0x%x) setting clk rate %llu drv_type %u, crm_drv_idx %u, pwr_st %u\n", d_mpr_h("%s: csid(0x%x) setting rounded clk rate %llu drv_type %u, crm_drv_idx %u, pwr_st %u\n",
__func__, tbl_entry->clk_src_id, clk_val, __func__, tbl_entry->clk_src_id, clk_round_val,
CRM_HW_DRV, client_data->crm_drv_idx, CRM_HW_DRV, client_data->crm_drv_idx,
client_data->pwr_st); client_data->pwr_st);
rc = qcom_clk_crm_set_rate(tbl_entry->clk, CRM_HW_DRV, rc = qcom_clk_crm_set_rate(tbl_entry->clk, CRM_HW_DRV,
client_data->crm_drv_idx, client_data->crm_drv_idx,
client_data->pwr_st, clk_val); client_data->pwr_st, clk_round_val);
if (rc) { if (rc) {
d_mpr_e("%s: csid(0x%x) failed to set clk rate %llu\n", d_mpr_e("%s: csid(0x%x) failed to set rounded clk rate %llu\n",
__func__, tbl_entry->clk_src_id, clk_val); __func__, tbl_entry->clk_src_id, clk_round_val);
rc = -EINVAL; rc = -EINVAL;
/* TBD: incase of failure clk_rate is invalid */ /* TBD: incase of failure clk_rate is invalid */
goto err_clk_set_fail; goto err_clk_set_fail;
@@ -1107,8 +1107,8 @@ set_clk_rate:
} }
exit_no_err: exit_no_err:
d_mpr_h("%s: clk rate %lu set successfully for %s\n", d_mpr_h("%s: clk rate (round) %lu set successfully for %s\n",
__func__, clk_val, tbl_entry->name); __func__, clk_round_val, tbl_entry->name);
return rc; return rc;
err_invalid_client: err_invalid_client: