From 8ca378e1c092555fb12fa95cbfd33e9962510ed1 Mon Sep 17 00:00:00 2001 From: Thomas Fleury Date: Mon, 18 Nov 2019 15:06:15 -0500 Subject: [PATCH] gpu: nvgpu: add unit tests for pbdma_status Add unit tests for: - nvgpu_pbdma_status_is_chsw_switch - nvgpu_pbdma_status_is_chsw_load - nvgpu_pbdma_status_is_chsw_save - nvgpu_pbdma_status_is_chsw_valid - nvgpu_pbdma_status_is_id_type_tsg - nvgpu_pbdma_status_is_next_id_type_tsg Jira NVGPU-3490 Change-Id: Iaf032b7a39483d1378945b269f16be8349dd6d7b Signed-off-by: Thomas Fleury Reviewed-on: https://git-master.nvidia.com/r/2241818 GVS: Gerrit_Virtual_Submit Reviewed-by: Philip Elcan Reviewed-by: Vinod Gopalakrishnakurup Reviewed-by: mobile promotions Tested-by: mobile promotions --- userspace/units/fifo/pbdma/nvgpu-pbdma.c | 45 ++++++++++++++++++++++++ userspace/units/fifo/pbdma/nvgpu-pbdma.h | 27 ++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/userspace/units/fifo/pbdma/nvgpu-pbdma.c b/userspace/units/fifo/pbdma/nvgpu-pbdma.c index d0b6bef41..a0b8becee 100644 --- a/userspace/units/fifo/pbdma/nvgpu-pbdma.c +++ b/userspace/units/fifo/pbdma/nvgpu-pbdma.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -201,10 +202,54 @@ done: } +int test_pbdma_status(struct unit_module *m, + struct gk20a *g, void *args) +{ + int ret = UNIT_FAIL; + struct nvgpu_pbdma_status_info pbdma_status; + + memset(&pbdma_status, 0, sizeof(pbdma_status)); + for (pbdma_status.chsw_status = NVGPU_PBDMA_CHSW_STATUS_INVALID; + pbdma_status.chsw_status <= NVGPU_PBDMA_CHSW_STATUS_SWITCH; + pbdma_status.chsw_status++) + { + assert(nvgpu_pbdma_status_is_chsw_switch(&pbdma_status) == + (pbdma_status.chsw_status == NVGPU_PBDMA_CHSW_STATUS_SWITCH)); + assert(nvgpu_pbdma_status_is_chsw_load(&pbdma_status) == + (pbdma_status.chsw_status == NVGPU_PBDMA_CHSW_STATUS_LOAD)); + assert(nvgpu_pbdma_status_is_chsw_save(&pbdma_status) == + (pbdma_status.chsw_status == NVGPU_PBDMA_CHSW_STATUS_SAVE)); + assert(nvgpu_pbdma_status_is_chsw_valid(&pbdma_status) == + (pbdma_status.chsw_status == NVGPU_PBDMA_CHSW_STATUS_VALID)); + } + + pbdma_status.id_type = PBDMA_STATUS_ID_TYPE_CHID; + assert(nvgpu_pbdma_status_is_id_type_tsg(&pbdma_status) == false); + pbdma_status.id_type = PBDMA_STATUS_ID_TYPE_TSGID; + assert(nvgpu_pbdma_status_is_id_type_tsg(&pbdma_status) == true); + pbdma_status.id_type = PBDMA_STATUS_ID_TYPE_INVALID; + assert(nvgpu_pbdma_status_is_id_type_tsg(&pbdma_status) == false); + + pbdma_status.next_id_type = PBDMA_STATUS_ID_TYPE_CHID; + assert(nvgpu_pbdma_status_is_next_id_type_tsg(&pbdma_status) == false); + pbdma_status.next_id_type = PBDMA_STATUS_ID_TYPE_TSGID; + assert(nvgpu_pbdma_status_is_next_id_type_tsg(&pbdma_status) == true); + pbdma_status.next_id_type = PBDMA_STATUS_ID_TYPE_INVALID; + assert(nvgpu_pbdma_status_is_next_id_type_tsg(&pbdma_status) == false); + + ret = UNIT_SUCCESS; + +done: + return ret; +} + + + struct unit_module_test nvgpu_pbdma_tests[] = { UNIT_TEST(setup_sw, test_pbdma_setup_sw, &unit_ctx, 0), UNIT_TEST(init_support, test_fifo_init_support, &unit_ctx, 0), UNIT_TEST(pbdma_find_for_runlist, test_pbdma_find_for_runlist, &unit_ctx, 0), + UNIT_TEST(pbdma_status, test_pbdma_status, &unit_ctx, 0), UNIT_TEST(remove_support, test_fifo_remove_support, &unit_ctx, 0), }; diff --git a/userspace/units/fifo/pbdma/nvgpu-pbdma.h b/userspace/units/fifo/pbdma/nvgpu-pbdma.h index e06f1e40f..9dd40f49b 100644 --- a/userspace/units/fifo/pbdma/nvgpu-pbdma.h +++ b/userspace/units/fifo/pbdma/nvgpu-pbdma.h @@ -81,6 +81,33 @@ int test_pbdma_setup_sw(struct unit_module *m, int test_pbdma_find_for_runlist(struct unit_module *m, struct gk20a *g, void *args); +/** + * Test specification for: test_pbdma_status + * + * Description: Branch coverage for nvgpu_pbdma_status_* functions. + * + * Test Type: Feature based + * + * Input: test_fifo_init_support() run for this GPU. + * + * Steps: + * - Build fake struct nvgpu_pbdma_status_info. + * - Check that nvgpu_pbdma_status_is_chsw_switch is true when + * chsw status is NVGPU_PBDMA_CHSW_STATUS_SWITCH, false otherwise. + * - Check that nvgpu_pbdma_status_is_chsw_load is true when + * chsw status is NVGPU_PBDMA_CHSW_STATUS_LOAD, false otherwise. + * - Check that nvgpu_pbdma_status_is_chsw_save is true when + * chsw status is NVGPU_PBDMA_CHSW_STATUS_SAVE, false otherwise. + * - Check that nvgpu_pbdma_status_is_chsw_valid is true when + * id_type is PBDMA_STATUS_ID_TYPE_TSGID, false otherwise. + * - Check that nvgpu_pbdma_status_is_next_id_type_tsg is true when + * next_id_type is PBDMA_STATUS_NEXT_ID_TYPE_TSGID, false otherwise. + * + * Output: Returns PASS if all branches gave expected results. FAIL otherwise. + */ +int test_pbdma_status(struct unit_module *m, + struct gk20a *g, void *args); + /** * @} */