diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2018-04-09 10:26:59 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-04-10 14:23:30 -0400 |
commit | d91ea322e1a6ae51ae8e017d09bfaf3e139ecf2d (patch) | |
tree | c8f95d7f89ad3a7cec265ee0b69b619119af161e /drivers/gpu/nvgpu/gk20a | |
parent | aa1f8e01ced661b640ee612f6a7bd201f0bbd6a4 (diff) |
gpu: nvgpu: fix gpc/tpc index for SMPC broadcast conversion
In gv11b_gr_egpc_etpc_priv_addr_table(), we call
gv11b_gr_update_priv_addr_table_smpc() to convert SMPC broadcast address into
list of unicast addresses
But before calling gv11b_gr_update_priv_addr_table_smpc() we sometimes
incorrectly set gpc_num/tpc_num to zero and that leads to generating incorrect
list of unicast addresses
Remove this incorrect initialization of gpc_num/tpc_num
Also update gv11b_gr_egpc_etpc_priv_addr_table() to receive tpc_num along with
gpc_num
Bug 2099717
Jira NVGPU-580
Change-Id: Idd4e5f78dbe6ca1800efae93c66355d06417d1f2
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1691373
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
GVS: Gerrit_Virtual_Submit
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/gk20a')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 3 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 2 |
2 files changed, 3 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index c2a8d6ce..e3b37747 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h | |||
@@ -244,7 +244,8 @@ struct gpu_ops { | |||
244 | u32 addr, int *addr_type, | 244 | u32 addr, int *addr_type, |
245 | u32 *gpc_num, u32 *tpc_num, u32 *broadcast_flags); | 245 | u32 *gpc_num, u32 *tpc_num, u32 *broadcast_flags); |
246 | void (*egpc_etpc_priv_addr_table)(struct gk20a *g, u32 addr, | 246 | void (*egpc_etpc_priv_addr_table)(struct gk20a *g, u32 addr, |
247 | u32 gpc, u32 broadcast_flags, u32 *priv_addr_table, | 247 | u32 gpc, u32 tpc, u32 broadcast_flags, |
248 | u32 *priv_addr_table, | ||
248 | u32 *priv_addr_table_index); | 249 | u32 *priv_addr_table_index); |
249 | bool (*is_tpc_addr)(struct gk20a *g, u32 addr); | 250 | bool (*is_tpc_addr)(struct gk20a *g, u32 addr); |
250 | bool (*is_egpc_addr)(struct gk20a *g, u32 addr); | 251 | bool (*is_egpc_addr)(struct gk20a *g, u32 addr); |
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index e4344b9f..96bc72af 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c | |||
@@ -6421,7 +6421,7 @@ int gr_gk20a_create_priv_addr_table(struct gk20a *g, | |||
6421 | (addr_type == CTXSW_ADDR_TYPE_ETPC)) && | 6421 | (addr_type == CTXSW_ADDR_TYPE_ETPC)) && |
6422 | g->ops.gr.egpc_etpc_priv_addr_table) { | 6422 | g->ops.gr.egpc_etpc_priv_addr_table) { |
6423 | gk20a_dbg(gpu_dbg_gpu_dbg, "addr_type : EGPC/ETPC"); | 6423 | gk20a_dbg(gpu_dbg_gpu_dbg, "addr_type : EGPC/ETPC"); |
6424 | g->ops.gr.egpc_etpc_priv_addr_table(g, addr, gpc_num, | 6424 | g->ops.gr.egpc_etpc_priv_addr_table(g, addr, gpc_num, tpc_num, |
6425 | broadcast_flags, priv_addr_table, &t); | 6425 | broadcast_flags, priv_addr_table, &t); |
6426 | } else if (broadcast_flags & PRI_BROADCAST_FLAGS_LTSS) { | 6426 | } else if (broadcast_flags & PRI_BROADCAST_FLAGS_LTSS) { |
6427 | g->ops.gr.split_lts_broadcast_addr(g, addr, | 6427 | g->ops.gr.split_lts_broadcast_addr(g, addr, |