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:
@@ -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:
|
||||||
|
Reference in New Issue
Block a user