aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/netlogic
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/netlogic')
-rw-r--r--arch/mips/netlogic/xlp/nlm_hal.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/arch/mips/netlogic/xlp/nlm_hal.c b/arch/mips/netlogic/xlp/nlm_hal.c
index 885f6878594..9428e7125fe 100644
--- a/arch/mips/netlogic/xlp/nlm_hal.c
+++ b/arch/mips/netlogic/xlp/nlm_hal.c
@@ -86,20 +86,26 @@ int nlm_irt_to_irq(int irt)
86 } 86 }
87} 87}
88 88
89unsigned int nlm_get_cpu_frequency(void) 89unsigned int nlm_get_core_frequency(int core)
90{ 90{
91 unsigned int pll_divf, pll_divr, dfs_div, denom; 91 unsigned int pll_divf, pll_divr, dfs_div, ext_div;
92 unsigned int val; 92 unsigned int rstval, dfsval, denom;
93 uint64_t num; 93 uint64_t num;
94 94
95 val = nlm_read_sys_reg(nlm_sys_base, SYS_POWER_ON_RESET_CFG); 95 rstval = nlm_read_sys_reg(nlm_sys_base, SYS_POWER_ON_RESET_CFG);
96 pll_divf = (val >> 10) & 0x7f; 96 dfsval = nlm_read_sys_reg(nlm_sys_base, SYS_CORE_DFS_DIV_VALUE);
97 pll_divr = (val >> 8) & 0x3; 97 pll_divf = ((rstval >> 10) & 0x7f) + 1;
98 dfs_div = (val >> 17) & 0x3; 98 pll_divr = ((rstval >> 8) & 0x3) + 1;
99 ext_div = ((rstval >> 30) & 0x3) + 1;
100 dfs_div = ((dfsval >> (core * 4)) & 0xf) + 1;
99 101
100 num = pll_divf + 1; 102 num = 800000000ULL * pll_divf;
101 denom = 3 * (pll_divr + 1) * (1 << (dfs_div + 1)); 103 denom = 3 * pll_divr * ext_div * dfs_div;
102 num = num * 800000000ULL;
103 do_div(num, denom); 104 do_div(num, denom);
104 return (unsigned int)num; 105 return (unsigned int)num;
105} 106}
107
108unsigned int nlm_get_cpu_frequency(void)
109{
110 return nlm_get_core_frequency(0);
111}