From 731df6ea75571ca3d3b63ac9a702aae3b3343cd3 Mon Sep 17 00:00:00 2001 From: Tom Chang Date: Thu, 9 Oct 2025 17:10:36 +0800 Subject: [PATCH] driver: peci: npcx: prevent sleep during PECI transactions This commit prevents enter deep sleep mode during PECI transactions since clocks if PECI will stop. Signed-off-by: Tom Chang Signed-off-by: Mulin Chao --- drivers/peci/peci_npcx.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/peci/peci_npcx.c b/drivers/peci/peci_npcx.c index 24e3f1d4bac60..9a0518a6c21e1 100644 --- a/drivers/peci/peci_npcx.c +++ b/drivers/peci/peci_npcx.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -141,6 +142,12 @@ static int peci_npcx_transfer(const struct device *dev, struct peci_msg *msg) enum peci_command_code cmd_code = msg->cmd_code; int ret = 0; + /* + * suspend-to-idle stops PECI module clocks (derived from APB2), which + * must remain active during a transaction + */ + pm_policy_state_lock_get(PM_STATE_SUSPEND_TO_IDLE, PM_ALL_SUBSTATES); + k_sem_take(&data->lock, K_FOREVER); if (peci_tx_buf->len > PECI_NPCX_MAX_TX_BUF_LEN || @@ -194,6 +201,7 @@ static int peci_npcx_transfer(const struct device *dev, struct peci_msg *msg) out: k_sem_give(&data->lock); + pm_policy_state_lock_put(PM_STATE_SUSPEND_TO_IDLE, PM_ALL_SUBSTATES); return ret; }