From b3e76e557e3ee621798ed6cd3fe51786bf8864e5 Mon Sep 17 00:00:00 2001 From: kopecdav Date: Tue, 6 May 2025 14:31:45 +0200 Subject: [PATCH] fix(core): fix async pmic variable reading [no changelog] --- core/embed/sys/power_manager/stm32u5/power_manager.c | 7 ++++++- .../sys/power_manager/stm32u5/power_manager_internal.h | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/embed/sys/power_manager/stm32u5/power_manager.c b/core/embed/sys/power_manager/stm32u5/power_manager.c index 790eb18573..d6e02ab4fd 100644 --- a/core/embed/sys/power_manager/stm32u5/power_manager.c +++ b/core/embed/sys/power_manager/stm32u5/power_manager.c @@ -228,7 +228,12 @@ pm_status_t pm_turn_on(void) { } // Poll until at least single PMIC measurement is done - while(drv->pmic_last_update_ms == 0){}; + uint32_t pmic_last_update_ms; + do{ + irq_key_t irq_key = irq_lock(); + pmic_last_update_ms = drv->pmic_last_update_ms; + irq_unlock(irq_key); + } while(pmic_last_update_ms == 0); // Check if device has enough power to startup if(drv->pmic_data.usb_status == 0x0 && diff --git a/core/embed/sys/power_manager/stm32u5/power_manager_internal.h b/core/embed/sys/power_manager/stm32u5/power_manager_internal.h index e16ae54ec7..6aa09eef01 100644 --- a/core/embed/sys/power_manager/stm32u5/power_manager_internal.h +++ b/core/embed/sys/power_manager/stm32u5/power_manager_internal.h @@ -89,8 +89,8 @@ typedef struct { // Power source hardware state npm1300_report_t pmic_data; stwlc38_report_t wireless_data; - volatile uint32_t pmic_last_update_ms; - volatile uint32_t pmic_sampling_period_ms; + uint32_t pmic_last_update_ms; + uint32_t pmic_sampling_period_ms; bool pmic_measurement_ready; // Power source logical state