summaryrefslogtreecommitdiff
path: root/cpu/arm926ejs/davinci/cpu.c
diff options
context:
space:
mode:
authorWolfgang Denk <wd@denx.de>2009-12-01 12:10:51 +0100
committerWolfgang Denk <wd@denx.de>2009-12-01 12:10:51 +0100
commit57bf140ac66f95c9c36c494e4d027551b5477b01 (patch)
tree78cc2602ee9dca3284e47f38d29380171fb53646 /cpu/arm926ejs/davinci/cpu.c
parent34ddbd171ba154e9afd83f07a07ad8b57ac592e3 (diff)
parent71636fa7c3de63de29c0f514d5c725eccb011657 (diff)
downloadolio-uboot-2014.01-57bf140ac66f95c9c36c494e4d027551b5477b01.tar.xz
olio-uboot-2014.01-57bf140ac66f95c9c36c494e4d027551b5477b01.zip
Merge branch 'next-sync' of git://git.denx.de/u-boot-arm into next
Diffstat (limited to 'cpu/arm926ejs/davinci/cpu.c')
-rw-r--r--cpu/arm926ejs/davinci/cpu.c50
1 files changed, 49 insertions, 1 deletions
diff --git a/cpu/arm926ejs/davinci/cpu.c b/cpu/arm926ejs/davinci/cpu.c
index 390cab8a2..fc3551c30 100644
--- a/cpu/arm926ejs/davinci/cpu.c
+++ b/cpu/arm926ejs/davinci/cpu.c
@@ -23,7 +23,7 @@
#include <common.h>
#include <netdev.h>
#include <asm/arch/hardware.h>
-
+#include <asm/io.h>
/* offsets from PLL controller base */
#define PLLC_PLLCTL 0x100
@@ -60,6 +60,54 @@
#define DDR_PLLDIV PLLC_PLLDIV1
#endif
+#ifdef CONFIG_SOC_DA8XX
+const dv_reg * const sysdiv[7] = {
+ &davinci_pllc_regs->plldiv1, &davinci_pllc_regs->plldiv2,
+ &davinci_pllc_regs->plldiv3, &davinci_pllc_regs->plldiv4,
+ &davinci_pllc_regs->plldiv5, &davinci_pllc_regs->plldiv6,
+ &davinci_pllc_regs->plldiv7
+};
+
+int clk_get(enum davinci_clk_ids id)
+{
+ int pre_div;
+ int pllm;
+ int post_div;
+ int pll_out;
+
+ pll_out = CONFIG_SYS_OSCIN_FREQ;
+
+ if (id == DAVINCI_AUXCLK_CLKID)
+ goto out;
+
+ /*
+ * Lets keep this simple. Combining operations can result in
+ * unexpected approximations
+ */
+ pre_div = (readl(&davinci_pllc_regs->prediv) &
+ DAVINCI_PLLC_DIV_MASK) + 1;
+ pllm = readl(&davinci_pllc_regs->pllm) + 1;
+
+ pll_out /= pre_div;
+ pll_out *= pllm;
+
+ if (id == DAVINCI_PLLM_CLKID)
+ goto out;
+
+ post_div = (readl(&davinci_pllc_regs->postdiv) &
+ DAVINCI_PLLC_DIV_MASK) + 1;
+
+ pll_out /= post_div;
+
+ if (id == DAVINCI_PLLC_CLKID)
+ goto out;
+
+ pll_out /= (readl(sysdiv[id - 1]) & DAVINCI_PLLC_DIV_MASK) + 1;
+
+out:
+ return pll_out;
+}
+#endif /* CONFIG_SOC_DA8XX */
#ifdef CONFIG_DISPLAY_CPUINFO