[DPU PATCH 07/11] drm/msm/dpu: remove dt parsing logic for bus_scale config

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Bus scale config related dt-bindings are removed.
Add bus_scale config in driver instead.

Signed-off-by: Rajesh Yadav <ryadav@xxxxxxxxxxxxxx>
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_power_handle.c | 254 +++++++++++++++--------
 1 file changed, 167 insertions(+), 87 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_power_handle.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_power_handle.c
index bdf18de..24c3274 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_power_handle.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_power_handle.c
@@ -20,15 +20,137 @@
 #include <linux/slab.h>
 #include <linux/mutex.h>
 #include <linux/of_platform.h>
-#ifdef CONFIG_QCOM_BUS_SCALING
-#include <linux/msm-bus.h>
-#include <linux/msm-bus-board.h>
-#endif
 #include <linux/dpu_io_util.h>
 
 #include "dpu_power_handle.h"
 #include "dpu_trace.h"
 
+#ifdef CONFIG_QCOM_BUS_SCALING
+#include <linux/msm-bus.h>
+#include <linux/msm-bus-board.h>
+
+#define DPU_BUS_VECTOR_ENTRY(src_val, dst_val, ab_val, ib_val) \
+	{                                                          \
+		.src = src_val,                                        \
+		.dst = dst_val,                                        \
+		.ab = (ab_val),                                        \
+		.ib = (ib_val),                                        \
+	}
+
+static struct msm_bus_vectors dpu_reg_bus_vectors[] = {
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_FIRST,
+			     MSM_BUS_SLAVE_DISPLAY_CFG, 0, 0),
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_FIRST,
+			     MSM_BUS_SLAVE_DISPLAY_CFG, 0, 76800000),
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_FIRST,
+			     MSM_BUS_SLAVE_DISPLAY_CFG, 0, 150000000),
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_FIRST,
+			     MSM_BUS_SLAVE_DISPLAY_CFG, 0, 300000000),
+};
+
+static struct msm_bus_paths dpu_reg_bus_usecases[] = { {
+		.num_paths = 1,
+		.vectors = &dpu_reg_bus_vectors[0],
+}, {
+		.num_paths = 1,
+		.vectors = &dpu_reg_bus_vectors[1],
+}, {
+		.num_paths = 1,
+		.vectors = &dpu_reg_bus_vectors[2],
+}, {
+		.num_paths = 1,
+		.vectors = &dpu_reg_bus_vectors[3],
+} };
+
+static struct msm_bus_scale_pdata dpu_reg_bus_scale_table = {
+	.usecase = dpu_reg_bus_usecases,
+	.num_usecases = ARRAY_SIZE(dpu_reg_bus_usecases),
+	.name = "mdss_reg",
+};
+
+static struct msm_bus_vectors dpu_data_bus_vectors[] = {
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_MDP_PORT0,
+			     MSM_BUS_SLAVE_MNOC_HF_MEM_NOC, 0, 0),
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_MDP_PORT1,
+			     MSM_BUS_SLAVE_MNOC_HF_MEM_NOC, 0, 0),
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_MDP_PORT0,
+			     MSM_BUS_SLAVE_MNOC_HF_MEM_NOC, 0, 6400000000),
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_MDP_PORT1,
+			     MSM_BUS_SLAVE_MNOC_HF_MEM_NOC, 0, 6400000000),
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_MDP_PORT0,
+			     MSM_BUS_SLAVE_MNOC_HF_MEM_NOC, 0, 6400000000),
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_MDP_PORT1,
+			     MSM_BUS_SLAVE_MNOC_HF_MEM_NOC, 0, 6400000000),
+};
+
+static struct msm_bus_paths dpu_data_bus_usecases[] = { {
+		.num_paths = 2,
+		.vectors = &dpu_data_bus_vectors[0],
+}, {
+		.num_paths = 2,
+		.vectors = &dpu_data_bus_vectors[2],
+}, {
+		.num_paths = 2,
+		.vectors = &dpu_data_bus_vectors[4],
+} };
+
+static struct msm_bus_scale_pdata dpu_data_bus_scale_table = {
+	.usecase = dpu_data_bus_usecases,
+	.num_usecases = ARRAY_SIZE(dpu_data_bus_usecases),
+	.name = "mdss_mnoc",
+};
+
+static struct msm_bus_vectors dpu_llcc_bus_vectors[] = {
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_MNOC_HF_MEM_NOC,
+			     MSM_BUS_SLAVE_LLCC, 0, 0),
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_MNOC_HF_MEM_NOC,
+			     MSM_BUS_SLAVE_LLCC, 0, 6400000000),
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_MNOC_HF_MEM_NOC,
+			     MSM_BUS_SLAVE_LLCC, 0, 6400000000),
+};
+
+static struct msm_bus_paths dpu_llcc_bus_usecases[] = { {
+		.num_paths = 1,
+		.vectors = &dpu_llcc_bus_vectors[0],
+}, {
+		.num_paths = 1,
+		.vectors = &dpu_llcc_bus_vectors[1],
+}, {
+		.num_paths = 1,
+		.vectors = &dpu_llcc_bus_vectors[2],
+} };
+static struct msm_bus_scale_pdata dpu_llcc_bus_scale_table = {
+	.usecase = dpu_llcc_bus_usecases,
+	.num_usecases = ARRAY_SIZE(dpu_llcc_bus_usecases),
+	.name = "mdss_llcc",
+};
+
+static struct msm_bus_vectors dpu_ebi_bus_vectors[] = {
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_LLCC,
+			     MSM_BUS_SLAVE_EBI_CH0, 0, 0),
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_LLCC,
+			     MSM_BUS_SLAVE_EBI_CH0, 0, 6400000000),
+	DPU_BUS_VECTOR_ENTRY(MSM_BUS_MASTER_LLCC,
+			     MSM_BUS_SLAVE_EBI_CH0, 0, 6400000000),
+};
+
+static struct msm_bus_paths dpu_ebi_bus_usecases[] = { {
+		.num_paths = 1,
+		.vectors = &dpu_ebi_bus_vectors[0],
+}, {
+		.num_paths = 1,
+		.vectors = &dpu_ebi_bus_vectors[1],
+}, {
+		.num_paths = 1,
+		.vectors = &dpu_ebi_bus_vectors[2],
+} };
+static struct msm_bus_scale_pdata dpu_ebi_bus_scale_table = {
+	.usecase = dpu_ebi_bus_usecases,
+	.num_usecases = ARRAY_SIZE(dpu_ebi_bus_usecases),
+	.name = "mdss_ebi",
+};
+#endif
+
 static const char *data_bus_name[DPU_POWER_HANDLE_DBUS_ID_MAX] = {
 	[DPU_POWER_HANDLE_DBUS_ID_MNOC] = "qcom,dpu-data-bus",
 	[DPU_POWER_HANDLE_DBUS_ID_LLCC] = "qcom,dpu-llcc-bus",
@@ -276,93 +398,54 @@ static void dpu_power_data_bus_unregister(
 	}
 }
 
