| 42 | #include <mips/nlm/xlp.h> |
| 43 | |
| 44 | uint32_t |
| 45 | xlp_get_cpu_frequency(int node, int core) |
| 46 | { |
| 47 | uint64_t sysbase = nlm_get_sys_regbase(node); |
| 48 | unsigned int pll_divf, pll_divr, dfs_div, ext_div; |
| 49 | unsigned int rstval, dfsval; |
| 50 | |
| 51 | rstval = nlm_read_sys_reg(sysbase, SYS_POWER_ON_RESET_CFG); |
| 52 | dfsval = nlm_read_sys_reg(sysbase, SYS_CORE_DFS_DIV_VALUE); |
| 53 | pll_divf = ((rstval >> 10) & 0x7f) + 1; |
| 54 | pll_divr = ((rstval >> 8) & 0x3) + 1; |
| 55 | if (!nlm_is_xlp8xx_ax()) |
| 56 | ext_div = ((rstval >> 30) & 0x3) + 1; |
| 57 | else |
| 58 | ext_div = 1; |
| 59 | dfs_div = ((dfsval >> (core << 2)) & 0xf) + 1; |
| 60 | |
| 61 | return ((800000000ULL * pll_divf)/(3 * pll_divr * ext_div * dfs_div)); |
| 62 | } |
| 63 | |
| 64 | static u_int |
| 65 | nlm_get_device_frequency(uint64_t sysbase, int devtype) |
no test coverage detected