Prechádzať zdrojové kódy

mmrm: Convert power values

- Convert dynamic power to q16.
- Make minor changes to function return paths.

Change-Id: Id8f1fad440c8b048fce46493f72df2b6caf34263
Sebastian Dang 4 rokov pred
rodič
commit
641f2047ad
1 zmenil súbory, kde vykonal 16 pridanie a 5 odobranie
  1. 16 5
      driver/src/mmrm_clk_rsrc_mgr_sw.c

+ 16 - 5
driver/src/mmrm_clk_rsrc_mgr_sw.c

@@ -171,7 +171,7 @@ static int mmrm_sw_get_req_level(
 		d_mpr_e("%s: csid(%d): lower voltage corner(%d)\n",
 			__func__, tbl_entry->clk_src_id, voltage_corner);
 		*req_level = MMRM_VDD_LEVEL_SVS_L1;
-		return rc;
+		goto exit_no_err;
 	}
 
 	/* match vdd level */
@@ -184,11 +184,16 @@ static int mmrm_sw_get_req_level(
 		d_mpr_e("%s: csid(%d): invalid voltage corner(%d) for clk rate(%llu)\n",
 			__func__, tbl_entry->clk_src_id, voltage_corner, clk_val);
 		rc = -EINVAL;
-		return rc;
+		goto err_invalid_corner;
 	}
 
 	*req_level = level;
 	d_mpr_h("%s: req_level(%d)\n", __func__, level);
+
+exit_no_err:
+	return rc;
+
+err_invalid_corner:
 	return rc;
 }
 
@@ -203,18 +208,23 @@ static int mmrm_sw_check_peak_current(
 	if ((signed)peak_data->aggreg_val + delta_cur <= 0) {
 		peak_data->aggreg_val = 0;
 		d_mpr_h("%s: aggregate(%lu)\n", __func__, peak_data->aggreg_val);
-		return rc;
+		goto exit_no_err;
 	}
 
 	/* check for peak overshoot */
 	if ((signed)peak_data->aggreg_val + delta_cur >= peak_data->threshold) {
 		rc = -EINVAL;
-		return rc;
+		goto err_peak_overshoot;
 	}
 
 	/* update peak data */
 	peak_data->aggreg_val += delta_cur;
 	d_mpr_h("%s: aggregate(%lu)\n", __func__, peak_data->aggreg_val);
+
+exit_no_err:
+	return rc;
+
+err_peak_overshoot:
 	return rc;
 }
 
@@ -432,7 +442,8 @@ static int mmrm_sw_update_entries(struct mmrm_clk_platform_resources *cres,
 	fp_t nom_dyn_pwr, nom_leak_pwr, freq_sc, dyn_sc, leak_sc,
 		volt, dyn_pwr, leak_pwr, pwr_mw;
 
-	nom_dyn_pwr = FP_INT(tbl_entry->dyn_pwr[MMRM_VDD_LEVEL_NOM]);
+	nom_dyn_pwr = FP(Q16_INT(tbl_entry->dyn_pwr[MMRM_VDD_LEVEL_NOM]),
+		Q16_FRAC(tbl_entry->dyn_pwr[MMRM_VDD_LEVEL_NOM]), 100);
 	nom_leak_pwr = FP(Q16_INT(tbl_entry->leak_pwr[MMRM_VDD_LEVEL_NOM]),
 		Q16_FRAC(tbl_entry->leak_pwr[MMRM_VDD_LEVEL_NOM]), 100);