From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1794064006; b=OwZACVZXCoT5xp+OcsRlCCpMxI1hhSJ4NNqRr4cXZxgeXDYMTrMQEKTT+y4ztYtw5RWy 6RBkf+YzuM8yeoKuqG9TOTg/Oh/MrBYRa9HPBT5AunbiICzBKRBkLNzeZPVLyvCeh5wR7 1sHtN+ZnmWPUlLoU/HaouM41iXWnxFC+7La22NSS08ocxVkx1mKbn82mCcJ2bQCXHeTMW FEWdWvKJ+EfBz7R1e0eYa2ENXI0M3BnxBnLxw+NFibDKqN5CZs3CyAoFvqWginfxQWYJ9 3qvXFzXCAaLjEUOG/pcDh0yytcoamzsnUKhr/CxkuF6Ve0vvmlB1jskKwziqwFNcQ+g== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794064006; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:User-Agent:X-stable:X-Patchwork-Hint: MIME-Version:Content-Transfer-Encoding; bh=BMO5SnnIB79fX7kDkgtYKaJug7hYuLCdFVDw/iCk9HE=; b=Szz+13ntA9lCSBCctaE791n9SxIwwaN4ZOlDIM/QrGhf2yLE5c4A1AOb6U6ghwSBFD4L etEfMjyMv4E3bVYslIWIxSG1IJ7NsrbdMjNpTr3Eh9j1YotQEMjNzB1qi4EwVp7j1uTqh oP027FTNqjE9a4pKknqnyw7aL7/r/QJwQMmZfrMy14RBvHn4EVxoU42C5lJLZ/reyd7Qn 9f4EmZhYbwHwPRznuk+IoDezZDNxI3LA+WElU0+xMQ7dO2+0i64tdCT+Kwes7EdDONTCy j/4vcuerMoSno3FdFshIKa/VTcm7+j4X8MW8fNFaoeVHxij8mQ2Z4+ZLxLYV8mO+s5A== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=SPC9kaWU; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC116606D822; Sat, 7 Nov 2026 15:06:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=SPC9kaWU Received: by smtp.kernel.org (Postfix) with ESMTPSA id 882931F008AB; Sat, 7 Nov 2026 15:06:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1794064005; bh=BMO5SnnIB79fX7kDkgtYKaJug7hYuLCdFVDw/iCk9HE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=SPC9kaWU9IU9LCutBzwKkMY34iqESPgFeSPufqpTHO42Q56zlRf4RuXSmYFjFM83T 29HEEjVuN2EV8JW8gpiykdUfaLQowPvneeWAVGhFdAU6J6Z72ZcrJISmycF99+aiRr HTd2FPaDKpS/NxlMRusfv1HSISbOyruPCuBsoiio= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Damien Le Moal , Niklas Cassel , Sasha Levin Subject: [PATCH 7.3 0168/1257] ata: ahci_st: Do not ignore errors when getting the reset controls Date: Sat, 7 Nov 2026 08:41:04 -0500 Message-ID: <20261107134943.980809194@linuxfoundation.org> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261107134939.434104957@linuxfoundation.org> References: <20261107134939.434104957@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore X-Mailing-List: stable@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 7.3-stable review patch. If anyone has any objections, please let me know. ------------------ From: Niklas Cassel [ Upstream commit c74ee9230a8d1d2f6fcbceff55f56f7dd9b9cccd ] st_ahci_probe_resets() treats any error from devm_reset_control_get() as "reset control not defined" and continues with a NULL reset control: drv_data->pwr = devm_reset_control_get(dev, "pwr-dwn"); if (IS_ERR(drv_data->pwr)) { dev_info(dev, "power reset control not defined\n"); drv_data->pwr = NULL; } This also swallows -EPROBE_DEFER, which is returned when the reset controller providing the reset has not been probed yet. probe() then continues as if the device tree did not specify any reset, so the resets of the SATA IP are never deasserted, and st_ahci_configure_oob() and ahci_platform_init_host() access the MMIO of an IP which is still held in reset and powered down, which can result in an external abort. The resets are optional in the binding, as they are not part of its required properties, so use devm_reset_control_get_optional(), which returns NULL if the reset is not specified in the device tree, and propagate all other errors. Note that an absent reset is now indicated by a NULL reset control instead of an error, so the "reset control not defined" messages are dropped. Fixes: 76884cb2f7da ("ahci: st: Add support for ST's SATA IP") Cc: stable@vger.kernel.org Reviewed-by: Damien Le Moal Link: https://lore.kernel.org/r/20260915084127.692494-9-cassel@kernel.org Signed-off-by: Niklas Cassel Signed-off-by: Sasha Levin --- drivers/ata/ahci_st.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/drivers/ata/ahci_st.c b/drivers/ata/ahci_st.c index 4336c8a6e2087..819269a022efd 100644 --- a/drivers/ata/ahci_st.c +++ b/drivers/ata/ahci_st.c @@ -104,23 +104,20 @@ static int st_ahci_probe_resets(struct ahci_host_priv *hpriv, { struct st_ahci_drv_data *drv_data = hpriv->plat_data; - drv_data->pwr = devm_reset_control_get(dev, "pwr-dwn"); - if (IS_ERR(drv_data->pwr)) { - dev_info(dev, "power reset control not defined\n"); - drv_data->pwr = NULL; - } - - drv_data->sw_rst = devm_reset_control_get(dev, "sw-rst"); - if (IS_ERR(drv_data->sw_rst)) { - dev_info(dev, "soft reset control not defined\n"); - drv_data->sw_rst = NULL; - } - - drv_data->pwr_rst = devm_reset_control_get(dev, "pwr-rst"); - if (IS_ERR(drv_data->pwr_rst)) { - dev_dbg(dev, "power soft reset control not defined\n"); - drv_data->pwr_rst = NULL; - } + drv_data->pwr = devm_reset_control_get_optional(dev, "pwr-dwn"); + if (IS_ERR(drv_data->pwr)) + return dev_err_probe(dev, PTR_ERR(drv_data->pwr), + "failed to get pwr-dwn reset\n"); + + drv_data->sw_rst = devm_reset_control_get_optional(dev, "sw-rst"); + if (IS_ERR(drv_data->sw_rst)) + return dev_err_probe(dev, PTR_ERR(drv_data->sw_rst), + "failed to get sw-rst reset\n"); + + drv_data->pwr_rst = devm_reset_control_get_optional(dev, "pwr-rst"); + if (IS_ERR(drv_data->pwr_rst)) + return dev_err_probe(dev, PTR_ERR(drv_data->pwr_rst), + "failed to get pwr-rst reset\n"); return st_ahci_deassert_resets(hpriv, dev); } -- 2.53.0