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=1794061994; b=qyZT6v4vS3ticV3LOxXpdUt/EmBLqPR/m2e8FueVX8gmKe6dDPHMVNEZA3MGSC9l3L/Z 83jkiQJlXAhwBYuIujkoQKz0bYLXQWq9FHdAU850ORX7nhjzNvnt8QgYlo4EjcdQcbPy0 bFLJSGpwZuSg/WlhZ9l/yCwaucx569o5cW1BdVYL4b5H7954rwlJ2Gsh20KU9Pt/xJDCT PhrBl3sDoVupGyo9koYJ1YVwynI5NnXv5kReKiBxZU5//xLtwb27MHgKUVfcgqwwXiWov dve8Pybbzikv4Wqdsl2biarxwQ7z9jSqb7zQ9EBTPGYVtcM8xdn5qS3qy5ADIRqzvvA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794061994; 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=Azk1s01bjwUg6TB+hcLBSOGaBdQD/UrR2iZACp12qWY=; b=0lS/ESf/+gm7t8S0/HNSftbCCjmU30817Ifp8d3l0gbUbWlJVeI4bsVgWSsNfJXzY/uZ yvXRVYYS8UlmO3iwmDdoasthI04jNH+iNmdm1QEYpsPZBAWcmKdTcpY4J35BcmWiwUPYX 9msjQmBrVUHjKrHyFl7kbQ+h88djGTKyTgQP0T0rS0tZNjkD1v7o2IwnkHqpm6hO1frsu k2FEmD9W+uqw9fPuogOOo7AXXNMzZpZXJI38j/9q2BmZlKB/5ai8kaRFkT8Wcd8GoAtQ6 mDHXsFB4y5E2cPAmj9O5cA7btSYX5spqwa30Dok/MVuezQUwxJayMSBvgLfC+KR0aYA== 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=aK4nd0PD; 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 D22A1606A332; Sat, 7 Nov 2026 14:33:13 +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=aK4nd0PD Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7CAF81F0089F; Sat, 7 Nov 2026 14:33:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1794061993; bh=Azk1s01bjwUg6TB+hcLBSOGaBdQD/UrR2iZACp12qWY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=aK4nd0PDEGNQat7J47emIBl0kXuhxmfGUrnhav00CwsHKfLi1d+dOcLx9l82RpHRo bIpl3A/jkWW4vV8K+nNWTNbDp/tTr5oeHFV3TkNYmQIJ8AMxZff41ORyqxM7WqbJci EioxcoyD0YCFtoYva1F8yltewKbcL/+hf1Irgjbo= 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 6.12 0984/1536] ata: ahci_st: Do not ignore errors when getting the reset controls Date: Sat, 7 Nov 2026 08:50:00 -0500 Message-ID: <20261107135025.293229943@linuxfoundation.org> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261107134957.653319350@linuxfoundation.org> References: <20261107134957.653319350@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 6.12-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 79a8b0aa37bf3..96d285d68def9 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