summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx31/gigabeat-s/clkctl-imx31.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx31/gigabeat-s/clkctl-imx31.c')
-rw-r--r--firmware/target/arm/imx31/gigabeat-s/clkctl-imx31.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/firmware/target/arm/imx31/gigabeat-s/clkctl-imx31.c b/firmware/target/arm/imx31/gigabeat-s/clkctl-imx31.c
index 784a3f6586..df592deecb 100644
--- a/firmware/target/arm/imx31/gigabeat-s/clkctl-imx31.c
+++ b/firmware/target/arm/imx31/gigabeat-s/clkctl-imx31.c
@@ -24,6 +24,11 @@
24#include "cpu.h" 24#include "cpu.h"
25#include "clkctl-imx31.h" 25#include "clkctl-imx31.h"
26 26
27unsigned int imx31_get_src_pll(void)
28{
29 return (CLKCTL_PMCR0 & 0xC0000000) == 0 ? PLL_SERIAL : PLL_MCU;
30}
31
27void imx31_clkctl_module_clock_gating(enum IMX31_CG_LIST cg, 32void imx31_clkctl_module_clock_gating(enum IMX31_CG_LIST cg,
28 enum IMX31_CG_MODES mode) 33 enum IMX31_CG_MODES mode)
29{ 34{
@@ -72,8 +77,8 @@ unsigned int imx31_clkctl_get_pll(enum IMX31_PLLS pll)
72 77
73unsigned int imx31_clkctl_get_ipg_clk(void) 78unsigned int imx31_clkctl_get_ipg_clk(void)
74{ 79{
75 unsigned int pll = imx31_clkctl_get_pll((CLKCTL_PMCR0 & 0xC0000000) == 0 ? 80 unsigned int pllnum = imx31_get_src_pll();
76 PLL_SERIAL : PLL_MCU); 81 unsigned int pll = imx31_clkctl_get_pll(pllnum);
77 uint32_t reg = CLKCTL_PDR0; 82 uint32_t reg = CLKCTL_PDR0;
78 unsigned int max_pdf = ((reg >> 3) & 0x7) + 1; 83 unsigned int max_pdf = ((reg >> 3) & 0x7) + 1;
79 unsigned int ipg_pdf = ((reg >> 6) & 0x3) + 1; 84 unsigned int ipg_pdf = ((reg >> 6) & 0x3) + 1;
@@ -81,6 +86,15 @@ unsigned int imx31_clkctl_get_ipg_clk(void)
81 return pll / (max_pdf * ipg_pdf); 86 return pll / (max_pdf * ipg_pdf);
82} 87}
83 88
89unsigned int imx31_clkctl_get_ahb_clk(void)
90{
91 unsigned int pllnum = imx31_get_src_pll();
92 unsigned int pll = imx31_clkctl_get_pll(pllnum);
93 unsigned int max_pdf = ((CLKCTL_PDR0 >> 3) & 0x7) + 1;
94
95 return pll / max_pdf;
96}
97
84unsigned int imx31_clkctl_get_ata_clk(void) 98unsigned int imx31_clkctl_get_ata_clk(void)
85{ 99{
86 return imx31_clkctl_get_ipg_clk(); 100 return imx31_clkctl_get_ipg_clk();