From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 4EA4A413249 for ; Wed, 29 Apr 2026 17:01:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777482122; cv=none; b=Ej4SRLmfhh975QgPQX/ndmyvX3ihoD8PZh5MathvmRAknJdEEgc3oemvgZHeljzg1zydETqfkaKEG56BY7L9YG8c2xwf5dIo+l67cIWduNJNkhYukiYnphxA6ryM16U3GGKiRElkvOFBrD5qRYYsRCLGEebGsKu3CdHe01xBuN0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777482122; c=relaxed/simple; bh=jFRNIsAAfyAug5VRjXEXqFLZUcaJoNigQqeYCKQMUe0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pnXKRnfb67OVBM3lXwrQzc2lATPZg+fujQu2pDl/GKc4d7686h7FlelJMjXzhP0kLwdTUT0BfsgGU39OuYZcpak0WuYZDC1Py+lpSklW//Ccqh1jL9maWIUV9kPspaLSqioXHR7iVtGE5LjPLP8AX7E82DEfk9hDmTuzKrGurgA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=QL3WfiV4; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=DxbCveNP; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="QL3WfiV4"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="DxbCveNP" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63TFTrnj3752420 for ; Wed, 29 Apr 2026 17:01:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= ajOkDbyqj2nICqoGPG637xYt2lDMFeRBdsFcCgJXb4E=; b=QL3WfiV4EO4cJUd5 WIH01uUT7U1QAeTTCjDhjhGFEGFl0By930BnDXOj5TwDSwFQS5FTFchtmlaYpFSt sHDSCY5Ad4gtn/C/15TXs4W/VS+/sH3VQqzUDkdiJLRYVgCaDmlcYvXkkLGboy6y LoDd1DD2Q/4gxmkT+/GXJftzctI71drI/xvNJqw8v8QywvEWSn7sUNmDejWASzWd Na2Ay+Timt6dLxhicdCRCODYUCy3+FYkPyrenCGT1UK4F6V9lVmdsHQYPXnujGoG GK9bFrQ9SvnlP08VQEJW5iy8doNeTsl5p4HbhfWL4kt4tMcOumeQp073LXMWviJY d08yWQ== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4duch1jn3v-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 17:01:56 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2b7aba0af02so71815ad.2 for ; Wed, 29 Apr 2026 10:01:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777482115; x=1778086915; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=ajOkDbyqj2nICqoGPG637xYt2lDMFeRBdsFcCgJXb4E=; b=DxbCveNPWRhFWYMVFEHT0vEAB3Gq1VxioPKJgZpmxC9jP3mlfPpCdHTDfL4V9veMkz FGROVGab+FeitlkVufbeR9NeCT28jZfBbGI1jMEgyXo6yLrEce/VFQiWC+r1yP63Z7ct /EmMCJbiqUt8IwftzpALwwxZE93H+nZYU93WGs9nLcJj6wzhc9D+UtEm2apbpPQktSJ2 bWnf0b+LnacxVVpzpk+JIhnL4+x9OFGCEhsa57jmNV+qoQq45hSL+gJI36ZOsoXQuoVd njRmqtDWKwI5zpfF/pJjNNo3xI+aSC9j9QQ7REqHf7u37ZM24swaUXPCG4XX/9oX0WIC uNCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777482115; x=1778086915; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=ajOkDbyqj2nICqoGPG637xYt2lDMFeRBdsFcCgJXb4E=; b=ZkurdxhgjwE5DJipGEt6nlFfvbbqr6TuB//rnbrPQpGXY+nbKQO9HYVGAVd/P4B89f C+oNzSX0AZLE51EWHFO29//cu4k6PHKYqZmEtrWQtnnHdvAmL/X5ULVUX/weYC3ol5t1 v0tbsrYdpRMP3fuqnFoV8W6uLLbQlOPCOcF8EDdlhaJQtx0KSOSpLPm6UzVUdGgOVKrq 6v/YVbu4zyDuguIagtJUClG2y5EBtROEw5wLVegrTmb5C7BvfjKmOcq4ZBpqBmw1bXVQ HuxLHN3tL5Q8kuw3Uq1YNsOJyrMCCqbcKNYbtj4lvNUJgQK3jXurt6DCCo0jyIdzdqnm vwOQ== X-Forwarded-Encrypted: i=1; AFNElJ8cvVyVy5wP3iq//0gZoMmG0DNvE3pX7HbWrUWP1mc7y5Mj+qxk3u2nqFLWeUr3wMSQb7MAD+1LoVRhmJM=@vger.kernel.org X-Gm-Message-State: AOJu0YyakZjxz8Il5a8/S+TZczkMRgUwJRot/fniTMzN4DggBX37gh7F okHfHjwMf0iCTZkAxb+zD+n1QZEJaI8NFdvv4hmC9g9duE2pJYSxWbBReewEQekY3Pe6TGNhi5q tqMHUzr2iHLQ0CxZARki+6KrmnA0eedoIf6/F/Kr8ozHnD/i8RmegRRBpvuc4cezQtq4= X-Gm-Gg: AeBDieshgWQlniTRgAnKzIv7Q8U7J/gGV+v8jV2Vk9r4tnj8XCltVMFJCOWCYiYQINy LpQJ2fN1c4vt3m2jH1xLyvzlr/SSyAwhvbFInVhd+F4XTw+iknncTOoShRK6gvqfmUFMDT+B6Dj wVO3iF4Bf1B/FsQPWzgig2vRRKUYtvmDoRrm49t9zJRvrvjEQ4SSJtR2A6XAf8snsIPGy0MTdKA 38RNZc2Hgl6R2kjqz12jhwAM03RVX0qPtm4FLQj5ODcMhtnN3YZpBWB1bEK74WpNh8zjgabs3C0 FZLUq0mYeHd0NWKoRVZGMmch4rNx0TKGXSb3mfXgDP+fXNHBesL4Y0ru0D6vJ0dUytOySR+dST7 28JWf6+PPXPjdM7vZGC4aPbT3MDwvJnj1mTJ7cD5j23qxMOs1lpdCxybvAFG1WYKofmbM X-Received: by 2002:a17:903:b47:b0:2b2:481b:de68 with SMTP id d9443c01a7336-2b98746e3c7mr42279075ad.35.1777482114913; Wed, 29 Apr 2026 10:01:54 -0700 (PDT) X-Received: by 2002:a17:903:b47:b0:2b2:481b:de68 with SMTP id d9443c01a7336-2b98746e3c7mr42278615ad.35.1777482114300; Wed, 29 Apr 2026 10:01:54 -0700 (PDT) Received: from hu-vdadhani-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b9887853a2sm29530195ad.18.2026.04.29.10.01.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 10:01:53 -0700 (PDT) From: Viken Dadhaniya Date: Wed, 29 Apr 2026 22:31:37 +0530 Subject: [PATCH v5 2/7] spi: spi-qcom-qspi: Fix incomplete error handling in runtime PM Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260429-spi-nor-v5-2-993016c9711e@oss.qualcomm.com> References: <20260429-spi-nor-v5-0-993016c9711e@oss.qualcomm.com> In-Reply-To: <20260429-spi-nor-v5-0-993016c9711e@oss.qualcomm.com> To: Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio , cros-qcom-dts-watchers@chromium.org Cc: linux-arm-msm@vger.kernel.org, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Viken Dadhaniya X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=ed25519-sha256; t=1777482100; l=3312; i=viken.dadhaniya@oss.qualcomm.com; s=20260324; h=from:subject:message-id; bh=jFRNIsAAfyAug5VRjXEXqFLZUcaJoNigQqeYCKQMUe0=; b=e9pk922tgW72Aghv532bXlAF/epcSjxC2XCRXTAJ/nCdJzBC4NQ80gqS58gm53FiOPp0iar1s vnvki9gxMtbDhRsCId6Q8iCu7gl+nuE93r3BbjxbUxH5C6JKlU58N9j X-Developer-Key: i=viken.dadhaniya@oss.qualcomm.com; a=ed25519; pk=C39f+LOIGhh/02LQpT46TsUSXRvBn9qXC8Xb26KJ44Y= X-Authority-Analysis: v=2.4 cv=arGCzyZV c=1 sm=1 tr=0 ts=69f23984 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=GfYcMVghsOmS6C78lsIA:9 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDE3MSBTYWx0ZWRfX4Gk/ZWbOeZsJ DeR7xD0yzjSsHBlmpQgLSWSfzdF77VfS5XLr+mzU7W2jpKUHRDqXppae5wEGlOeC2jR5iFVmnhH JVOVPK0RA06x1Az4ryU72QogGWQszAG2Zf4tPuGa0PvXlZ40Kgs+EoTqCOZxWvHkivaHH0GvDKT mKu6MRorGEF9DoRNOXz2DN8xfIY0QD/yvJlHfMaauqlVKtJ2xLb+11+PgNQE42k/h05w70X7rx3 a1u0klB2WjiRsRD27S/K/Ts7TtQNmmozATeBkIbHPyLRX8lpQFFtOquoN+pUeXo5LYqSNe9jByI aQRqkuGZPowo0heSIn2ZZP8p8ok7UpCa5AtYaToxhthVvpqJJ3SP3QJjRpDi6AobrKrEpCyF7IO q66nbA33WKFDfIhjOTBGuqyzrZSeA2EOcqMc3LOV6anFdihxgNFypS9hpUUQlUd9wqQlG/IVlmF nnsB3Gz+yUENg6l3TIw== X-Proofpoint-GUID: NGybXv9C5E71TvvDxwIniGNgIk8Fgk0h X-Proofpoint-ORIG-GUID: NGybXv9C5E71TvvDxwIniGNgIk8Fgk0h X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-29_01,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 bulkscore=0 clxscore=1015 adultscore=0 impostorscore=0 spamscore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290171 The runtime PM functions had incomplete error handling that could leave the system in an inconsistent state. If any operation failed midway through suspend or resume, some resources would be left in the wrong state while others were already changed, leading to potential clock/power imbalances. Reorder the suspend/resume sequences to avoid brownout risk by ensuring the performance state is set appropriately before clocks are enabled and clocks are disabled before dropping the performance state. Fix by adding proper error checking for all operations and using goto-based cleanup to ensure all successfully acquired resources are properly released on any error. Signed-off-by: Viken Dadhaniya --- drivers/spi/spi-qcom-qspi.c | 44 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/drivers/spi/spi-qcom-qspi.c b/drivers/spi/spi-qcom-qspi.c index 7e39038160e0..edfbf0b5d1fa 100644 --- a/drivers/spi/spi-qcom-qspi.c +++ b/drivers/spi/spi-qcom-qspi.c @@ -818,20 +818,34 @@ static int __maybe_unused qcom_qspi_runtime_suspend(struct device *dev) struct qcom_qspi *ctrl = spi_controller_get_devdata(host); int ret; - /* Drop the performance state vote */ - dev_pm_opp_set_rate(dev, 0); clk_bulk_disable_unprepare(QSPI_NUM_CLKS, ctrl->clks); ret = icc_disable(ctrl->icc_path_cpu_to_qspi); if (ret) { dev_err_ratelimited(ctrl->dev, "%s: ICC disable failed for cpu: %d\n", __func__, ret); - return ret; + goto err_enable_clk; } - pinctrl_pm_select_sleep_state(dev); + ret = pinctrl_pm_select_sleep_state(dev); + if (ret) + goto err_enable_icc; + + /* Drop the performance state vote */ + ret = dev_pm_opp_set_rate(dev, 0); + if (ret) + goto err_select_default_state; return 0; + +err_select_default_state: + pinctrl_pm_select_default_state(dev); +err_enable_icc: + icc_enable(ctrl->icc_path_cpu_to_qspi); +err_enable_clk: + if (clk_bulk_prepare_enable(QSPI_NUM_CLKS, ctrl->clks)) + dev_err_ratelimited(ctrl->dev, "Failed to re-enable clocks\n"); + return ret; } static int __maybe_unused qcom_qspi_runtime_resume(struct device *dev) @@ -840,20 +854,34 @@ static int __maybe_unused qcom_qspi_runtime_resume(struct device *dev) struct qcom_qspi *ctrl = spi_controller_get_devdata(host); int ret; - pinctrl_pm_select_default_state(dev); + ret = dev_pm_opp_set_rate(dev, ctrl->last_speed * 4); + if (ret) + return ret; + + ret = pinctrl_pm_select_default_state(dev); + if (ret) + goto err_opp_set_rate_zero; ret = icc_enable(ctrl->icc_path_cpu_to_qspi); if (ret) { dev_err_ratelimited(ctrl->dev, "%s: ICC enable failed for cpu: %d\n", __func__, ret); - return ret; + goto err_select_sleep_state; } ret = clk_bulk_prepare_enable(QSPI_NUM_CLKS, ctrl->clks); if (ret) - return ret; + goto err_disable_icc; - return dev_pm_opp_set_rate(dev, ctrl->last_speed * 4); + return 0; + +err_disable_icc: + icc_disable(ctrl->icc_path_cpu_to_qspi); +err_select_sleep_state: + pinctrl_pm_select_sleep_state(dev); +err_opp_set_rate_zero: + dev_pm_opp_set_rate(dev, 0); + return ret; } static int __maybe_unused qcom_qspi_suspend(struct device *dev) -- 2.34.1