diff --git a/module/scmi_power_capping/src/scmi_power_capping_core.c b/module/scmi_power_capping/src/scmi_power_capping_core.c index 6daa42aa60aade83bf2660eb76976e94bfbbee91..e66b18ffac29ed438058624febba5940a0b7859c 100644 --- a/module/scmi_power_capping/src/scmi_power_capping_core.c +++ b/module/scmi_power_capping/src/scmi_power_capping_core.c @@ -75,10 +75,12 @@ static int pcapping_core_check_domain_configuration( return FWK_E_DATA; } - if (config->min_power_cap != config->max_power_cap) { - if (config->power_cap_step == (uint32_t)0) { - return FWK_E_DATA; - } + if (config->min_power_cap == config->max_power_cap) { + return FWK_SUCCESS; + } + + if (config->power_cap_step == (uint32_t)0) { + return FWK_E_DATA; } if ((config->max_power_cap - config->min_power_cap) % @@ -313,7 +315,7 @@ int pcapping_core_domain_init( return status; } - status = pcapping_core_check_domain_configuration(domain_ctx->config); + status = pcapping_core_check_domain_configuration(config); if (!fwk_expect(status == FWK_SUCCESS)) { return status; diff --git a/module/scmi_power_capping/test/scmi_power_capping_core_unit_test.c b/module/scmi_power_capping/test/scmi_power_capping_core_unit_test.c index cfc3a37479e901dd4ef4431369139770c7ae4f90..8c841a4abcf7074813ccce72506e9b82703e608b 100644 --- a/module/scmi_power_capping/test/scmi_power_capping_core_unit_test.c +++ b/module/scmi_power_capping/test/scmi_power_capping_core_unit_test.c @@ -127,6 +127,20 @@ void utest_pcapping_core_check_domain_configuration_invalid_cap_step_zero(void) TEST_ASSERT_EQUAL(status, FWK_E_DATA); } +void utest_pcapping_core_check_domain_configuration_valid_cap_step_zero(void) +{ + int status; + + struct mod_scmi_power_capping_domain_config config = { + .min_power_cap = 10u, + .max_power_cap = 10u, + .power_cap_step = 0u, + }; + + status = pcapping_core_check_domain_configuration(&config); + TEST_ASSERT_EQUAL(status, FWK_SUCCESS); +} + void utest_pcapping_core_check_domain_configuration_success(void) { int status; @@ -188,6 +202,27 @@ void utest_pcapping_core_domain_init(void) TEST_ASSERT_EQUAL(status, FWK_SUCCESS); } +void utest_pcapping_core_domain_init_invalid_config(void) +{ + int status; + uint32_t domain_idx = FAKE_POWER_CAPPING_IDX_COUNT - 1u; + fwk_id_t none_id = FWK_ID_NONE; + struct mod_scmi_power_capping_domain_config invalid_configs = { + .min_power_cap = 9u, + .max_power_cap = 100u, + .power_cap_step = 2u, + }; + (void)none_id; + + struct mod_scmi_power_capping_domain_context *ctx = + &pcapping_core_ctx.power_capping_domain_ctx_table[domain_idx]; + + status = pcapping_core_domain_init(domain_idx, &invalid_configs); + + TEST_ASSERT_EQUAL(FWK_E_DATA, status); + TEST_ASSERT(ctx->config != &invalid_configs); +} + void utest_pcapping_core_start(void) { int status; @@ -921,7 +956,11 @@ int scmi_test_main(void) RUN_TEST(utest_pcapping_core_check_domain_configuration_max_cap_0); RUN_TEST( utest_pcapping_core_check_domain_configuration_invalid_cap_step_zero); + RUN_TEST( + utest_pcapping_core_check_domain_configuration_valid_cap_step_zero); RUN_TEST(utest_pcapping_core_check_domain_configuration_success); + RUN_TEST(utest_pcapping_core_domain_init); + RUN_TEST(utest_pcapping_core_domain_init_invalid_config); RUN_TEST(utest_pcapping_core_bind); RUN_TEST(utest_pcapping_core_init); RUN_TEST(utest_pcapping_core_start);