summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c17
-rw-r--r--drivers/gpu/nvgpu/gv11b/gr_gv11b.c15
2 files changed, 24 insertions, 8 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index e06d190e..ceb606e4 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -6353,6 +6353,7 @@ static int gr_gk20a_create_priv_addr_table(struct gk20a *g,
6353{ 6353{
6354 int addr_type; /*enum ctxsw_addr_type */ 6354 int addr_type; /*enum ctxsw_addr_type */
6355 u32 gpc_num, tpc_num, ppc_num, be_num; 6355 u32 gpc_num, tpc_num, ppc_num, be_num;
6356 u32 priv_addr, gpc_addr;
6356 u32 broadcast_flags; 6357 u32 broadcast_flags;
6357 u32 t; 6358 u32 t;
6358 int err; 6359 int err;
@@ -6404,10 +6405,18 @@ static int gr_gk20a_create_priv_addr_table(struct gk20a *g,
6404 priv_addr_table, &t); 6405 priv_addr_table, &t);
6405 if (err) 6406 if (err)
6406 return err; 6407 return err;
6407 } else 6408 } else {
6408 priv_addr_table[t++] = 6409 priv_addr = pri_gpc_addr(g,
6409 pri_gpc_addr(g, pri_gpccs_addr_mask(addr), 6410 pri_gpccs_addr_mask(addr),
6410 gpc_num); 6411 gpc_num);
6412
6413 gpc_addr = pri_gpccs_addr_mask(priv_addr);
6414 tpc_num = g->ops.gr.get_tpc_num(g, gpc_addr);
6415 if (tpc_num >= g->gr.gpc_tpc_count[gpc_num])
6416 continue;
6417
6418 priv_addr_table[t++] = priv_addr;
6419 }
6411 } 6420 }
6412 } else if (((addr_type == CTXSW_ADDR_TYPE_EGPC) || 6421 } else if (((addr_type == CTXSW_ADDR_TYPE_EGPC) ||
6413 (addr_type == CTXSW_ADDR_TYPE_ETPC)) && 6422 (addr_type == CTXSW_ADDR_TYPE_ETPC)) &&
diff --git a/drivers/gpu/nvgpu/gv11b/gr_gv11b.c b/drivers/gpu/nvgpu/gv11b/gr_gv11b.c
index e0c60efb..7f6d1906 100644
--- a/drivers/gpu/nvgpu/gv11b/gr_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/gr_gv11b.c
@@ -3979,6 +3979,7 @@ void gv11b_gr_egpc_etpc_priv_addr_table(struct gk20a *g, u32 addr,
3979 u32 gpc, u32 broadcast_flags, u32 *priv_addr_table, u32 *t) 3979 u32 gpc, u32 broadcast_flags, u32 *priv_addr_table, u32 *t)
3980{ 3980{
3981 u32 gpc_num, tpc_num; 3981 u32 gpc_num, tpc_num;
3982 u32 priv_addr, gpc_addr;
3982 3983
3983 nvgpu_log_info(g, "addr=0x%x", addr); 3984 nvgpu_log_info(g, "addr=0x%x", addr);
3984 3985
@@ -4017,10 +4018,16 @@ void gv11b_gr_egpc_etpc_priv_addr_table(struct gk20a *g, u32 addr,
4017 g, gpc_num, tpc_num, addr, 4018 g, gpc_num, tpc_num, addr,
4018 priv_addr_table, t); 4019 priv_addr_table, t);
4019 } else { 4020 } else {
4020 priv_addr_table[*t] = 4021 priv_addr = pri_egpc_addr(g,
4021 pri_egpc_addr(g, 4022 pri_gpccs_addr_mask(addr),
4022 pri_gpccs_addr_mask(addr), 4023 gpc_num);
4023 gpc_num); 4024
4025 gpc_addr = pri_gpccs_addr_mask(priv_addr);
4026 tpc_num = g->ops.gr.get_tpc_num(g, gpc_addr);
4027 if (tpc_num >= g->gr.gpc_tpc_count[gpc_num])
4028 continue;
4029
4030 priv_addr_table[*t] = priv_addr;
4024 nvgpu_log_info(g, "priv_addr_table[%d]:%#08x", 4031 nvgpu_log_info(g, "priv_addr_table[%d]:%#08x",
4025 *t, priv_addr_table[*t]); 4032 *t, priv_addr_table[*t]);
4026 (*t)++; 4033 (*t)++;