diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/gr_gp10b.c | 26 |
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( |