From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 CF0C238B7C3 for ; Wed, 29 Apr 2026 04:23:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777436587; cv=none; b=YHQp4uH17GFdUdIHs042o74tp3Mc/gmMb4R3JiFPKdOKp0Gmm4PC0/OJV66h4V+BTvuC4yBG5qC/8GhPoIHGrsQzBWHz96Y5EVlC8e5hx2aEgKsDJssINWZpks8dTVujKJ0f5Gz0XR1WHaoOBvrhf1k6FxMs8+U/IxCG7FNJQSo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777436587; c=relaxed/simple; bh=jFRNIsAAfyAug5VRjXEXqFLZUcaJoNigQqeYCKQMUe0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WDYUtxsh5343sm6O+fXhMG3esTIflQoO8Q2cVvYh/AbBRLjPNsNbnO8mOmOGAYNC0HsvnRZPdJkZkaBZEFe9FbUGqiaf7ZQLZfsy2qn3AWvXy1tFbjFrBJGNyJXzY+Vl/eIBqW/Gom4mvNm2NLm0mpFn8FQvthZHHU4xPjUlGrw= 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=WUjbIfPi; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=bWl7E6TH; arc=none smtp.client-ip=205.220.168.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="WUjbIfPi"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="bWl7E6TH" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63T35t15831353 for ; Wed, 29 Apr 2026 04:23:04 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=WUjbIfPiTO8Zs3Ta XdfCjvrNeEHxDMGw+wzwPF2qqJ9S4qRVcvcvaKVpnk/RjREMiUnyxIre7LMlvas0 AZteIiYFMgRXq/dn6zrUlroT4u+m0QYimJBm2aJhmgFReOv6tITA2+pQQFGicZXY aHXRjnqXvQTwPHFzxMUHo81ImEezPPCyUXpxQO8ZHHu24+YCgLzqePefH29PPBoi vPe4nTQpL9IiqcrLhf13ygQUmQdJpSINJZBVUnUS3WGiPqmKuTbXPJARz881/ca+ gjmOtNlw5ukrJ3MhFVkOOemlYAUd2hdtxNn+RtAc30n4B6R0Ze2JiAmsc/28ouEl g5eBJw== Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4du0wqa0xn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 29 Apr 2026 04:23:04 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-c7989b7cdd0so13046223a12.1 for ; Tue, 28 Apr 2026 21:23:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1777436583; x=1778041383; 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=bWl7E6THL0rJOFj4LwA0+CB1RwWUWdD9AJKGKG7N5LQSB44MAnEYTTVA+tpHRm6MK8 8jZfDy9m5wDT7TaRk1yBMXvGsBqI+UYE9PNY5tuBM+S6S4UEti7SyI6kLkrpo/deCVAp YJFSI0PTtG5Y67cny5F1ikTdxk3ygxifUBEUhB042mGjB4CYl+G6G32CYIIqgMY+OUuS ykCUaYVDcwyoOAyFIIFD/R8H1W5idLDKz9du1bDCks+DLDfZDmH6I0Ly8YXB4O5lBpk+ BJHwvGiOdlAAMv/60nEGlue3rX5kRmRU4UIzAL9Er0E1SmrBIdBnF9m+/rE9GN/EzkJz 2z0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777436583; x=1778041383; 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=WjtqU0ijUiuE4Yrn+MYIx5V7Eiqd/hNDQ7Wm2HNJ5hG6FQ6e1zAlq25hNsEy5H/uS7 yYJz5OlwZhYLm7XhA7p4STC26eNpRmzyZve72enxRjjw1st7JETEWT8TiSQbp4N5ofZ3 7zJk8qWNtD4wwzgLRgayfNNe5DYvk5OJ1UuGPtbwU7Y5a3mEVW0uSNOlKz4u+F5up21A 8EGW0nqVHjJR70Qt1dtjkkKdpj1Mboa+2L4DxLIcaD6upT6kEM9GGbiI0oIxrTlxa0+g VDk2NWqXtRolhL2K1DfBSDlQOvVAD2CJhMvK0kn+sPXwlBkixwjTmUICw3hUMK9kZ5CT PyHA== X-Forwarded-Encrypted: i=1; AFNElJ+j2BaGVyOnZQT9PtT2T9cQi4oB9er/g/mMYub3blqHZEmEXD0Fm/eyukB5rXtPXRHcM5H4QuE1A3vStr8=@vger.kernel.org X-Gm-Message-State: AOJu0YzQ95FDfNJn/nqFhAdCDxmBlPOY/xFCUzmEsvIG/f3AEa5io/jO +Q6eyqatRa+7zmoAPXvNSjmVp0gfKadrYp207Ohw3fakrw+OpfdEZ0TjkXlSLBfZU9L/n6SKPBC gHbnNYy8sTNTryshjoptCvPQkA3lSe4ncZ4Gl8Iy/JwdLj6Tp9vMA/TS8ZzBoYCmMeqA= X-Gm-Gg: AeBDievTg9XIe0WLNNm+sy0qBohFADUvJboMqRWs+uotfTz2cQ4Jf3prIYCkhOCobQO alqq6QhxfVL5DvnWnGYN2nl4btIVMS0qL0qAECWlKFczdZjqGJkyBne1cnt1xgHMivSoZtFOxQs 22TbSA9XfVr7dkfuCpiXPKYQRPXMpQttTQ4b7Tfjj+QrRllBNxEmsxQ0QUsZJk/wh2brPoubu2M ddK3gT4YzIUVRcQtfMsBqBuJqIHCfWAPYWzVc9u/he3OF7p3vdMQapN7SvRGHeLPkjP7upyionv 3PWXkRny59Px6LpQxqf7NxKoMf40nQc42kYD6yv1Wn8btNBC8dXcOMw56TBNQWvKqzM6ZV1l0gj P4NzbrDteoRC4Uxs3uLm4LI9C68pOipu+PSekEBS68/J4eUoiOY6dy7DzHz77hrimLQpY X-Received: by 2002:a05:6a00:8e01:b0:82c:6d88:2a8e with SMTP id d2e1a72fcca58-834ea5e5777mr2116152b3a.20.1777436583448; Tue, 28 Apr 2026 21:23:03 -0700 (PDT) X-Received: by 2002:a05:6a00:8e01:b0:82c:6d88:2a8e with SMTP id d2e1a72fcca58-834ea5e5777mr2116109b3a.20.1777436582893; Tue, 28 Apr 2026 21:23:02 -0700 (PDT) Received: from hu-vdadhani-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834ed5a074dsm602200b3a.10.2026.04.28.21.22.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 21:23:02 -0700 (PDT) From: Viken Dadhaniya Date: Wed, 29 Apr 2026 09:52:41 +0530 Subject: [PATCH v4 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-v4-2-73fb1bab03ba@oss.qualcomm.com> References: <20260429-spi-nor-v4-0-73fb1bab03ba@oss.qualcomm.com> In-Reply-To: <20260429-spi-nor-v4-0-73fb1bab03ba@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=1777436569; l=3312; i=viken.dadhaniya@oss.qualcomm.com; s=20260324; h=from:subject:message-id; bh=jFRNIsAAfyAug5VRjXEXqFLZUcaJoNigQqeYCKQMUe0=; b=5jiDIJ6FuIkN2f9nBOgJWvdtBUYK20DHz5FWpeVTv7dPnAW0CbbnuCNnJVUE91h5Xrcu3B06w ql+TsQPmoAfCPtDcyZ0XBN8KVe+l9mEizllu68NrLZiCcTFNoV0i4ua X-Developer-Key: i=viken.dadhaniya@oss.qualcomm.com; a=ed25519; pk=C39f+LOIGhh/02LQpT46TsUSXRvBn9qXC8Xb26KJ44Y= X-Proofpoint-GUID: xh-SIfzsnV2ZVjmQ1a2m1Erup325fV8l X-Proofpoint-ORIG-GUID: xh-SIfzsnV2ZVjmQ1a2m1Erup325fV8l X-Authority-Analysis: v=2.4 cv=BfDoFLt2 c=1 sm=1 tr=0 ts=69f187a8 cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=GfYcMVghsOmS6C78lsIA:9 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDI5MDAzOCBTYWx0ZWRfX5aMW9UuMbApO rBAy7aFsuNfjvKagmsnCApPUQNj2FYs6N1pfBhW325V/ZQ4BerVw84WpRdPFC2ys7GeZl+0TnPs c7x4A9E2shR6kQ3o/VOKGXdshWbVyH62uh2HKPF1V2LXJDYJ2C+qTfXIGXTeFhExSd2Ur52NieJ /jagFYe9l+Ae897zbLZrhDEoQhTLIZZMR7XlnpRuVCjcrgBhWi2i9EsndWgGVLi51Mu4dZWcK2C gf0AYKGXaF+N0vsdMdByFfStFaE6ay2E62XbSbPyQmdUwQP3g7fy9BGk8I6U47EeMiZccvSXVO0 4PkEuMjj5a6NRk89EiCNEYQZReo08CevQ57oeCi+C9ciczzrtoeYAGp8quz/RqlHOwBkr0utQSl z57N9oKBvClqulocuY2ThVuODClxXDvsJDypI49RN+i52KdhgDOG5fXzsLQdG1njbBe/WhHX8Lr mp2rU6X05o/dRw4aVYg== 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-28_05,2026-04-28_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 impostorscore=0 malwarescore=0 lowpriorityscore=0 bulkscore=0 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2604290038 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