Re: [RESEND PATCH v4 2/6] clk: qcom: Add SDX55 GCC support

2020-12-09 Thread Stephen Boyd
Quoting Manivannan Sadhasivam (2020-11-25 23:28:40)
> From: Naveen Yadav 
> 
> Add Global Clock Controller (GCC) support for SDX55 SoCs from Qualcomm.
> 
> Signed-off-by: Naveen Yadav 
> [mani: converted to parent_data, commented critical clocks, cleanups]
> Signed-off-by: Manivannan Sadhasivam 
> Reviewed-by: Vinod Koul 
> ---

Applied to clk-next


[RESEND PATCH v4 2/6] clk: qcom: Add SDX55 GCC support

2020-11-25 Thread Manivannan Sadhasivam
From: Naveen Yadav 

Add Global Clock Controller (GCC) support for SDX55 SoCs from Qualcomm.

Signed-off-by: Naveen Yadav 
[mani: converted to parent_data, commented critical clocks, cleanups]
Signed-off-by: Manivannan Sadhasivam 
Reviewed-by: Vinod Koul 
---
 drivers/clk/qcom/Kconfig |7 +
 drivers/clk/qcom/Makefile|1 +
 drivers/clk/qcom/gcc-sdx55.c | 1626 ++
 3 files changed, 1634 insertions(+)
 create mode 100644 drivers/clk/qcom/gcc-sdx55.c

diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig
index 3a965bd326d5..7897a3947e6d 100644
--- a/drivers/clk/qcom/Kconfig
+++ b/drivers/clk/qcom/Kconfig
@@ -413,6 +413,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 SDX_GCC_55
+   tristate "SDX55 Global Clock Controller"
+   help
+ Support for the global clock controller on SDX55 devices.
+ Say Y if you want to use peripheral devices such as UART,
+ SPI, I2C, USB, SD/UFS, PCIe etc.
+
 config SM_DISPCC_8250
tristate "SM8150 and SM8250 Display Clock Controller"
depends on SM_GCC_8150 || SM_GCC_8250
diff --git a/drivers/clk/qcom/Makefile b/drivers/clk/qcom/Makefile
index 11ae86febe87..886b877e70c7 100644
--- a/drivers/clk/qcom/Makefile
+++ b/drivers/clk/qcom/Makefile
@@ -64,6 +64,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_SDX_GCC_55) += gcc-sdx55.o
 obj-$(CONFIG_SM_DISPCC_8250) += dispcc-sm8250.o
 obj-$(CONFIG_SM_GCC_8150) += gcc-sm8150.o
 obj-$(CONFIG_SM_GCC_8250) += gcc-sm8250.o
diff --git a/drivers/clk/qcom/gcc-sdx55.c b/drivers/clk/qcom/gcc-sdx55.c
new file mode 100644
index ..bf114165e24b
--- /dev/null
+++ b/drivers/clk/qcom/gcc-sdx55.c
@@ -0,0 +1,1626 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2020, Linaro Ltd.
+ */
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include "common.h"
+#include "clk-alpha-pll.h"
+#include "clk-branch.h"
+#include "clk-pll.h"
+#include "clk-rcg.h"
+#include "clk-regmap.h"
+#include "reset.h"
+
+enum {
+   P_BI_TCXO,
+   P_CORE_BI_PLL_TEST_SE,
+   P_GPLL0_OUT_EVEN,
+   P_GPLL0_OUT_MAIN,
+   P_GPLL4_OUT_EVEN,
+   P_GPLL5_OUT_MAIN,
+   P_SLEEP_CLK,
+};
+
+static const struct pll_vco lucid_vco[] = {
+   { 24960, 20, 0 },
+};
+
+static struct clk_alpha_pll gpll0 = {
+   .offset = 0x0,
+   .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
+   .vco_table = lucid_vco,
+   .num_vco = ARRAY_SIZE(lucid_vco),
+   .clkr = {
+   .enable_reg = 0x6d000,
+   .enable_mask = BIT(0),
+   .hw.init = &(struct clk_init_data){
+   .name = "gpll0",
+   .parent_data = &(const struct clk_parent_data){
+   .fw_name = "bi_tcxo",
+   },
+   .num_parents = 1,
+   .ops = _alpha_pll_fixed_lucid_ops,
+   },
+   },
+};
+
+static const struct clk_div_table post_div_table_lucid_even[] = {
+   { 0x0, 1 },
+   { 0x1, 2 },
+   { 0x3, 4 },
+   { 0x7, 8 },
+   { }
+};
+
+static struct clk_alpha_pll_postdiv gpll0_out_even = {
+   .offset = 0x0,
+   .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
+   .post_div_shift = 8,
+   .post_div_table = post_div_table_lucid_even,
+   .num_post_div = ARRAY_SIZE(post_div_table_lucid_even),
+   .width = 4,
+   .clkr.hw.init = &(struct clk_init_data){
+   .name = "gpll0_out_even",
+   .parent_data = &(const struct clk_parent_data){
+   .hw = ,
+   },
+   .num_parents = 1,
+   .ops = _alpha_pll_postdiv_lucid_ops,
+   },
+};
+
+static struct clk_alpha_pll gpll4 = {
+   .offset = 0x76000,
+   .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
+   .vco_table = lucid_vco,
+   .num_vco = ARRAY_SIZE(lucid_vco),
+   .clkr = {
+   .enable_reg = 0x6d000,
+   .enable_mask = BIT(4),
+   .hw.init = &(struct clk_init_data){
+   .name = "gpll4",
+   .parent_data = &(const struct clk_parent_data){
+   .fw_name = "bi_tcxo",
+   },
+   .num_parents = 1,
+   .ops = _alpha_pll_fixed_lucid_ops,
+   },
+   },
+};
+
+static struct clk_alpha_pll_postdiv gpll4_out_even = {
+   .offset = 0x76000,
+   .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
+   .post_div_shift = 8,
+   .post_div_table = 

[PATCH v4 2/6] clk: qcom: Add SDX55 GCC support

2020-11-25 Thread Manivannan Sadhasivam
From: Naveen Yadav 

Add Global Clock Controller (GCC) support for SDX55 SoCs from Qualcomm.

Signed-off-by: Naveen Yadav 
[mani: converted to parent_data, commented critical clocks, cleanups]
Signed-off-by: Manivannan Sadhasivam 
Reviewed-by: Vinod Koul 
---
 drivers/clk/qcom/Kconfig |7 +
 drivers/clk/qcom/Makefile|1 +
 drivers/clk/qcom/gcc-sdx55.c | 1626 ++
 3 files changed, 1634 insertions(+)
 create mode 100644 drivers/clk/qcom/gcc-sdx55.c

diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig
index 3a965bd326d5..7897a3947e6d 100644
--- a/drivers/clk/qcom/Kconfig
+++ b/drivers/clk/qcom/Kconfig
@@ -413,6 +413,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 SDX_GCC_55
+   tristate "SDX55 Global Clock Controller"
+   help
+ Support for the global clock controller on SDX55 devices.
+ Say Y if you want to use peripheral devices such as UART,
+ SPI, I2C, USB, SD/UFS, PCIe etc.
+
 config SM_DISPCC_8250
tristate "SM8150 and SM8250 Display Clock Controller"
depends on SM_GCC_8150 || SM_GCC_8250
diff --git a/drivers/clk/qcom/Makefile b/drivers/clk/qcom/Makefile
index 11ae86febe87..886b877e70c7 100644
--- a/drivers/clk/qcom/Makefile
+++ b/drivers/clk/qcom/Makefile
@@ -64,6 +64,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_SDX_GCC_55) += gcc-sdx55.o
 obj-$(CONFIG_SM_DISPCC_8250) += dispcc-sm8250.o
 obj-$(CONFIG_SM_GCC_8150) += gcc-sm8150.o
 obj-$(CONFIG_SM_GCC_8250) += gcc-sm8250.o
