From 0e42d34d16640fac79e7217980d9bfbd5f5b2fef Mon Sep 17 00:00:00 2001 From: seshendra Gadagottu Date: Mon, 26 Mar 2018 18:23:52 -0700 Subject: gpu: nvgpu: gv11b: chip revision check for invalidates Only for gv11b A01 version following invalidates are disabled: -CBM alpha and beta invalidations for L2 -SCC pagepool invalidates -SWDX spill buffer invalidates Bug 2053668 Change-Id: I027f923b63b24bbbc054a7d9a377d757994a07ad Signed-off-by: seshendra Gadagottu Reviewed-on: https://git-master.nvidia.com/r/1700981 Reviewed-by: svc-mobile-coverity GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gv11b/gr_gv11b.c | 44 ++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 18 deletions(-) (limited to 'drivers/gpu/nvgpu') diff --git a/drivers/gpu/nvgpu/gv11b/gr_gv11b.c b/drivers/gpu/nvgpu/gv11b/gr_gv11b.c index 24366911..3ae09058 100644 --- a/drivers/gpu/nvgpu/gv11b/gr_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/gr_gv11b.c @@ -2835,6 +2835,8 @@ int gr_gv11b_init_fs_state(struct gk20a *g) { u32 data; int err; + u32 ver = g->params.gpu_arch + g->params.gpu_impl; + u32 rev = g->params.gpu_rev; gk20a_dbg_fn(""); @@ -2843,38 +2845,44 @@ int gr_gv11b_init_fs_state(struct gk20a *g) gr_gpcs_tpcs_sm_texio_control_oor_addr_check_mode_arm_63_48_match_f()); gk20a_writel(g, gr_gpcs_tpcs_sm_texio_control_r(), data); - /* Disable CBM alpha and beta invalidations for l2 */ - data = gk20a_readl(g, gr_gpcs_ppcs_cbm_debug_r()); - data = set_field(data, gr_gpcs_ppcs_cbm_debug_invalidate_alpha_m(), + if (ver == NVGPU_GPUID_GV11B && rev == 0xa1) { + + /* Disable CBM alpha and beta invalidations for l2 for gv11b A01 */ + data = gk20a_readl(g, gr_gpcs_ppcs_cbm_debug_r()); + data = set_field(data, + gr_gpcs_ppcs_cbm_debug_invalidate_alpha_m(), gr_gpcs_ppcs_cbm_debug_invalidate_alpha_disable_f()); - data = set_field(data, gr_gpcs_ppcs_cbm_debug_invalidate_beta_m(), + data = set_field(data, + gr_gpcs_ppcs_cbm_debug_invalidate_beta_m(), gr_gpcs_ppcs_cbm_debug_invalidate_beta_disable_f()); - gk20a_writel(g, gr_gpcs_ppcs_cbm_debug_r(), data); + gk20a_writel(g, gr_gpcs_ppcs_cbm_debug_r(), data); + + /* Disable SCC pagepool invalidates for gv11b A01 */ + data = gk20a_readl(g, gr_scc_debug_r()); + data = set_field(data, + gr_scc_debug_pagepool_invalidates_m(), + gr_scc_debug_pagepool_invalidates_disable_f()); + gk20a_writel(g, gr_scc_debug_r(), data); + + /* Disable SWDX spill buffer invalidates for gv11b A01 */ + data = gk20a_readl(g, gr_gpcs_swdx_spill_unit_r()); + data = set_field(data, + gr_gpcs_swdx_spill_unit_spill_buffer_cache_mgmt_mode_m(), + gr_gpcs_swdx_spill_unit_spill_buffer_cache_mgmt_mode_disabled_f()); + gk20a_writel(g, gr_gpcs_swdx_spill_unit_r(), data); + } data = gk20a_readl(g, gr_gpcs_tpcs_sm_disp_ctrl_r()); data = set_field(data, gr_gpcs_tpcs_sm_disp_ctrl_re_suppress_m(), gr_gpcs_tpcs_sm_disp_ctrl_re_suppress_disable_f()); gk20a_writel(g, gr_gpcs_tpcs_sm_disp_ctrl_r(), data); - /* Disable SCC pagepool invalidates */ - data = gk20a_readl(g, gr_scc_debug_r()); - data = set_field(data, gr_scc_debug_pagepool_invalidates_m(), - gr_scc_debug_pagepool_invalidates_disable_f()); - gk20a_writel(g, gr_scc_debug_r(), data); - if (g->gr.fecs_feature_override_ecc_val != 0) { gk20a_writel(g, gr_fecs_feature_override_ecc_r(), g->gr.fecs_feature_override_ecc_val); } - /* Disable SWDX spill buffer invalidates */ - data = gk20a_readl(g, gr_gpcs_swdx_spill_unit_r()); - data = set_field( - data, gr_gpcs_swdx_spill_unit_spill_buffer_cache_mgmt_mode_m(), - gr_gpcs_swdx_spill_unit_spill_buffer_cache_mgmt_mode_disabled_f()); - gk20a_writel(g, gr_gpcs_swdx_spill_unit_r(), data); - err = gr_gk20a_init_fs_state(g); if (err) return err; -- cgit v1.2.2