mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-25 02:52:51 +03:00
gpu: nvgpu: support resetting each GR instance
Add a new header file <nvgpu/gr/gr_instances.h> that supports below macros to execute various functions for GR instances 1) nvgpu_gr_exec_for_each_instance Execute a function for each GR instance by configuring GR remap window for that instance. Function being executed returns void. 2) nvgpu_gr_exec_with_ret_for_each_instance Execute a function for each GR instance by configuring GR remap window for that instance. Function being executed returns an error. 3) nvgpu_gr_exec_for_all_instances Execute a function for all GR instances at once. For this GR remap window needs to be disabled temporarily. If CONFIG_NVGPU_MIG is disabled, all above macros will turn into simple funciton calls. If CONFIG_NVGPU_MIG is disabled or if runtime flag NVGPU_SUPPORT_MIG is disabled, all above macros will turn into simple function calls that configure single GR instance. Separate out GR engine reset code into new API gr_reset_engine() and execute it with nvgpu_gr_exec_with_ret_for_each_instance(). PROD values need to be loaded in legacy mode, hence call nvgpu_cg_init_gr_load_gating_prod() inside nvgpu_gr_exec_for_all_instances(). Rename gr_init_prepare_hw() to more appropriate gr_reset_hw_and_load_prod() Moe gops.gr.init.fifo_access() call to gr_init_reset_enable_hw(). Add new API nvgpu_grmgr_get_gr_syspipe_id() to query GR instance syspipe id from common.grmgr unit. Add nvgpu_gr_get_syspipe_id() that returns same value stored in nvgpu_gr struct. Add cur_gr_instance field to struct nvgpu_gr to track current GR instance being programmed under remap window. Jira NVGPU-5648 Change-Id: I86920303427a6e6547ebf195daa37438365bb38e Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2403550 Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
Alex Waterman
parent
34c24873a7
commit
6745b0685e
@@ -242,6 +242,16 @@ int test_ltc_init_support(struct unit_module *m,
|
||||
return UNIT_SUCCESS;
|
||||
}
|
||||
|
||||
static void nvgpu_init_gr_manager(struct gk20a *g)
|
||||
{
|
||||
struct nvgpu_gpu_instance *gpu_instance = &g->mig.gpu_instance[0];
|
||||
struct nvgpu_gr_syspipe *gr_syspipe = &gpu_instance->gr_syspipe;
|
||||
|
||||
g->mig.num_gpu_instances = 1;
|
||||
gr_syspipe->gr_instance_id = 0U;
|
||||
gr_syspipe->gr_syspipe_id = 0U;
|
||||
}
|
||||
|
||||
int test_ltc_ecc_init_free(struct unit_module *m, struct gk20a *g, void *args)
|
||||
{
|
||||
int ret = UNIT_SUCCESS;
|
||||
@@ -261,6 +271,8 @@ int test_ltc_ecc_init_free(struct unit_module *m, struct gk20a *g, void *args)
|
||||
unit_return_fail(m, "netlist init failed\n");
|
||||
}
|
||||
|
||||
nvgpu_init_gr_manager(g);
|
||||
|
||||
err = nvgpu_gr_alloc(g);
|
||||
if (err != 0) {
|
||||
unit_return_fail(m, "failed to init gr\n");
|
||||
|
||||
Reference in New Issue
Block a user