diff options
Diffstat (limited to 'firmware/target/arm/imx31/gigabeat-s/clkctl-imx31.c')
-rw-r--r-- | firmware/target/arm/imx31/gigabeat-s/clkctl-imx31.c | 18 |
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 | ||
27 | unsigned int imx31_get_src_pll(void) | ||
28 | { | ||
29 | return (CLKCTL_PMCR0 & 0xC0000000) == 0 ? PLL_SERIAL : PLL_MCU; | ||
30 | } | ||
31 | |||
27 | void imx31_clkctl_module_clock_gating(enum IMX31_CG_LIST cg, | 32 | void 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 | ||
73 | unsigned int imx31_clkctl_get_ipg_clk(void) | 78 | unsigned 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 | ||
89 | unsigned 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 | |||
84 | unsigned int imx31_clkctl_get_ata_clk(void) | 98 | unsigned int imx31_clkctl_get_ata_clk(void) |
85 | { | 99 | { |
86 | return imx31_clkctl_get_ipg_clk(); | 100 | return imx31_clkctl_get_ipg_clk(); |