From 2e73de831ff267ec57fa7176f42c15b33d055826 Mon Sep 17 00:00:00 2001 From: Rajesh Devaraj Date: Wed, 8 Feb 2023 09:45:06 +0000 Subject: [PATCH] gpu: nvgpu: add is_sw_method_subch pbdma gops Add is_sw_method_subch hal to avoid duplication of the entire function for new chips. JIRA NVGPU-9325 Change-Id: If18a2d510f77e269cb00dde609ec1c5941622858 Signed-off-by: Rajesh Devaraj Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2855046 Reviewed-by: svc-mobile-coverity Reviewed-by: svc-mobile-misra Reviewed-by: svc-mobile-cert Reviewed-by: svcacv Reviewed-by: Prathap Kumar Valsan Reviewed-by: Seema Khowala GVS: Gerrit_Virtual_Submit --- drivers/gpu/nvgpu/hal/fifo/pbdma_ga10b.h | 2 ++ drivers/gpu/nvgpu/hal/fifo/pbdma_ga10b_fusa.c | 4 ++-- drivers/gpu/nvgpu/hal/init/hal_ga100.c | 1 + drivers/gpu/nvgpu/hal/init/hal_ga10b.c | 1 + drivers/gpu/nvgpu/include/nvgpu/gops/pbdma.h | 2 ++ 5 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/nvgpu/hal/fifo/pbdma_ga10b.h b/drivers/gpu/nvgpu/hal/fifo/pbdma_ga10b.h index d3d30f1ef..0d88b1c12 100644 --- a/drivers/gpu/nvgpu/hal/fifo/pbdma_ga10b.h +++ b/drivers/gpu/nvgpu/hal/fifo/pbdma_ga10b.h @@ -79,4 +79,6 @@ void ga10b_pbdma_report_error(struct gk20a *g, u32 pbdma_id, u32 pbdma_intr_0); void ga10b_pbdma_dump_intr_0(struct gk20a *g, u32 pbdma_id, u32 pbdma_intr_0); +bool ga10b_pbdma_is_sw_method_subch(struct gk20a *g, u32 pbdma_id, + u32 pbdma_method_index); #endif /* NVGPU_PBDMA_GA10B_H */ diff --git a/drivers/gpu/nvgpu/hal/fifo/pbdma_ga10b_fusa.c b/drivers/gpu/nvgpu/hal/fifo/pbdma_ga10b_fusa.c index 385866f93..f9ed2fe53 100644 --- a/drivers/gpu/nvgpu/hal/fifo/pbdma_ga10b_fusa.c +++ b/drivers/gpu/nvgpu/hal/fifo/pbdma_ga10b_fusa.c @@ -146,7 +146,7 @@ static const char *const pbdma_intr_fault_type_desc[] = { "PBSEG badsplit", "SIGNATURE bad" }; -static bool ga10b_pbdma_is_sw_method_subch(struct gk20a *g, u32 pbdma_id, +bool ga10b_pbdma_is_sw_method_subch(struct gk20a *g, u32 pbdma_id, u32 pbdma_method_index) { u32 pbdma_method_stride; @@ -463,7 +463,7 @@ static bool ga10b_pbdma_handle_intr_0_legacy(struct gk20a *g, u32 pbdma_id, g->ops.pbdma.reset_header(g, pbdma_id); for (i = 0U; i < 4U; i++) { - if (ga10b_pbdma_is_sw_method_subch(g, + if (g->ops.pbdma.is_sw_method_subch(g, pbdma_id, i)) { ga10b_pbdma_reset_method(g, pbdma_id, i); diff --git a/drivers/gpu/nvgpu/hal/init/hal_ga100.c b/drivers/gpu/nvgpu/hal/init/hal_ga100.c index 322930021..d1a2b66c4 100644 --- a/drivers/gpu/nvgpu/hal/init/hal_ga100.c +++ b/drivers/gpu/nvgpu/hal/init/hal_ga100.c @@ -1080,6 +1080,7 @@ static const struct gops_pbdma ga100_ops_pbdma = { .set_channel_info_veid = gv11b_pbdma_set_channel_info_veid, .set_channel_info_chid = ga10b_pbdma_set_channel_info_chid, .set_intr_notify = ga10b_pbdma_set_intr_notify, + .is_sw_method_subch = ga10b_pbdma_is_sw_method_subch, .report_error = ga10b_pbdma_report_error, #ifdef CONFIG_NVGPU_HAL_NON_FUSA .pbdma_force_ce_split = ga100_pbdma_force_ce_split, diff --git a/drivers/gpu/nvgpu/hal/init/hal_ga10b.c b/drivers/gpu/nvgpu/hal/init/hal_ga10b.c index 781250bdf..62b7f2c70 100644 --- a/drivers/gpu/nvgpu/hal/init/hal_ga10b.c +++ b/drivers/gpu/nvgpu/hal/init/hal_ga10b.c @@ -1098,6 +1098,7 @@ static const struct gops_pbdma ga10b_ops_pbdma = { .set_channel_info_veid = gv11b_pbdma_set_channel_info_veid, .set_channel_info_chid = ga10b_pbdma_set_channel_info_chid, .set_intr_notify = ga10b_pbdma_set_intr_notify, + .is_sw_method_subch = ga10b_pbdma_is_sw_method_subch, .report_error = ga10b_pbdma_report_error, .config_userd_writeback_enable = gv11b_pbdma_config_userd_writeback_enable, .get_mmu_fault_id = ga10b_pbdma_get_mmu_fault_id, diff --git a/drivers/gpu/nvgpu/include/nvgpu/gops/pbdma.h b/drivers/gpu/nvgpu/include/nvgpu/gops/pbdma.h index a46b64d40..6a43a3594 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/gops/pbdma.h +++ b/drivers/gpu/nvgpu/include/nvgpu/gops/pbdma.h @@ -96,6 +96,8 @@ struct gops_pbdma { u32 pbdma_intr_0); bool (*handle_intr_0_acquire)(struct gk20a *g, u32 pbdma_id, u32 pbdma_intr_0, u32 *error_notifier); + bool (*is_sw_method_subch)(struct gk20a *g, u32 pbdma_id, + u32 pbdma_method_index); /** NON FUSA */ void (*syncpt_debug_dump)(struct gk20a *g,