diff --git a/module/power_capping/CMakeLists.txt b/module/power_capping/CMakeLists.txt index ace2ccd3acd87678627b15a1f81e56c0240c624d..525c6196de93d6e5023c8fc3a6bc7af056d0620e 100644 --- a/module/power_capping/CMakeLists.txt +++ b/module/power_capping/CMakeLists.txt @@ -1,6 +1,6 @@ # # Arm SCP/MCP Software -# Copyright (c) 2024, Arm Limited and Contributors. All rights reserved. +# Copyright (c) 2024-2025, Arm Limited and Contributors. All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause # @@ -14,3 +14,6 @@ target_include_directories(${SCP_MODULE_TARGET} target_sources( ${SCP_MODULE_TARGET} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src/mod_power_capping.c") + +target_link_libraries(${SCP_MODULE_TARGET} + PRIVATE module-pid-controller) diff --git a/module/power_capping/include/mod_power_capping.h b/module/power_capping/include/mod_power_capping.h index 7be7409b99188eb3e3d292dd7d7f3f12572817f9..981782f13b245bf124c10e85b3bd94b06973adef 100644 --- a/module/power_capping/include/mod_power_capping.h +++ b/module/power_capping/include/mod_power_capping.h @@ -208,14 +208,6 @@ struct mod_power_capping_api { * \brief Power Capping domain configuration. */ struct mod_power_capping_domain_config { - /*! - * \brief ID of the object that outputs a power limit. - */ - fwk_id_t power_limiter_id; - /*! - * \brief API ID of the api that would return the power limit. - */ - fwk_id_t power_limiter_api_id; /*! * \brief ID of the power_measurement driver. */ diff --git a/module/power_capping/src/mod_power_capping.c b/module/power_capping/src/mod_power_capping.c index cdf862e15272c2e02301d7963d5661ee60644635..5d51daab082ed5130fc0ae754c736de92bc15cb9 100644 --- a/module/power_capping/src/mod_power_capping.c +++ b/module/power_capping/src/mod_power_capping.c @@ -30,7 +30,6 @@ struct pcapping_domain_ctx { uint32_t threshold_high; uint32_t cookie; unsigned int notifications_sent_count; - struct interface_power_management_api *power_management_api; struct mod_power_measurement_driver_api *power_measurement_driver_api; struct mod_pid_controller_api *pid_ctrl_api; }; @@ -310,7 +309,7 @@ static int mod_pcapping_get_power_limit( return FWK_SUCCESS; } -struct mod_power_capping_api pcapping_api = { +static struct mod_power_capping_api pcapping_api = { .request_cap = mod_pcapping_request_cap, .get_applied_cap = mod_pcapping_get_applied_cap, .get_average_power = mod_pcapping_get_average_power, @@ -321,11 +320,11 @@ struct mod_power_capping_api pcapping_api = { .set_power_thresholds = mod_pcapping_set_power_thresholds, }; -struct interface_power_management_api power_management_api = { +static struct interface_power_management_api power_management_api = { .get_power_limit = mod_pcapping_get_power_limit, }; -int pcapping_init( +static int pcapping_init( fwk_id_t module_id, unsigned int element_count, const void *data) @@ -338,7 +337,7 @@ int pcapping_init( return FWK_SUCCESS; } -int pcapping_domain_init( +static int pcapping_domain_init( fwk_id_t element_id, unsigned int unused, const void *data) @@ -380,7 +379,7 @@ static int mod_pcapping_process_notification( return FWK_E_PARAM; } -int mod_pcapping_bind(fwk_id_t id, unsigned int round) +static int mod_pcapping_bind(fwk_id_t id, unsigned int round) { int status; struct pcapping_domain_ctx *domain_ctx; @@ -391,20 +390,15 @@ int mod_pcapping_bind(fwk_id_t id, unsigned int round) domain_ctx = &pcapping_domain_ctx_table[fwk_id_get_element_idx(id)]; - status = fwk_module_bind( - domain_ctx->config->power_limiter_id, - domain_ctx->config->power_limiter_api_id, - &domain_ctx->power_management_api); - - if (status != FWK_SUCCESS) - return status; - status = fwk_module_bind( domain_ctx->config->power_measurement_id, domain_ctx->config->power_measurement_api_id, &domain_ctx->power_measurement_driver_api); - /* Bind to PID Controller */ + if (status != FWK_SUCCESS) { + return status; + } + status = fwk_module_bind( domain_ctx->config->pid_controller_id, domain_ctx->config->pid_controller_api_id, @@ -413,7 +407,7 @@ int mod_pcapping_bind(fwk_id_t id, unsigned int round) return status; } -int mod_pcapping_start(fwk_id_t id) +static int mod_pcapping_start(fwk_id_t id) { int status; struct pcapping_domain_ctx *domain_ctx; @@ -435,7 +429,7 @@ int mod_pcapping_start(fwk_id_t id) return status; } -int mod_pcapping_process_bind_request( +static int mod_pcapping_process_bind_request( fwk_id_t source_id, fwk_id_t target_id, fwk_id_t api_id, diff --git a/module/power_capping/test/config_power_capping.h b/module/power_capping/test/config_power_capping.h index 260139f24ec4b31450162914bedeed70b00d14bf..5fa473f921dc35d97b66ec20a8575105745582b6 100644 --- a/module/power_capping/test/config_power_capping.h +++ b/module/power_capping/test/config_power_capping.h @@ -1,6 +1,6 @@ /* * Arm SCP/MCP Software - * Copyright (c) 2024, Arm Limited and Contributors. All rights reserved. + * Copyright (c) 2024-2025, Arm Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -19,18 +19,6 @@ enum test_power_capping_domain_idx { TEST_DOMAIN_COUNT, }; -enum test_power_limiter_idx { - TEST_POWER_LIMITER_CORE_0, - TEST_POWER_LIMITER_SOC, - TEST_POWER_LIMITER_COUNT, -}; - -enum test_power_limiter_api_idx { - TEST_POWER_LIMITER_API_CORE_0, - TEST_POWER_LIMITER_API_SOC, - TEST_POWER_LIMITER_API_COUNT, -}; - enum test_power_limit_set_notifier_idx { TEST_POWER_LIMIT_SET_NOTIFIER_CORE_0, TEST_POWER_LIMIT_SET_NOTIFIER_SOC, @@ -46,12 +34,6 @@ enum test_power_limit_set_notification_idx { struct fwk_element test_domain_config[TEST_DOMAIN_COUNT] = { [TEST_CORE_0] = { .data = &(struct mod_power_capping_domain_config) { - .power_limiter_id = FWK_ID_ELEMENT_INIT( - FWK_MODULE_IDX_FAKE_LIMITER, - TEST_POWER_LIMITER_CORE_0), - .power_limiter_api_id = FWK_ID_API_INIT( - FWK_MODULE_IDX_FAKE_LIMITER, - TEST_POWER_LIMITER_API_CORE_0), .power_limit_set_notifier_id = FWK_ID_ELEMENT_INIT( FWK_MODULE_IDX_FAKE_LIMIT_NOTIFIER, TEST_POWER_LIMIT_SET_NOTIFIER_CORE_0), @@ -62,12 +44,6 @@ struct fwk_element test_domain_config[TEST_DOMAIN_COUNT] = { }, [TEST_SOC] = { .data = &(struct mod_power_capping_domain_config) { - .power_limiter_id = FWK_ID_ELEMENT_INIT( - FWK_MODULE_IDX_FAKE_LIMITER, - TEST_POWER_LIMITER_SOC), - .power_limiter_api_id = FWK_ID_API_INIT( - FWK_MODULE_IDX_FAKE_LIMITER, - TEST_POWER_LIMITER_API_SOC), .power_limit_set_notifier_id = FWK_ID_ELEMENT_INIT( FWK_MODULE_IDX_FAKE_LIMIT_NOTIFIER, TEST_POWER_LIMIT_SET_NOTIFIER_SOC), diff --git a/module/power_capping/test/mocks/Mockmod_power_capping_extra.c b/module/power_capping/test/mocks/Mockmod_power_capping_extra.c index 968cf3af4be910b7262865625c3cb28a1f343680..e872543f98d577d61854dea68abd5aed6090c2e5 100644 --- a/module/power_capping/test/mocks/Mockmod_power_capping_extra.c +++ b/module/power_capping/test/mocks/Mockmod_power_capping_extra.c @@ -287,71 +287,6 @@ void Mockmod_power_capping_extra_Verify(void) call_instance = CMOCK_GUTS_NONE; (void)call_instance; } - call_instance = Mock.get_average_power_CallInstance; - if (Mock.get_average_power_IgnoreBool) - call_instance = CMOCK_GUTS_NONE; - if (CMOCK_GUTS_NONE != call_instance) - { - UNITY_SET_DETAIL(CMockString_get_average_power); - UNITY_TEST_FAIL(cmock_line, CMockStringCalledLess); - } - if (Mock.get_average_power_CallbackFunctionPointer != NULL) - { - call_instance = CMOCK_GUTS_NONE; - (void)call_instance; - } - call_instance = Mock.set_averaging_interval_CallInstance; - if (Mock.set_averaging_interval_IgnoreBool) - call_instance = CMOCK_GUTS_NONE; - if (CMOCK_GUTS_NONE != call_instance) - { - UNITY_SET_DETAIL(CMockString_set_averaging_interval); - UNITY_TEST_FAIL(cmock_line, CMockStringCalledLess); - } - if (Mock.set_averaging_interval_CallbackFunctionPointer != NULL) - { - call_instance = CMOCK_GUTS_NONE; - (void)call_instance; - } - call_instance = Mock.get_averaging_interval_CallInstance; - if (Mock.get_averaging_interval_IgnoreBool) - call_instance = CMOCK_GUTS_NONE; - if (CMOCK_GUTS_NONE != call_instance) - { - UNITY_SET_DETAIL(CMockString_get_averaging_interval); - UNITY_TEST_FAIL(cmock_line, CMockStringCalledLess); - } - if (Mock.get_averaging_interval_CallbackFunctionPointer != NULL) - { - call_instance = CMOCK_GUTS_NONE; - (void)call_instance; - } - call_instance = Mock.get_averaging_interval_step_CallInstance; - if (Mock.get_averaging_interval_step_IgnoreBool) - call_instance = CMOCK_GUTS_NONE; - if (CMOCK_GUTS_NONE != call_instance) - { - UNITY_SET_DETAIL(CMockString_get_averaging_interval_step); - UNITY_TEST_FAIL(cmock_line, CMockStringCalledLess); - } - if (Mock.get_averaging_interval_step_CallbackFunctionPointer != NULL) - { - call_instance = CMOCK_GUTS_NONE; - (void)call_instance; - } - call_instance = Mock.get_averaging_interval_range_CallInstance; - if (Mock.get_averaging_interval_range_IgnoreBool) - call_instance = CMOCK_GUTS_NONE; - if (CMOCK_GUTS_NONE != call_instance) - { - UNITY_SET_DETAIL(CMockString_get_averaging_interval_range); - UNITY_TEST_FAIL(cmock_line, CMockStringCalledLess); - } - if (Mock.get_averaging_interval_range_CallbackFunctionPointer != NULL) - { - call_instance = CMOCK_GUTS_NONE; - (void)call_instance; - } call_instance = Mock.update_CallInstance; if (Mock.update_IgnoreBool) call_instance = CMOCK_GUTS_NONE; @@ -1700,3 +1635,4 @@ void set_point_CMockIgnoreArg_input(UNITY_LINE_TYPE cmock_line) UNITY_TEST_ASSERT_NOT_NULL(cmock_call_instance, cmock_line, CMockStringIgnPreExp); cmock_call_instance->IgnoreArg_input = 1; } + diff --git a/module/power_capping/test/mocks/Mockmod_power_capping_extra.h b/module/power_capping/test/mocks/Mockmod_power_capping_extra.h index c2b118043cf0f1b1a2cc15f36b80f150785627da..0611806081e4a5ca4c757810a2e97eaa6efefe10 100644 --- a/module/power_capping/test/mocks/Mockmod_power_capping_extra.h +++ b/module/power_capping/test/mocks/Mockmod_power_capping_extra.h @@ -21,6 +21,9 @@ void Mockmod_power_capping_extra_Init(void); void Mockmod_power_capping_extra_Destroy(void); void Mockmod_power_capping_extra_Verify(void); + + + #define get_power_limit_IgnoreAndReturn(cmock_retval) get_power_limit_CMockIgnoreAndReturn(__LINE__, cmock_retval) void get_power_limit_CMockIgnoreAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return); #define get_power_limit_StopIgnore() get_power_limit_CMockStopIgnore() diff --git a/module/power_capping/test/mod_power_capping_unit_test.c b/module/power_capping/test/mod_power_capping_unit_test.c index fdf73d678311acc7275199868e3eb301ca8603d8..629271640e4a963d7f9515aa0cd5abbe63068d54 100644 --- a/module/power_capping/test/mod_power_capping_unit_test.c +++ b/module/power_capping/test/mod_power_capping_unit_test.c @@ -29,10 +29,6 @@ struct pcapping_domain_ctx test_ctx_table[TEST_DOMAIN_COUNT]; -struct interface_power_management_api test_power_management_api = { - .get_power_limit = get_power_limit, -}; - struct mod_power_measurement_driver_api test_power_measurement_driver_api = { .get_average_power = get_average_power, .set_averaging_interval = set_averaging_interval, @@ -55,8 +51,6 @@ void setUp(void) pcapping_ctx.domain_count = TEST_DOMAIN_COUNT; for (unsigned int i = 0U; i < TEST_DOMAIN_COUNT; i++) { - pcapping_domain_ctx_table[i].power_management_api = - &test_power_management_api; pcapping_domain_ctx_table[i].power_measurement_driver_api = &test_power_measurement_driver_api; pcapping_domain_ctx_table[i].pid_ctrl_api = &test_pid_ctrl_api; @@ -471,12 +465,6 @@ void utest_mod_pcapping_bind_round_0(void) struct pcapping_domain_ctx *domain_ctx = &(pcapping_domain_ctx_table[index]); - fwk_module_bind_ExpectAndReturn( - domain_ctx->config->power_limiter_id, - domain_ctx->config->power_limiter_api_id, - &domain_ctx->power_management_api, - FWK_SUCCESS); - fwk_module_bind_ExpectAndReturn( domain_ctx->config->power_measurement_id, domain_ctx->config->power_measurement_api_id,