summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/clk_gk20a.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/clk_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/clk_gk20a.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/clk_gk20a.c b/drivers/gpu/nvgpu/gk20a/clk_gk20a.c
index 151a332b..33d81bd4 100644
--- a/drivers/gpu/nvgpu/gk20a/clk_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/clk_gk20a.c
@@ -34,12 +34,12 @@
34 34
35/* from vbios PLL info table */ 35/* from vbios PLL info table */
36struct pll_parms gpc_pll_params = { 36struct pll_parms gpc_pll_params = {
37 144, 2064, /* freq */ 37 144000, 2064000, /* freq */
38 1000, 2064, /* vco */ 38 1000000, 2064000, /* vco */
39 12, 38, /* u */ 39 12000, 38000, /* u */
40 1, 255, /* M */ 40 1, 255, /* M */
41 8, 255, /* N */ 41 8, 255, /* N */
42 1, 32, /* PL */ 42 1, 32, /* PL */
43}; 43};
44 44
45static int num_gpu_cooling_freq; 45static int num_gpu_cooling_freq;
@@ -467,7 +467,7 @@ static int gk20a_init_clk_setup_sw(struct gk20a *g)
467 clk->pll_delay = 300; /* usec */ 467 clk->pll_delay = 300; /* usec */
468 468
469 clk->gpc_pll.id = GK20A_GPC_PLL; 469 clk->gpc_pll.id = GK20A_GPC_PLL;
470 clk->gpc_pll.clk_in = ref_rate / 1000000; /* MHz */ 470 clk->gpc_pll.clk_in = ref_rate / KHZ;
471 471
472 /* Decide initial frequency */ 472 /* Decide initial frequency */
473 if (!initialized) { 473 if (!initialized) {
@@ -777,7 +777,7 @@ static int pll_reg_show(struct seq_file *s, void *data)
777 pl = trim_sys_gpcpll_coeff_pldiv_v(reg); 777 pl = trim_sys_gpcpll_coeff_pldiv_v(reg);
778 f = g->clk.gpc_pll.clk_in * n / (m * pl_to_div[pl]); 778 f = g->clk.gpc_pll.clk_in * n / (m * pl_to_div[pl]);
779 seq_printf(s, "coef = 0x%x : m = %u : n = %u : pl = %u", reg, m, n, pl); 779 seq_printf(s, "coef = 0x%x : m = %u : n = %u : pl = %u", reg, m, n, pl);
780 seq_printf(s, " : pll_f(gpu_f) = %u(%u) MHz\n", f, f/2); 780 seq_printf(s, " : pll_f(gpu_f) = %u(%u) kHz\n", f, f/2);
781 mutex_unlock(&g->clk.clk_mutex); 781 mutex_unlock(&g->clk.clk_mutex);
782 return 0; 782 return 0;
783} 783}
@@ -801,7 +801,7 @@ static int monitor_get(void *data, u64 *val)
801 int err; 801 int err;
802 802
803 u32 ncycle = 100; /* count GPCCLK for ncycle of clkin */ 803 u32 ncycle = 100; /* count GPCCLK for ncycle of clkin */
804 u32 clkin = clk->gpc_pll.clk_in; 804 u64 freq = clk->gpc_pll.clk_in;
805 u32 count1, count2; 805 u32 count1, count2;
806 806
807 err = gk20a_busy(g->dev); 807 err = gk20a_busy(g->dev);
@@ -824,7 +824,10 @@ static int monitor_get(void *data, u64 *val)
824 count1 = gk20a_readl(g, trim_gpc_clk_cntr_ncgpcclk_cnt_r(0)); 824 count1 = gk20a_readl(g, trim_gpc_clk_cntr_ncgpcclk_cnt_r(0));
825 udelay(100); 825 udelay(100);
826 count2 = gk20a_readl(g, trim_gpc_clk_cntr_ncgpcclk_cnt_r(0)); 826 count2 = gk20a_readl(g, trim_gpc_clk_cntr_ncgpcclk_cnt_r(0));
827 *val = (u64)(trim_gpc_clk_cntr_ncgpcclk_cnt_value_v(count2) * clkin / ncycle); 827 freq *= trim_gpc_clk_cntr_ncgpcclk_cnt_value_v(count2);
828 do_div(freq, ncycle);
829 *val = freq;
830
828 gk20a_idle(g->dev); 831 gk20a_idle(g->dev);
829 832
830 if (count1 != count2) 833 if (count1 != count2)