diff --git a/userspace/required_tests.json b/userspace/required_tests.json index 6f1d3acfe..6f8ff2449 100644 --- a/userspace/required_tests.json +++ b/userspace/required_tests.json @@ -1623,6 +1623,11 @@ "test_level": 0, "unit": "nvgpu_gr_init" }, + { + "test": "gr_ecc_features", + "test_level": 0, + "unit": "nvgpu_gr_init" + }, { "test": "gr_remove_support", "test_level": 0, diff --git a/userspace/units/gr/init/nvgpu-gr-init.c b/userspace/units/gr/init/nvgpu-gr-init.c index 683df6e45..89da1baec 100644 --- a/userspace/units/gr/init/nvgpu-gr-init.c +++ b/userspace/units/gr/init/nvgpu-gr-init.c @@ -30,15 +30,52 @@ #include #include +#include +#include + #include "common/gr/gr_priv.h" #include "../nvgpu-gr.h" +#define GR_TEST_FUSES_OVERRIDE_DISABLE_TRUE 0x1U +#define GR_TEST_FUSES_OVERRIDE_DISABLE_FALSE 0x0U + +#define GR_TEST_FECS_FEATURE_OVERRIDE_ECC 0x00909999 +#define GR_TEST_FECS_FEATURE_OVERRIDE_ECC1 0x0000000F + +static int test_gr_init_ecc_features(struct unit_module *m, + struct gk20a *g, void *args) +{ + nvgpu_posix_io_writel_reg_space(g, + fuse_opt_feature_fuses_override_disable_r(), + GR_TEST_FUSES_OVERRIDE_DISABLE_TRUE); + + g->ops.gr.ecc.detect(g); + + nvgpu_posix_io_writel_reg_space(g, + fuse_opt_feature_fuses_override_disable_r(), + GR_TEST_FUSES_OVERRIDE_DISABLE_FALSE); + + /* set fecs ecc override */ + nvgpu_posix_io_writel_reg_space(g, + gr_fecs_feature_override_ecc_r(), + GR_TEST_FECS_FEATURE_OVERRIDE_ECC); + + nvgpu_posix_io_writel_reg_space(g, + gr_fecs_feature_override_ecc_1_r(), + GR_TEST_FECS_FEATURE_OVERRIDE_ECC1); + + g->ops.gr.ecc.detect(g); + + return UNIT_SUCCESS; +} + struct unit_module_test nvgpu_gr_init_tests[] = { UNIT_TEST(gr_init_setup, test_gr_init_setup, NULL, 0), UNIT_TEST(gr_init_prepare, test_gr_init_prepare, NULL, 0), UNIT_TEST(gr_init_support, test_gr_init_support, NULL, 0), UNIT_TEST(gr_suspend, test_gr_suspend, NULL, 0), + UNIT_TEST(gr_ecc_features, test_gr_init_ecc_features, NULL, 0), UNIT_TEST(gr_remove_support, test_gr_remove_support, NULL, 0), UNIT_TEST(gr_remove_setup, test_gr_remove_setup, NULL, 0), };