From 79df1ba3d3f1cdc25e1d83bdca46d70ced78d53b Mon Sep 17 00:00:00 2001 From: Shivnandan Kumar Date: Mon, 14 Mar 2022 10:39:44 +0530 Subject: [PATCH] drivers: dcvs: bwmon: add ab_scale Expose ab_scale tunable to scale ab vote based on user space input. Change-Id: I66a766c72897814bccd6f6ff8cb298fd51b17c0b Signed-off-by: Shivnandan Kumar --- drivers/soc/qcom/dcvs/bwmon.c | 9 ++++++++- drivers/soc/qcom/dcvs/bwmon.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/soc/qcom/dcvs/bwmon.c b/drivers/soc/qcom/dcvs/bwmon.c index f9b669ec12e0..a40514ee58b3 100644 --- a/drivers/soc/qcom/dcvs/bwmon.c +++ b/drivers/soc/qcom/dcvs/bwmon.c @@ -277,6 +277,9 @@ static BWMON_ATTR_RW(hyst_length); show_attr(idle_mbps); store_attr(idle_mbps, 0U, 2000U); static BWMON_ATTR_RW(idle_mbps); +show_attr(ab_scale); +store_attr(ab_scale, 0U, 100U); +static BWMON_ATTR_RW(ab_scale); show_list_attr(mbps_zones, NUM_MBPS_ZONES); store_list_attr(mbps_zones, NUM_MBPS_ZONES, 0U, UINT_MAX); static BWMON_ATTR_RW(mbps_zones); @@ -299,6 +302,7 @@ static struct attribute *bwmon_attrs[] = { &hyst_trigger_count.attr, &hyst_length.attr, &idle_mbps.attr, + &ab_scale.attr, &mbps_zones.attr, &throttle_adj.attr, NULL, @@ -626,8 +630,10 @@ static unsigned long get_bw_and_set_irq(struct hwmon_node *node, } node->prev_ab = new_bw; - freq_mbps->ab = roundup(new_bw, node->bw_step); freq_mbps->ib = (new_bw * 100) / io_percent; + if (node->ab_scale < 100) + new_bw = mult_frac(new_bw, node->ab_scale, 100); + freq_mbps->ab = roundup(new_bw, node->bw_step); trace_bw_hwmon_update(dev_name(node->hw->dev), freq_mbps->ab, freq_mbps->ib, @@ -811,6 +817,7 @@ static int configure_hwmon_node(struct bw_hwmon *hwmon) node->hyst_trigger_count = 3; node->hyst_length = 0; node->idle_mbps = 400; + node->ab_scale = 100; node->mbps_zones[0] = 0; node->hw = hwmon; diff --git a/drivers/soc/qcom/dcvs/bwmon.h b/drivers/soc/qcom/dcvs/bwmon.h index 5579ae8811bc..3fd4f62382ef 100644 --- a/drivers/soc/qcom/dcvs/bwmon.h +++ b/drivers/soc/qcom/dcvs/bwmon.h @@ -117,6 +117,7 @@ struct hwmon_node { unsigned int hyst_trigger_count; unsigned int hyst_length; unsigned int idle_mbps; + unsigned int ab_scale; unsigned int mbps_zones[NUM_MBPS_ZONES]; unsigned long prev_ab; unsigned long bytes;