* [PATCH v1] power: reset: tdx-ec-poweroff: fix restart
@ 2026-01-30 7:11 Emanuele Ghidoli
2026-01-30 8:09 ` Francesco Dolcini
2026-01-30 22:24 ` Sebastian Reichel
0 siblings, 2 replies; 3+ messages in thread
From: Emanuele Ghidoli @ 2026-01-30 7:11 UTC (permalink / raw)
To: Francesco Dolcini, Sebastian Reichel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley
Cc: Emanuele Ghidoli, linux-pm, devicetree, linux-kernel, stable
From: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
During testing, restart occasionally failed on Toradex modules.
The issue was traced to an interaction between the EC-based reset/poweroff
handler and the PSCI restart handler. While the embedded controller is
resetting or powering off the module, the PSCI code may still be invoked,
triggering an I2C transaction to the PMIC. This can leave the PMIC I2C
in a frozen state.
Add a delay after issuing the EC reset or power-off command to give the
controller time to complete the operation and avoid falling back to another
restart/poweroff provider.
Also print an error message if sending the command to the embedded controller
fails.
Fixes: 18672fe12367 ("power: reset: add Toradex Embedded Controller")
Cc: stable@vger.kernel.org
Signed-off-by: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
---
drivers/power/reset/tdx-ec-poweroff.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/drivers/power/reset/tdx-ec-poweroff.c b/drivers/power/reset/tdx-ec-poweroff.c
index 3302a127fce5..8040aa03d74d 100644
--- a/drivers/power/reset/tdx-ec-poweroff.c
+++ b/drivers/power/reset/tdx-ec-poweroff.c
@@ -8,7 +8,10 @@
*/
#include <linux/array_size.h>
+#include <linux/bug.h>
+#include <linux/delay.h>
#include <linux/device.h>
+#include <linux/dev_printk.h>
#include <linux/err.h>
#include <linux/i2c.h>
#include <linux/mod_devicetable.h>
@@ -31,6 +34,8 @@
#define EC_REG_MAX 0xD0
+#define EC_CMD_TIMEOUT_MS 1000
+
static const struct regmap_range volatile_ranges[] = {
regmap_reg_range(EC_CMD_REG, EC_CMD_REG),
};
@@ -75,6 +80,13 @@ static int tdx_ec_power_off(struct sys_off_data *data)
err = tdx_ec_cmd(regmap, EC_CMD_POWEROFF);
+ if (err) {
+ dev_err(data->dev, "Failed to send power off command\n");
+ } else {
+ mdelay(EC_CMD_TIMEOUT_MS);
+ WARN_ONCE(1, "Unable to power off system\n");
+ }
+
return err ? NOTIFY_BAD : NOTIFY_DONE;
}
@@ -85,6 +97,13 @@ static int tdx_ec_restart(struct sys_off_data *data)
err = tdx_ec_cmd(regmap, EC_CMD_RESET);
+ if (err) {
+ dev_err(data->dev, "Failed to send restart command\n");
+ } else {
+ mdelay(EC_CMD_TIMEOUT_MS);
+ WARN_ONCE(1, "Unable to restart system\n");
+ }
+
return err ? NOTIFY_BAD : NOTIFY_DONE;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v1] power: reset: tdx-ec-poweroff: fix restart
2026-01-30 7:11 [PATCH v1] power: reset: tdx-ec-poweroff: fix restart Emanuele Ghidoli
@ 2026-01-30 8:09 ` Francesco Dolcini
2026-01-30 22:24 ` Sebastian Reichel
1 sibling, 0 replies; 3+ messages in thread
From: Francesco Dolcini @ 2026-01-30 8:09 UTC (permalink / raw)
To: Emanuele Ghidoli
Cc: Francesco Dolcini, Sebastian Reichel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Emanuele Ghidoli, linux-pm,
devicetree, linux-kernel, stable
On Fri, Jan 30, 2026 at 08:11:35AM +0100, Emanuele Ghidoli wrote:
> From: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
>
> During testing, restart occasionally failed on Toradex modules.
>
> The issue was traced to an interaction between the EC-based reset/poweroff
> handler and the PSCI restart handler. While the embedded controller is
> resetting or powering off the module, the PSCI code may still be invoked,
> triggering an I2C transaction to the PMIC. This can leave the PMIC I2C
> in a frozen state.
>
> Add a delay after issuing the EC reset or power-off command to give the
> controller time to complete the operation and avoid falling back to another
> restart/poweroff provider.
>
> Also print an error message if sending the command to the embedded controller
> fails.
>
> Fixes: 18672fe12367 ("power: reset: add Toradex Embedded Controller")
> Cc: stable@vger.kernel.org
> Signed-off-by: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v1] power: reset: tdx-ec-poweroff: fix restart
2026-01-30 7:11 [PATCH v1] power: reset: tdx-ec-poweroff: fix restart Emanuele Ghidoli
2026-01-30 8:09 ` Francesco Dolcini
@ 2026-01-30 22:24 ` Sebastian Reichel
1 sibling, 0 replies; 3+ messages in thread
From: Sebastian Reichel @ 2026-01-30 22:24 UTC (permalink / raw)
To: Francesco Dolcini, Sebastian Reichel, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Emanuele Ghidoli
Cc: Emanuele Ghidoli, linux-pm, devicetree, linux-kernel, stable
On Fri, 30 Jan 2026 08:11:35 +0100, Emanuele Ghidoli wrote:
> During testing, restart occasionally failed on Toradex modules.
>
> The issue was traced to an interaction between the EC-based reset/poweroff
> handler and the PSCI restart handler. While the embedded controller is
> resetting or powering off the module, the PSCI code may still be invoked,
> triggering an I2C transaction to the PMIC. This can leave the PMIC I2C
> in a frozen state.
>
> [...]
Applied, thanks!
[1/1] power: reset: tdx-ec-poweroff: fix restart
commit: 562357a6310f79e45844c3e980d410a1e8e02ce6
Best regards,
--
Sebastian Reichel <sebastian.reichel@collabora.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-01-30 22:24 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-30 7:11 [PATCH v1] power: reset: tdx-ec-poweroff: fix restart Emanuele Ghidoli
2026-01-30 8:09 ` Francesco Dolcini
2026-01-30 22:24 ` Sebastian Reichel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox