diff options
author | Richard Zhao <rizhao@nvidia.com> | 2017-08-08 18:45:33 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-08-28 22:34:22 -0400 |
commit | 0e0767672ae7e66d0ec249b8847f36c685fe995e (patch) | |
tree | 79a917b0200c85307475be9bdf59dedfbd56a30e | |
parent | 6365040db35fd01c8ebff39bd9dbc6c73c48fb17 (diff) |
gpu: nvgpu: vgpu: get engines info from RM server
- get engines info from constants
- remove according HAL from gp10b vgpu
Jira VFND-3797
Change-Id: If010e59c358ab0519cb0d8d6211c0bcc20fc3723
Signed-off-by: Richard Zhao <rizhao@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1536179
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/fifo_vgpu.c | 45 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/gp10b/vgpu_fifo_gp10b.c | 28 | ||||
-rw-r--r-- | include/linux/tegra_vgpu.h | 18 |
3 files changed, 48 insertions, 43 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c index 3f03e25a..252b4e43 100644 --- a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c | |||
@@ -163,27 +163,42 @@ static int vgpu_channel_setup_ramfc(struct channel_gk20a *ch, u64 gpfifo_base, | |||
163 | 163 | ||
164 | static int vgpu_fifo_init_engine_info(struct fifo_gk20a *f) | 164 | static int vgpu_fifo_init_engine_info(struct fifo_gk20a *f) |
165 | { | 165 | { |
166 | struct fifo_engine_info_gk20a *gr_info; | 166 | struct vgpu_priv_data *priv = vgpu_get_priv_data(f->g); |
167 | struct fifo_engine_info_gk20a *ce_info; | 167 | struct tegra_vgpu_engines_info *engines = &priv->constants.engines_info; |
168 | const u32 gr_sw_id = ENGINE_GR_GK20A; | 168 | u32 i; |
169 | const u32 ce_sw_id = ENGINE_GRCE_GK20A; | ||
170 | 169 | ||
171 | gk20a_dbg_fn(""); | 170 | gk20a_dbg_fn(""); |
172 | 171 | ||
173 | f->num_engines = 2; | 172 | if (engines->num_engines > TEGRA_VGPU_MAX_ENGINES) { |
173 | nvgpu_err(f->g, "num_engines %d larger than max %d", | ||
174 | engines->num_engines, TEGRA_VGPU_MAX_ENGINES); | ||
175 | return -EINVAL; | ||
176 | } | ||
177 | |||
178 | f->num_engines = engines->num_engines; | ||
179 | for (i = 0; i < f->num_engines; i++) { | ||
180 | struct fifo_engine_info_gk20a *info = | ||
181 | &f->engine_info[engines->info[i].engine_id]; | ||
174 | 182 | ||
175 | gr_info = &f->engine_info[0]; | 183 | if (engines->info[i].engine_id >= f->max_engines) { |
184 | nvgpu_err(f->g, "engine id %d larger than max %d", | ||
185 | engines->info[i].engine_id, | ||
186 | f->max_engines); | ||
187 | return -EINVAL; | ||
188 | } | ||
176 | 189 | ||
177 | /* FIXME: retrieve this from server */ | 190 | info->intr_mask = engines->info[i].intr_mask; |
178 | gr_info->runlist_id = 0; | 191 | info->reset_mask = engines->info[i].reset_mask; |
179 | gr_info->engine_enum = gr_sw_id; | 192 | info->runlist_id = engines->info[i].runlist_id; |
180 | f->active_engines_list[0] = 0; | 193 | info->pbdma_id = engines->info[i].pbdma_id; |
194 | info->inst_id = engines->info[i].inst_id; | ||
195 | info->pri_base = engines->info[i].pri_base; | ||
196 | info->engine_enum = engines->info[i].engine_enum; | ||
197 | info->fault_id = engines->info[i].fault_id; | ||
198 | f->active_engines_list[i] = engines->info[i].engine_id; | ||
199 | } | ||
181 | 200 | ||
182 | ce_info = &f->engine_info[1]; | 201 | gk20a_dbg_fn("done"); |
183 | ce_info->runlist_id = 0; | ||
184 | ce_info->inst_id = 2; | ||
185 | ce_info->engine_enum = ce_sw_id; | ||
186 | f->active_engines_list[1] = 1; | ||
187 | 202 | ||
188 | return 0; | 203 | return 0; |
189 | } | 204 | } |
diff --git a/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_fifo_gp10b.c b/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_fifo_gp10b.c index 23d945fb..52e90f33 100644 --- a/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_fifo_gp10b.c +++ b/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_fifo_gp10b.c | |||
@@ -13,36 +13,8 @@ | |||
13 | 13 | ||
14 | #include "vgpu_fifo_gp10b.h" | 14 | #include "vgpu_fifo_gp10b.h" |
15 | 15 | ||
16 | static int vgpu_gp10b_fifo_init_engine_info(struct fifo_gk20a *f) | ||
17 | { | ||
18 | struct fifo_engine_info_gk20a *gr_info; | ||
19 | struct fifo_engine_info_gk20a *ce_info; | ||
20 | const u32 gr_sw_id = ENGINE_GR_GK20A; | ||
21 | const u32 ce_sw_id = ENGINE_GRCE_GK20A; | ||
22 | |||
23 | gk20a_dbg_fn(""); | ||
24 | |||
25 | f->num_engines = 2; | ||
26 | |||
27 | gr_info = &f->engine_info[0]; | ||
28 | |||
29 | /* FIXME: retrieve this from server */ | ||
30 | gr_info->runlist_id = 0; | ||
31 | gr_info->engine_enum = gr_sw_id; | ||
32 | f->active_engines_list[0] = 0; | ||
33 | |||
34 | ce_info = &f->engine_info[1]; | ||
35 | ce_info->runlist_id = 0; | ||
36 | ce_info->inst_id = 0; | ||
37 | ce_info->engine_enum = ce_sw_id; | ||
38 | f->active_engines_list[1] = 1; | ||
39 | |||
40 | return 0; | ||
41 | } | ||
42 | |||
43 | void vgpu_gp10b_init_fifo_ops(struct gpu_ops *gops) | 16 | void vgpu_gp10b_init_fifo_ops(struct gpu_ops *gops) |
44 | { | 17 | { |
45 | /* syncpoint protection not supported yet */ | 18 | /* syncpoint protection not supported yet */ |
46 | gops->fifo.init_engine_info = vgpu_gp10b_fifo_init_engine_info; | ||
47 | gops->fifo.resetup_ramfc = NULL; | 19 | gops->fifo.resetup_ramfc = NULL; |
48 | } | 20 | } |
diff --git a/include/linux/tegra_vgpu.h b/include/linux/tegra_vgpu.h index 3f73d357..1c486f5c 100644 --- a/include/linux/tegra_vgpu.h +++ b/include/linux/tegra_vgpu.h | |||
@@ -422,6 +422,23 @@ struct tegra_vgpu_gpu_clk_rate_params { | |||
422 | u32 rate; /* in kHz */ | 422 | u32 rate; /* in kHz */ |
423 | }; | 423 | }; |
424 | 424 | ||
425 | /* TEGRA_VGPU_MAX_ENGINES must be equal or greater than num_engines */ | ||
426 | #define TEGRA_VGPU_MAX_ENGINES 4 | ||
427 | struct tegra_vgpu_engines_info { | ||
428 | u32 num_engines; | ||
429 | struct engineinfo { | ||
430 | u32 engine_id; | ||
431 | u32 intr_mask; | ||
432 | u32 reset_mask; | ||
433 | u32 runlist_id; | ||
434 | u32 pbdma_id; | ||
435 | u32 inst_id; | ||
436 | u32 pri_base; | ||
437 | u32 engine_enum; | ||
438 | u32 fault_id; | ||
439 | } info[TEGRA_VGPU_MAX_ENGINES]; | ||
440 | }; | ||
441 | |||
425 | #define TEGRA_VGPU_MAX_GPC_COUNT 16 | 442 | #define TEGRA_VGPU_MAX_GPC_COUNT 16 |
426 | #define TEGRA_VGPU_MAX_TPC_COUNT_PER_GPC 16 | 443 | #define TEGRA_VGPU_MAX_TPC_COUNT_PER_GPC 16 |
427 | 444 | ||
@@ -459,6 +476,7 @@ struct tegra_vgpu_constants_params { | |||
459 | u32 default_timeslice_us; | 476 | u32 default_timeslice_us; |
460 | u32 preempt_ctx_size; | 477 | u32 preempt_ctx_size; |
461 | u32 channel_base; | 478 | u32 channel_base; |
479 | struct tegra_vgpu_engines_info engines_info; | ||
462 | }; | 480 | }; |
463 | 481 | ||
464 | struct tegra_vgpu_channel_cyclestats_snapshot_params { | 482 | struct tegra_vgpu_channel_cyclestats_snapshot_params { |