diff options
author | Finley Xiao <finley.xiao@rock-chips.com> | 2019-02-15 10:55:04 +0800 |
---|---|---|
committer | Tao Huang <huangtao@rock-chips.com> | 2019-03-08 10:27:18 +0800 |
commit | 0ef7dd26e3e85b5572f7b9d61f3f3ad31fa55955 (patch) | |
tree | a763c76dc76d1667f2661fa85a9f2b235761734e | |
parent | 667aaaf97737ca38052e9f7b38fa8bb6d479f974 (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.c | 14 | ||||
-rw-r--r-- | include/soc/rockchip/rockchip_ipa.h | 2 |
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 |