diff options
author | Thomas Fleury <tfleury@nvidia.com> | 2016-06-09 13:33:04 -0400 |
---|---|---|
committer | Deepak Nibade <dnibade@nvidia.com> | 2016-12-27 04:56:18 -0500 |
commit | d459bd68a6ea0462b7db58722d5ee26c9ce1dd73 (patch) | |
tree | a7e371e4968f5d31ee78e018c29e662261b923d7 /drivers/gpu | |
parent | b21aa660ef15dac60a011b2b1dc4a3bda6330889 (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')
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/gr_gp10b.c | 26 |
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 | |||
35 | static bool gr_gp10b_is_valid_class(struct gk20a *g, u32 class_num) | 38 | static 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 | |||
2161 | static 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; |