summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
diff options
context:
space:
mode:
authorDavid Li <davli@nvidia.com>2015-09-30 19:20:44 -0400
committerDeepak Nibade <dnibade@nvidia.com>2016-12-27 04:52:09 -0500
commit6430abceef37de5bd6dcbc3d4d33f9b90b6f08a7 (patch)
tree135713eac6b792716a966273875ba90519bd1a7b /drivers/gpu/nvgpu/gp10b/gr_gp10b.c
parentd44b5ecc30eaf4c307d56ee6205f8ca0b0f737c4 (diff)
gpu: nvgpu: gp10b: fix set_circular_buffer_size
It didn't set gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_r causing a GPU MMU fault when used. Bug 200141640 Bug 200141981 Bug 200141640 Change-Id: I8b9f71e480553ead2827ff1f1dde2ba2e6efe697 Signed-off-by: David Li <davli@nvidia.com> Reviewed-on: http://git-master/r/807694 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-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, 21 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
index 45befc51..04856e44 100644
--- a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
@@ -415,17 +415,26 @@ static void gr_gp10b_set_circular_buffer_size(struct gk20a *g, u32 data)
415{ 415{
416 struct gr_gk20a *gr = &g->gr; 416 struct gr_gk20a *gr = &g->gr;
417 u32 gpc_index, ppc_index, stride, val; 417 u32 gpc_index, ppc_index, stride, val;
418 u32 cb_size = data * 4; 418 u32 cb_size_steady = data * 4, cb_size;
419 419
420 gk20a_dbg_fn(""); 420 gk20a_dbg_fn("");
421 421
422 if (cb_size > gr->attrib_cb_size) 422 if (cb_size_steady > gr->attrib_cb_size)
423 cb_size = gr->attrib_cb_size; 423 cb_size_steady = gr->attrib_cb_size;
424 if (gk20a_readl(g, gr_gpc0_ppc0_cbm_beta_cb_size_r()) !=
425 gk20a_readl(g,
426 gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_r())) {
427 cb_size = cb_size_steady +
428 (gr_gpc0_ppc0_cbm_beta_cb_size_v_gfxp_v() -
429 gr_gpc0_ppc0_cbm_beta_cb_size_v_default_v());
430 } else {
431 cb_size = cb_size_steady;
432 }
424 433
425 gk20a_writel(g, gr_ds_tga_constraintlogic_beta_r(), 434 gk20a_writel(g, gr_ds_tga_constraintlogic_beta_r(),
426 (gk20a_readl(g, gr_ds_tga_constraintlogic_beta_r()) & 435 (gk20a_readl(g, gr_ds_tga_constraintlogic_beta_r()) &
427 ~gr_ds_tga_constraintlogic_beta_cbsize_f(~0)) | 436 ~gr_ds_tga_constraintlogic_beta_cbsize_f(~0)) |
428 gr_ds_tga_constraintlogic_beta_cbsize_f(cb_size)); 437 gr_ds_tga_constraintlogic_beta_cbsize_f(cb_size_steady));
429 438
430 for (gpc_index = 0; gpc_index < gr->gpc_count; gpc_index++) { 439 for (gpc_index = 0; gpc_index < gr->gpc_count; gpc_index++) {
431 stride = proj_gpc_stride_v() * gpc_index; 440 stride = proj_gpc_stride_v() * gpc_index;
@@ -446,12 +455,19 @@ static void gr_gp10b_set_circular_buffer_size(struct gk20a *g, u32 data)
446 stride + 455 stride +
447 proj_ppc_in_gpc_stride_v() * ppc_index, val); 456 proj_ppc_in_gpc_stride_v() * ppc_index, val);
448 457
458 gk20a_writel(g, proj_ppc_in_gpc_stride_v() * ppc_index +
459 gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_r() +
460 stride,
461 gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_v_f(
462 cb_size_steady));
463
449 val = gk20a_readl(g, gr_gpcs_swdx_tc_beta_cb_size_r( 464 val = gk20a_readl(g, gr_gpcs_swdx_tc_beta_cb_size_r(
450 ppc_index + gpc_index)); 465 ppc_index + gpc_index));
451 466
452 val = set_field(val, 467 val = set_field(val,
453 gr_gpcs_swdx_tc_beta_cb_size_v_m(), 468 gr_gpcs_swdx_tc_beta_cb_size_v_m(),
454 gr_gpcs_swdx_tc_beta_cb_size_v_f(cb_size * 469 gr_gpcs_swdx_tc_beta_cb_size_v_f(
470 cb_size_steady *
455 gr->gpc_ppc_count[gpc_index])); 471 gr->gpc_ppc_count[gpc_index]));
456 472
457 gk20a_writel(g, gr_gpcs_swdx_tc_beta_cb_size_r( 473 gk20a_writel(g, gr_gpcs_swdx_tc_beta_cb_size_r(