Mali: midgard: Add support for static power consumption calculation

Signed-off-by: Ye Zhang <ye.zhang@rock-chips.com>
Change-Id: Ic5685241bd7dbe7b5869a623ce25640af7017840
This commit is contained in:
Ye Zhang
2023-12-18 10:49:16 +08:00
parent 084acd7ca3
commit 7133e80b3c
3 changed files with 20 additions and 7 deletions

View File

@@ -343,6 +343,7 @@ int kbase_devfreq_init(struct kbase_device *kbdev)
unsigned long opp_rate;
unsigned int dyn_power_coeff = 0;
int err;
struct device_node *model_dt_node;
if (!kbdev->clock) {
dev_err(kbdev->dev, "Clock not available for devfreq\n");
@@ -373,10 +374,20 @@ int kbase_devfreq_init(struct kbase_device *kbdev)
&ondemand_data.upthreshold);
of_property_read_u32(np, "downdifferential",
&ondemand_data.downdifferential);
of_property_read_u32(kbdev->dev->of_node, "dynamic-power-coefficient",
&dyn_power_coeff);
if (dyn_power_coeff)
dp->is_cooling_device = true;
model_dt_node = of_get_compatible_child(np, "arm,mali-simple-power-model");
if (!model_dt_node) {
err = of_property_read_u32(np, "dynamic-power-coefficient",
&dyn_power_coeff);
if (err) {
dev_err(kbdev->dev, "Couldn't find proper 'dynamic-power-coefficient' in DT\n");
goto devfreq_add_dev_failed;
} else {
dp->is_cooling_device = true;
}
} else {
of_node_put(model_dt_node);
}
kbdev->devfreq = devfreq_add_device(kbdev->dev, dp,
"simple_ondemand", &ondemand_data);

View File

@@ -584,6 +584,8 @@ struct devfreq_cooling_power kbase_ipa_power_model_ops = {
#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 1, 0)
.get_static_power = &kbase_get_static_power,
.get_dynamic_power = &kbase_get_dynamic_power,
#else
.get_real_power = kbase_get_real_power,
#endif
};
KBASE_EXPORT_TEST_API(kbase_ipa_power_model_ops);

View File

@@ -145,9 +145,9 @@ static int add_params(struct kbase_ipa_model *model)
if (err)
goto end;
err = kbase_ipa_model_add_param_s32(model, "dynamic-coefficient",
&model_data->dynamic_coefficient,
1, true);
err = of_property_read_u32_array(model->kbdev->dev->of_node,
"dynamic-power-coefficient",
&model_data->dynamic_coefficient, 1);
if (err)
goto end;