linux/drivers/power/reset
Emanuele Ghidoli 562357a631 power: reset: tdx-ec-poweroff: fix restart
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: 18672fe123 ("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>
Link: https://patch.msgid.link/20260130071208.1184239-1-ghidoliemanuele@gmail.com
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
2026-01-30 20:39:37 +01:00
..
arm-versatile-reboot.c power/reset: arm-versatile: Fix refcount leak in versatile_reboot_probe 2022-06-09 21:08:38 +02:00
as3722-poweroff.c power: reset: as3722-poweroff: Remove unnecessary return in as3722_poweroff_probe 2024-12-19 00:38:11 +01:00
at91-poweroff.c power: Switch back to struct platform_driver::remove() 2024-10-21 15:51:42 +02:00
at91-reset.c power: reset: at91-reset: Optimize at91_reset() 2025-04-27 23:59:08 +02:00
at91-sama5d2_shdwc.c power: reset: at91-sama5d2_shdwc: Refactor wake-up source logging to use dev_info 2025-06-22 03:04:51 +02:00
atc260x-poweroff.c power: reset: atc260x-poweroff: Use devm_register_sys_off_handler(POWER_OFF) 2024-02-13 02:17:24 +01:00
axxia-reset.c power: reset: axxia-reset: Use devm_register_sys_off_handler(RESTART) 2024-02-13 02:17:25 +01:00
brcm-kona-reset.c power: reset: brcm-kona-reset: Use devm_register_sys_off_handler(RESTART) 2024-02-13 02:17:25 +01:00
brcmstb-reboot.c power: reset: brcmstb: Do not go into infinite loop if reset fails 2024-08-27 19:35:23 +02:00
ep93xx-restart.c power: reset: Add a driver for the ep93xx reset 2024-09-12 14:33:10 +00:00
gemini-poweroff.c power: reset: gemini-poweroff: Use devm_register_sys_off_handler(POWER_OFF) 2024-02-13 02:17:26 +01:00
gpio-poweroff.c power: reset: gpio-poweroff: Clarify the warning message 2024-12-12 23:34:50 +01:00
gpio-restart.c power: reset: gpio-restart: Use devm_register_sys_off_handler() 2023-12-24 22:54:01 +01:00
hisi-reboot.c power: reset: hisi-reboot: add missing MODULE_DEVICE_TABLE 2021-04-09 13:50:01 +02:00
Kconfig driver: reset: spacemit-p1: add driver for poweroff/reboot 2025-11-03 01:02:10 +01:00
keystone-reset.c power: reset: keystone: Use syscon_regmap_lookup_by_phandle_args 2025-01-15 21:51:39 +01:00
linkstation-poweroff.c power: reset: linkstation-poweroff: add new device 2021-08-13 19:16:41 +02:00
ltc2952-poweroff.c power: reset: ltc2952-poweroff: Switch to use hrtimer_setup() 2025-02-18 11:19:04 +01:00
macsmc-reboot.c power: reset: macsmc-reboot: Add driver for rebooting via Apple SMC 2025-07-24 09:47:33 +01:00
Makefile driver: reset: spacemit-p1: add driver for poweroff/reboot 2025-11-03 01:02:10 +01:00
msm-poweroff.c power: reset: msm-poweroff: Use devm_register_sys_off_handler(RESTART) 2024-02-13 02:17:26 +01:00
mt6323-poweroff.c power: reset: mt6323-poweroff: Use devm_register_sys_off_handler(POWER_OFF) 2024-02-13 02:17:25 +01:00
nvmem-reboot-mode.c power: reset: nvmem-reboot-mode: respect cell size for nvmem_cell_write 2026-01-12 02:52:31 +01:00
ocelot-reset.c power: reset: ocelot: Convert to devm_platform_ioremap_resource() 2023-07-19 23:31:49 +02:00
odroid-go-ultra-poweroff.c power: Explicitly include correct DT includes 2023-07-19 22:47:03 +02:00
piix4-poweroff.c power: reset: piix4: add missing MODULE_DESCRIPTION() macro 2024-06-26 19:28:28 +02:00
pwr-mlxbf.c power: reset: pwr-mlxbf: support graceful shutdown 2024-08-27 19:31:19 +02:00
qcom-pon.c power: reset: qcom-pon: Rename variables to use generic naming 2025-06-22 03:00:26 +02:00
qnap-poweroff.c power: Switch back to struct platform_driver::remove() 2024-10-21 15:51:42 +02:00
reboot-mode.c power: reset: reboot-mode: better compatibility with DT (replace ' ,/') 2025-04-28 00:05:31 +02:00
regulator-poweroff.c power: reset: regulator-poweroff: Use devm_register_sys_off_handler(POWER_OFF) 2024-02-13 02:17:26 +01:00
restart-poweroff.c power: reset: restart-poweroff: Use devm_register_sys_off_handler(POWER_OFF) 2024-02-13 02:17:26 +01:00
rmobile-reset.c power: reset: rmobile-reset: Make sysc_base2 local 2024-02-26 15:09:11 +01:00
sc27xx-poweroff.c syscore: Pass context data to callbacks 2025-11-14 10:01:52 +01:00
spacemit-p1-reboot.c driver: reset: spacemit-p1: add driver for poweroff/reboot 2025-11-03 01:02:10 +01:00
st-poweroff.c power: reset: st-poweroff: use builtin_platform_driver() to simplify code 2023-09-12 20:25:54 +02:00
syscon-poweroff.c power: reset: syscon-poweroff: Use devm_register_sys_off_handler(POWER_OFF) 2024-02-13 02:17:26 +01:00
syscon-reboot-mode.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
syscon-reboot.c power: reset: syscon-reboot: add gs101-specific reset 2025-05-01 00:41:31 +02:00
tdx-ec-poweroff.c power: reset: tdx-ec-poweroff: fix restart 2026-01-30 20:39:37 +01:00
th1520-aon-reboot.c driver: reset: th1520-aon: add driver for poweroff/reboot via AON FW 2025-09-19 12:55:20 +02:00
tps65086-restart.c power: reset: tps65086-restart: Remove unneeded device data struct 2024-02-13 02:17:25 +01:00
vexpress-poweroff.c power: reset: vexpress: Use device_get_match_data() 2023-10-21 00:57:55 +02:00
xgene-reboot.c power: reset: xgene-reboot: Fix a NULL vs IS_ERR() test 2024-02-21 21:13:37 +01:00