From 8edfc9ee67d8c346310b2ad653754440719a29d7 Mon Sep 17 00:00:00 2001 From: Vijayakumar Date: Mon, 21 Nov 2016 17:49:13 +0530 Subject: gpu: nvgpu: set p state floor for sys and xbar clk bug 200254784 If XBAR and SYS clocks for a given GPC clock point is lower than minimum value mentioned in P state set the floor to minimum value mentioned in p state. it was set to value based ratio of a GPC clk value in VF table which can give value higher than one mentioned in p state. Ignore ratio and just set to p state value Change-Id: I9f7cd1d5842d057aff6d8243a31ab503ce35a8ca Signed-off-by: Vijayakumar Reviewed-on: http://git-master/r/1257251 Reviewed-by: Automatic_Commit_Validation_User (cherry picked from commit 5798680286967ff999f674bedd4fc0411615f914) Reviewed-on: http://git-master/r/1270949 GVS: Gerrit_Virtual_Submit --- drivers/gpu/nvgpu/clk/clk_arb.c | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) (limited to 'drivers/gpu/nvgpu/clk/clk_arb.c') diff --git a/drivers/gpu/nvgpu/clk/clk_arb.c b/drivers/gpu/nvgpu/clk/clk_arb.c index b816a570..ee75ce64 100644 --- a/drivers/gpu/nvgpu/clk/clk_arb.c +++ b/drivers/gpu/nvgpu/clk/clk_arb.c @@ -617,7 +617,6 @@ static int nvgpu_clk_arb_update_vf_table(struct nvgpu_clk_arb *arb) table->gpc2clk_points[j].gpc_mhz = arb->gpc2clk_f_points[i]; - setfllclk.gpc2clkmhz = arb->gpc2clk_f_points[i]; status = clk_get_fll_clks(g, &setfllclk); if (status < 0) { @@ -626,7 +625,6 @@ static int nvgpu_clk_arb_update_vf_table(struct nvgpu_clk_arb *arb) goto exit_vf_table; } - table->gpc2clk_points[j].sys_mhz = setfllclk.sys2clkmhz; table->gpc2clk_points[j].xbar_mhz = @@ -653,7 +651,6 @@ static int nvgpu_clk_arb_update_vf_table(struct nvgpu_clk_arb *arb) /* Second pass */ for (i = 0, j = 0; i < table->gpc2clk_num_points; i++) { - struct set_fll_clk setfllclk; u16 alt_gpc2clk = table->gpc2clk_points[i].gpc_mhz; gpc2clk_voltuv = gpc2clk_voltuv_sram = 0; @@ -673,9 +670,9 @@ static int nvgpu_clk_arb_update_vf_table(struct nvgpu_clk_arb *arb) if (table->gpc2clk_points[j].sys_mhz >= p5_info->min_mhz) { + table->gpc2clk_points[i].sys_mhz = - table->gpc2clk_points[j]. - sys_mhz; + p5_info->min_mhz; alt_gpc2clk = alt_gpc2clk < table->gpc2clk_points[j]. @@ -709,8 +706,8 @@ static int nvgpu_clk_arb_update_vf_table(struct nvgpu_clk_arb *arb) p5_info->min_mhz) { table->gpc2clk_points[i].xbar_mhz = - table->gpc2clk_points[j]. - xbar_mhz; + p5_info->min_mhz; + alt_gpc2clk = alt_gpc2clk < table->gpc2clk_points[j]. gpc_mhz ? @@ -728,24 +725,6 @@ static int nvgpu_clk_arb_update_vf_table(struct nvgpu_clk_arb *arb) } } - /* alternate gpc2clk clock has been requested, we need to - * calculate new ratios */ - if (alt_gpc2clk != table->gpc2clk_points[i].gpc_mhz) { - setfllclk.gpc2clkmhz = alt_gpc2clk; - - status = clk_get_fll_clks(g, &setfllclk); - if (status < 0) { - gk20a_err(dev_from_gk20a(g), - "failed to get GPC2CLK slave clocks"); - goto exit_vf_table; - } - - table->gpc2clk_points[i].sys_mhz = - setfllclk.sys2clkmhz; - table->gpc2clk_points[i].xbar_mhz = - setfllclk.xbar2clkmhz; - } - /* Calculate voltages */ status = clk_domain_get_f_or_v(g, CTRL_CLK_DOMAIN_GPC2CLK, &alt_gpc2clk, &gpc2clk_voltuv, -- cgit v1.2.2