From 0d901e7779d02a9e39e91c08160b4ee976602b40 Mon Sep 17 00:00:00 2001 From: Taniya Das Date: Wed, 8 Apr 2020 14:45:26 +0530 Subject: [PATCH] clk: qcom: clk-alpha-pll: Add support for Regera print registers Regera PLL print registers are required to get the PLL values from the debugfs, thus add support for the same. Change-Id: Ib0064c6764c353987e17c1acdab5bb8afbbad73f Signed-off-by: Taniya Das --- drivers/clk/qcom/clk-alpha-pll.c | 56 ++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/drivers/clk/qcom/clk-alpha-pll.c b/drivers/clk/qcom/clk-alpha-pll.c index f00c4d3b452b..3e793f227b79 100644 --- a/drivers/clk/qcom/clk-alpha-pll.c +++ b/drivers/clk/qcom/clk-alpha-pll.c @@ -3399,6 +3399,60 @@ clk_regera_pll_recalc_rate(struct clk_hw *hw, unsigned long parent_rate) return alpha_pll_calc_rate(parent_rate, l, frac, alpha_width); } +static void clk_regera_pll_list_registers(struct seq_file *f, struct clk_hw *hw) +{ + struct clk_alpha_pll *pll = to_clk_alpha_pll(hw); + int size, i, val; + + static struct clk_register_data data[] = { + {"PLL_MODE", PLL_OFF_MODE}, + {"PLL_L_VAL", PLL_OFF_L_VAL}, + {"PLL_ALPHA_VAL", PLL_OFF_ALPHA_VAL}, + {"PLL_USER_CTL", PLL_OFF_USER_CTL}, + {"PLL_CONFIG_CTL", PLL_OFF_CONFIG_CTL}, + {"PLL_CONFIG_CTL_U", PLL_OFF_CONFIG_CTL_U}, + {"PLL_CONFIG_CTL_U1", PLL_OFF_CONFIG_CTL_U1}, + {"PLL_TEST_CTL", PLL_OFF_TEST_CTL}, + {"PLL_TEST_CTL_U", PLL_OFF_TEST_CTL_U}, + {"PLL_TEST_CTL_U1", PLL_OFF_TEST_CTL_U1}, + {"PLL_OPMODE", PLL_OFF_OPMODE}, + {"PLL_STATUS", PLL_OFF_STATUS}, + }; + + static struct clk_register_data data1[] = { + {"APSS_PLL_VOTE", 0x0}, + }; + + + size = ARRAY_SIZE(data); + + for (i = 0; i < size; i++) { + regmap_read(pll->clkr.regmap, pll->offset + + pll->regs[data[i].offset], &val); + seq_printf(f, "%20s: 0x%.8x\n", data[i].name, val); + } + + regmap_read(pll->clkr.regmap, pll->offset + pll->regs[data[0].offset], + &val); + if (val & PLL_FSM_ENA) { + regmap_read(pll->clkr.regmap, pll->clkr.enable_reg + + data1[0].offset, &val); + seq_printf(f, "%20s: 0x%.8x\n", data1[0].name, val); + } +} + +static struct clk_regmap_ops clk_regera_pll_regmap_ops = { + .list_registers = clk_regera_pll_list_registers, +}; + +static void clk_regera_pll_init(struct clk_hw *hw) +{ + struct clk_regmap *rclk = to_clk_regmap(hw); + + if (!rclk->ops) + rclk->ops = &clk_regera_pll_regmap_ops; +} + const struct clk_ops clk_regera_pll_ops = { .prepare = clk_prepare_regmap, .unprepare = clk_unprepare_regmap, @@ -3410,6 +3464,8 @@ const struct clk_ops clk_regera_pll_ops = { .recalc_rate = clk_regera_pll_recalc_rate, .round_rate = clk_alpha_pll_round_rate, .set_rate = clk_regera_pll_set_rate, + .debug_init = clk_common_debug_init, + .init = clk_regera_pll_init, #ifdef CONFIG_COMMON_CLK_QCOM_DEBUG .list_rate_vdd_level = clk_list_rate_vdd_level, #endif