From 87993e89e7f65a3884f404d826fc35a8e172d3ff Mon Sep 17 00:00:00 2001 From: Mohamed Omar Asaker Date: Tue, 27 May 2025 17:47:13 +0100 Subject: [PATCH 1/3] mod/power_distributor: Fix power budget propagation Update set_budgets() to use the power_budget field when setting limits via the controller API. The power_budget reflects the available power after internal distribution and serves as the effective limit for the next consumer. Signed-off-by: Mohamed Omar Asaker --- module/power_distributor/src/mod_power_distributor.c | 2 +- .../power_distributor/test/mod_power_distributor_unit_test.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/module/power_distributor/src/mod_power_distributor.c b/module/power_distributor/src/mod_power_distributor.c index 494349b07..f64dc7a57 100644 --- a/module/power_distributor/src/mod_power_distributor.c +++ b/module/power_distributor/src/mod_power_distributor.c @@ -370,7 +370,7 @@ static int set_budgets() FWK_ID_ELEMENT(FWK_MODULE_IDX_POWER_DISTRIBUTOR, i))); domain_ctx->controller_api->set_power_limit( domain_ctx->config->controller_id, - domain_ctx->node.data.power_limit); + domain_ctx->node.data.power_budget); } } diff --git a/module/power_distributor/test/mod_power_distributor_unit_test.c b/module/power_distributor/test/mod_power_distributor_unit_test.c index 97e96c88d..1b7572176 100644 --- a/module/power_distributor/test/mod_power_distributor_unit_test.c +++ b/module/power_distributor/test/mod_power_distributor_unit_test.c @@ -339,7 +339,7 @@ void utest_mod_distributor_set_budgets(void) for (size_t i = 0; i < power_distributor_ctx.domain_count; ++i) { struct mod_power_distributor_domain_ctx *domain_ctx = &power_distributor_ctx.domain[i]; - domain_ctx->node.data.power_limit = 0xDEADBEEF + i; + domain_ctx->node.data.power_budget = 0xDEADBEEF + i; } for (size_t i = 0; i < power_distributor_ctx.domain_count; ++i) { @@ -351,7 +351,7 @@ void utest_mod_distributor_set_budgets(void) FWK_ID_ELEMENT_INIT(FWK_MODULE_IDX_CONTROLLER, i); fwk_module_get_element_name_ExpectAnyArgsAndReturn(""); mock_set_power_limit_ExpectAndReturn( - elem_id, domain_ctx->node.data.power_limit, FWK_SUCCESS); + elem_id, domain_ctx->node.data.power_budget, FWK_SUCCESS); } } -- GitLab From a665693c3e3ee9d884acf8908bac8379f05d440d Mon Sep 17 00:00:00 2001 From: Mohamed Omar Asaker Date: Tue, 27 May 2025 17:58:26 +0100 Subject: [PATCH 2/3] mod/power_distributor: Skip power distribution for leaf domains Add an early return in domain_power_distribute() for domains with no children. Leaf domains do not distribute power further, so skipping the distribution logic avoids unnecessary processing and simplifies flow. Signed-off-by: Mohamed Omar Asaker --- module/power_distributor/src/mod_power_distributor.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/module/power_distributor/src/mod_power_distributor.c b/module/power_distributor/src/mod_power_distributor.c index f64dc7a57..94dd597be 100644 --- a/module/power_distributor/src/mod_power_distributor.c +++ b/module/power_distributor/src/mod_power_distributor.c @@ -347,6 +347,10 @@ static int domain_power_distribute( { uint32_t remaining_budget = domain_ctx->node.data.power_budget; + if (domain_ctx->node.children_count == 0) { + return FWK_SUCCESS; + } + /* Phase 1: Base allocation */ distribute_power( domain_ctx, &remaining_budget, &calculate_base_allocation_deficit); -- GitLab From 7358998146330acda13c1d77755b246caf4246b2 Mon Sep 17 00:00:00 2001 From: Mohamed Omar Asaker Date: Thu, 22 May 2025 16:27:19 +0100 Subject: [PATCH 3/3] mod/power-distributor: Fix format specifier for domain index logging Replace incorrect `%u` format specifier with `%"PRIu32"` in the error log message when distribution fails for a domain. This ensures correct and portable formatting of `uint32_t` values across platforms. Signed-off-by: Mohamed Omar Asaker --- module/power_distributor/src/mod_power_distributor.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/module/power_distributor/src/mod_power_distributor.c b/module/power_distributor/src/mod_power_distributor.c index 94dd597be..bbcfda613 100644 --- a/module/power_distributor/src/mod_power_distributor.c +++ b/module/power_distributor/src/mod_power_distributor.c @@ -18,6 +18,8 @@ #include #include +#include + #define MOD_NAME "[PWR_DISTRIBUTOR] " struct mod_power_distributor_data { @@ -415,7 +417,7 @@ static inline int domains_power_distribute(void) fwk_id_t domain_id = FWK_ID_ELEMENT(FWK_MODULE_IDX_POWER_DISTRIBUTOR, domain_idx); FWK_LOG_ERR( - MOD_NAME "Failed to distribute domain %s (index: %u)", + MOD_NAME "Failed to distribute domain %s (index: %" PRIu32 ")", fwk_module_get_element_name(domain_id), domain_idx); break; -- GitLab