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

Commit 4b878495 authored by David Dai's avatar David Dai Committed by Gerrit - the friendly Code Review server
Browse files

clk: qcom: Register as bus clients to vote for bandwidth



Add path and vote data specific to each multimedia clock controller
in order to register as an msm bus client in order to vote for bandwidth
when accessing the clock controller for debug use cases.

Change-Id: Ie51d04325c8e6e239df2c4c73ef3acaa5c38aa9c
Signed-off-by: default avatarDavid Dai <daidavid1@codeaurora.org>
parent af4fa29b
Loading
Loading
Loading
Loading
+48 −0
Original line number Diff line number Diff line
@@ -24,8 +24,10 @@
#include <linux/clk-provider.h>
#include <linux/regmap.h>
#include <linux/reset-controller.h>
#include <linux/msm-bus.h>

#include <dt-bindings/clock/qcom,camcc-sm8150.h>
#include <dt-bindings/msm/msm-bus-ids.h>

#include "common.h"
#include "clk-regmap.h"
@@ -38,9 +40,41 @@

#define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }

#define MSM_BUS_VECTOR(_src, _dst, _ab, _ib)	\
{						\
	.src = _src,				\
	.dst = _dst,				\
	.ab = _ab,				\
	.ib = _ib,				\
}

static DEFINE_VDD_REGULATORS(vdd_mm, VDD_MM_NUM, 1, vdd_corner);
static DEFINE_VDD_REGULATORS(vdd_mx, VDD_NUM, 1, vdd_corner);

static struct msm_bus_vectors clk_debugfs_vectors[] = {
	MSM_BUS_VECTOR(MSM_BUS_MASTER_AMPSS_M0,
			MSM_BUS_SLAVE_CAMERA_CFG, 0, 0),
	MSM_BUS_VECTOR(MSM_BUS_MASTER_AMPSS_M0,
			MSM_BUS_SLAVE_CAMERA_CFG, 0, 1),
};

static struct msm_bus_paths clk_debugfs_usecases[] = {
	{
		.num_paths = 1,
		.vectors = &clk_debugfs_vectors[0],
	},
	{
		.num_paths = 1,
		.vectors = &clk_debugfs_vectors[1],
	}
};

static struct msm_bus_scale_pdata clk_debugfs_scale_table = {
	.usecase = clk_debugfs_usecases,
	.num_usecases = ARRAY_SIZE(clk_debugfs_usecases),
	.name = "clk_camcc_debugfs",
};

enum {
	P_BI_TCXO,
	P_BI_TCXO_MX,
@@ -2434,6 +2468,8 @@ static int cam_cc_sm8150_probe(struct platform_device *pdev)
	struct regmap *regmap;
	struct clk *clk;
	int ret = 0;
	int i;
	unsigned int camcc_bus_id;

	regmap = qcom_cc_map(pdev, &cam_cc_sm8150_desc);
	if (IS_ERR(regmap)) {
@@ -2465,6 +2501,18 @@ static int cam_cc_sm8150_probe(struct platform_device *pdev)
		return PTR_ERR(vdd_mm.regulator[0]);
	}

	camcc_bus_id = msm_bus_scale_register_client(&clk_debugfs_scale_table);
	if (!camcc_bus_id) {
		dev_err(&pdev->dev, "Unable to register for bw voting\n");
		return -EPROBE_DEFER;
	}

	for (i = 0; i < ARRAY_SIZE(cam_cc_sm8150_clocks); i++)
		if (cam_cc_sm8150_clocks[i])
			*(unsigned int *)(void *)
			&cam_cc_sm8150_clocks[i]->hw.init->bus_cl_id =
			camcc_bus_id;

	ret = cam_cc_sm8150_fixup(pdev, regmap);
	if (ret)
		return ret;
+47 −0
Original line number Diff line number Diff line
@@ -24,8 +24,10 @@
#include <linux/clk-provider.h>
#include <linux/regmap.h>
#include <linux/reset-controller.h>
#include <linux/msm-bus.h>

#include <dt-bindings/clock/qcom,dispcc-sm8150.h>
#include <dt-bindings/msm/msm-bus-ids.h>

#include "common.h"
#include "clk-regmap-divider.h"
@@ -38,8 +40,40 @@

#define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }

#define MSM_BUS_VECTOR(_src, _dst, _ab, _ib)	\
{						\
	.src = _src,				\
	.dst = _dst,				\
	.ab = _ab,				\
	.ib = _ib,				\
}

static DEFINE_VDD_REGULATORS(vdd_mm, VDD_MM_NUM, 1, vdd_corner);

static struct msm_bus_vectors clk_debugfs_vectors[] = {
	MSM_BUS_VECTOR(MSM_BUS_MASTER_AMPSS_M0,
			MSM_BUS_SLAVE_DISPLAY_CFG, 0, 0),
	MSM_BUS_VECTOR(MSM_BUS_MASTER_AMPSS_M0,
			MSM_BUS_SLAVE_DISPLAY_CFG, 0, 1),
};

static struct msm_bus_paths clk_debugfs_usecases[] = {
	{
		.num_paths = 1,
		.vectors = &clk_debugfs_vectors[0],
	},
	{
		.num_paths = 1,
		.vectors = &clk_debugfs_vectors[1],
	}
};

static struct msm_bus_scale_pdata clk_debugfs_scale_table = {
	.usecase = clk_debugfs_usecases,
	.num_usecases = ARRAY_SIZE(clk_debugfs_usecases),
	.name = "clk_dispcc_debugfs",
};

#define DISP_CC_MISC_CMD	0x8000

enum {
@@ -1562,6 +1596,8 @@ static int disp_cc_sm8150_probe(struct platform_device *pdev)
	struct regmap *regmap;
	struct clk *clk;
	int ret = 0;
	int i;
	unsigned int dispcc_bus_id;

