diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2018-09-19 09:44:25 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-09-24 13:15:14 -0400 |
commit | b7b107c1a19d0c9ca399c6a356a9d1adc4daac85 (patch) | |
tree | b733aaf34a2bf3fbb58c322d73fec7036276110c /drivers/gpu/nvgpu/include | |
parent | e16843c2efdffa13c15cc0a014b2a5598cc2f4ec (diff) |
gpu: nvgpu: Add HALs to implement pdb cache WAR
We have a h/w bug on some chips and we need to support below additional
HALs to implement a s/w WAR
gops.fifo.init_pdb_cache_war()
gops.fifo.deinit_pdb_cache_war()
gops.fb.apply_pdb_cache_war()
Add new API nvgpu_init_mm_pdb_cache_war() to initialize WAR sequence
and call this from MM initialization and before setting up rest of the
memory management units
Deinitialize WAR while cleaning up MM support
Add pdb_cache_war_mem member to gk20a to hold all the memory needed
for the WAR
Bug 200449545
Change-Id: Id2ac0d940c7881c7b0cf396413273c0f329a1a1f
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1834901
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/include')
-rw-r--r-- | drivers/gpu/nvgpu/include/nvgpu/gk20a.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h index 593b553c..2fd533c6 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h +++ b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h | |||
@@ -583,6 +583,7 @@ struct gpu_ops { | |||
583 | u32 index, u32 state); | 583 | u32 index, u32 state); |
584 | void (*fault_buf_configure_hw)(struct gk20a *g, u32 index); | 584 | void (*fault_buf_configure_hw)(struct gk20a *g, u32 index); |
585 | size_t (*get_vidmem_size)(struct gk20a *g); | 585 | size_t (*get_vidmem_size)(struct gk20a *g); |
586 | int (*apply_pdb_cache_war)(struct gk20a *g); | ||
586 | } fb; | 587 | } fb; |
587 | struct { | 588 | struct { |
588 | void (*slcg_bus_load_gating_prod)(struct gk20a *g, bool prod); | 589 | void (*slcg_bus_load_gating_prod)(struct gk20a *g, bool prod); |
@@ -749,6 +750,8 @@ struct gpu_ops { | |||
749 | struct nvgpu_semaphore *s, u64 sema_va, | 750 | struct nvgpu_semaphore *s, u64 sema_va, |
750 | struct priv_cmd_entry *cmd, | 751 | struct priv_cmd_entry *cmd, |
751 | u32 off, bool acquire, bool wfi); | 752 | u32 off, bool acquire, bool wfi); |
753 | int (*init_pdb_cache_war)(struct gk20a *g); | ||
754 | void (*deinit_pdb_cache_war)(struct gk20a *g); | ||
752 | } fifo; | 755 | } fifo; |
753 | struct pmu_v { | 756 | struct pmu_v { |
754 | u32 (*get_pmu_cmdline_args_size)(struct nvgpu_pmu *pmu); | 757 | u32 (*get_pmu_cmdline_args_size)(struct nvgpu_pmu *pmu); |
@@ -1647,6 +1650,8 @@ struct gk20a { | |||
1647 | 1650 | ||
1648 | struct nvgpu_list_node boardobj_head; | 1651 | struct nvgpu_list_node boardobj_head; |
1649 | struct nvgpu_list_node boardobjgrp_head; | 1652 | struct nvgpu_list_node boardobjgrp_head; |
1653 | |||
1654 | struct nvgpu_mem pdb_cache_war_mem; | ||
1650 | }; | 1655 | }; |
1651 | 1656 | ||
1652 | static inline bool nvgpu_is_timeouts_enabled(struct gk20a *g) | 1657 | static inline bool nvgpu_is_timeouts_enabled(struct gk20a *g) |