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

Commit 8f643002 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
and the debug clock controller in order to register as an msm bus client
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 22b95ff5
Loading
Loading
Loading
Loading
+48 −1
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#include <linux/err.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/msm-bus.h>
#include <linux/of_device.h>
#include <linux/of.h>
#include <linux/platform_device.h>
@@ -16,6 +17,7 @@
#include <linux/reset-controller.h>

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

#include "clk-alpha-pll.h"
#include "clk-branch.h"
@@ -27,9 +29,41 @@
#include "reset.h"
#include "vdd-level.h"

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

static DEFINE_VDD_REGULATORS(vdd_mm, VDD_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,
@@ -2567,7 +2601,8 @@ static int cam_cc_kona_probe(struct platform_device *pdev)
{
	struct regmap *regmap;
	struct clk *clk;
	int ret;
	int ret, i;
	unsigned int camcc_bus_id;

	regmap = qcom_cc_map(pdev, &cam_cc_kona_desc);
	if (IS_ERR(regmap)) {
@@ -2599,6 +2634,18 @@ static int cam_cc_kona_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_kona_clocks); i++)
		if (cam_cc_kona_clocks[i])
			*(unsigned int *)(void *)
			&cam_cc_kona_clocks[i]->hw.init->bus_cl_id =
			camcc_bus_id;

	clk_lucid_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config);
	clk_lucid_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll1_config);
	clk_zonda_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll2_config);
+49 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
#include <linux/err.h>
#include <linux/platform_device.h>
#include <linux/module.h>
#include <linux/msm-bus.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/clk.h>
@@ -14,8 +15,50 @@
#include <linux/regmap.h>
#include <linux/mfd/syscon.h>

#include <dt-bindings/msm/msm-bus-ids.h>

#include "clk-debug.h"

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

static struct msm_bus_vectors clk_measure_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_VENUS_CFG, 0, 0),
	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_CAMERA_CFG, 0, 1),
	MSM_BUS_VECTOR(MSM_BUS_MASTER_AMPSS_M0,
			MSM_BUS_SLAVE_VENUS_CFG, 0, 1),
	MSM_BUS_VECTOR(MSM_BUS_MASTER_AMPSS_M0,
			MSM_BUS_SLAVE_DISPLAY_CFG, 0, 1),
};

static struct msm_bus_paths clk_measure_usecases[] = {
	{
		.num_paths = 3,
		.vectors = &clk_measure_vectors[0],
	},
	{
		.num_paths = 3,
		.vectors = &clk_measure_vectors[3],
	}
};

static struct msm_bus_scale_pdata clk_measure_scale_table = {
	.usecase = clk_measure_usecases,
	.num_usecases = ARRAY_SIZE(clk_measure_usecases),
	.name = "clk_measure",
};

static struct measure_clk_data debug_mux_priv = {
	.ctl_reg = 0x62038,
	.status_reg = 0x6203C,
@@ -871,6 +914,12 @@ static int clk_debug_kona_probe(struct platform_device *pdev)
	if (ret)
		return ret;

	gcc_debug_mux.bus_cl_id =
		msm_bus_scale_register_client(&clk_measure_scale_table);

	if (!gcc_debug_mux.bus_cl_id)
		return -EPROBE_DEFER;

	clk = devm_clk_register(&pdev->dev, &gcc_debug_mux.hw);
	if (IS_ERR(clk)) {
		dev_err(&pdev->dev, "Unable to register GCC debug mux\n");
+47 −1
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#include <linux/err.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/msm-bus.h>
#include <linux/of_device.h>
#include <linux/of.h>
#include <linux/platform_device.h>
@@ -16,6 +17,7 @@
#include <linux/reset-controller.h>

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

#include "clk-alpha-pll.h"
#include "clk-branch.h"
@@ -31,6 +33,38 @@

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

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

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 {
@@ -1484,9 +1518,10 @@ MODULE_DEVICE_TABLE(of, disp_cc_kona_match_table);

static int disp_cc_kona_probe(struct platform_device *pdev)
{
	unsigned int dispcc_bus_id;
	struct regmap *regmap;
	struct clk *clk;
	int ret;
	int ret, i;

	regmap = qcom_cc_map(pdev, &disp_cc_kona_desc);
	if (IS_ERR(regmap)) {
@@ -1511,6 +1546,17 @@ static int disp_cc_kona_probe(struct platform_device *pdev)
	}
	vdd_mm.use_max_uV = true;

	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_kona_clocks); i++)
		if (disp_cc_kona_clocks[i])
			*(unsigned int *)(void *)
			&disp_cc_kona_clocks[i]->hw.init->bus_cl_id =
							dispcc_bus_id;

	clk_lucid_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
	clk_lucid_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config);

+49 −1
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#include <linux/err.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/msm-bus.h>
#include <linux/of_device.h>
#include <linux/of.h>
#include <linux/platform_device.h>
@@ -16,6 +17,7 @@
#include <linux/reset-controller.h>

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

#include "clk-alpha-pll.h"
#include "clk-branch.h"
@@ -27,9 +29,41 @@
#include "reset.h"
#include "vdd-level.h"

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

static DEFINE_VDD_REGULATORS(vdd_mm, VDD_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_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,
@@ -529,9 +563,10 @@ MODULE_DEVICE_TABLE(of, video_cc_kona_match_table);

static int video_cc_kona_probe(struct platform_device *pdev)
{
	unsigned int videocc_bus_id;
	struct regmap *regmap;
	struct clk *clk;
	int ret;
	int ret, i;

	regmap = qcom_cc_map(pdev, &video_cc_kona_desc);
	if (IS_ERR(regmap)) {
@@ -561,6 +596,19 @@ static int video_cc_kona_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_kona_clocks); i++)
		if (video_cc_kona_clocks[i])
			*(unsigned int *)(void *)
			&video_cc_kona_clocks[i]->hw.init->bus_cl_id =
							videocc_bus_id;

	clk_lucid_pll_configure(&video_pll0, regmap, &video_pll0_config);
	clk_lucid_pll_configure(&video_pll1, regmap, &video_pll1_config);