diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 11 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gr_gk20a.h | 8 |
3 files changed, 15 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 | ||
1296 | static void gr_gk20a_init_sm_id_table(struct gk20a *g) | 1296 | void 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 | ||
176 | struct sm_info { | 176 | struct 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); | |||
662 | int gr_gk20a_commit_global_timeslice(struct gk20a *g, | 664 | int gr_gk20a_commit_global_timeslice(struct gk20a *g, |
663 | struct channel_gk20a *c, bool patch); | 665 | struct channel_gk20a *c, bool patch); |
664 | 666 | ||
667 | void gr_gk20a_init_sm_id_table(struct gk20a *g); | ||
668 | |||
665 | static inline const char *gr_gk20a_graphics_preempt_mode_name(u32 graphics_preempt_mode) | 669 | static 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) { |