summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFinley Xiao <finley.xiao@rock-chips.com>2019-02-15 10:55:04 +0800
committerTao Huang <huangtao@rock-chips.com>2019-03-08 10:27:18 +0800
commit0ef7dd26e3e85b5572f7b9d61f3f3ad31fa55955 (patch)
treea763c76dc76d1667f2661fa85a9f2b235761734e
parent667aaaf97737ca38052e9f7b38fa8bb6d479f974 (diff)
soc: rockchip: Add support to change static power according to leakage
Change-Id: Ie25e42ab14a46676819711957afa8aef8dfd0785 Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
-rw-r--r--drivers/soc/rockchip/rockchip_ipa.c14
-rw-r--r--include/soc/rockchip/rockchip_ipa.h2
2 files changed, 13 insertions, 3 deletions
diff --git a/drivers/soc/rockchip/rockchip_ipa.c b/drivers/soc/rockchip/rockchip_ipa.c
index 4589a0831d55..8b85bebfee40 100644
--- a/drivers/soc/rockchip/rockchip_ipa.c
+++ b/drivers/soc/rockchip/rockchip_ipa.c
@@ -56,6 +56,8 @@ int rockchip_ipa_power_model_init(struct device *dev,
ret = -EINVAL;
goto err;
}
+ of_property_read_u32(model_node, "ref-leakage",
+ &model_data->ref_leakage);
*data = model_data;
return 0;
@@ -135,14 +137,15 @@ unsigned long
rockchip_ipa_get_static_power(struct ipa_power_model_data *data,
unsigned long voltage)
{
- u32 temp_scaling_factor, coeffp;
+ u32 temp_scaling_factor, coeffp, static_power;
u64 coeff_big;
int temp;
int ret;
ret = data->tz->ops->get_temp(data->tz, &temp);
if (ret) {
- pr_err("%s:failed to read %s temp\n", __func__, data->tz->type);
+ pr_err("%s:failed to read %s temp\n",
+ __func__, data->tz->type);
temp = FALLBACK_STATIC_TEMPERATURE;
}
@@ -156,6 +159,11 @@ rockchip_ipa_get_static_power(struct ipa_power_model_data *data,
coeff_big = (u64)data->static_coefficient * (u64)temp_scaling_factor;
coeffp = div_u64(coeff_big, 1000000);
- return scale_static_power(coeffp, (u32)voltage);
+ static_power = scale_static_power(coeffp, (u32)voltage);
+ if (data->leakage && data->ref_leakage)
+ static_power = static_power * data->leakage /
+ data->ref_leakage;
+
+ return static_power;
}
EXPORT_SYMBOL(rockchip_ipa_get_static_power);
diff --git a/include/soc/rockchip/rockchip_ipa.h b/include/soc/rockchip/rockchip_ipa.h
index 2485abb70f05..e4415b78a34b 100644
--- a/include/soc/rockchip/rockchip_ipa.h
+++ b/include/soc/rockchip/rockchip_ipa.h
@@ -10,6 +10,8 @@ struct ipa_power_model_data {
u32 dynamic_coefficient;
s32 ts[4];
struct thermal_zone_device *tz;
+ u32 leakage;
+ u32 ref_leakage;
};
#ifdef CONFIG_ROCKCHIP_IPA