summaryrefslogtreecommitdiffstats
path: root/drivers/clk/exynos/clk-pll.c
diff options
context:
space:
mode:
authorThomas Abraham <thomas.ab@samsung.com>2016-04-23 22:18:09 +0530
committerMinkyu Kang <mk7.kang@samsung.com>2016-05-25 10:00:18 +0900
commit166097e8775343898cab84f1f23b4aacb35783db (patch)
treeff6044c97f1787150e5f5fa66f1734c933cfacae /drivers/clk/exynos/clk-pll.c
parent16ca80adc551808b6be1d43f30997f8b4fdfbd39 (diff)
downloadtalos-obmc-uboot-166097e8775343898cab84f1f23b4aacb35783db.tar.gz
talos-obmc-uboot-166097e8775343898cab84f1f23b4aacb35783db.zip
clk: exynos: add clock driver for Exynos7420 Soc
Add a clock driver for Exynos7420 SoC. There are about 25 clock controller blocks in Exynos7420 out of which support for topc, top0 and peric1 blocks are added in this initial version of the driver. Cc: Minkyu Kang <mk7.kang@samsung.com> Cc: Simon Glass <sjg@chromium.org> Signed-off-by: Thomas Abraham <thomas.ab@samsung.com> Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
Diffstat (limited to 'drivers/clk/exynos/clk-pll.c')
-rw-r--r--drivers/clk/exynos/clk-pll.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/clk/exynos/clk-pll.c b/drivers/clk/exynos/clk-pll.c
new file mode 100644
index 0000000000..27220c5911
--- /dev/null
+++ b/drivers/clk/exynos/clk-pll.c
@@ -0,0 +1,33 @@
+/*
+ * Exynos PLL helper functions for clock drivers.
+ * Copyright (C) 2016 Samsung Electronics
+ * Thomas Abraham <thomas.ab@samsung.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <div64.h>
+
+#define PLL145X_MDIV_SHIFT 16
+#define PLL145X_MDIV_MASK 0x3ff
+#define PLL145X_PDIV_SHIFT 8
+#define PLL145X_PDIV_MASK 0x3f
+#define PLL145X_SDIV_SHIFT 0
+#define PLL145X_SDIV_MASK 0x7
+
+unsigned long pll145x_get_rate(unsigned int *con1, unsigned long fin_freq)
+{
+ unsigned long pll_con1 = readl(con1);
+ unsigned long mdiv, sdiv, pdiv;
+ uint64_t fvco = fin_freq;
+
+ mdiv = (pll_con1 >> PLL145X_MDIV_SHIFT) & PLL145X_MDIV_MASK;
+ pdiv = (pll_con1 >> PLL145X_PDIV_SHIFT) & PLL145X_PDIV_MASK;
+ sdiv = (pll_con1 >> PLL145X_SDIV_SHIFT) & PLL145X_SDIV_MASK;
+
+ fvco *= mdiv;
+ do_div(fvco, (pdiv << sdiv));
+ return (unsigned long)fvco;
+}
OpenPOWER on IntegriCloud