From: Georgi Djakov <gdjakov@mm-sol.com>
To: mturquette@linaro.org, linux@arm.linux.org.uk,
robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,
ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
sboyd@codeaurora.org, rdunlap@infradead.org
Cc: linux-doc@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-msm@vger.kernel.org, Georgi Djakov <gdjakov@mm-sol.com>
Subject: [PATCH v1 3/5] clk: gcc: Add APQ8084 Global Clock Controller support
Date: Thu, 22 May 2014 19:24:43 +0300 [thread overview]
Message-ID: <1400775885-10296-4-git-send-email-gdjakov@mm-sol.com> (raw)
In-Reply-To: <1400775885-10296-1-git-send-email-gdjakov@mm-sol.com>
This patch adds support for the global clock controller found on
the APQ8084 based devices.
The APQ8084 and MSM8974 share a lot of clock data, so instead of
duplicating all the data, we add support to the MSM8974 code.
Signed-off-by: Georgi Djakov <gdjakov@mm-sol.com>
---
drivers/clk/qcom/Kconfig | 4 +-
drivers/clk/qcom/gcc-msm8974.c | 151 +++++++++++++++++++++++++-
include/dt-bindings/clock/qcom,gcc-msm8974.h | 4 +
3 files changed, 154 insertions(+), 5 deletions(-)
diff --git a/drivers/clk/qcom/Kconfig b/drivers/clk/qcom/Kconfig
index 7f696b7..00541e7 100644
--- a/drivers/clk/qcom/Kconfig
+++ b/drivers/clk/qcom/Kconfig
@@ -30,10 +30,10 @@ config MSM_MMCC_8960
graphics, video encode/decode, camera, etc.
config MSM_GCC_8974
- tristate "MSM8974 Global Clock Controller"
+ tristate "APQ8084/MSM8974 Global Clock Controller"
depends on COMMON_CLK_QCOM
help
- Support for the global clock controller on msm8974 devices.
+ Support for the global clock controller on apq8084/msm8974 devices.
Say Y if you want to use peripheral devices such as UART, SPI,
i2c, USB, SD/eMMC, SATA, PCIe, etc.
diff --git a/drivers/clk/qcom/gcc-msm8974.c b/drivers/clk/qcom/gcc-msm8974.c
index 58cb2f5..c2a8d77 100644
--- a/drivers/clk/qcom/gcc-msm8974.c
+++ b/drivers/clk/qcom/gcc-msm8974.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
@@ -204,6 +204,12 @@ static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk[] = {
{ }
};
+static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk_apq8084[] = {
+ F(19200000, P_XO, 1, 0, 0),
+ F(50000000, P_GPLL0, 12, 0, 0),
+ { }
+};
+
static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
.cmd_rcgr = 0x0660,
.hid_width = 5,
@@ -768,6 +774,27 @@ static struct clk_rcg2 ce2_clk_src = {
},
};
+static const struct freq_tbl ftbl_gcc_ce3_clk_apq8084[] = {
+ F(50000000, P_GPLL0, 12, 0, 0),
+ F(85710000, P_GPLL0, 7, 0, 0),
+ F(100000000, P_GPLL0, 6, 0, 0),
+ F(171430000, P_GPLL0, 3.5, 0, 0),
+ { }
+};
+
+static struct clk_rcg2 ce3_clk_src_apq8084 = {
+ .cmd_rcgr = 0x1d10,
+ .hid_width = 5,
+ .parent_map = gcc_xo_gpll0_map,
+ .freq_tbl = ftbl_gcc_ce3_clk_apq8084,
+ .clkr.hw.init = &(struct clk_init_data){
+ .name = "ce3_clk_src",
+ .parent_names = gcc_xo_gpll0,
+ .num_parents = 2,
+ .ops = &clk_rcg2_ops,
+ },
+};
+
static const struct freq_tbl ftbl_gcc_gp_clk[] = {
F(4800000, P_XO, 4, 0, 0),
F(6000000, P_GPLL0, 10, 1, 10),
@@ -780,6 +807,12 @@ static const struct freq_tbl ftbl_gcc_gp_clk[] = {
{ }
};
+static const struct freq_tbl ftbl_gcc_gp_clk_apq8084[] = {
+ F(19200000, P_XO, 1, 0, 0),
+ F(100000000, P_GPLL0, 6, 0, 0),
+ F(200000000, P_GPLL0, 3, 0, 0),
+ { }
+};
static struct clk_rcg2 gp1_clk_src = {
.cmd_rcgr = 0x1904,
@@ -966,6 +999,11 @@ static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
{ }
};
+static const struct freq_tbl ftbl_gcc_usb_hs_system_clk_apq8084[] = {
+ F(75000000, P_GPLL0, 8, 0, 0),
+ { }
+};
+
static struct clk_rcg2 usb_hs_system_clk_src = {
.cmd_rcgr = 0x0490,
.hid_width = 5,
@@ -1029,6 +1067,11 @@ static const struct freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
{ }
};
+static const struct freq_tbl ftbl_gcc_usb_hsic_system_clk_apq8084[] = {
+ F(75000000, P_GPLL0, 8, 0, 0),
+ { }
+};
+
static struct clk_rcg2 usb_hsic_system_clk_src = {
.cmd_rcgr = 0x041c,
.hid_width = 5,
@@ -1838,6 +1881,58 @@ static struct clk_branch gcc_ce2_clk = {
},
};
+static struct clk_branch gcc_ce3_ahb_clk_apq8084 = {
+ .halt_reg = 0x1d0c,
+ .halt_check = BRANCH_HALT_VOTED,
+ .clkr = {
+ .enable_reg = 0x1d0c,
+ .enable_mask = BIT(0),
+ .hw.init = &(struct clk_init_data){
+ .name = "gcc_ce3_ahb_clk",
+ .parent_names = (const char *[]){
+ "config_noc_clk_src",
+ },
+ .num_parents = 1,
+ .ops = &clk_branch2_ops,
+ },
+ },
+};
+
+static struct clk_branch gcc_ce3_axi_clk_apq8084 = {
+ .halt_reg = 0x1088,
+ .halt_check = BRANCH_HALT_VOTED,
+ .clkr = {
+ .enable_reg = 0x1d08,
+ .enable_mask = BIT(0),
+ .hw.init = &(struct clk_init_data){
+ .name = "gcc_ce3_axi_clk",
+ .parent_names = (const char *[]){
+ "system_noc_clk_src",
+ },
+ .num_parents = 1,
+ .ops = &clk_branch2_ops,
+ },
+ },
+};
+
+static struct clk_branch gcc_ce3_clk_apq8084 = {
+ .halt_reg = 0x1090,
+ .halt_check = BRANCH_HALT_VOTED,
+ .clkr = {
+ .enable_reg = 0x1d04,
+ .enable_mask = BIT(0),
+ .hw.init = &(struct clk_init_data){
+ .name = "gcc_ce3_clk",
+ .parent_names = (const char *[]){
+ "ce3_clk_src",
+ },
+ .num_parents = 1,
+ .flags = CLK_SET_RATE_PARENT,
+ .ops = &clk_branch2_ops,
+ },
+ },
+};
+
static struct clk_branch gcc_gp1_clk = {
.halt_reg = 0x1900,
.clkr = {
@@ -2575,6 +2670,10 @@ static struct clk_regmap *gcc_msm8974_clocks[] = {
[GPLL4_VOTE] = NULL,
[GCC_SDCC1_CDCCAL_SLEEP_CLK] = NULL,
[GCC_SDCC1_CDCCAL_FF_CLK] = NULL,
+ [CE3_CLK_SRC] = NULL,
+ [GCC_CE3_AHB_CLK] = NULL,
+ [GCC_CE3_AXI_CLK] = NULL,
+ [GCC_CE3_CLK] = NULL,
};
static const struct qcom_reset_map gcc_msm8974_resets[] = {
@@ -2689,12 +2788,58 @@ static void msm8974_pro_clock_override(void)
&gcc_sdcc1_cdccal_ff_clk.clkr;
}
+static void apq8084_clock_override(void)
+{
+ sdcc1_apps_clk_src_init.parent_names = gcc_xo_gpll0_gpll4;
+ sdcc1_apps_clk_src_init.num_parents = 3;
+ sdcc1_apps_clk_src.freq_tbl = ftbl_gcc_sdcc1_apps_clk_pro;
+ sdcc1_apps_clk_src.parent_map = gcc_xo_gpll0_gpll4_map;
+
+ gcc_msm8974_clocks[GPLL4] = &gpll4.clkr;
+ gcc_msm8974_clocks[GPLL4_VOTE] = &gpll4_vote;
+ gcc_msm8974_clocks[GCC_SDCC1_CDCCAL_SLEEP_CLK] =
+ &gcc_sdcc1_cdccal_sleep_clk.clkr;
+ gcc_msm8974_clocks[GCC_SDCC1_CDCCAL_FF_CLK] =
+ &gcc_sdcc1_cdccal_ff_clk.clkr;
+
+ blsp1_qup1_i2c_apps_clk_src.freq_tbl =
+ ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk_apq8084;
+ blsp1_qup2_i2c_apps_clk_src.freq_tbl =
+ ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk_apq8084;
+ blsp1_qup3_i2c_apps_clk_src.freq_tbl =
+ ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk_apq8084;
+ blsp1_qup4_i2c_apps_clk_src.freq_tbl =
+ ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk_apq8084;
+ blsp1_qup5_i2c_apps_clk_src.freq_tbl =
+ ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk_apq8084;
+ blsp1_qup6_i2c_apps_clk_src.freq_tbl =
+ ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk_apq8084;
+ blsp2_qup1_i2c_apps_clk_src.freq_tbl =
+ ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk_apq8084;
+ usb_hsic_system_clk_src.freq_tbl =
+ ftbl_gcc_usb_hsic_system_clk_apq8084;
+ usb_hs_system_clk_src.freq_tbl = ftbl_gcc_usb_hs_system_clk_apq8084;
+
+ gcc_msm8974_clocks[CE3_CLK_SRC] = &ce3_clk_src_apq8084.clkr,
+ gcc_msm8974_clocks[GCC_CE3_AHB_CLK] = &gcc_ce3_ahb_clk_apq8084.clkr,
+ gcc_msm8974_clocks[GCC_CE3_AXI_CLK] = &gcc_ce3_axi_clk_apq8084.clkr,
+ gcc_msm8974_clocks[GCC_CE3_CLK] = &gcc_ce3_clk_apq8084.clkr,
+
+ gp1_clk_src.freq_tbl = ftbl_gcc_gp_clk_apq8084;
+ gp2_clk_src.freq_tbl = ftbl_gcc_gp_clk_apq8084;
+ gp3_clk_src.freq_tbl = ftbl_gcc_gp_clk_apq8084;
+
+ gcc_msm8974_clocks[GCC_LPASS_Q6_AXI_CLK] = NULL;
+}
+
static const struct of_device_id gcc_msm8974_match_table[] = {
{ .compatible = "qcom,gcc-msm8974" },
{ .compatible = "qcom,gcc-msm8974pro",
- .data = &msm8974_pro_clock_override },
+ .data = msm8974_pro_clock_override },
{ .compatible = "qcom,gcc-msm8974pro-ac",
- .data = &msm8974_pro_clock_override },
+ .data = msm8974_pro_clock_override },
+ { .compatible = "qcom,gcc-apq8084",
+ .data = apq8084_clock_override },
{ }
};
MODULE_DEVICE_TABLE(of, gcc_msm8974_match_table);
diff --git a/include/dt-bindings/clock/qcom,gcc-msm8974.h b/include/dt-bindings/clock/qcom,gcc-msm8974.h
index 51e51c8..01f8863 100644
--- a/include/dt-bindings/clock/qcom,gcc-msm8974.h
+++ b/include/dt-bindings/clock/qcom,gcc-msm8974.h
@@ -320,5 +320,9 @@
#define GPLL4_VOTE 303
#define GCC_SDCC1_CDCCAL_SLEEP_CLK 304
#define GCC_SDCC1_CDCCAL_FF_CLK 305
+#define CE3_CLK_SRC 306
+#define GCC_CE3_CLK 307
+#define GCC_CE3_AHB_CLK 308
+#define GCC_CE3_AXI_CLK 309
#endif
--
1.7.9.5
next prev parent reply other threads:[~2014-05-22 16:25 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-22 16:24 [PATCH v1 0/5] " Georgi Djakov
2014-05-22 16:24 ` [PATCH v1 1/5] clk: qcom: Add APQ8084 Global Clock Controller documentation Georgi Djakov
2014-05-22 16:24 ` [PATCH v1 2/5] clk: qcom: Allow an override function to be passed as data Georgi Djakov
2014-05-22 16:24 ` Georgi Djakov [this message]
2014-05-22 16:38 ` [PATCH v1 3/5] clk: gcc: Add APQ8084 Global Clock Controller support Kumar Gala
2014-05-23 14:18 ` Georgi Djakov
2014-05-22 17:22 ` Stephen Boyd
2014-05-23 14:20 ` Georgi Djakov
2014-05-22 16:24 ` [PATCH v1 4/5] ARM: dts: qcom: Add APQ8084 Global Clock Controller DT node Georgi Djakov
2014-05-22 16:24 ` [PATCH v1 5/5] ARM: dts: qcom: Add APQ8084 serial port " Georgi Djakov
2014-05-22 16:32 ` Kumar Gala
2014-05-23 14:17 ` Georgi Djakov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1400775885-10296-4-git-send-email-gdjakov@mm-sol.com \
--to=gdjakov@mm-sol.com \
--cc=devicetree@vger.kernel.org \
--cc=galak@codeaurora.org \
--cc=ijc+devicetree@hellion.org.uk \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=mark.rutland@arm.com \
--cc=mturquette@linaro.org \
--cc=pawel.moll@arm.com \
--cc=rdunlap@infradead.org \
--cc=robh+dt@kernel.org \
--cc=sboyd@codeaurora.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome