summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h1
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c11
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.h8
-rw-r--r--drivers/gpu/nvgpu/gm20b/gr_gm20b.c1
4 files changed, 16 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index d8687a37..ec4597a8 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -302,6 +302,7 @@ struct gpu_ops {
302 u32 graphics_preempt_mode, 302 u32 graphics_preempt_mode,
303 u32 compute_preempt_mode); 303 u32 compute_preempt_mode);
304 int (*fuse_override)(struct gk20a *g); 304 int (*fuse_override)(struct gk20a *g);
305 void (*init_sm_id_table)(struct gk20a *g);
305 int (*load_smid_config)(struct gk20a *g); 306 int (*load_smid_config)(struct gk20a *g);
306 void (*program_sm_id_numbering)(struct gk20a *g, 307 void (*program_sm_id_numbering)(struct gk20a *g,
307 u32 gpc, u32 tpc, u32 smid); 308 u32 gpc, u32 tpc, u32 smid);
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 84b0ed6e..41ef5424 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -1293,7 +1293,7 @@ static void gr_gk20a_program_active_tpc_counts(struct gk20a *g, u32 gpc_index)
1293 gr_gpc0_gpm_sd_active_tpcs_num_f(gr->gpc_tpc_count[gpc_index])); 1293 gr_gpc0_gpm_sd_active_tpcs_num_f(gr->gpc_tpc_count[gpc_index]));
1294} 1294}
1295 1295
1296static void gr_gk20a_init_sm_id_table(struct gk20a *g) 1296void gr_gk20a_init_sm_id_table(struct gk20a *g)
1297{ 1297{
1298 u32 gpc, tpc; 1298 u32 gpc, tpc;
1299 u32 sm_id = 0; 1299 u32 sm_id = 0;
@@ -1304,6 +1304,9 @@ static void gr_gk20a_init_sm_id_table(struct gk20a *g)
1304 if (tpc < g->gr.gpc_tpc_count[gpc]) { 1304 if (tpc < g->gr.gpc_tpc_count[gpc]) {
1305 g->gr.sm_to_cluster[sm_id].tpc_index = tpc; 1305 g->gr.sm_to_cluster[sm_id].tpc_index = tpc;
1306 g->gr.sm_to_cluster[sm_id].gpc_index = gpc; 1306 g->gr.sm_to_cluster[sm_id].gpc_index = gpc;
1307 g->gr.sm_to_cluster[sm_id].sm_index = 0;
1308 g->gr.sm_to_cluster[sm_id].global_tpc_index =
1309 sm_id;
1307 sm_id++; 1310 sm_id++;
1308 } 1311 }
1309 } 1312 }
@@ -1339,9 +1342,10 @@ int gr_gk20a_init_fs_state(struct gk20a *g)
1339 1342
1340 gk20a_dbg_fn(""); 1343 gk20a_dbg_fn("");
1341 1344
1342 gr_gk20a_init_sm_id_table(g); 1345 if (g->ops.gr.init_sm_id_table)
1346 g->ops.gr.init_sm_id_table(g);
1343 1347
1344 for (sm_id = 0; sm_id < gr->tpc_count; sm_id++) { 1348 for (sm_id = 0; sm_id < g->gr.no_of_sm; sm_id++) {
1345 tpc_index = g->gr.sm_to_cluster[sm_id].tpc_index; 1349 tpc_index = g->gr.sm_to_cluster[sm_id].tpc_index;
1346 gpc_index = g->gr.sm_to_cluster[sm_id].gpc_index; 1350 gpc_index = g->gr.sm_to_cluster[sm_id].gpc_index;
1347 1351
@@ -9112,6 +9116,7 @@ void gk20a_init_gr_ops(struct gpu_ops *gops)
9112 gops->gr.get_preemption_mode_flags = gr_gk20a_get_preemption_mode_flags; 9116 gops->gr.get_preemption_mode_flags = gr_gk20a_get_preemption_mode_flags;
9113 gops->gr.program_active_tpc_counts = gr_gk20a_program_active_tpc_counts; 9117 gops->gr.program_active_tpc_counts = gr_gk20a_program_active_tpc_counts;
9114 gops->gr.program_sm_id_numbering = gr_gk20a_program_sm_id_numbering; 9118 gops->gr.program_sm_id_numbering = gr_gk20a_program_sm_id_numbering;
9119 gops->gr.init_sm_id_table = gr_gk20a_init_sm_id_table;
9115 gops->gr.is_ltcs_ltss_addr = gr_gk20a_is_ltcs_ltss_addr_stub; 9120 gops->gr.is_ltcs_ltss_addr = gr_gk20a_is_ltcs_ltss_addr_stub;
9116 gops->gr.is_ltcn_ltss_addr = gr_gk20a_is_ltcn_ltss_addr_stub; 9121 gops->gr.is_ltcn_ltss_addr = gr_gk20a_is_ltcn_ltss_addr_stub;
9117 gops->gr.split_lts_broadcast_addr = 9122 gops->gr.split_lts_broadcast_addr =
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.h b/drivers/gpu/nvgpu/gk20a/gr_gk20a.h
index e20207c5..1b7bc252 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.h
@@ -174,8 +174,10 @@ struct zbc_query_params {
174}; 174};
175 175
176struct sm_info { 176struct sm_info {
177 u8 gpc_index; 177 u32 gpc_index;
178 u8 tpc_index; 178 u32 tpc_index;
179 u32 sm_index;
180 u32 global_tpc_index;
179}; 181};
180 182
181#if defined(CONFIG_GK20A_CYCLE_STATS) 183#if defined(CONFIG_GK20A_CYCLE_STATS)
@@ -662,6 +664,8 @@ void gk20a_gr_enable_gpc_exceptions(struct gk20a *g);
662int gr_gk20a_commit_global_timeslice(struct gk20a *g, 664int gr_gk20a_commit_global_timeslice(struct gk20a *g,
663 struct channel_gk20a *c, bool patch); 665 struct channel_gk20a *c, bool patch);
664 666
667void gr_gk20a_init_sm_id_table(struct gk20a *g);
668
665static inline const char *gr_gk20a_graphics_preempt_mode_name(u32 graphics_preempt_mode) 669static inline const char *gr_gk20a_graphics_preempt_mode_name(u32 graphics_preempt_mode)
666{ 670{
667 switch (graphics_preempt_mode) { 671 switch (graphics_preempt_mode) {
diff --git a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
index 44a1c2c7..7903af79 100644
--- a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
@@ -1561,6 +1561,7 @@ void gm20b_init_gr(struct gpu_ops *gops)
1561 gops->gr.suspend_contexts = gr_gk20a_suspend_contexts; 1561 gops->gr.suspend_contexts = gr_gk20a_suspend_contexts;
1562 gops->gr.get_preemption_mode_flags = gr_gm20b_get_preemption_mode_flags; 1562 gops->gr.get_preemption_mode_flags = gr_gm20b_get_preemption_mode_flags;
1563 gops->gr.fuse_override = gm20b_gr_fuse_override; 1563 gops->gr.fuse_override = gm20b_gr_fuse_override;
1564 gops->gr.init_sm_id_table = gr_gk20a_init_sm_id_table;
1564 gops->gr.load_smid_config = gr_gm20b_load_smid_config; 1565 gops->gr.load_smid_config = gr_gm20b_load_smid_config;
1565 gops->gr.program_sm_id_numbering = gr_gm20b_program_sm_id_numbering; 1566 gops->gr.program_sm_id_numbering = gr_gm20b_program_sm_id_numbering;
1566 gops->gr.is_ltcs_ltss_addr = gr_gm20b_is_ltcs_ltss_addr; 1567 gops->gr.is_ltcs_ltss_addr = gr_gm20b_is_ltcs_ltss_addr;