diff --git a/drivers/clk/qcom/gcc-sdx55.c b/drivers/clk/qcom/gcc-sdx55.c
new file mode 100644
index ..bf114165e24b
--- /dev/null
+++ b/drivers/clk/qcom/gcc-sdx55.c
@@ -0,0 +1,1626 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2020, Linaro Ltd.
+ */
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include "common.h"
+#include "clk-alpha-pll.h"
+#include "clk-branch.h"
+#include "clk-pll.h"
+#include "clk-rcg.h"
+#include "clk-regmap.h"
+#include "reset.h"
+
+enum {
+   P_BI_TCXO,
+   P_CORE_BI_PLL_TEST_SE,
+   P_GPLL0_OUT_EVEN,
+   P_GPLL0_OUT_MAIN,
+   P_GPLL4_OUT_EVEN,
+   P_GPLL5_OUT_MAIN,
+   P_SLEEP_CLK,
+};
+
+static const struct pll_vco lucid_vco[] = {
+   { 24960, 20, 0 },
+};
+
+static struct clk_alpha_pll gpll0 = {
+   .offset = 0x0,
+   .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
+   .vco_table = lucid_vco,
+   .num_vco = ARRAY_SIZE(lucid_vco),
+   .clkr = {
+   .enable_reg = 0x6d000,
+   .enable_mask = BIT(0),
+   .hw.init = &(struct clk_init_data){
+   .name = "gpll0",
+   .parent_data = &(const struct clk_parent_data){
+   .fw_name = "bi_tcxo",
+   },
+   .num_parents = 1,
+   .ops = _alpha_pll_fixed_lucid_ops,
+   },
+   },
+};
+
+static const struct clk_div_table post_div_table_lucid_even[] = {
+   { 0x0, 1 },
+   { 0x1, 2 },
+   { 0x3, 4 },
+   { 0x7, 8 },
+   { }
+};
+
+static struct clk_alpha_pll_postdiv gpll0_out_even = {
+   .offset = 0x0,
+   .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
+   .post_div_shift = 8,
+   .post_div_table = post_div_table_lucid_even,
+   .num_post_div = ARRAY_SIZE(post_div_table_lucid_even),
+   .width = 4,
+   .clkr.hw.init = &(struct clk_init_data){
+   .name = "gpll0_out_even",
+   .parent_data = &(const struct clk_parent_data){
+   .hw = ,
+   },
+   .num_parents = 1,
+   .ops = _alpha_pll_postdiv_lucid_ops,
+   },
+};
+
+static struct clk_alpha_pll gpll4 = {
+   .offset = 0x76000,
+   .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
+   .vco_table = lucid_vco,
+   .num_vco = ARRAY_SIZE(lucid_vco),
+   .clkr = {
+   .enable_reg = 0x6d000,
+   .enable_mask = BIT(4),
+   .hw.init = &(struct clk_init_data){
+   .name = "gpll4",
+   .parent_data = &(const struct clk_parent_data){
+   .fw_name = "bi_tcxo",
+   },
+   .num_parents = 1,
+   .ops = _alpha_pll_fixed_lucid_ops,
+   },
+   },
+};
+
+static struct clk_alpha_pll_postdiv gpll4_out_even = {
+   .offset = 0x76000,
+   .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
+   .post_div_shift = 8,
+   .post_div_table =