summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeepak Katragadda <dkatraga@codeaurora.org>2016-05-06 17:16:22 -0700
committerKyle Yan <kyan@codeaurora.org>2016-06-01 15:24:46 -0700
commit6b6fc205b077b286b3c70788a38daedba78245ba (patch)
treecc1c161a46b7d7cd2c34f0ab9cac0f02fa297ee1
parentddeec5211040e0d10aa08122ec26591ed275746d (diff)
clk: msm: clock: Support graphics clocks on MSMCOBALT v2
Add support for controlling the graphics clocks on MSMCOBALT v2. CRs-Fixed: 1015446 Change-Id: Ia94606113b112a5e363e342a0ad1d977a48b3d72 Signed-off-by: Deepak Katragadda <dkatraga@codeaurora.org>
-rw-r--r--Documentation/devicetree/bindings/arm/msm/clock-controller.txt2
-rw-r--r--drivers/clk/msm/clock-gpu-cobalt.c29
2 files changed, 29 insertions, 2 deletions
diff --git a/Documentation/devicetree/bindings/arm/msm/clock-controller.txt b/Documentation/devicetree/bindings/arm/msm/clock-controller.txt
index bb86bf605f18..0f6175897d27 100644
--- a/Documentation/devicetree/bindings/arm/msm/clock-controller.txt
+++ b/Documentation/devicetree/bindings/arm/msm/clock-controller.txt
@@ -69,6 +69,8 @@ Required properties:
"qcom,cc-debug-cobalt"
"qcom,gpucc-cobalt"
"qcom,gfxcc-cobalt"
+ "qcom,gpucc-cobalt-v2"
+ "qcom,gfxcc-cobalt-v2"
"qcom,gpucc-hamster"
"qcom,gfxcc-hamster"
"qcom,mmsscc-cobalt"
diff --git a/drivers/clk/msm/clock-gpu-cobalt.c b/drivers/clk/msm/clock-gpu-cobalt.c
index 6e3ef394ed67..2f51a77f0531 100644
--- a/drivers/clk/msm/clock-gpu-cobalt.c
+++ b/drivers/clk/msm/clock-gpu-cobalt.c
@@ -226,6 +226,18 @@ static struct clk_freq_tbl ftbl_gfx3d_clk_src[] = {
F_END
};
+static struct clk_freq_tbl ftbl_gfx3d_clk_src_v2[] = {
+ F_SLEW( 189000000, 378000000, gpu_pll0_pll_out_even, 1, 0, 0),
+ F_SLEW( 264000000, 528000000, gpu_pll0_pll_out_even, 1, 0, 0),
+ F_SLEW( 342000000, 684000000, gpu_pll0_pll_out_even, 1, 0, 0),
+ F_SLEW( 414000000, 828000000, gpu_pll0_pll_out_even, 1, 0, 0),
+ F_SLEW( 520000000, 1040000000, gpu_pll0_pll_out_even, 1, 0, 0),
+ F_SLEW( 596000000, 1192000000, gpu_pll0_pll_out_even, 1, 0, 0),
+ F_SLEW( 670000000, 1340000000, gpu_pll0_pll_out_even, 1, 0, 0),
+ F_SLEW( 710000000, 1420000000, gpu_pll0_pll_out_even, 1, 0, 0),
+ F_END
+};
+
static struct clk_freq_tbl ftbl_gfx3d_clk_src_vq[] = {
F_SLEW( 185000000, 370000000, gpu_pll0_pll_out_even, 1, 0, 0),
F_SLEW( 285000000, 570000000, gpu_pll0_pll_out_even, 1, 0, 0),
@@ -621,6 +633,7 @@ int msm_gpucc_cobalt_probe(struct platform_device *pdev)
static const struct of_device_id msm_clock_gpucc_match_table[] = {
{ .compatible = "qcom,gpucc-cobalt" },
+ { .compatible = "qcom,gpucc-cobalt-v2" },
{ .compatible = "qcom,gpucc-hamster" },
{},
};
@@ -654,13 +667,20 @@ static void msm_gfxcc_hamster_fixup(void)
gfx3d_clk_src.freq_tbl = ftbl_gfx3d_clk_src_vq;
}
+static void msm_gfxcc_cobalt_v2_fixup(void)
+{
+ gpu_pll0_pll.c.fmax[VDD_DIG_NOMINAL] = 1420000500;
+ gpu_pll1_pll.c.fmax[VDD_DIG_NOMINAL] = 1420000500;
+ gfx3d_clk_src.freq_tbl = ftbl_gfx3d_clk_src_v2;
+}
+
int msm_gfxcc_cobalt_probe(struct platform_device *pdev)
{
struct resource *res;
struct device_node *of_node = pdev->dev.of_node;
int rc;
struct regulator *reg;
- bool is_vq = 0;
+ bool is_v2 = 0, is_vq = 0;
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "cc_base");
if (!res) {
@@ -712,12 +732,16 @@ int msm_gfxcc_cobalt_probe(struct platform_device *pdev)
return rc;
}
+ is_v2 = of_device_is_compatible(pdev->dev.of_node,
+ "qcom,gfxcc-cobalt-v2");
+ if (is_v2)
+ msm_gfxcc_cobalt_v2_fixup();
+
is_vq = of_device_is_compatible(pdev->dev.of_node,
"qcom,gfxcc-hamster");
if (is_vq)
msm_gfxcc_hamster_fixup();
-
rc = of_msm_clock_register(of_node, msm_clocks_gfxcc_cobalt,
ARRAY_SIZE(msm_clocks_gfxcc_cobalt));
if (rc)
@@ -738,6 +762,7 @@ int msm_gfxcc_cobalt_probe(struct platform_device *pdev)
static const struct of_device_id msm_clock_gfxcc_match_table[] = {
{ .compatible = "qcom,gfxcc-cobalt" },
+ { .compatible = "qcom,gfxcc-cobalt-v2" },
{ .compatible = "qcom,gfxcc-hamster" },
{},
};