	regmap = qcom_cc_map(pdev, &disp_cc_sm8150_desc);
	if (IS_ERR(regmap)) {
@@ -1585,6 +1621,17 @@ static int disp_cc_sm8150_probe(struct platform_device *pdev)
		return PTR_ERR(vdd_mm.regulator[0]);
	}

	dispcc_bus_id = msm_bus_scale_register_client(&clk_debugfs_scale_table);
	if (!dispcc_bus_id) {
		dev_err(&pdev->dev, "Unable to register for bw voting\n");
		return -EPROBE_DEFER;
	}
	for (i = 0; i < ARRAY_SIZE(disp_cc_sm8150_clocks); i++)
		if (disp_cc_sm8150_clocks[i])
			*(unsigned int *)(void *)
			&disp_cc_sm8150_clocks[i]->hw.init->bus_cl_id =
							dispcc_bus_id;

	ret = disp_cc_sm8150_fixup(pdev, regmap);
	if (ret)
		return ret;
+49 −0
Original line number Diff line number Diff line
@@ -24,8 +24,10 @@
#include <linux/clk-provider.h>
#include <linux/regmap.h>
#include <linux/reset-controller.h>
#include <linux/msm-bus.h>

#include <dt-bindings/clock/qcom,videocc-sm8150.h>
#include <dt-bindings/msm/msm-bus-ids.h>

#include "common.h"
#include "clk-regmap.h"
@@ -38,8 +40,40 @@

#define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }

#define MSM_BUS_VECTOR(_src, _dst, _ab, _ib)	\
{						\
	.src = _src,				\
	.dst = _dst,				\
	.ab = _ab,				\
	.ib = _ib,				\
}

static DEFINE_VDD_REGULATORS(vdd_mm, VDD_MM_NUM, 1, vdd_corner);

static struct msm_bus_vectors clk_debugfs_vectors[] = {
	MSM_BUS_VECTOR(MSM_BUS_MASTER_AMPSS_M0,
			MSM_BUS_SLAVE_VENUS_CFG, 0, 0),
	MSM_BUS_VECTOR(MSM_BUS_MASTER_AMPSS_M0,
			MSM_BUS_SLAVE_VENUS_CFG, 0, 1),
};

static struct msm_bus_paths clk_debugfs_usecases[] = {
	{
		.num_paths = 1,
		.vectors = &clk_debugfs_vectors[0],
	},
	{
		.num_paths = 1,
		.vectors = &clk_debugfs_vectors[1],
	}
};

static struct msm_bus_scale_pdata clk_debugfs_scale_table = {
	.usecase = clk_debugfs_usecases,
	.num_usecases = ARRAY_SIZE(clk_debugfs_usecases),
	.name = "clk_videocc_debugfs",
};

enum {
	P_BI_TCXO,
	P_CHIP_SLEEP_CLK,
@@ -310,6 +344,8 @@ static int video_cc_sm8150_probe(struct platform_device *pdev)
	struct regmap *regmap;
	struct clk *clk;
	int ret;
	int i;
	unsigned int videocc_bus_id;

	regmap = qcom_cc_map(pdev, &video_cc_sm8150_desc);
	if (IS_ERR(regmap)) {
@@ -332,6 +368,19 @@ static int video_cc_sm8150_probe(struct platform_device *pdev)
		return PTR_ERR(vdd_mm.regulator[0]);
	}

	videocc_bus_id =
		msm_bus_scale_register_client(&clk_debugfs_scale_table);
	if (!videocc_bus_id) {
		dev_err(&pdev->dev, "Unable to register for bw voting\n");
		return -EPROBE_DEFER;
	}

	for (i = 0; i < ARRAY_SIZE(video_cc_sm8150_clocks); i++)
		if (video_cc_sm8150_clocks[i])
			*(unsigned int *)(void *)
			&video_cc_sm8150_clocks[i]->hw.init->bus_cl_id =
							videocc_bus_id;

	ret = video_cc_sm8150_fixup(pdev, regmap);
	if (ret)
		return ret;