From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 345B140D8A5; Sat, 28 Feb 2026 17:44:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772300679; cv=none; b=ZIscek69J7Ipg4ghnncetJ1goEDruTmmI5iOVTf1WXwTO95CtRl/UObZ+G8pNKDKt5EJcE2nvXVwlO1Mh7m1kgYqF7sP1SO0DHZhQH9Eicbg9YbRgRNZSbJgnDUnHPK4Vk82kn5H+3MqCpnIPxmR7At9v8pKTLML4vmGPp0AxKo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772300679; c=relaxed/simple; bh=95F7p9FHL/AywEQFx6+zZMDVlipdmfIm7nhBfH5jJKE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GbopKHGNIQOdYxUZ+E0iVWdOSfEa1FB1ZOYlrElpO9ZAJJkNh9oQAHDR6R/oeb9PSD69bswj/HRlLw6neon8qLcqFwYwNSTt+AUTdikzwJ+Hz6IJqSrWEgC6DL2mIDkn7x7wjpd9RR7yx0Kyc2Kg5GhuAPE3d9i6K1ZG5MQTJnQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Xv4TQSut; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Xv4TQSut" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 65902C19424; Sat, 28 Feb 2026 17:44:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772300679; bh=95F7p9FHL/AywEQFx6+zZMDVlipdmfIm7nhBfH5jJKE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Xv4TQSutb5Clm+FzEETMkIdJCXne+su35qorghq1Xz/xHSy0a64jALRHUkBn5VepY AsiL5Xu/R4zWCLSz1fjD14EzXrAP+r6dLByO/RsFaj6wbfKuahYkjuBB7XPCvz3vhE WgQiOO+H2azCN9Xlrt0VJM6uNvdZ7vE3YDCdS2km2akpesJEjh21lXlgfOOWAMVMLR 5mR57Zxi7c2/LoK3Kq/cKUbPiVEo6Ru1my8KSRM/Df3S5gmR7thgdarbUJKNx/pDl5 1Ll6FCBwV0s8wXMJ3Ol/PjCzXdwysjijvnAx1kUDLxkvQC3dpElv4NF186aMkxnZdI mBRYUpXdd+2nA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Emanuele Ghidoli , Francesco Dolcini , Sebastian Reichel , Sasha Levin Subject: [PATCH 6.19 716/844] power: reset: tdx-ec-poweroff: fix restart Date: Sat, 28 Feb 2026 12:30:29 -0500 Message-ID: <20260228173244.1509663-717-sashal@kernel.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260228173244.1509663-1-sashal@kernel.org> References: <20260228173244.1509663-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit From: Emanuele Ghidoli [ Upstream commit 562357a6310f79e45844c3e980d410a1e8e02ce6 ] 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 Reviewed-by: Francesco Dolcini Link: https://patch.msgid.link/20260130071208.1184239-1-ghidoliemanuele@gmail.com Signed-off-by: Sebastian Reichel Signed-off-by: Sasha Levin --- 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 3302a127fce52..8040aa03d74d4 100644 --- a/drivers/power/reset/tdx-ec-poweroff.c +++ b/drivers/power/reset/tdx-ec-poweroff.c @@ -8,7 +8,10 @@ */ #include +#include +#include #include +#include #include #include #include @@ -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.51.0