diff options
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 17 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gv11b/gr_gv11b.c | 15 |
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)++; |