summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2014-11-20 08:41:41 -0500
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:12:20 -0400
commit8af8c35741d2161749d1d0de3208a30793745360 (patch)
treea80ec489a43be3c32d1e4bb21e0d33a75c6f49af /drivers/gpu/nvgpu
parentbf9f5f82d185469558cefcdc9159ead09114251f (diff)
gpu: nvgpu: Implement per-chip pagepool size
Bug 1567274 Change-Id: Ib366f56c109f60be98435124e9e73697d161c4d0 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/606935 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h1
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c14
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.h2
-rw-r--r--drivers/gpu/nvgpu/gm20b/gr_gm20b.c9
4 files changed, 24 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index 5ca07d7f..afe1447e 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -143,6 +143,7 @@ struct gpu_ops {
143 struct zbc_entry *color_val, u32 index); 143 struct zbc_entry *color_val, u32 index);
144 int (*add_zbc_depth)(struct gk20a *g, struct gr_gk20a *gr, 144 int (*add_zbc_depth)(struct gk20a *g, struct gr_gk20a *gr,
145 struct zbc_entry *depth_val, u32 index); 145 struct zbc_entry *depth_val, u32 index);
146 void (*buffer_size_defaults)(struct gk20a *g);
146 } gr; 147 } gr;
147 const char *name; 148 const char *name;
148 struct { 149 struct {
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 482b3c5f..7cd99a63 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -858,7 +858,7 @@ static int gr_gk20a_commit_global_ctx_buffers(struct gk20a *g,
858 size = gr->global_ctx_buffer[PAGEPOOL].size / 858 size = gr->global_ctx_buffer[PAGEPOOL].size /
859 gr_scc_pagepool_total_pages_byte_granularity_v(); 859 gr_scc_pagepool_total_pages_byte_granularity_v();
860 860
861 if (size == gr_scc_pagepool_total_pages_hwmax_value_v()) 861 if (size == gr->pagepool_default_size)
862 size = gr_scc_pagepool_total_pages_hwmax_v(); 862 size = gr_scc_pagepool_total_pages_hwmax_v();
863 863
864 gk20a_dbg_info("pagepool buffer addr : 0x%016llx, size : %d", 864 gk20a_dbg_info("pagepool buffer addr : 0x%016llx, size : %d",
@@ -2301,7 +2301,7 @@ static int gr_gk20a_alloc_global_ctx_buffers(struct gk20a *g)
2301 u32 cb_buffer_size = gr->bundle_cb_default_size * 2301 u32 cb_buffer_size = gr->bundle_cb_default_size *
2302 gr_scc_bundle_cb_size_div_256b_byte_granularity_v(); 2302 gr_scc_bundle_cb_size_div_256b_byte_granularity_v();
2303 2303
2304 u32 pagepool_buffer_size = gr_scc_pagepool_total_pages_hwmax_value_v() * 2304 u32 pagepool_buffer_size = gr->pagepool_default_size *
2305 gr_scc_pagepool_total_pages_byte_granularity_v(); 2305 gr_scc_pagepool_total_pages_byte_granularity_v();
2306 2306
2307 gk20a_dbg_fn(""); 2307 gk20a_dbg_fn("");
@@ -3187,6 +3187,7 @@ static int gr_gk20a_init_gr_config(struct gk20a *g, struct gr_gk20a *gr)
3187 g->ops.gr.bundle_cb_defaults(g); 3187 g->ops.gr.bundle_cb_defaults(g);
3188 g->ops.gr.cb_size_default(g); 3188 g->ops.gr.cb_size_default(g);
3189 g->ops.gr.calc_global_ctx_buffer_size(g); 3189 g->ops.gr.calc_global_ctx_buffer_size(g);
3190 g->ops.gr.buffer_size_defaults(g);
3190 gr->timeslice_mode = gr_gpcs_ppcs_cbm_cfg_timeslice_mode_enable_v(); 3191 gr->timeslice_mode = gr_gpcs_ppcs_cbm_cfg_timeslice_mode_enable_v();
3191 3192
3192 gk20a_dbg_info("bundle_cb_default_size: %d", 3193 gk20a_dbg_info("bundle_cb_default_size: %d",
@@ -7317,6 +7318,14 @@ void gk20a_resume_all_sms(struct gk20a *g)
7317 gr_gpcs_tpcs_sm_dbgr_control0_r(), dbgr_control0); 7318 gr_gpcs_tpcs_sm_dbgr_control0_r(), dbgr_control0);
7318} 7319}
7319 7320
7321static void gr_gk20a_buffer_size_defaults(struct gk20a *g)
7322{
7323 g->gr.pagepool_default_size =
7324 gr_scc_pagepool_total_pages_hwmax_value_v();
7325 g->gr.pagepool_max_size =
7326 gr_scc_pagepool_total_pages_hwmax_value_v();
7327}
7328
7320void gk20a_init_gr_ops(struct gpu_ops *gops) 7329void gk20a_init_gr_ops(struct gpu_ops *gops)
7321{ 7330{
7322 gops->gr.access_smpc_reg = gr_gk20a_access_smpc_reg; 7331 gops->gr.access_smpc_reg = gr_gk20a_access_smpc_reg;
@@ -7353,5 +7362,6 @@ void gk20a_init_gr_ops(struct gpu_ops *gops)
7353 gops->gr.detect_sm_arch = gr_gk20a_detect_sm_arch; 7362 gops->gr.detect_sm_arch = gr_gk20a_detect_sm_arch;
7354 gops->gr.add_zbc_color = gr_gk20a_add_zbc_color; 7363 gops->gr.add_zbc_color = gr_gk20a_add_zbc_color;
7355 gops->gr.add_zbc_depth = gr_gk20a_add_zbc_depth; 7364 gops->gr.add_zbc_depth = gr_gk20a_add_zbc_depth;
7365 gops->gr.buffer_size_defaults = gr_gk20a_buffer_size_defaults;
7356} 7366}
7357 7367
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.h b/drivers/gpu/nvgpu/gk20a/gr_gk20a.h
index e5d315e5..c5dd80ea 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.h
@@ -243,6 +243,8 @@ struct gr_gk20a {
243 u32 alpha_cb_default_size; 243 u32 alpha_cb_default_size;
244 u32 alpha_cb_size; 244 u32 alpha_cb_size;
245 u32 timeslice_mode; 245 u32 timeslice_mode;
246 u32 pagepool_default_size;
247 u32 pagepool_max_size;
246 248
247 struct gr_ctx_buffer_desc global_ctx_buffer[NR_GLOBAL_CTX_BUF]; 249 struct gr_ctx_buffer_desc global_ctx_buffer[NR_GLOBAL_CTX_BUF];
248 250
diff --git a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
index 67bfb430..44fa6189 100644
--- a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
@@ -770,6 +770,14 @@ static void gr_gm20b_detect_sm_arch(struct gk20a *g)
770 gr_gpc0_tpc0_sm_arch_warp_count_v(v); 770 gr_gpc0_tpc0_sm_arch_warp_count_v(v);
771} 771}
772 772
773static void gr_gm20b_buffer_size_defaults(struct gk20a *g)
774{
775 g->gr.pagepool_default_size =
776 gr_scc_pagepool_total_pages_hwmax_value_v();
777 g->gr.pagepool_max_size =
778 gr_scc_pagepool_total_pages_hwmax_value_v();
779}
780
773void gm20b_init_gr(struct gpu_ops *gops) 781void gm20b_init_gr(struct gpu_ops *gops)
774{ 782{
775 gops->gr.init_gpc_mmu = gr_gm20b_init_gpc_mmu; 783 gops->gr.init_gpc_mmu = gr_gm20b_init_gpc_mmu;
@@ -807,4 +815,5 @@ void gm20b_init_gr(struct gpu_ops *gops)
807 gops->gr.detect_sm_arch = gr_gm20b_detect_sm_arch; 815 gops->gr.detect_sm_arch = gr_gm20b_detect_sm_arch;
808 gops->gr.add_zbc_color = gr_gk20a_add_zbc_color; 816 gops->gr.add_zbc_color = gr_gk20a_add_zbc_color;
809 gops->gr.add_zbc_depth = gr_gk20a_add_zbc_depth; 817 gops->gr.add_zbc_depth = gr_gk20a_add_zbc_depth;
818 gops->gr.buffer_size_defaults = gr_gm20b_buffer_size_defaults;
810} 819}