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=1794062843; b=lLzb6i9WZ67UaWOyoT8bMYg7Tq7DdKCbieZSWBaTQ6iIoKAsI9u9IhbyIYglGuvPFeKw Kyi5Ozz05lHEooPcLOC7xvwIkvbFvWo9XV3aQd6CMVBI9gNYe0tbyhVnWNQskupZLfseE lLKpoMIWPDRIP87mflGjw/PDfSbb6ISE0WLKnbNSZNctDw+fPkNybSCBUPP2FqwMrA7nV GEjaAn3X9TWOWFBkAdmdFrVOPiaqRBXCoObfILz8sDLG24ZflMjCOO+RoMc1FygK1LXGa UXF+a3oGDuEYRZIebXVEIJVbXkyhggM29YfZ9xdDZ9HShj4i8KaaRt8LfGKWHh0cq3g== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794062843; 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=o3MZk7aVg9YqEeWm9Rmd/dvYsoxkiUctwPTo60UMjyk=; b=JWTYJ3iGXEyyHthWJRsS+mKIb6zCSoMUYiUF+pi+n4Qkuv/LQc4+TTJbIqzUWoZXyRco +kcelkS2bEwAcsfHiqcygb1JINO5ei2YO9Ij+cxv9s6ZcsghPzogbkLQmtFchEkA0srQG hr2K/qXG5/oX1F7k0CPVzagPAkxLci2lS4vf5nQs2BMxRb+ky3+TWWSdJO6ERLwudOcd6 BUqFvLTsvWi8Bxssebs99/w18+3T+aDuQ/tiKPsqYobmXJl8V/4GO3gg+VhrBnehkD8jT 9SPn6BdU8ZOOS0VwrsCdYgp0cg8FjTZaCUF5oyuyrfJ6N2qNlOL3oFOwpUPBGdi23LQ== 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=xZSzR+g5; 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 059CD606A32F; Sat, 7 Nov 2026 14:47:23 +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=xZSzR+g5 Received: by smtp.kernel.org (Postfix) with ESMTPSA id A79521F0089F; Sat, 7 Nov 2026 14:47:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1794062842; bh=o3MZk7aVg9YqEeWm9Rmd/dvYsoxkiUctwPTo60UMjyk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=xZSzR+g5hTXXI1ur3Rkkf50afG9bY5y/1S3KUdzolc0ZE43GUqrbpg/zVWHQAaEtk XULRBhumg32p0BwIw7xEVr3wYNMl9b5Bq3qGOr662/Le+bbxUHMSpBlYw+8sl7IYpL ElLNtHwWML3JrzGVipeSHYsGkBcRqoGwHGJFTY5A= 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.18 137/869] ata: ahci_st: Do not ignore errors when getting the reset controls Date: Sat, 7 Nov 2026 08:46:59 -0500 Message-ID: <20261107134857.062693550@linuxfoundation.org> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261107134852.069646174@linuxfoundation.org> References: <20261107134852.069646174@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.18-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