clk: qcom: Add support for SM8150 GCC
v4 cover clk: qcom: Add support for SM8150 GCC
This series adds suport for SM8150 GCC which requires Trion PLLs and adds that as well.
Also fixed some minor nits seen in clk-alpha-pll code
Changes in v4:
- Bring back DIV_ROUND_UP_ULL patch as fix in merged upstream
- Split binding to separate patch and add the gcc parent clock to it (Didn't add Rob's ack as new clocks are added to patch, so need review)
- Fix the parent pointers for clock driver and add comments for critical clocks and halt delay
- Fix the trion pll enable and typo in patch
- tested on v5.3-rc1
Changes in v3:
- Drop the cast for DIV_ROUND_UP_ULL as that need s afix in macro, so patch it up once core change in merged
- Drop module alias patch and drop it from sm8150 driver
- Add review tag by Bjorn
Deepak Katragadda (3):
clk: qcom: clk-alpha-pll: Add support for Trion PLLs
dt-bindings: clock: Document gcc bindings for SM8150
clk: qcom: gcc: Add global clock controller driver for SM8150
Vinod Koul (2):
clk: qcom: clk-alpha-pll: Remove unnecessary cast
clk: qcom: clk-alpha-pll: Remove post_div_table checks
.../devicetree/bindings/clock/qcom,gcc.txt | 21 + drivers/clk/qcom/Kconfig | 7 + drivers/clk/qcom/Makefile | 1 + drivers/clk/qcom/clk-alpha-pll.c | 236 +- drivers/clk/qcom/clk-alpha-pll.h | 7 + drivers/clk/qcom/gcc-sm8150.c | 3588 +++++++++++++++++ include/dt-bindings/clock/qcom,gcc-sm8150.h | 243 ++ 7 files changed, 4086 insertions(+), 17 deletions(-) create mode 100644 drivers/clk/qcom/gcc-sm8150.c create mode 100644 include/dt-bindings/clock/qcom,gcc-sm8150.h
base-commit: 5f9e832c137075045d15cd6899ab0505cfb2ca4b
Signature · 1 line
2.20.1
PATCH v4 1/5 clk: qcom: clk-alpha-pll: Remove unnecessary cast
Commit 8f9fab480c7a ("linux/kernel.h: fix overflow for DIV_ROUND_UP_ULL") fixed the overflow for DIV_ROUND_UP_ULL, so we no longer need the cast for DIV_ROUND_UP_ULL, so remove the unnecessary u64 casts.
--- drivers/clk/qcom/clk-alpha-pll.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/clk/qcom/clk-alpha-pll.c +2 -2
@@ -832,7 +832,7 @@ static int clk_alpha_pll_postdiv_set_rate(struct clk_hw *hw, unsigned long rate,int div;/* 16 -> 0xf, 8 -> 0x7, 4 -> 0x3, 2 -> 0x1, 1 -> 0x0 */ - div =DIV_ROUND_UP_ULL ((u64 )parent_rate, rate) -1 ; + div =DIV_ROUND_UP_ULL (parent_rate, rate) -1 ; return regmap_update_bits(pll->clkr.regmap, PLL_USER_CTL(pll), PLL_POST_DIV_MASK(pll) << PLL_POST_DIV_SHIFT,
@@ -1094,7 +1094,7 @@ static int clk_alpha_pll_postdiv_fabia_set_rate(struct clk_hw *hw,return -EINVAL ; } - div =DIV_ROUND_UP_ULL ((u64 )parent_rate, rate); + div =DIV_ROUND_UP_ULL (parent_rate, rate);for (i =0 ; i < pll->num_post_div; i++) {if (pll->post_div_table[i].div == div) { val = pll->post_div_table[i].val;
Signature · 1 line
2.20.1
Re: [PATCH v4 1/5] clk: qcom: clk-alpha-pll: Remove unnecessary cast
Quoting Vinod Koul (2019-07-22 00:43:44)
Quoted 7 lines
Commit
8f9fab480c7a("linux/kernel.h: fix overflow forDIV_ROUND_UP_ULL") fixed the overflow forDIV_ROUND_UP_ULL, so we no longer need the cast forDIV_ROUND_UP_ULL, so remove the unnecessary u64 casts.Signed-off-by Vinod Koul <[email protected]>---
Applied to clk-next
PATCH v4 2/5 clk: qcom: clk-alpha-pll: Remove post_div_table checks
In reply to Vinod KoulWe want users to code properly and fix the post_div_table missing and not rely on core to check. So remove the post_div_table check.
--- drivers/clk/qcom/clk-alpha-pll.c | 15 --------------- 1 file changed, 15 deletions(-)
drivers/clk/qcom/clk-alpha-pll.c +0 -15
@@ -1036,11 +1036,6 @@ static unsigned long clk_alpha_pll_postdiv_fabia_recalc_rate(struct clk_hw *hw,u32 i, div =1 , val;int ret; -if (!pll->post_div_table) { -pr_err ("Missing the post_div_table for the PLL\n" ); -return -EINVAL ; - } - ret =regmap_read (pll->clkr.regmap,PLL_USER_CTL (pll), &val);if (ret)return ret;
@@ -1063,11 +1058,6 @@ static long clk_alpha_pll_postdiv_fabia_round_rate(struct clk_hw *hw, {struct clk_alpha_pll_postdiv *pll =to_clk_alpha_pll_postdiv (hw); -if (!pll->post_div_table) { -pr_err ("Missing the post_div_table for the PLL\n" ); -return -EINVAL ; - } -return divider_round_rate (hw, rate, prate, pll->post_div_table, pll->width,CLK_DIVIDER_ROUND_CLOSEST ); }
@@ -1089,11 +1079,6 @@ static int clk_alpha_pll_postdiv_fabia_set_rate(struct clk_hw *hw,if (val &PLL_VOTE_FSM_ENA )return 0 ; -if (!pll->post_div_table) { -pr_err ("Missing the post_div_table for the PLL\n" ); -return -EINVAL ; - } - div =DIV_ROUND_UP_ULL (parent_rate, rate);for (i =0 ; i < pll->num_post_div; i++) {if (pll->post_div_table[i].div == div) {
Signature · 1 line
2.20.1
Re: [PATCH v4 2/5] clk: qcom: clk-alpha-pll: Remove post_div_table checks
Quoting Vinod Koul (2019-07-22 00:43:45)
Quoted 6 lines
We want users to code properly and fix the
post_div_tablemissing and not rely on core to check. So remove thepost_div_tablecheck.Signed-off-by Vinod Koul <[email protected]>Reviewed-by Bjorn Andersson <[email protected]>---
Applied to clk-next
PATCH v4 3/5 clk: qcom: clk-alpha-pll: Add support for Trion PLLs
In reply to Vinod KoulFrom: Deepak Katragadda <[email protected]>
Add programming sequence support for managing the Trion PLLs.
[vkoul: port to upstream and tidy-up
use upstream way of specifying PLLs]
--- drivers/clk/qcom/clk-alpha-pll.c | 217 +++++++++++++++++++++++++++++++ drivers/clk/qcom/clk-alpha-pll.h | 7 + 2 files changed, 224 insertions(+)
drivers/clk/qcom/clk-alpha-pll.c +217 -0
@@ -32,6 +32,7 @@# define PLL_LOCK_DET BIT(31)#define PLL_L_VAL (p) ((p)->offset + (p)->regs[PLL_OFF_L_VAL]) +#define PLL_CAL_L_VAL (p) ((p)->offset + (p)->regs[PLL_OFF_CAL_L_VAL])#define PLL_ALPHA_VAL (p) ((p)->offset + (p)->regs[PLL_OFF_ALPHA_VAL])#define PLL_ALPHA_VAL_U (p) ((p)->offset + (p)->regs[PLL_OFF_ALPHA_VAL_U])
@@ -44,14 +45,17 @@# define PLL_VCO_MASK 0x3#define PLL_USER_CTL_U (p) ((p)->offset + (p)->regs[PLL_OFF_USER_CTL_U]) +#define PLL_USER_CTL_U1 (p) ((p)->offset + (p)->regs[PLL_OFF_USER_CTL_U1])#define PLL_CONFIG_CTL (p) ((p)->offset + (p)->regs[PLL_OFF_CONFIG_CTL])#define PLL_CONFIG_CTL_U (p) ((p)->offset + (p)->regs[PLL_OFF_CONFIG_CTL_U]) +#define PLL_CONFIG_CTL_U1 (p) ((p)->offset + (p)->regs[PLL_OFF_CONFIG_CTL_U1])#define PLL_TEST_CTL (p) ((p)->offset + (p)->regs[PLL_OFF_TEST_CTL])#define PLL_TEST_CTL_U (p) ((p)->offset + (p)->regs[PLL_OFF_TEST_CTL_U])#define PLL_STATUS (p) ((p)->offset + (p)->regs[PLL_OFF_STATUS])#define PLL_OPMODE (p) ((p)->offset + (p)->regs[PLL_OFF_OPMODE])#define PLL_FRAC (p) ((p)->offset + (p)->regs[PLL_OFF_FRAC]) +#define PLL_CAL_VAL (p) ((p)->offset + (p)->regs[PLL_OFF_CAL_VAL])const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS ] = { [CLK_ALPHA_PLL_TYPE_DEFAULT ] = {
@@ -96,6 +100,22 @@ const u8 clk_alpha_pll_regs[][PLL_OFF_MAX_REGS] = { [PLL_OFF_OPMODE] = 0x2c, [PLL_OFF_FRAC] = 0x38, }, + [CLK_ALPHA_PLL_TYPE_TRION] = { + [PLL_OFF_L_VAL] = 0x04, + [PLL_OFF_CAL_L_VAL] = 0x08, + [PLL_OFF_USER_CTL] = 0x0c, + [PLL_OFF_USER_CTL_U] = 0x10, + [PLL_OFF_USER_CTL_U1] = 0x14, + [PLL_OFF_CONFIG_CTL] = 0x18, + [PLL_OFF_CONFIG_CTL_U] = 0x1c, + [PLL_OFF_CONFIG_CTL_U1] = 0x20, + [PLL_OFF_TEST_CTL] = 0x24, + [PLL_OFF_TEST_CTL_U] = 0x28, + [PLL_OFF_STATUS] = 0x30, + [PLL_OFF_OPMODE] = 0x38, + [PLL_OFF_ALPHA_VAL] = 0x40, + [PLL_OFF_CAL_VAL] = 0x44, + }, };EXPORT_SYMBOL_GPL (clk_alpha_pll_regs);
@@ -120,6 +140,10 @@ EXPORT_SYMBOL_GPL(clk_alpha_pll_regs);#define FABIA_PLL_OUT_MASK 0x7#define FABIA_PLL_RATE_MARGIN 500 +#define TRION_PLL_STANDBY 0x0 +#define TRION_PLL_RUN 0x1 +#define TRION_PLL_OUT_MASK 0x7 +#define pll_alpha_width (p) \ ((PLL_ALPHA_VAL_U(p) - PLL_ALPHA_VAL(p) == 4) ? \ ALPHA_REG_BITWIDTH : ALPHA_REG_16BIT_WIDTH)
@@ -730,6 +754,130 @@ static long alpha_pll_huayra_round_rate(struct clk_hw *hw, unsigned long rate,return alpha_huayra_pll_round_rate (rate, *prate, &l, &a); } +static int trion_pll_is_enabled (struct clk_alpha_pll *pll, +struct regmap *regmap) +{ +u32 mode_regval, opmode_regval; +int ret; + + ret =regmap_read (regmap,PLL_MODE (pll), &mode_regval); + ret |=regmap_read (regmap,PLL_OPMODE (pll), &opmode_regval); +if (ret) +return 0 ; + +return ((opmode_regval &TRION_PLL_RUN ) && (mode_regval &PLL_OUTCTRL )); +} + +static int clk_trion_pll_is_enabled (struct clk_hw *hw) +{ +struct clk_alpha_pll *pll =to_clk_alpha_pll (hw); + +return trion_pll_is_enabled (pll, pll->clkr.regmap); +} + +static int clk_trion_pll_enable (struct clk_hw *hw) +{ +struct clk_alpha_pll *pll =to_clk_alpha_pll (hw); +struct regmap *regmap = pll->clkr.regmap; +u32 val; +int ret; + + ret =regmap_read (regmap,PLL_MODE (pll), &val); +if (ret) +return ret; + +/* If in FSM mode, just vote for it */ +if (val &PLL_VOTE_FSM_ENA ) { + ret =clk_enable_regmap (hw); +if (ret) +return ret; +return wait_for_pll_enable_active (pll); + } + +/* Set operation mode to RUN */ +regmap_write (regmap,PLL_OPMODE (pll),TRION_PLL_RUN ); + + ret =wait_for_pll_enable_lock (pll); +if (ret) +return ret; + +/* Enable the PLL outputs */ + ret =regmap_update_bits (regmap,PLL_USER_CTL (pll), +TRION_PLL_OUT_MASK ,TRION_PLL_OUT_MASK ); +if (ret) +return ret; + +/* Enable the global PLL outputs */ +return regmap_update_bits (regmap,PLL_MODE (pll), +PLL_OUTCTRL ,PLL_OUTCTRL ); +} + +static void clk_trion_pll_disable (struct clk_hw *hw) +{ +struct clk_alpha_pll *pll =to_clk_alpha_pll (hw); +struct regmap *regmap = pll->clkr.regmap; +u32 val; +int ret; + + ret =regmap_read (regmap,PLL_MODE (pll), &val); +if (ret) +return ; + +/* If in FSM mode, just unvote it */ +if (val &PLL_VOTE_FSM_ENA ) { +clk_disable_regmap (hw); +return ; + } + +/* Disable the global PLL output */ + ret =regmap_update_bits (regmap,PLL_MODE (pll),PLL_OUTCTRL ,0 ); +if (ret) +return ; + +/* Disable the PLL outputs */ + ret =regmap_update_bits (regmap,PLL_USER_CTL (pll), +TRION_PLL_OUT_MASK ,0 ); +if (ret) +return ; + +/* Place the PLL mode in STANDBY */ +regmap_write (regmap,PLL_OPMODE (pll),TRION_PLL_STANDBY ); +regmap_update_bits (regmap,PLL_MODE (pll),PLL_RESET_N ,PLL_RESET_N ); +} + +static unsigned long +clk_trion_pll_recalc_rate (struct clk_hw *hw,unsigned long parent_rate) +{ +struct clk_alpha_pll *pll =to_clk_alpha_pll (hw); +struct regmap *regmap = pll->clkr.regmap; +u32 l, frac; +u64 prate = parent_rate; + +regmap_read (regmap,PLL_L_VAL (pll), &l); +regmap_read (regmap,PLL_ALPHA_VAL (pll), &frac); + +return alpha_pll_calc_rate (prate, l, frac,ALPHA_REG_16BIT_WIDTH ); +} + +static long clk_trion_pll_round_rate (struct clk_hw *hw,unsigned long rate, +unsigned long *prate) +{ +struct clk_alpha_pll *pll =to_clk_alpha_pll (hw); +unsigned long min_freq, max_freq; +u32 l; +u64 a; + + rate =alpha_pll_round_rate (rate, *prate, + &l, &a,ALPHA_REG_16BIT_WIDTH ); +if (!pll->vco_table ||alpha_pll_find_vco (pll, rate)) +return rate; + + min_freq = pll->vco_table[0 ].min_freq; + max_freq = pll->vco_table[pll->num_vco -1 ].max_freq; + +return clamp (rate, min_freq, max_freq); +} +const struct clk_ops clk_alpha_pll_ops = { .enable = clk_alpha_pll_enable, .disable = clk_alpha_pll_disable,
@@ -760,6 +908,15 @@ const struct clk_ops clk_alpha_pll_hwfsm_ops = { };EXPORT_SYMBOL_GPL (clk_alpha_pll_hwfsm_ops); +const struct clk_ops clk_trion_fixed_pll_ops = { + .enable = clk_trion_pll_enable, + .disable = clk_trion_pll_disable, + .is_enabled = clk_trion_pll_is_enabled, + .recalc_rate = clk_trion_pll_recalc_rate, + .round_rate = clk_trion_pll_round_rate, +}; +EXPORT_SYMBOL_GPL (clk_trion_fixed_pll_ops); +static unsigned long clk_alpha_pll_postdiv_recalc_rate (struct clk_hw *hw,unsigned long parent_rate) {
@@ -1053,6 +1210,66 @@ static unsigned long clk_alpha_pll_postdiv_fabia_recalc_rate(struct clk_hw *hw,return (parent_rate / div); } +static unsigned long +clk_trion_pll_postdiv_recalc_rate (struct clk_hw *hw,unsigned long parent_rate) +{ +struct clk_alpha_pll_postdiv *pll =to_clk_alpha_pll_postdiv (hw); +struct regmap *regmap = pll->clkr.regmap; +u32 i, div =1 , val; + +regmap_read (regmap,PLL_USER_CTL (pll), &val); + + val >>= pll->post_div_shift; + val &=PLL_POST_DIV_MASK (pll); + +for (i =0 ; i < pll->num_post_div; i++) { +if (pll->post_div_table[i].val == val) { + div = pll->post_div_table[i].div; +break ; + } + } + +return (parent_rate / div); +} + +static long +clk_trion_pll_postdiv_round_rate (struct clk_hw *hw,unsigned long rate, +unsigned long *prate) +{ +struct clk_alpha_pll_postdiv *pll =to_clk_alpha_pll_postdiv (hw); + +return divider_round_rate (hw, rate, prate, pll->post_div_table, + pll->width,CLK_DIVIDER_ROUND_CLOSEST ); +}; + +static int +clk_trion_pll_postdiv_set_rate (struct clk_hw *hw,unsigned long rate, +unsigned long parent_rate) +{ +struct clk_alpha_pll_postdiv *pll =to_clk_alpha_pll_postdiv (hw); +struct regmap *regmap = pll->clkr.regmap; +int i, val =0 , div; + + div =DIV_ROUND_UP_ULL (parent_rate, rate); +for (i =0 ; i < pll->num_post_div; i++) { +if (pll->post_div_table[i].div == div) { + val = pll->post_div_table[i].val; +break ; + } + } + +return regmap_update_bits (regmap,PLL_USER_CTL (pll), +PLL_POST_DIV_MASK (pll) <<PLL_POST_DIV_SHIFT , + val <<PLL_POST_DIV_SHIFT ); +} + +const struct clk_ops clk_trion_pll_postdiv_ops = { + .recalc_rate = clk_trion_pll_postdiv_recalc_rate, + .round_rate = clk_trion_pll_postdiv_round_rate, + .set_rate = clk_trion_pll_postdiv_set_rate, +}; +EXPORT_SYMBOL_GPL (clk_trion_pll_postdiv_ops); +static long clk_alpha_pll_postdiv_fabia_round_rate (struct clk_hw *hw,unsigned long rate,unsigned long *prate) {
drivers/clk/qcom/clk-alpha-pll.h +7 -0
@@ -13,22 +13,27 @@ enum {CLK_ALPHA_PLL_TYPE_HUAYRA ,CLK_ALPHA_PLL_TYPE_BRAMMO ,CLK_ALPHA_PLL_TYPE_FABIA , +CLK_ALPHA_PLL_TYPE_TRION , CLK_ALPHA_PLL_TYPE_MAX, };enum {PLL_OFF_L_VAL , +PLL_OFF_CAL_L_VAL ,PLL_OFF_ALPHA_VAL ,PLL_OFF_ALPHA_VAL_U ,PLL_OFF_USER_CTL ,PLL_OFF_USER_CTL_U , +PLL_OFF_USER_CTL_U1 ,PLL_OFF_CONFIG_CTL ,PLL_OFF_CONFIG_CTL_U , +PLL_OFF_CONFIG_CTL_U1 ,PLL_OFF_TEST_CTL ,PLL_OFF_TEST_CTL_U ,PLL_OFF_STATUS ,PLL_OFF_OPMODE ,PLL_OFF_FRAC , +PLL_OFF_CAL_VAL ,PLL_OFF_MAX_REGS };
@@ -117,5 +122,7 @@ void clk_alpha_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, const struct alpha_pll_config *config);void clk_fabia_pll_configure (struct clk_alpha_pll *pll,struct regmap *regmap,const struct alpha_pll_config *config); +extern const struct clk_ops clk_trion_fixed_pll_ops; +extern const struct clk_ops clk_trion_pll_postdiv_ops;#endif
Signature · 1 line
2.20.1
Re: [PATCH v4 3/5] clk: qcom: clk-alpha-pll: Add support for Trion PLLs
Quoting Vinod Koul (2019-07-22 00:43:46)
Quoted 11 lines
From: Deepak Katragadda <[email protected]>
Add programming sequence support for managing the Trion PLLs.
Signed-off-by Deepak Katragadda <[email protected]>Signed-off-by Taniya Das <[email protected]>[vkoul: port to upstream and tidy-up
use upstream way of specifying PLLs]Signed-off-by Vinod Koul <[email protected]>---
Applied to clk-next
PATCH v4 4/5 dt-bindings: clock: Document gcc bindings for SM8150
In reply to Vinod KoulFrom: Deepak Katragadda <[email protected]>
Document the global clock controller found on SM8150.
[vkoul: port to upstream and add external clocks
split binding to this patch]]
--- .../devicetree/bindings/clock/qcom,gcc.txt | 21 ++ include/dt-bindings/clock/qcom,gcc-sm8150.h | 243 ++++++++++++++++++ 2 files changed, 264 insertions(+) create mode 100644 include/dt-bindings/clock/qcom,gcc-sm8150.h
Documentation/devicetree/bindings/clock/qcom,gcc.txt +21 -0
@@ -23,6 +23,7 @@ Required properties : "qcom,gcc-sdm630" "qcom,gcc-sdm660" "qcom,gcc-sdm845" + "qcom,gcc-sm8150" - reg : shall contain base register location and length - #clock-cells : shall contain 1
@@ -38,6 +39,13 @@ Documentation/devicetree/bindings/thermal/qcom-tsens.txt - protected-clocks : Protected clock specifier list as per common clock binding. +For SM8150 only: + - clocks: a list of phandles and clock-specifier pairs, + one for each entry in clock-names. + - clock-names: "bi_tcxo" (required) + "sleep_clk" (optional) + "aud_ref_clock" (optional) + Example: clock-controller@900000 { compatible = "qcom,gcc-msm8960";
@@ -71,3 +79,16 @@ Example of GCC with protected-clocks properties: <GCC_LPASS_Q6_AXI_CLK>, <GCC_LPASS_SWAY_CLK>; }; + +Example of GCC with clocks + gcc: clock-controller@100000 { + compatible = "qcom,gcc-sm8150"; + reg = <0x00100000 0x1f0000>; + #clock-cells = <1>; + #reset-cells = <1>; + #power-domain-cells = <1>; + clock-names = "bi_tcxo", + "sleep_clk"; + clocks = <&rpmcc RPM_SMD_XO_CLK_SRC>, + <&sleep_clk>; + };
include/dt-bindings/clock/qcom,gcc-sm8150.h new file +243 -0
243 lines not on this page · raw message
Signature · 1 line
2.20.1
Re: [PATCH v4 4/5] dt-bindings: clock: Document gcc bindings for SM8150
Quoting Vinod Koul (2019-07-22 00:43:47)
Quoted 10 lines
From: Deepak Katragadda <[email protected]>
Document the global clock controller found on SM8150.
Signed-off-by Deepak Katragadda <[email protected]>Signed-off-by Taniya Das <[email protected]>[vkoul: port to upstream and add external clocks
split binding to this patch]]Signed-off-by Vinod Koul <[email protected]>---
Applied to clk-next
PATCH v4 5/5 clk: qcom: gcc: Add global clock controller driver for SM8150
In reply to Vinod KoulFrom: Deepak Katragadda <[email protected]>
Add the clocks supported in global clock controller which clock the peripherals like BLSPs, SDCC, USB, MDSS etc. Register all the clocks to the clock framework for the clients to be able to request for them.
[vkoul: port to upstream and tidy-up
port to new parent scheme
Add comments for critical clocks]]
--- drivers/clk/qcom/Kconfig | 7 + drivers/clk/qcom/Makefile | 1 + drivers/clk/qcom/gcc-sm8150.c | 3588 +++++++++++++++++++++++++++++++++ 3 files changed, 3596 insertions(+) create mode 100644 drivers/clk/qcom/gcc-sm8150.c
drivers/clk/qcom/Kconfig +7 -0
@@ -292,6 +292,13 @@ config SDM_LPASSCC_845 Say Y if you want to use the LPASS branch clocks of the LPASS clock controller to reset the LPASS subsystem. +config SM_GCC_8150 + tristate "SM8150 Global Clock Controller" + help + Support for the global clock controller on SM8150 devices. + Say Y if you want to use peripheral devices such as UART, + SPI, I2C, USB, SD/UFS, PCIe etc. + config SPMI_PMIC_CLKDIV tristate "SPMI PMIC clkdiv Support" depends on SPMI || COMPILE_TEST
drivers/clk/qcom/Makefile +1 -0
@@ -50,6 +50,7 @@ obj-$(CONFIG_SDM_GCC_845) += gcc-sdm845.o obj-$(CONFIG_SDM_GPUCC_845) += gpucc-sdm845.o obj-$(CONFIG_SDM_LPASSCC_845) += lpasscc-sdm845.o obj-$(CONFIG_SDM_VIDEOCC_845) += videocc-sdm845.o +obj-$(CONFIG_SM_GCC_8150) += gcc-sm8150.o obj-$(CONFIG_SPMI_PMIC_CLKDIV) += clk-spmi-pmic-div.o obj-$(CONFIG_KPSS_XCC) += kpss-xcc.o obj-$(CONFIG_QCOM_HFPLL) += hfpll.o
drivers/clk/qcom/gcc-sm8150.c new file +3588 -0
2,980 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.20.1
Part of the diff is not shown here. View the raw message.
Re: [PATCH v4 5/5] clk: qcom: gcc: Add global clock controller driver for SM8150
Quoting Vinod Koul (2019-07-22 00:43:48)
Quoted 6 lines
From: Deepak Katragadda <[email protected]>
Add the clocks supported in global clock controller which clock the peripherals like BLSPs, SDCC, USB, MDSS etc. Register all the clocks to the clock framework for the clients to be able to request for them.
Quoted 7 lines
Signed-off-by Deepak Katragadda <[email protected]>Signed-off-by Taniya Das <[email protected]>[vkoul: port to upstream and tidy-up
port to new parent scheme
Add comments for critical clocks]]Signed-off-by Vinod Koul <[email protected]>---
Applied to clk-next