Selaa lähdekoodia

msm: eva: obtain clk id via dt and parse

obtain clock id from deviceTree file
then parse in clock_info structure.

Change-Id: I2c15b1c1d20ac12c0334b82534b9ad5633569d11
Signed-off-by: Yu SI <[email protected]>
Yu SI 4 vuotta sitten
vanhempi
sitoutus
d7abfce6f0
3 muutettua tiedostoa jossa 29 lisäystä ja 7 poistoa
  1. 5 5
      msm/eva/msm_cvp_clocks.c
  2. 23 2
      msm/eva/msm_cvp_res_parse.c
  3. 1 0
      msm/eva/msm_cvp_resources.h

+ 5 - 5
msm/eva/msm_cvp_clocks.c

@@ -37,22 +37,22 @@ int msm_cvp_mmrm_register(struct iris_hfi_device *device)
 
 	device->mmrm_cvp = NULL;
 	device->mmrm_cvp_desc.client_type = MMRM_CLIENT_CLOCK;
+	device->mmrm_cvp_desc.priority = MMRM_CLIENT_PRIOR_LOW;
 	device->mmrm_cvp_desc.client_info.desc.client_domain = MMRM_CLIENT_DOMAIN_CVP;
-	/* TODO: use proper way to retrieve client id via dtsi */
-	device->mmrm_cvp_desc.client_info.desc.client_id = 8;
 
 	iris_hfi_for_each_clock(device, cl) {
 		if (cl->has_scaling) {	/* only clk source enabled in dtsi */
 			device->mmrm_cvp_desc.client_info.desc.clk = cl->clk;
+			device->mmrm_cvp_desc.client_info.desc.client_id = cl->clk_id;
 			strlcpy(name, cl->name,
 				sizeof(device->mmrm_cvp_desc.client_info.desc.name));
 		}
 	}
-	device->mmrm_cvp_desc.priority = MMRM_CLIENT_PRIOR_LOW;
 
 	dprintk(CVP_PWR,
-		"%s: Register for %s\n",
-		__func__, device->mmrm_cvp_desc.client_info.desc.name);
+		"%s: Register for %s, clk_id %d\n",
+		__func__, device->mmrm_cvp_desc.client_info.desc.name,
+		device->mmrm_cvp_desc.client_info.desc.client_id);
 
 	device->mmrm_cvp = mmrm_client_register(&(device->mmrm_cvp_desc));
 	if (device->mmrm_cvp == NULL) {

+ 23 - 2
msm/eva/msm_cvp_res_parse.c

@@ -597,6 +597,7 @@ static int msm_cvp_load_clock_table(
 {
 	int rc = 0, num_clocks = 0, c = 0;
 	struct platform_device *pdev = res->pdev;
+	int *clock_ids = NULL;
 	int *clock_props = NULL;
 	struct clock_set *clocks = &res->clock_set;
 
@@ -609,6 +610,23 @@ static int msm_cvp_load_clock_table(
 		goto err_load_clk_table_fail;
 	}
 
+	clock_ids = devm_kzalloc(&pdev->dev, num_clocks *
+		sizeof(*clock_ids), GFP_KERNEL);
+	if (!clock_ids) {
+		dprintk(CVP_ERR, "No memory to read clock ids\n");
+		rc = -ENOMEM;
+		goto err_load_clk_table_fail;
+	}
+
+	rc = of_property_read_u32_array(pdev->dev.of_node,
+		"clock-ids", clock_ids,
+		num_clocks);
+	if (rc) {
+		dprintk(CVP_CORE, "Failed to read clock ids: %d\n", rc);
+		msm_cvp_mmrm_enabled = false;
+		dprintk(CVP_CORE, "flag msm_cvp_mmrm_enabled disabled\n");
+	}
+
 	clock_props = devm_kzalloc(&pdev->dev, num_clocks *
 			sizeof(*clock_props), GFP_KERNEL);
 	if (!clock_props) {
@@ -642,6 +660,9 @@ static int msm_cvp_load_clock_table(
 		of_property_read_string_index(pdev->dev.of_node,
 				"clock-names", c, &vc->name);
 
+		if (msm_cvp_mmrm_enabled == true)
+			vc->clk_id = clock_ids[c];
+
 		if (clock_props[c] & CLOCK_PROP_HAS_SCALING) {
 			vc->has_scaling = true;
 		} else {
@@ -654,8 +675,8 @@ static int msm_cvp_load_clock_table(
 		else
 			vc->has_mem_retention = false;
 
-		dprintk(CVP_CORE, "Found clock %s: scale-able = %s\n", vc->name,
-			vc->count ? "yes" : "no");
+		dprintk(CVP_CORE, "Found clock %s id %d: scale-able = %s\n",
+			vc->name, vc->clk_id, vc->count ? "yes" : "no");
 	}
 
 	return 0;

+ 1 - 0
msm/eva/msm_cvp_resources.h

@@ -54,6 +54,7 @@ struct regulator_set {
 
 struct clock_info {
 	const char *name;
+	u32 clk_id;
 	struct clk *clk;
 	u32 count;
 	bool has_scaling;