summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
diff options
context:
space:
mode:
authorDavid Nieto <dmartineznie@nvidia.com>2017-12-27 16:13:34 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2018-01-05 16:54:27 -0500
commit83096b7ffcfe7e79df1f28749a509eb645462d75 (patch)
tree6c2ffc1d99141b58fbb36274311c6b06114e336a /drivers/gpu/nvgpu/gm20b/gr_gm20b.c
parentde7721ddc989e16729911a637467a04d8bb134b8 (diff)
gpu: nvgpu: fix L2 ROP mask
L2 mask was assuming FS units contain valid information, but they do not. The new code checks if the L2 is FS before reading the L2/ROP mask Bug 2040328 Change-Id: Id07cc630e65cfc71ab8084a3700d884b6cd3430f Signed-off-by: David Nieto <dmartineznie@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1627327 Reviewed-by: Thomas Fleury <tfleury@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b/gr_gm20b.c')
-rw-r--r--drivers/gpu/nvgpu/gm20b/gr_gm20b.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
index 3341721c..36fad8b3 100644
--- a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
@@ -1087,15 +1087,17 @@ u32 *gr_gm20b_rop_l2_en_mask(struct gk20a *g)
1087{ 1087{
1088 struct gr_gk20a *gr = &g->gr; 1088 struct gr_gk20a *gr = &g->gr;
1089 u32 i, tmp, max_fbps_count, max_ltc_per_fbp; 1089 u32 i, tmp, max_fbps_count, max_ltc_per_fbp;
1090 unsigned long fbp_en_mask;
1090 u32 rop_l2_all_en; 1091 u32 rop_l2_all_en;
1091 1092
1092 tmp = gk20a_readl(g, top_num_fbps_r()); 1093 tmp = gk20a_readl(g, top_num_fbps_r());
1093 max_fbps_count = top_num_fbps_value_v(tmp); 1094 max_fbps_count = top_num_fbps_value_v(tmp);
1094 max_ltc_per_fbp = gr_gm20b_get_max_ltc_per_fbp(g); 1095 max_ltc_per_fbp = gr_gm20b_get_max_ltc_per_fbp(g);
1095 rop_l2_all_en = (1 << max_ltc_per_fbp) - 1; 1096 rop_l2_all_en = (1 << max_ltc_per_fbp) - 1;
1097 fbp_en_mask = gr_gm20b_get_fbp_en_mask(g);
1096 1098
1097 /* mask of Rop_L2 for each FBP */ 1099 /* mask of Rop_L2 for each FBP */
1098 for (i = 0; i < max_fbps_count; i++) { 1100 for_each_set_bit(i, &fbp_en_mask, max_fbps_count) {
1099 tmp = gk20a_readl(g, fuse_status_opt_rop_l2_fbp_r(i)); 1101 tmp = gk20a_readl(g, fuse_status_opt_rop_l2_fbp_r(i));
1100 gr->fbp_rop_l2_en_mask[i] = rop_l2_all_en ^ tmp; 1102 gr->fbp_rop_l2_en_mask[i] = rop_l2_all_en ^ tmp;
1101 } 1103 }