Loading drivers/clk/qcom/clk-debug.c +16 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <linux/clk-provider.h> #include <linux/of.h> #include <linux/bitops.h> #include <linux/msm-bus.h> #include "clk-regmap.h" #include "clk-debug.h" Loading Loading @@ -253,6 +254,13 @@ static int clk_debug_measure_get(void *data, u64 *val) mutex_lock(&clk_debug_lock); /* * Vote for bandwidth to re-connect config ports * to multimedia clock controllers. */ if (meas->bus_cl_id) msm_bus_scale_client_update_request(meas->bus_cl_id, 1); ret = clk_set_parent(measure->clk, hw->clk); if (!ret) { par = measure; Loading Loading @@ -290,6 +298,8 @@ static int clk_debug_measure_get(void *data, u64 *val) exit1: disable_debug_clks(meas, index); exit: if (meas->bus_cl_id) msm_bus_scale_client_update_request(meas->bus_cl_id, 0); mutex_unlock(&clk_debug_lock); return ret; } Loading Loading @@ -345,11 +355,13 @@ int clk_debug_measure_add(struct clk_hw *hw, struct dentry *dentry) } meas = to_clk_measure(measure); if (meas->bus_cl_id) msm_bus_scale_client_update_request(meas->bus_cl_id, 1); ret = clk_set_parent(measure->clk, hw->clk); if (ret) { pr_debug("Unable to set %s as %s's parent, ret=%d\n", clk_hw_get_name(hw), clk_hw_get_name(measure), ret); return 0; goto err; } index = clk_debug_mux_get_parent(measure); Loading @@ -359,6 +371,9 @@ int clk_debug_measure_add(struct clk_hw *hw, struct dentry *dentry) else debugfs_create_file("clk_measure", 0444, dentry, hw, &clk_measure_fops); err: if (meas->bus_cl_id) msm_bus_scale_client_update_request(meas->bus_cl_id, 0); return 0; } EXPORT_SYMBOL(clk_debug_measure_add); Loading drivers/clk/qcom/clk-debug.h +1 −0 Original line number Diff line number Diff line Loading @@ -130,6 +130,7 @@ struct clk_debug_mux { u32 post_div_mask; u32 post_div_shift; u32 period_offset; u32 bus_cl_id; struct clk_hw hw; }; Loading drivers/clk/qcom/debugcc-sm8150.c +48 −0 Original line number Diff line number Diff line Loading @@ -23,9 +23,51 @@ #include <linux/clk-provider.h> #include <linux/regmap.h> #include <linux/mfd/syscon.h> #include <linux/msm-bus.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, Loading Loading @@ -878,6 +920,12 @@ static int clk_debug_sm8150_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"); Loading Loading
drivers/clk/qcom/clk-debug.c +16 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <linux/clk-provider.h> #include <linux/of.h> #include <linux/bitops.h> #include <linux/msm-bus.h> #include "clk-regmap.h" #include "clk-debug.h" Loading Loading @@ -253,6 +254,13 @@ static int clk_debug_measure_get(void *data, u64 *val) mutex_lock(&clk_debug_lock); /* * Vote for bandwidth to re-connect config ports * to multimedia clock controllers. */ if (meas->bus_cl_id) msm_bus_scale_client_update_request(meas->bus_cl_id, 1); ret = clk_set_parent(measure->clk, hw->clk); if (!ret) { par = measure; Loading Loading @@ -290,6 +298,8 @@ static int clk_debug_measure_get(void *data, u64 *val) exit1: disable_debug_clks(meas, index); exit: if (meas->bus_cl_id) msm_bus_scale_client_update_request(meas->bus_cl_id, 0); mutex_unlock(&clk_debug_lock); return ret; } Loading Loading @@ -345,11 +355,13 @@ int clk_debug_measure_add(struct clk_hw *hw, struct dentry *dentry) } meas = to_clk_measure(measure); if (meas->bus_cl_id) msm_bus_scale_client_update_request(meas->bus_cl_id, 1); ret = clk_set_parent(measure->clk, hw->clk); if (ret) { pr_debug("Unable to set %s as %s's parent, ret=%d\n", clk_hw_get_name(hw), clk_hw_get_name(measure), ret); return 0; goto err; } index = clk_debug_mux_get_parent(measure); Loading @@ -359,6 +371,9 @@ int clk_debug_measure_add(struct clk_hw *hw, struct dentry *dentry) else debugfs_create_file("clk_measure", 0444, dentry, hw, &clk_measure_fops); err: if (meas->bus_cl_id) msm_bus_scale_client_update_request(meas->bus_cl_id, 0); return 0; } EXPORT_SYMBOL(clk_debug_measure_add); Loading
drivers/clk/qcom/clk-debug.h +1 −0 Original line number Diff line number Diff line Loading @@ -130,6 +130,7 @@ struct clk_debug_mux { u32 post_div_mask; u32 post_div_shift; u32 period_offset; u32 bus_cl_id; struct clk_hw hw; }; Loading
drivers/clk/qcom/debugcc-sm8150.c +48 −0 Original line number Diff line number Diff line Loading @@ -23,9 +23,51 @@ #include <linux/clk-provider.h> #include <linux/regmap.h> #include <linux/mfd/syscon.h> #include <linux/msm-bus.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, Loading Loading @@ -878,6 +920,12 @@ static int clk_debug_sm8150_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"); Loading