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 | 50 |
1 files changed, 22 insertions, 28 deletions
diff --git a/firmware/target/arm/imx31/gigabeat-s/clkctl-imx31.c b/firmware/target/arm/imx31/gigabeat-s/clkctl-imx31.c index df592deecb..761cf8f701 100644 --- a/firmware/target/arm/imx31/gigabeat-s/clkctl-imx31.c +++ b/firmware/target/arm/imx31/gigabeat-s/clkctl-imx31.c | |||
@@ -24,47 +24,41 @@ | |||
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) | 27 | unsigned int ccm_get_src_pll(void) |
28 | { | 28 | { |
29 | return (CLKCTL_PMCR0 & 0xC0000000) == 0 ? PLL_SERIAL : PLL_MCU; | 29 | return (CCM_PMCR0 & 0xC0000000) == 0 ? PLL_SERIAL : PLL_MCU; |
30 | } | 30 | } |
31 | 31 | ||
32 | void imx31_clkctl_module_clock_gating(enum IMX31_CG_LIST cg, | 32 | void ccm_module_clock_gating(enum IMX31_CG_LIST cg, enum IMX31_CG_MODES mode) |
33 | enum IMX31_CG_MODES mode) | ||
34 | { | 33 | { |
35 | volatile unsigned long *reg; | 34 | volatile unsigned long *reg; |
36 | unsigned long mask; | 35 | unsigned long mask; |
37 | int shift; | 36 | int shift; |
38 | int oldlevel; | ||
39 | 37 | ||
40 | if (cg >= CG_NUM_CLOCKS) | 38 | if (cg >= CG_NUM_CLOCKS) |
41 | return; | 39 | return; |
42 | 40 | ||
43 | reg = &CLKCTL_CGR0 + cg / 16; /* Select CGR0, CGR1, CGR2 */ | 41 | reg = &CCM_CGR0 + cg / 16; /* Select CGR0, CGR1, CGR2 */ |
44 | shift = 2*(cg % 16); /* Get field shift */ | 42 | shift = 2*(cg % 16); /* Get field shift */ |
45 | mask = CG_MASK << shift; /* Select field */ | 43 | mask = CG_MASK << shift; /* Select field */ |
46 | 44 | ||
47 | oldlevel = disable_interrupt_save(IRQ_FIQ_STATUS); | 45 | imx31_regmod32(reg, mode << shift, mask); |
48 | |||
49 | *reg = (*reg & ~mask) | ((mode << shift) & mask); | ||
50 | |||
51 | restore_interrupt(oldlevel); | ||
52 | } | 46 | } |
53 | 47 | ||
54 | /* Get the PLL reference clock frequency in HZ */ | 48 | /* Get the PLL reference clock frequency in HZ */ |
55 | unsigned int imx31_clkctl_get_pll_ref_clk(void) | 49 | unsigned int ccm_get_pll_ref_clk(void) |
56 | { | 50 | { |
57 | if ((CLKCTL_CCMR & (3 << 1)) == (1 << 1)) | 51 | if ((CCM_CCMR & (3 << 1)) == (1 << 1)) |
58 | return CONFIG_CLK32_FREQ * 1024; | 52 | return CONFIG_CLK32_FREQ * 1024; |
59 | else | 53 | else |
60 | return CONFIG_HCLK_FREQ; | 54 | return CONFIG_HCLK_FREQ; |
61 | } | 55 | } |
62 | 56 | ||
63 | /* Return PLL frequency in HZ */ | 57 | /* Return PLL frequency in HZ */ |
64 | unsigned int imx31_clkctl_get_pll(enum IMX31_PLLS pll) | 58 | unsigned int ccm_get_pll(enum IMX31_PLLS pll) |
65 | { | 59 | { |
66 | uint32_t infreq = imx31_clkctl_get_pll_ref_clk(); | 60 | uint32_t infreq = ccm_get_pll_ref_clk(); |
67 | uint32_t reg = (&CLKCTL_MPCTL)[pll]; | 61 | uint32_t reg = (&CCM_MPCTL)[pll]; |
68 | uint32_t mfn = reg & 0x3ff; | 62 | uint32_t mfn = reg & 0x3ff; |
69 | uint32_t pd = ((reg >> 26) & 0xf) + 1; | 63 | uint32_t pd = ((reg >> 26) & 0xf) + 1; |
70 | uint64_t mfd = ((reg >> 16) & 0x3ff) + 1; | 64 | uint64_t mfd = ((reg >> 16) & 0x3ff) + 1; |
@@ -75,27 +69,27 @@ unsigned int imx31_clkctl_get_pll(enum IMX31_PLLS pll) | |||
75 | return 2*infreq*(mfi * mfd + mfn) / (mfd * pd); | 69 | return 2*infreq*(mfi * mfd + mfn) / (mfd * pd); |
76 | } | 70 | } |
77 | 71 | ||
78 | unsigned int imx31_clkctl_get_ipg_clk(void) | 72 | unsigned int ccm_get_ipg_clk(void) |
79 | { | 73 | { |
80 | unsigned int pllnum = imx31_get_src_pll(); | 74 | unsigned int pllnum = ccm_get_src_pll(); |
81 | unsigned int pll = imx31_clkctl_get_pll(pllnum); | 75 | unsigned int pll = ccm_get_pll(pllnum); |
82 | uint32_t reg = CLKCTL_PDR0; | 76 | uint32_t reg = CCM_PDR0; |
83 | unsigned int max_pdf = ((reg >> 3) & 0x7) + 1; | 77 | unsigned int max_pdf = ((reg >> 3) & 0x7) + 1; |
84 | unsigned int ipg_pdf = ((reg >> 6) & 0x3) + 1; | 78 | unsigned int ipg_pdf = ((reg >> 6) & 0x3) + 1; |
85 | 79 | ||
86 | return pll / (max_pdf * ipg_pdf); | 80 | return pll / (max_pdf * ipg_pdf); |
87 | } | 81 | } |
88 | 82 | ||
89 | unsigned int imx31_clkctl_get_ahb_clk(void) | 83 | unsigned int ccm_get_ahb_clk(void) |
90 | { | 84 | { |
91 | unsigned int pllnum = imx31_get_src_pll(); | 85 | unsigned int pllnum = ccm_get_src_pll(); |
92 | unsigned int pll = imx31_clkctl_get_pll(pllnum); | 86 | unsigned int pll = ccm_get_pll(pllnum); |
93 | unsigned int max_pdf = ((CLKCTL_PDR0 >> 3) & 0x7) + 1; | 87 | unsigned int max_pdf = ((CCM_PDR0 >> 3) & 0x7) + 1; |
94 | 88 | ||
95 | return pll / max_pdf; | 89 | return pll / max_pdf; |
96 | } | 90 | } |
97 | 91 | ||
98 | unsigned int imx31_clkctl_get_ata_clk(void) | 92 | unsigned int ccm_get_ata_clk(void) |
99 | { | 93 | { |
100 | return imx31_clkctl_get_ipg_clk(); | 94 | return ccm_get_ipg_clk(); |
101 | } | 95 | } |