Pārlūkot izejas kodu

msm: eva: Bw vote by checking bus node name

            In adjust_bw_freq function, we are assigning bus node based on
            index that will give side effect if bus node order got changed.
            So, assigning bus node based on bus name and vote appropriately.

Change-Id: Ied0e1f691439d499e4133a52ef55d36c430586c1
Signed-off-by: Gopireddy Arunteja Reddy <[email protected]>
Gopireddy Arunteja Reddy 2 gadi atpakaļ
vecāks
revīzija
364d2b1f7e
2 mainītis faili ar 18 papildinājumiem un 7 dzēšanām
  1. 16 7
      msm/eva/cvp_power.c
  2. 2 0
      msm/eva/msm_cvp_clocks.c

+ 16 - 7
msm/eva/cvp_power.c

@@ -1,7 +1,7 @@
 
 /* SPDX-License-Identifier: GPL-2.0-only
  *
- * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
  * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
  */
 
@@ -144,15 +144,15 @@ static int adjust_bw_freqs(void)
 {
 	struct msm_cvp_core *core;
 	struct iris_hfi_device *hdev;
-	struct bus_info *bus;
+	struct bus_info *bus = NULL;
 	struct clock_set *clocks;
 	struct clock_info *cl;
 	struct allowed_clock_rates_table *tbl = NULL;
 	unsigned int tbl_size;
-	unsigned int cvp_min_rate, cvp_max_rate, max_bw, min_bw;
+	unsigned int cvp_min_rate, cvp_max_rate, max_bw = 0, min_bw = 0;
 	struct cvp_power_level rt_pwr = {0}, nrt_pwr = {0};
 	unsigned long tmp, core_sum, op_core_sum, bw_sum;
-	int i, rc = 0;
+	int i, rc = 0, bus_count = 0;
 	unsigned long ctrl_freq;
 
 	core = list_first_entry(&cvp_driver->cores, struct msm_cvp_core, list);
@@ -164,9 +164,18 @@ static int adjust_bw_freqs(void)
 	tbl_size = core->resources.allowed_clks_tbl_size;
 	cvp_min_rate = tbl[0].clock_rate;
 	cvp_max_rate = tbl[tbl_size - 1].clock_rate;
-	bus = &core->resources.bus_set.bus_tbl[1];
-	max_bw = bus->range[1];
-	min_bw = max_bw/10;
+
+	for (bus_count = 0; bus_count < core->resources.bus_set.count; bus_count++) {
+		if (!strcmp(core->resources.bus_set.bus_tbl[bus_count].name, "cvp-ddr")) {
+			bus = &core->resources.bus_set.bus_tbl[bus_count];
+			max_bw = bus->range[1];
+			min_bw = max_bw/10;
+		}
+	}
+	if (!bus) {
+		dprintk(CVP_ERR, "bus node is NULL for cvp-ddr\n");
+		return -EINVAL;
+	}
 
 	aggregate_power_update(core, &nrt_pwr, &rt_pwr, cvp_max_rate);
 	dprintk(CVP_PWR, "PwrUpdate nrt %u %u rt %u %u\n",

+ 2 - 0
msm/eva/msm_cvp_clocks.c

@@ -464,6 +464,8 @@ int msm_cvp_set_bw(struct bus_info *bus, unsigned long bw)
 
 	if (!bus->client)
 		return -EINVAL;
+	dprintk(CVP_PWR, "bus->name = %s to bw = %u\n",
+			bus->name, bw);
 
 	rc = icc_set_bw(bus->client, bw, 0);
 	if (rc)