summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
diff options
context:
space:
mode:
authorThomas Fleury <tfleury@nvidia.com>2016-06-09 13:33:04 -0400
committerDeepak Nibade <dnibade@nvidia.com>2016-12-27 04:56:18 -0500
commitd459bd68a6ea0462b7db58722d5ee26c9ce1dd73 (patch)
treea7e371e4968f5d31ee78e018c29e662261b923d7 /drivers/gpu/nvgpu/gp10b/gr_gp10b.c
parentb21aa660ef15dac60a011b2b1dc4a3bda6330889 (diff)
gpu: nvgpu: set graphics preemption state
Set NV_PGRAPH_PRI_FE_GFXP_WFI_TIMEOUT from the default of ~20us to ~100us. Also set NV_PGRAPH_DEBUG_2_GFXP_WFI_ALWAYS_INJECTS_WFI o avoid going into GFXP all the time. Bug 1593548 Jira VFND-1894 Change-Id: I6310c3605f7b83178c38de88788d87e36ee428b4 Signed-off-by: Thomas Fleury <tfleury@nvidia.com> Reviewed-on: http://git-master/r/1162629 (cherry picked from commit 873ddc7288063b1773d31a5bda30d980122d6645) Reviewed-on: http://git-master/r/1166988 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gp10b/gr_gp10b.c')
-rw-r--r--drivers/gpu/nvgpu/gp10b/gr_gp10b.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
index 534ffdb7..88893886 100644
--- a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
@@ -14,6 +14,7 @@
14 */ 14 */
15 15
16#include "gk20a/gk20a.h" /* FERMI and MAXWELL classes defined here */ 16#include "gk20a/gk20a.h" /* FERMI and MAXWELL classes defined here */
17#include <linux/clk.h>
17#include <linux/delay.h> 18#include <linux/delay.h>
18#include <linux/tegra-fuse.h> 19#include <linux/tegra-fuse.h>
19 20
@@ -32,6 +33,8 @@
32#include "gp10b_sysfs.h" 33#include "gp10b_sysfs.h"
33#include <linux/vmalloc.h> 34#include <linux/vmalloc.h>
34 35
36#define NVGPU_GFXP_WFI_TIMEOUT_US 100LL
37
35static bool gr_gp10b_is_valid_class(struct gk20a *g, u32 class_num) 38static bool gr_gp10b_is_valid_class(struct gk20a *g, u32 class_num)
36{ 39{
37 bool valid = false; 40 bool valid = false;
@@ -2151,6 +2154,28 @@ static int gp10b_gr_fuse_override(struct gk20a *g)
2151 } 2154 }
2152 2155
2153 kfree(fuses); 2156 kfree(fuses);
2157
2158 return 0;
2159}
2160
2161static int gr_gp10b_init_preemption_state(struct gk20a *g)
2162{
2163 struct gk20a_platform *platform = gk20a_get_platform(g->dev);
2164 u32 debug_2;
2165 u64 sysclk_rate;
2166 u32 sysclk_cycles;
2167
2168 sysclk_rate = platform->clk_get_rate(g->dev);
2169 sysclk_cycles = (u32)((sysclk_rate * NVGPU_GFXP_WFI_TIMEOUT_US) / 1000000ULL);
2170 gk20a_writel(g, gr_fe_gfxp_wfi_timeout_r(),
2171 gr_fe_gfxp_wfi_timeout_count_f(sysclk_cycles));
2172
2173 debug_2 = gk20a_readl(g, gr_debug_2_r());
2174 debug_2 = set_field(debug_2,
2175 gr_debug_2_gfxp_wfi_always_injects_wfi_m(),
2176 gr_debug_2_gfxp_wfi_always_injects_wfi_enabled_f());
2177 gk20a_writel(g, gr_debug_2_r(), debug_2);
2178
2154 return 0; 2179 return 0;
2155} 2180}
2156 2181
@@ -2158,6 +2183,7 @@ void gp10b_init_gr(struct gpu_ops *gops)
2158{ 2183{
2159 gm20b_init_gr(gops); 2184 gm20b_init_gr(gops);
2160 gops->gr.init_fs_state = gr_gp10b_init_fs_state; 2185 gops->gr.init_fs_state = gr_gp10b_init_fs_state;
2186 gops->gr.init_preemption_state = gr_gp10b_init_preemption_state;
2161 gops->gr.is_valid_class = gr_gp10b_is_valid_class; 2187 gops->gr.is_valid_class = gr_gp10b_is_valid_class;
2162 gops->gr.commit_global_cb_manager = gr_gp10b_commit_global_cb_manager; 2188 gops->gr.commit_global_cb_manager = gr_gp10b_commit_global_cb_manager;
2163 gops->gr.commit_global_pagepool = gr_gp10b_commit_global_pagepool; 2189 gops->gr.commit_global_pagepool = gr_gp10b_commit_global_pagepool;