Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c1e60686 authored by Girish Mahadevan's avatar Girish Mahadevan
Browse files

msm: msm_bus: Add support for master clocks



Add support for master clocks on bus nodes. Induvidual
nodes may have clocks associated with them which need to be
aggregated in addition to the bus clocks they connect to.

Change-Id: Idd268587f6558738680390d3f22fc9c9ceb7af91
Signed-off-by: default avatarGirish Mahadevan <girishm@codeaurora.org>
parent bf76eb8e
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -422,7 +422,7 @@ int msm_bus_update_clks(struct msm_bus_node_device_type *nodedev,
	req_clk = nodedev->cur_clk_hz[ctx];
	nodeclk = &nodedev->clk[ctx];

	if (!nodeclk->clk)
	if (IS_ERR_OR_NULL(nodeclk))
		goto exit_set_clks;

	if (!nodeclk->dirty || (nodeclk->dirty && (nodeclk->rate < req_clk))) {
@@ -540,15 +540,15 @@ static int msm_bus_qos_enable_clk(struct msm_bus_node_device_type *node)
		rounded_rate = clk_round_rate(node->qos_clk.clk, 1);
		ret = setrate_nodeclk(&node->qos_clk, rounded_rate);
		if (ret) {
			MSM_BUS_ERR("%s: Failed to enable mas qos clk, node %d",
				__func__, node->node_info->id);
			MSM_BUS_ERR("Failed to set bus clk, node %d",
			 node->node_info->id);
			goto exit_enable_qos_clk;
		}

		ret = enable_nodeclk(&node->qos_clk);
		if (ret) {
			MSM_BUS_ERR("%s: Failed to enable mas qos clk, node %d",
				__func__, node->node_info->id);
			MSM_BUS_ERR("Err enable mas qos clk, node %d ret %d",
				node->node_info->id, ret);
			goto exit_enable_qos_clk;
		}
	}
@@ -594,14 +594,18 @@ static int msm_bus_dev_init_qos(struct device *dev, void *data)
				if (bus_node_info->fabdev->bypass_qos_prg)
					goto exit_init_qos;

				msm_bus_qos_enable_clk(node_dev);
				if (msm_bus_qos_enable_clk(node_dev))
					goto exit_init_qos;

				bus_node_info->fabdev->noc_ops.qos_init(
					node_dev,
					bus_node_info->fabdev->qos_base,
					bus_node_info->fabdev->base_offset,
					bus_node_info->fabdev->qos_off,
					bus_node_info->fabdev->qos_freq);
				msm_bus_qos_disable_clk(node_dev);

				if (msm_bus_qos_disable_clk(node_dev))
					goto exit_init_qos;
			}
		} else
			MSM_BUS_ERR("%s: Skipping QOS init for %d",
+18 −0
Original line number Diff line number Diff line
@@ -314,6 +314,24 @@ static unsigned int get_bus_node_device_data(
			dev_warn(&pdev->dev,
				 "Coresight support absent for bus: %d\n",
				  node_device->node_info->id);
	} else {
		node_device->qos_clk.clk = of_clk_get_by_name(dev_node,
							"bus_qos_clk");

		if (IS_ERR_OR_NULL(node_device->qos_clk.clk))
			dev_dbg(&pdev->dev,
				"%s:Failed to get bus qos clk for mas%d",
				__func__, node_device->node_info->id);

		node_device->clk[DUAL_CTX].clk = of_clk_get_by_name(dev_node,
							"node_clk");

		if (IS_ERR_OR_NULL(node_device->clk[DUAL_CTX].clk))
			dev_dbg(&pdev->dev,
				"%s:Failed to get bus clk for bus%d ctx%d",
				__func__, node_device->node_info->id,
								DUAL_CTX);

	}
	return 0;
}