From d5ccb61353d3c1e2afc972ac9a726bff757ed33c Mon Sep 17 00:00:00 2001 From: Odelu Kukatla Date: Mon, 10 Aug 2020 23:04:37 +0530 Subject: [PATCH] interconnect: qcom: Add support for utility factor Utility factor needs to be applied for aggregated bandwidth so as to run the bus clock at required frequency. Change-Id: Ic166f72b0719fa88db4c04b9acdc163483faf538 Signed-off-by: Odelu Kukatla --- drivers/interconnect/qcom/holi.c | 4 ++++ drivers/interconnect/qcom/icc-rpm.c | 4 ++++ drivers/interconnect/qcom/icc-rpm.h | 3 +++ 3 files changed, 11 insertions(+) diff --git a/drivers/interconnect/qcom/holi.c b/drivers/interconnect/qcom/holi.c index 77c85a11d554..c487c6940e6a 100644 --- a/drivers/interconnect/qcom/holi.c +++ b/drivers/interconnect/qcom/holi.c @@ -1240,6 +1240,10 @@ static int qnoc_probe(struct platform_device *pdev) qp->init = true; qp->keepalive = of_property_read_bool(dev->of_node, "qcom,keepalive"); + if (of_property_read_u32(dev->of_node, "qcom,util-factor", + &qp->util_factor)) + qp->util_factor = DEFAULT_UTIL_FACTOR; + qp->regmap = qcom_icc_map(pdev, desc); if (IS_ERR(qp->regmap)) return PTR_ERR(qp->regmap); diff --git a/drivers/interconnect/qcom/icc-rpm.c b/drivers/interconnect/qcom/icc-rpm.c index 90bfdd16e2c4..68ce1b375f8f 100644 --- a/drivers/interconnect/qcom/icc-rpm.c +++ b/drivers/interconnect/qcom/icc-rpm.c @@ -118,6 +118,10 @@ int qcom_icc_rpm_set(struct icc_node *src, struct icc_node *dst) qn = n->data; for (i = 0; i < RPM_NUM_CXT; i++) { sum_avg = icc_units_to_bps(qn->sum_avg[i]); + + sum_avg *= qp->util_factor; + do_div(sum_avg, DEFAULT_UTIL_FACTOR); + do_div(sum_avg, qn->channels); max_peak = icc_units_to_bps(qn->max_peak[i]); diff --git a/drivers/interconnect/qcom/icc-rpm.h b/drivers/interconnect/qcom/icc-rpm.h index a87af7d34c8a..7b1e89c7e077 100644 --- a/drivers/interconnect/qcom/icc-rpm.h +++ b/drivers/interconnect/qcom/icc-rpm.h @@ -20,6 +20,8 @@ #define RPM_CLK_MAX_LEVEL INT_MAX #define RPM_CLK_MIN_LEVEL 19200000 +#define DEFAULT_UTIL_FACTOR 100 + #define to_qcom_provider(_provider) \ container_of(_provider, struct qcom_icc_provider, provider) @@ -57,6 +59,7 @@ struct qcom_icc_provider { struct list_head probe_list; struct clk_bulk_data *bus_clks; int num_clks; + u32 util_factor; u64 bus_clk_cur_rate[RPM_NUM_CXT]; bool keepalive; bool init;