-static int dpu_power_data_bus_parse(struct platform_device *pdev,
-	struct dpu_power_data_bus_handle *pdbus, const char *name)
+static int dpu_power_data_bus_register(struct dpu_power_handle *phandle,
+		int index)
 {
-	struct device_node *node;
-	int rc = 0;
-	int paths;
-
-	pdbus->bus_channels = 1;
-	rc = of_property_read_u32(pdev->dev.of_node,
-		"qcom,dpu-dram-channels", &pdbus->bus_channels);
-	if (rc) {
-		pr_debug("number of channels property not specified\n");
-		rc = 0;
-	}
+	struct dpu_power_data_bus_handle *pdbus = &phandle->data_bus_handle[index];
 
+	pdbus->bus_channels = 2;
 	pdbus->nrt_axi_port_cnt = 0;
-	rc = of_property_read_u32(pdev->dev.of_node,
-			"qcom,dpu-num-nrt-paths",
-			&pdbus->nrt_axi_port_cnt);
-	if (rc) {
-		pr_debug("number of axi port property not specified\n");
-		rc = 0;
+	pdbus->axi_port_cnt = 1;
+
+	switch (index) {
+	case DPU_POWER_HANDLE_DBUS_ID_MNOC:
+		pdbus->data_bus_scale_table = &dpu_data_bus_scale_table;
+		pdbus->axi_port_cnt = 2;
+		break;
+	case DPU_POWER_HANDLE_DBUS_ID_LLCC:
+		pdbus->data_bus_scale_table = &dpu_llcc_bus_scale_table;
+		break;
+	case DPU_POWER_HANDLE_DBUS_ID_EBI:
+		pdbus->data_bus_scale_table = &dpu_ebi_bus_scale_table;
+		break;
+	default:
+		pr_err("invalid data_bus type: %d", index);
+		return -EINVAL;
 	}
 
-	node = of_get_child_by_name(pdev->dev.of_node, name);
-	if (node) {
-		rc = of_property_read_u32(node,
-				"qcom,msm-bus,num-paths", &paths);
-		if (rc) {
-			pr_err("Error. qcom,msm-bus,num-paths not found\n");
-			return rc;
-		}
-		pdbus->axi_port_cnt = paths;
-
-		pdbus->data_bus_scale_table =
-				msm_bus_pdata_from_node(pdev, node);
-		if (IS_ERR_OR_NULL(pdbus->data_bus_scale_table)) {
-			pr_err("reg bus handle parsing failed\n");
-			rc = PTR_ERR(pdbus->data_bus_scale_table);
-			if (!pdbus->data_bus_scale_table)
-				rc = -EINVAL;
-			goto end;
-		}
-		pdbus->data_bus_hdl = msm_bus_scale_register_client(
-				pdbus->data_bus_scale_table);
-		if (!pdbus->data_bus_hdl) {
-			pr_err("data_bus_client register failed\n");
-			rc = -EINVAL;
-			goto end;
-		}
-		pr_debug("register %s data_bus_hdl=%x\n", name,
-				pdbus->data_bus_hdl);
+	pdbus->data_bus_hdl = msm_bus_scale_register_client(
+			pdbus->data_bus_scale_table);
+	if (!pdbus->data_bus_hdl) {
+		pr_err("data_bus_client register failed\n");
+		return -EINVAL;
 	}
+	pr_debug("register %s data_bus_hdl=%x\n", data_bus_name[index],
+			pdbus->data_bus_hdl);
 
-end:
-	return rc;
+	return 0;
 }
 
-static int dpu_power_reg_bus_parse(struct platform_device *pdev,
-	struct dpu_power_handle *phandle)
+static int dpu_power_reg_bus_register(struct dpu_power_handle *phandle)
 {
-	struct device_node *node;
-	struct msm_bus_scale_pdata *bus_scale_table;
-	int rc = 0;
-
-	node = of_get_child_by_name(pdev->dev.of_node, "qcom,dpu-reg-bus");
-	if (node) {
-		bus_scale_table = msm_bus_pdata_from_node(pdev, node);
-		if (IS_ERR_OR_NULL(bus_scale_table)) {
-			pr_err("reg bus handle parsing failed\n");
-			rc = PTR_ERR(bus_scale_table);
-			if (!bus_scale_table)
-				rc = -EINVAL;
-			goto end;
-		}
-		phandle->reg_bus_hdl = msm_bus_scale_register_client(
-			      bus_scale_table);
-		if (!phandle->reg_bus_hdl) {
-			pr_err("reg_bus_client register failed\n");
-			rc = -EINVAL;
-			goto end;
-		}
-		pr_debug("register reg_bus_hdl=%x\n", phandle->reg_bus_hdl);
+	phandle->reg_bus_hdl = msm_bus_scale_register_client(
+			&dpu_reg_bus_scale_table);
+	if (!phandle->reg_bus_hdl) {
+		pr_err("reg_bus_client register failed\n");
+		return -EINVAL;
 	}
+	pr_debug("register reg_bus_hdl=%x\n", phandle->reg_bus_hdl);
 
-end:
-	return rc;
+	return 0;
 }
 
 static void dpu_power_reg_bus_unregister(u32 reg_bus_hdl)
@@ -419,8 +502,8 @@ static int dpu_power_reg_bus_update(u32 reg_bus_hdl, u32 usecase_ndx)
 	return rc;
 }
 #else
-static int dpu_power_data_bus_parse(struct platform_device *pdev,
-		struct dpu_power_data_bus_handle *pdbus, const char *name)
+static int dpu_power_data_bus_register(struct dpu_power_handle *phandle,
+		int index)
 {
 	return 0;
 }
@@ -438,8 +521,7 @@ int dpu_power_data_bus_set_quota(struct dpu_power_handle *phandle,
 	return 0;
 }
 
-static int dpu_power_reg_bus_parse(struct platform_device *pdev,
-	struct dpu_power_handle *phandle)
+static int dpu_power_reg_bus_register(struct dpu_power_handle *phandle)
 {
 	return 0;
 }
@@ -473,7 +555,7 @@ int dpu_power_resource_init(struct platform_device *pdev,
 
 	phandle->dev = &pdev->dev;
 
-	rc = dpu_power_reg_bus_parse(pdev, phandle);
+	rc = dpu_power_reg_bus_register(phandle);
 	if (rc) {
 		pr_err("register bus parse failed rc=%d\n", rc);
 		return rc;
@@ -481,9 +563,7 @@ int dpu_power_resource_init(struct platform_device *pdev,
 
 	for (i = DPU_POWER_HANDLE_DBUS_ID_MNOC;
 			i < DPU_POWER_HANDLE_DBUS_ID_MAX; i++) {
-		rc = dpu_power_data_bus_parse(pdev,
-				&phandle->data_bus_handle[i],
-				data_bus_name[i]);
+		rc = dpu_power_data_bus_register(phandle, i);
 		if (rc) {
 			pr_err("register data bus parse failed id=%d rc=%d\n",
 					i, rc);
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux