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 DFEA224E4A8 for ; Tue, 14 Apr 2026 17:08:48 +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=1776186530; cv=none; b=Ip2g4yntAkKeE6a2n4HH/pxtMdfcamO4q5oedJhc6A9c7ec2QzUenkxvjOEIQ6a0Uv+VSSNMTYD1JrHh0PaJiSW2A9mk3tP4ohs6ncuesqxXqRKXQ3BY+EULKE93tUylExNN3UGbqCVk1bba4MlzjrqiBScGkql1QkvZ0gXXHDs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776186530; c=relaxed/simple; bh=nG3HGLtKAAk6JI8ZPXSU1m2OMN1KOTGzF+vXFrB2bfQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GTNSypV38me8HMPYQ4ZOFbY7ejv4lr2LiscSKEGkFnFaGkFldHO5hpAk+6diHDhSOd6l/XQhmWBpRskKSrEsUih+JjkAmYXbm6GmTqi4Bp+O60YSbWVYI/+hoQon7n8bclbQBl3MPW/ouuymkSwc5dcwNURbVocuywgTxm2H0Nk= 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=mLOOyRpB; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=hK/aeEnv; 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="mLOOyRpB"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="hK/aeEnv" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63ECHMJP3157741 for ; Tue, 14 Apr 2026 17:08:47 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= wmgIZX9kqMP1Kel1luzD38WggWBRb6Y5G8TMEPPawwY=; b=mLOOyRpB1HgTUtUV mHRy7RL4O2GFBN0mw4O9LcmtPlXUrVSK94ggV5lx6CUF9IDJD9Gy63zZdVKKJIf3 Afluu/mIt6OnnUTI5X0ht57k5CrXAq90wCmpDtG6nlsZKJkdAHbQQiiZ0n94C4gn 29HywD+dXSPTw2rxhjUOTI64WdGTD8Sd4uRSNUwlnAen9NcmLje0N7t2hkDkNGdD nlO1XGjOR2ntpnXvFWPG/6Ms0S++vgOqy0Z2EjHah6BuAGkPVkLkA+yq0KOzFNO+ XugDqxTwJ3vTKCL87Zh6HBbPvVrhF1OXvie7Pdxf0S7hhMvf6irCVVJwBC9ukv1n 9LSEUQ== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dh86bbqvr-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 14 Apr 2026 17:08:47 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2b2ec17dc21so30479325ad.2 for ; Tue, 14 Apr 2026 10:08:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1776186526; x=1776791326; 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=wmgIZX9kqMP1Kel1luzD38WggWBRb6Y5G8TMEPPawwY=; b=hK/aeEnveK+NNYrMwT9UATB8WXo5iHUIqMY9mCbB4Ydf22L+XXsd1Pf1zRrQp4tTKO vcdkgcoLvOk9Jn3TuW1dft6KIR4IzOXqzNfvRQ5Xx8UftFJzjcTYsR1xvoAjsVc25DCC zv0AOxy+ZL7x/CDvtFirichpM/S99CDgQcvZ5JZmPW1I1+W0pbvwT5uh6D6sbnb78Qc2 bKS4PZxQYwvH+Tmh0huCMFyZb7lVjUvAnTr7QclswVv4QtVdkCPTua7eEfmCyliIVcJ3 FE4QHXAvIaIdFf9QD9cd9QgHDxSIAzOAfd6zw0FO366HiQdWbqUB0msswGvIA+yjxiI1 Ye2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776186526; x=1776791326; 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=wmgIZX9kqMP1Kel1luzD38WggWBRb6Y5G8TMEPPawwY=; b=qzQhhhC5RNGZVnkNedYcmpZPLOyBlZsypCtmW8Uv2pdMo/PdWVOn/miVoOA9Gh+BpS p+LEKxfWQpf7cyhyTkuYxJUkPI0SgQ4r9FOFv8Yai21g9LgQ4a3aHveAIvKwo5o1xqrb ktgSpP6Df60RbPmrNtlCkOK8nfUmbF4Tc4G6Fiab1r0AuHcevq9UIB31ghGQbhviAs7Z EYNoZN90uCsn8lhnMnerjyTuKlLKxYcKuYXJqjynd9RrVXAg0AaMzfHS+Xy0zptZAOav 6xzXDPiHZeDHyKc6O/nh0DY/0T1kF+TqxzqGoManxb8aNp6E1sNXKfd/hBiXyrxc+B60 R3Wg== X-Forwarded-Encrypted: i=1; AFNElJ/t5iZkSL4TWcaUmUmC3GpMEtXhMPZUiBp9gbbff7mUICXcH2gPAL/6tllswZUnFIEc/VjLu7sgw9HsYZY=@vger.kernel.org X-Gm-Message-State: AOJu0YzTkj/8TFI1afi77/j1hELCKxH830SoKOHDmFhBMam89iX6VHh8 y6bP+SeeLa3aSzRIX/uZE+u2inUA3jm923shgWSAFQXdIWBWFCiEQAxCxkuvtcyaBNaQcxvs9El NwgDTPQIVLx4eezc5U1PimEf22EWilnb2EPzVLMTfJu1XtPLFnQ3/FkpcBkl0+DGiPqA= X-Gm-Gg: AeBDiesQXViMVBGoGDTaAA4ABXFZxcxY1Bq+Fd9eXCAqA8vFp30eNDt9ezlX5/V27G5 qZMwd7PhCSsVaxAZh5mtt7krdqdFwigJNW0Y/x3stMUBA1xXhViXJ9iCkdPrhFuUUQqw1/W9a0V y1sXBkbSdBcKvf3P3arSYy30QyxuNdsVSpH69Zj3Aa3WRG8b1fjn3x9QvoTa3L/I320/OD19Hbd g2O7/YgyI7A2i/yDno2pDweL0z1oy7HGgdwlKZbBdOunxdFt0lmQwFGNp3tLdJ8g59ffIVxwmHv o4oP5PTvyk0UJj5kKTv/XtOz+c1TEA5e8E8O0nUzhnP8vsou9qFV94qTILYndbFxRcBUz085/gc WteiquLa+41S2/JozUB9KvGhPokKdtIlZ5FKoEiRVtZ0FsjdY5mhePdob59iz83SJ3e/9 X-Received: by 2002:a17:903:2ac3:b0:2b4:5df2:ebd8 with SMTP id d9443c01a7336-2b45df2fa77mr80727085ad.45.1776186525510; Tue, 14 Apr 2026 10:08:45 -0700 (PDT) X-Received: by 2002:a17:903:2ac3:b0:2b4:5df2:ebd8 with SMTP id d9443c01a7336-2b45df2fa77mr80726625ad.45.1776186524861; Tue, 14 Apr 2026 10:08:44 -0700 (PDT) Received: from hu-vdadhani-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b45d1ab540sm97535225ad.40.2026.04.14.10.08.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Apr 2026 10:08:43 -0700 (PDT) From: Viken Dadhaniya Date: Tue, 14 Apr 2026 22:38:20 +0530 Subject: [PATCH v2 2/7] 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: <20260414-spi-nor-v2-2-bcca40de4b5f@oss.qualcomm.com> References: <20260414-spi-nor-v2-0-bcca40de4b5f@oss.qualcomm.com> In-Reply-To: <20260414-spi-nor-v2-0-bcca40de4b5f@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=1776186510; l=2901; i=viken.dadhaniya@oss.qualcomm.com; s=20260324; h=from:subject:message-id; bh=nG3HGLtKAAk6JI8ZPXSU1m2OMN1KOTGzF+vXFrB2bfQ=; b=31644fZHVoQSXMrcYnJW71B4KkmEd7vugysgBf0qD9Mv0ylYtPuBiwaqFomH252uATFdCyovW I+nIxsM0ftwDU2ceey1RfNMC4UeeWupbwR5PlwqCLgPxAIxIFkjjose X-Developer-Key: i=viken.dadhaniya@oss.qualcomm.com; a=ed25519; pk=C39f+LOIGhh/02LQpT46TsUSXRvBn9qXC8Xb26KJ44Y= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDE0MDE2MCBTYWx0ZWRfX5j88NHiH/Ekb 9biu4twMEA0LgRGOiAOZVIfK403m9YvvNeZ1O9TDFOGyhxlNXg1IU1Vqa8ayufc0NIu8ljVHty2 OKj71wD/Al3sUCEF8zNY7auDigWZ1UqjqPJ5GUEK0HZTDxwJBp0apMi7fQ98u90X/DdOufL/844 TVGi7oCM3yCcuflBeoyk2cuRZdgkS5/wZ/5D4jCVb1pNX2QYSiCdI8D2IMQzcuMrOHeYd9XxFV2 7KosuS3RwWx8gxtouRVxBwxJKDxZ/SzGhxqFk+PBBo9YOAsV6kgmqS/VzelyEro0DhWivuMFyAo x3Coc9is8+MgtBz+cw8StN/7P/8r8+WEK2lIRjWAj5w0oq/MFD/AmrIEXHpL70H8ic6Vnucgd/l 5orGRdIsQ/s+AomAHkS8jBt9M1x3uJOOUl5eVGkyzCj7aBn3URKqJMkrs/4UicxSujqI1dkTPKp Jrd5uyQJmkUfZWqd4dw== X-Authority-Analysis: v=2.4 cv=MahcfZ/f c=1 sm=1 tr=0 ts=69de749f cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=8HTBTZp0RI7lF_4f_zEA:9 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-ORIG-GUID: x6Sm4AVF_EShPliHNuZvqpQxR9KOt73M X-Proofpoint-GUID: x6Sm4AVF_EShPliHNuZvqpQxR9KOt73M 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-14_03,2026-04-13_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 priorityscore=1501 phishscore=0 suspectscore=0 malwarescore=0 spamscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604070000 definitions=main-2604140160 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. 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 | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/drivers/spi/spi-qcom-qspi.c b/drivers/spi/spi-qcom-qspi.c index 7e39038160e0..38af859713a7 100644 --- a/drivers/spi/spi-qcom-qspi.c +++ b/drivers/spi/spi-qcom-qspi.c @@ -819,19 +819,31 @@ static int __maybe_unused qcom_qspi_runtime_suspend(struct device *dev) int ret; /* Drop the performance state vote */ - dev_pm_opp_set_rate(dev, 0); + ret = dev_pm_opp_set_rate(dev, 0); + if (ret) + return ret; + 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; return 0; + +err_enable_icc: + icc_enable(ctrl->icc_path_cpu_to_qspi); +err_enable_clk: + clk_bulk_prepare_enable(QSPI_NUM_CLKS, ctrl->clks); + dev_pm_opp_set_rate(dev, ctrl->last_speed * 4); + return ret; } static int __maybe_unused qcom_qspi_runtime_resume(struct device *dev) @@ -840,20 +852,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 = pinctrl_pm_select_default_state(dev); + if (ret) + return ret; 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); + ret = dev_pm_opp_set_rate(dev, ctrl->last_speed * 4); + if (ret) + goto err_disable_clk; + + return 0; + +err_disable_clk: + clk_bulk_disable_unprepare(QSPI_NUM_CLKS, ctrl->clks); +err_disable_icc: + icc_disable(ctrl->icc_path_cpu_to_qspi); +err_select_sleep_state: + pinctrl_pm_select_sleep_state(dev); + return ret; } static int __maybe_unused qcom_qspi_suspend(struct device *dev) -- 2.34.1