From nobody Fri Sep 25 19:15:45 2026 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 9E5EE55199D for ; Wed, 9 Sep 2026 12:24:47 +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=1788956689; cv=none; b=DO7+DNgZobmnH9p30zO601v2Nfmrh4ZzgplUu9rj2e/HNMQ2jMUkHo0pQCxNS8UWqPypwc88PgCsFXsNRm28oftdmRJDd9E1cIwuQnJugDtdyh8kwQ0f8mivSUvjGYPkBsKSPPEm8tzid9xnHkNw7G1Z7WIwiQiK4MkpyR4e+lM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788956689; c=relaxed/simple; bh=Z62C1KjgkUfHo1yhmxjksV4K46Bz6P+GsVAjd37UQdg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IBZGxoNkOSyGhl8KIdsE8uiSurGGK5Kv7GC925vwW0X9Z5jDE7lQFh4+aTV6aAuuu8g63ROTpte0ci6R1aZ6nvYgE9Ju/pHkfmtkwZ7/Vc3iiGe6MEzdoeEa38eJHI0Mh72Wtd+Z5X6t9nBNzrELMKu4NP8rjRzDYVOKEqIGU5o= 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=ZpdOwa3w; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=aISYGpW7; 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="ZpdOwa3w"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="aISYGpW7" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 689BU2Ng1810036 for ; Wed, 9 Sep 2026 12:24:46 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= Sz+6Kcub7kDVCrdSqvP71/UKnkp6RLiDhWqxwmv1ciI=; b=ZpdOwa3wtIUwRt33 7q0yH7Ul7JGRRwbwa56x2S86qGVBUepBJZ9KJlaEAqsy1miC8Nlz2xkwlLMxXxYL l8ylpzVTz2C1R4I4XbIjV3XvX2rQ2wBayu4qdoYkEMT/gdFTPdvRZLNlxulSTIxS gsfFbc5ulJa4BvNcskVemnyuy+SV0vi2kJvVDEmZDiKtUCobGF8H7CIRGg01f3mK /9KT28P7ulAy3BTbN3hsh8PK0VRVlA5+y43vdB/OuTsX3SOFzAZ11OhKWZbpWPgK TYMH9swT9G83I+b/mM86TY8E+aSDjFsF6jP1lEPcOpZj9fbOA7SXM7HCvuFEInqM BCdDDQ== Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gk4xj0m07-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 09 Sep 2026 12:24:46 +0000 (GMT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-38f5ac7416eso7977943a91.3 for ; Wed, 09 Sep 2026 05:24:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788956685; x=1789561485; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Sz+6Kcub7kDVCrdSqvP71/UKnkp6RLiDhWqxwmv1ciI=; b=aISYGpW7ZCt/bydaylrEA92MAlHyv5Npx9Wm3deQTiVInVEbWT38jnDZnZcgBSI8+E bYg09jdW6KmxtIhn52M9Ivz8WK8rjBDdoaRavfwJZCkgKViuwslKlG1+3SeiVEbWe3Rx OuGHvwQbrOrDIqGH4wuADpMVGCQL7RRUKX3VNwy0iOYL4IdJUWKCtz/MXE91QmqPJILJ vqdzEvE87mycBReBlBWh4gEjE10c8pWxJPftotybvsnbzLCs4K7sACQyeXKCZfNxC9y/ l9T7qWHhYOjdZ2VvDuneqwQC3+zXOHT/SMJmWrHGqc43yomB2AsH/++h1E40K6o29Xn+ bMhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788956685; x=1789561485; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Sz+6Kcub7kDVCrdSqvP71/UKnkp6RLiDhWqxwmv1ciI=; b=Lx4CVPf0GK942XskT1znIj79uoiLcI2q2oG9dvMnp+6c+ByqmIcsu9nvG2+Zb5exOj +QDc8xvC+GmvZTNVuykk6dVJeDif3r0KAKRJUFm45RZdT3Nyi++JBvIX/k8zQOpSRCKz adY+VmOGbEFeVVXpLKtb1VPphSHNsaWVvsnfX9n3vGGBJjER2PxmqSJXPnV39P5EUsWZ hPHPc9MF5mWDW07nt7UtsSp98v/xA5Z5jg8MLRB5L4UV9ScZQbWaECAs33C7S+31bTMY 4I5bhDu9Pi3WjgYgHCimIaYM8cbsevuEtSA8lSMFNEsqxcY6p/qNDurZcjU8xeundvR2 Yiqw== X-Forwarded-Encrypted: i=1; AKwUvBy0F/5OJKZWVeNoh72uP79mOamDm7esjk7Bv6xTXG6/5ue6lyfeS9bJ726QaLbyWrn9B03M8Kw8lDQALyc=@vger.kernel.org X-Gm-Message-State: AFuF++nxB2/VissxzkjjtT4yiXZlccc8NC0uP5B1VUUT2gi9SYcXZ5kI /leiHd/raVEdePAHZqpr88g4B2XJ0b9GY2Jixuw0nouq2Hi6YlCUreHh7BC8GIP+uCo/Zc2H6e7 /gV6LPk2oXRZL4nm9dvyHPeJjIi/n/Su3GPgXtPFWyT21TDbmoNlp2i73gmoIpknq0OU1DOmCQl g= X-Gm-Gg: AYBFou2z6PUIkSCzBnqSJ1vxFZ3D/G8BTwIDXG9wX9eqXwXWF0v7SHqF+J7CyuJe8EG AUE6/nioyW29+EGXQy4SACtHl4KPPntpx6LnVpH9amEzpvFTMDTmsl+kH+WwvOXbuYC1sVladBc 0MuY4vVWhWEaxg40+CJ2TylylfH1PZF5YVWHDCCGqOTm5Je4tCLafn++Te34ggmV0EsDgIBFLwt kj8LVaGZRBvstwrk7n/hWiTcKkPHm/Qmpyfk2gJ1MsWofPZzqeDVtB5epQFCHljLRl96gIDkyG6 68BJgIwECm6Qq4fpXsvBtjqSAiqLg8ELXseJ+ICrRQ383Ykhna+Qt4yXnS4RcaRmYQ6svCZLcjS /8h5420Tc7KblmkoPEkTtp0QhhcLYOzzAF78= X-Received: by 2002:a17:90b:4d06:b0:366:10f1:3d91 with SMTP id 98e67ed59e1d1-39b2614df74mr49703312a91.1.1788956685178; Wed, 09 Sep 2026 05:24:45 -0700 (PDT) X-Received: by 2002:a17:90b:4d06:b0:366:10f1:3d91 with SMTP id 98e67ed59e1d1-39b2614df74mr49703230a91.1.1788956684510; Wed, 09 Sep 2026 05:24:44 -0700 (PDT) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-14324356931sm69372775c88.4.2026.09.09.05.24.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2026 05:24:44 -0700 (PDT) From: Krishna Chaitanya Chundru Date: Wed, 09 Sep 2026 17:54:28 +0530 Subject: [PATCH v6 1/3] PCI: host-common: Fix early bus-walk exit in d3cold_possible() 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: quoted-printable Message-Id: <20260909-shutdown-v6-1-62b7bd123236@oss.qualcomm.com> References: <20260909-shutdown-v6-0-62b7bd123236@oss.qualcomm.com> In-Reply-To: <20260909-shutdown-v6-0-62b7bd123236@oss.qualcomm.com> To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas Cc: konrad.dybcio@oss.qualcomm.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Krishna Chaitanya Chundru X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1788956676; l=2329; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=Z62C1KjgkUfHo1yhmxjksV4K46Bz6P+GsVAjd37UQdg=; b=eS4Hpewq1kyOsiclxmzTvPNWmLPAaY7CBZESA3p6xElkvy1rVxfY/hHn/OnF5A77GyofIPreo YTIMwPOG+JWCZUsd3X6/bLV/81hAg9Fssb5RylxRkwm4bzZOq0eNIMG X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA5MDEzOCBTYWx0ZWRfXxppVyKO/yEFJ lxQP+mZvZ4TwXY8TT0bU77Lc1npVUNrBEjXqUnxKilFNoINZ8Kf+88NvjsTVDUQUxUAICTXU0zp N9slIShpc91LaA217zalKLi/E2PCEgg= X-Authority-Analysis: v=2.4 cv=J52aKgnS c=1 sm=1 tr=0 ts=6aa1500e cx=c_pps a=0uOsjrqzRL749jD1oC5vDA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=RIIKlrP-v3AzcS8hWasA:9 a=QEXdDO2ut3YA:10 a=mQ_c8vxmzFEMiUWkPHU9:22 X-Proofpoint-ORIG-GUID: _vpSXQL89kcX4u7EypUq0hy7_o1h22Nu X-Proofpoint-GUID: _vpSXQL89kcX4u7EypUq0hy7_o1h22Nu X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA5MDEzOCBTYWx0ZWRfX93ylx8FPiLR6 as/Mq9KRFEQ7czAyOlfL398gOAvp2nt1TOEP2i7Uz+TPbPSjJrMBN2WtLRQl62MX29aW9Dj737x JnbZIf3iCVLC0kRuAQO8VZcQWv2SXMIDz1vkwMTk8/MD5lrVEuxspvOxwk1RaDSCrhgLUXxckhh tWRrF107LQoHuhED5gH9NrUZnry0NZxFk98581AjeJesStfs2X6naIlRIWn7XyhaQDOYAcvRpJ0 oHTvFe0Er8rZGPUfDRDjV7288zyb9i2+LKd1j7HE5rSczEEL4ghz+FQPp1GzMIS0kcux41zM30Q ivMy/UONGB/g+p3mtDx23WPUAX0ueGywidKPByC5L03Ox2yjEpjhs+oF5NEieAj2eybex495IPn RfOE/kHNop4vYgcMSSu3MpVB8GorOuUhVH80rwiEaqIjMHOnwf5mGoPEL+G6EY/KgvIAqaGVgLn S2Et2qMfZOxUNdxfZLA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-09_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 priorityscore=1501 spamscore=0 adultscore=0 malwarescore=0 suspectscore=0 impostorscore=0 bulkscore=0 clxscore=1015 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609090138 __pci_host_common_d3cold_possible() returns -EOPNOTSUPP for the first downstream device it finds outside PCI_D3hot, and pci_walk_bus() aborts the walk as soon as its callback returns nonzero. Any device enumerated after the disqualifying one -- including a wakeup-enabled, PME-from-D3cold capable endpoint -- is then never visited, so pme_capable can come back false even though such a device exists on the bus. Since pci_host_common_d3cold_possible() already returns false whenever any device disqualifies D3cold, aborting the walk buys nothing for the plain suspend path: the overall bool result is unaffected. But it silently drops pme_capable detection for any device ordered after the disqualifying one. This matters for the upcoming shutdown path in particular: unlike plain suspend, shutdown forces the link into L2/D3cold regardless of whether pci_host_common_d3cold_possible() itself allows it (see the following "force_d3cold" changes), so at shutdown time it's common for an endpoint to still be in D0 and disqualify D3cold while a later, PME-capable device is never visited. dw_pcie_suspend_noirq() still uses "pme_capable" to set pci->pp.skip_pwrctrl_off, so an inaccurate result here can cause Vaux/wakeup support to be dropped for a device that actually supports PME from D3cold. Signed-off-by: Krishna Chaitanya Chundru --- drivers/pci/controller/pci-host-common.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/drivers/pci/controller/pci-host-common.c b/drivers/pci/control= ler/pci-host-common.c index a23907a875e5..c2c852c64aa8 100644 --- a/drivers/pci/controller/pci-host-common.c +++ b/drivers/pci/controller/pci-host-common.c @@ -275,21 +275,16 @@ static int __pci_host_common_d3cold_possible(struct p= ci_dev *pdev, return 0; =20 if (pdev->current_state !=3D PCI_D3hot) - goto exit; + *flags &=3D ~PCI_HOST_D3COLD_ALLOWED; =20 if (device_may_wakeup(&pdev->dev)) { - if (!pci_pme_capable(pdev, PCI_D3cold)) - goto exit; - else + if (pci_pme_capable(pdev, PCI_D3cold)) *flags |=3D PCI_HOST_PME_D3COLD_CAPABLE; + else + *flags &=3D ~PCI_HOST_D3COLD_ALLOWED; } =20 return 0; - -exit: - *flags &=3D ~PCI_HOST_D3COLD_ALLOWED; - - return -EOPNOTSUPP; } =20 /** --=20 2.34.1 From nobody Fri Sep 25 19:15:45 2026 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 AF19F55199A for ; Wed, 9 Sep 2026 12:24:51 +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=1788956693; cv=none; b=KcEewH/qus6mu/MgS41sia4hhx12gfQUMgk+SlDFOrABzBzW+mr5HaSNpOA8LMpXnkr32XNAKO8qbvkJBAGs53xmjAKeM0ayqWQiOtFVZFvnNvTLdxpdkNfKrjfWKxB2bzjZ27LE5bIf15MIM9LP2EG8HEx9HUL2RpRaMX7qH9c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788956693; c=relaxed/simple; bh=Q1bgAN9nlbCB/Ai0JWq2rOD7P4Zydq1395QADVMDquM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cEg4drbtv2CsT4sEuWlgc/UQ5R4TzKtHJYr/d+EMVBpiEBSrd4W+3L4q57PD3LsAmQLbFejbIwnGSJh0yVxqL+vFf2hIjttekGhF4s1HAR+rRAOj9PBAl4xol2ORvO6yU8L4vZw6MmVTkoluHJ1zvCzre2zVn25NEYhJsRU1QNg= 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=f9o5Nmr1; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=QhW+SNHE; 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="f9o5Nmr1"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="QhW+SNHE" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 689BU2SU1723071 for ; Wed, 9 Sep 2026 12:24:50 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= 3RTr8hgVt/wHL1o1+VAPRppq9VVHXaQ5GvXArkG/BdQ=; b=f9o5Nmr1JaZj+UpB xCMUO+wIwlMr15MNWJzcDBC6NzQiXVEoYlXrNIrx8EbKfxB8u6cLivMGPN9tZsu7 8Qpd4nKZdR2sCPXR9iKvVytUlDHwRf2tk7fBKtkii/G0SBRI2sGGtET3Hcu/EFws 1dUT99j/JVFwxSDmzgmttirD4BT0CjeiznCc7X3QHuctMQTcqeOC5Di3oOamYW2g TUq+yx2li9wCghpYXPqWUxk2lk5WS/8GtCNw0pMDNUpy/dp3N7sS6HjMuRCZhVce /OhWgNe6ajDsCzmtgIcK3P8qfUzutks3ICQ3vtFBt/OMpuXc4SO38AdpIBCvQj2f solj0w== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gk5cnrgr0-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 09 Sep 2026 12:24:50 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-398dc3d8f0fso6847110a91.0 for ; Wed, 09 Sep 2026 05:24:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788956689; x=1789561489; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3RTr8hgVt/wHL1o1+VAPRppq9VVHXaQ5GvXArkG/BdQ=; b=QhW+SNHEg8FHC5lzXpYg0UBq22b4zYYtnfz0iDmvtHavBVzhFMvkPHAA9e8jC9EAJi mlO/u2T+J84PW3KyLuASS2Tt+i4YtsOcAJ7YsVevnBvyUnGj+vTVLuUl7jWNvQFQYSg7 jL9HsJ94LoXXjKLVs/UydLdfzVxx2lUpz9yX4Bx1RSU6+cLVbzGoWdFMkFeUVlgIAdz+ LtaPRI9hohikf95iT1q1pfKCelVTd0pupuUrzLUyFEEgvYg/j2lm2XqZK99AmW+L9FNZ EjDjA1kIlNdLIFcepfUrFaU5A3YEbaHr0n8gRrXfq0kW5b12ds8JJLghB62IY8zc5OM7 J1XA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788956689; x=1789561489; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3RTr8hgVt/wHL1o1+VAPRppq9VVHXaQ5GvXArkG/BdQ=; b=DroRIqu2nQdICmdLRdFbF2LBCUazXLF5c/j2FesezQF28f0M/NyNHcW4uIdEJMbl8p 2A2wBNndLsTCBe5RSqocwFmXkehwlTtoNKQ5OlqpXOZ3fjBOH1lKTNGg8j5kq4smeWOs fw99sV8bts8XqT2TR8lAs0pGm9FtQ/jjSoA6ofAM7vVEuuJ0I5VDIffeKxKoQBLUdHD3 cMDJoGlavHX8WJ816+x8R6gWP1HcxtgTu2zAOGvaAqohDE6TXALOpssStajEmZIkzAFL I/FqJFBvWr12+vFAGaYqOhcdyhcQWv7ZA1ymnpwJWdgCtTWrKSVfG2psh+Pr3PbChpW4 glZw== X-Forwarded-Encrypted: i=1; AKwUvByZSKWifs68FOvjvZoCwdgLYDSZhtdu7q/bHvsIFWE9BI0UDskugo5DV6eBKcrgMhIiUsi9t+mCY88j8VA=@vger.kernel.org X-Gm-Message-State: AFuF++n6TFCvfkJSHtnPOxp/CWNKpB+FXg01K6Pyf0w7OoJw1agF0jxK 5i+RkElzTc6754ACa777XFH4tYT83l9YpQc783wOx0csqyWJJeQhKqt8CeCD8QGYN4IWTwMA+Jx 5liXuEq32I1KJEPL38uxQ6rmH9pmG8WB0l3ECVq0fVfP9yUP+ZEL/e4DrZAYvWeZU7nzs3CkE0y s= X-Gm-Gg: AYBFou1Icj0pi0sEi8S1Ibx1BkUgTmMK3JnPfLp/rki4CtZoE6+FHmadeNj7FgAa3dH OPNhyceiMxjOud0cBywsO3kE7P2IU/bZJl3YW8bfXGdvxRE093OMlk0yePXO8CWh7ofypOMe3Or j+e21cV/kKwF361ucToHn9jSg4UZv5sTNALaW5A+kKT6V526YUvyLE/gYsG+kj47/yFoVvCvnEg 2X3sH+S5J17K5PXVlMQyD3XCYR/D4vOpeXVERk5hyMmeMf5yT7CouXIt/lv/gDWjJc1OIIbtzct qVYndHVHu3RBssyYxffMBIMHPKANCrgvyw7mbezk3+uXhI+Qt/mPtCaOMzR8d/NI0St+d/RaFqA hIg5LVzqLgIbgiLYDXkykysslVWGxwCy/g7E= X-Received: by 2002:a17:90b:2542:b0:398:9beb:a2be with SMTP id 98e67ed59e1d1-39b08969b5dmr45313503a91.32.1788956689131; Wed, 09 Sep 2026 05:24:49 -0700 (PDT) X-Received: by 2002:a17:90b:2542:b0:398:9beb:a2be with SMTP id 98e67ed59e1d1-39b08969b5dmr45313453a91.32.1788956688582; Wed, 09 Sep 2026 05:24:48 -0700 (PDT) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-14324356931sm69372775c88.4.2026.09.09.05.24.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2026 05:24:48 -0700 (PDT) From: Krishna Chaitanya Chundru Date: Wed, 09 Sep 2026 17:54:29 +0530 Subject: [PATCH v6 2/3] PCI: dwc: Force L2 link entry on shutdown/reboot without D3cold check 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: quoted-printable Message-Id: <20260909-shutdown-v6-2-62b7bd123236@oss.qualcomm.com> References: <20260909-shutdown-v6-0-62b7bd123236@oss.qualcomm.com> In-Reply-To: <20260909-shutdown-v6-0-62b7bd123236@oss.qualcomm.com> To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas Cc: konrad.dybcio@oss.qualcomm.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Krishna Chaitanya Chundru X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1788956676; l=7334; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=Q1bgAN9nlbCB/Ai0JWq2rOD7P4Zydq1395QADVMDquM=; b=wlf+LcxzvGI+mmNHXWQXvz0Di5Yi7U6OvbrXaidzC5nGGEvGnIZHnzDnW5VEAtc/bkngL/9Vt /b20sJyTMJFBlHrPv7gJqAF/mOLVxW1GPdcWWVcjVb81lbcmlYCw71p X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Proofpoint-GUID: MpGLLkNRndyeFN-10mwBf3OXKHPqeLmk X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA5MDEzOCBTYWx0ZWRfX1NRnOwFfZ3AF XisaN7s6dFwgRFrXzqjATCbrxBacJaPQiMdOfhnVb2hJ9lGnyvfSekxCvPWJOzfIGIOY1GpQsB5 B5ss5T0sJ6r1VLT3IUldHhBwy2jdoT0= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA5MDEzOCBTYWx0ZWRfX2Pv78JCgrJGb 0afFr8/WF0JgYFv0gYGpueZWhBqlakSgL31AMSeitWfxcLn22LbZ29mp9sZ8TDA0G2miM5Ebxid yVNdKfA1AVGxvaNwyRNW4IouN6gZi/1kYI3HYQeKmzDKpZjFTec6yB0suXitgbNQ0en+Gmjnkrt Leg+iA9+exURQ7KArQi2/Uw71EeTYRd1Hk4UEMflKdSQYTSZaV+fF735SqLl+zeTfC2OJdzHy2r z+XKRo5ah/JPHbIXDQs3BYB4u6N7Do+IlS75nGIdIMRWoC2PU5PUg1MSl5PboKspXbe9IggimV3 RQAzmDXFcrMolKXQwb6KtWLDxzF5C1lqPLp0OdW/GoJePEvPvIqMnUmvuhCzEGa2lP45CCw1Jvw RO94ai67R32ON9dxreSRAsgm/iB1dTOgeEXboyRrfEfJlJzvLZgn5tmMtNhvzCCU9nkBDKmCTrx jFxsefUmogHvGrNYseg== X-Authority-Analysis: v=2.4 cv=S+jpBosP c=1 sm=1 tr=0 ts=6aa15012 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=65BtJ55OYu5Af-7Sg50A:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-ORIG-GUID: MpGLLkNRndyeFN-10mwBf3OXKHPqeLmk X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-09_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 spamscore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 clxscore=1015 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609090138 dw_pcie_suspend_noirq() normally calls pci_host_common_d3cold_possible() to check whether every downstream endpoint can be put into D3cold before bothering to move the link to L2. If no endpoint supports it, the function returns early and leaves the link up. Querying D3cold support during shutdown is actively harmful, not just slow: pci_host_common_d3cold_possible() requires every active endpoint to already be in PCI_D3hot, and returns false otherwise. If any endpoint is still in D0 -- which is common, since endpoint drivers aren't guaranteed to have suspended by the time the host's shutdown path runs the check fails and dw_pcie_suspend_noirq() returns early without ever moving the link to L2, leaving it up right up to the point where the system cuts power/clocks to the controller. Add a force parameter to dw_pcie_suspend_noirq() that callers set explicitly to force this behavior, still call pci_host_common_d3cold_possible() unconditionally, since it's also how pme_capable gets set, but ignore its return value and force L2 entry regardless when force is set. Signed-off-by: Krishna Chaitanya Chundru --- drivers/pci/controller/dwc/pci-imx6.c | 2 +- drivers/pci/controller/dwc/pci-layerscape.c | 2 +- drivers/pci/controller/dwc/pcie-designware-host.c | 7 ++++--- drivers/pci/controller/dwc/pcie-designware.h | 4 ++-- drivers/pci/controller/dwc/pcie-eswin.c | 2 +- drivers/pci/controller/dwc/pcie-nxp-s32g.c | 2 +- drivers/pci/controller/dwc/pcie-qcom.c | 2 +- drivers/pci/controller/dwc/pcie-stm32.c | 2 +- drivers/pci/controller/dwc/pcie-ultrarisc.c | 2 +- 9 files changed, 13 insertions(+), 12 deletions(-) diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller= /dwc/pci-imx6.c index 4105c28d180c..63799b1c2013 100644 --- a/drivers/pci/controller/dwc/pci-imx6.c +++ b/drivers/pci/controller/dwc/pci-imx6.c @@ -1738,7 +1738,7 @@ static int imx_pcie_suspend_noirq(struct device *dev) imx_pcie_assert_perst(imx_pcie, true); imx_pcie->drvdata->enable_ref_clk(imx_pcie, false); } else { - return dw_pcie_suspend_noirq(imx_pcie->pci); + return dw_pcie_suspend_noirq(imx_pcie->pci, false); } =20 return 0; diff --git a/drivers/pci/controller/dwc/pci-layerscape.c b/drivers/pci/cont= roller/dwc/pci-layerscape.c index 14d6ac4fc53f..aca1b0acb4ed 100644 --- a/drivers/pci/controller/dwc/pci-layerscape.c +++ b/drivers/pci/controller/dwc/pci-layerscape.c @@ -382,7 +382,7 @@ static int ls_pcie_suspend_noirq(struct device *dev) if (!pcie->drvdata->pm_support) return 0; =20 - return dw_pcie_suspend_noirq(pcie->pci); + return dw_pcie_suspend_noirq(pcie->pci, false); } =20 static int ls_pcie_resume_noirq(struct device *dev) diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pc= i/controller/dwc/pcie-designware-host.c index f5a38e6fd8d7..21830c05d147 100644 --- a/drivers/pci/controller/dwc/pcie-designware-host.c +++ b/drivers/pci/controller/dwc/pcie-designware-host.c @@ -1222,16 +1222,17 @@ static int dw_pcie_pme_turn_off(struct dw_pcie *pci) return 0; } =20 -int dw_pcie_suspend_noirq(struct dw_pcie *pci) +int dw_pcie_suspend_noirq(struct dw_pcie *pci, bool force) { - bool pme_capable =3D false; + bool d3cold_possible, pme_capable =3D false; int ret =3D 0; u32 val; =20 if (!dw_pcie_link_up(pci)) goto stop_link; =20 - if (!pci_host_common_d3cold_possible(pci->pp.bridge, &pme_capable)) + d3cold_possible =3D pci_host_common_d3cold_possible(pci->pp.bridge, &pme_= capable); + if (!d3cold_possible && !force) return 0; =20 if (pci->pp.ops->pme_turn_off) { diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/con= troller/dwc/pcie-designware.h index a53ac27cd244..cec1c64c3a5e 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -860,7 +860,7 @@ static inline enum dw_pcie_ltssm dw_pcie_get_ltssm(stru= ct dw_pcie *pci) const char *dw_pcie_ltssm_status_string(enum dw_pcie_ltssm ltssm); =20 #ifdef CONFIG_PCIE_DW_HOST -int dw_pcie_suspend_noirq(struct dw_pcie *pci); +int dw_pcie_suspend_noirq(struct dw_pcie *pci, bool force); int dw_pcie_resume_noirq(struct dw_pcie *pci); void dw_handle_msi_irq(struct dw_pcie_rp *pp); void dw_pcie_msi_init(struct dw_pcie_rp *pp); @@ -873,7 +873,7 @@ int dw_pcie_allocate_domains(struct dw_pcie_rp *pp); void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus, unsigned int d= evfn, int where); #else -static inline int dw_pcie_suspend_noirq(struct dw_pcie *pci) +static inline int dw_pcie_suspend_noirq(struct dw_pcie *pci, bool force) { return 0; } diff --git a/drivers/pci/controller/dwc/pcie-eswin.c b/drivers/pci/controll= er/dwc/pcie-eswin.c index ce8d64f8a395..06fc488f80c7 100644 --- a/drivers/pci/controller/dwc/pcie-eswin.c +++ b/drivers/pci/controller/dwc/pcie-eswin.c @@ -367,7 +367,7 @@ static int eswin_pcie_suspend_noirq(struct device *dev) { struct eswin_pcie *pcie =3D dev_get_drvdata(dev); =20 - return dw_pcie_suspend_noirq(&pcie->pci); + return dw_pcie_suspend_noirq(&pcie->pci, false); } =20 static int eswin_pcie_resume_noirq(struct device *dev) diff --git a/drivers/pci/controller/dwc/pcie-nxp-s32g.c b/drivers/pci/contr= oller/dwc/pcie-nxp-s32g.c index 31e1169b8ab6..43174a06c60a 100644 --- a/drivers/pci/controller/dwc/pcie-nxp-s32g.c +++ b/drivers/pci/controller/dwc/pcie-nxp-s32g.c @@ -365,7 +365,7 @@ static int s32g_pcie_suspend_noirq(struct device *dev) struct s32g_pcie *s32g_pp =3D dev_get_drvdata(dev); struct dw_pcie *pci =3D &s32g_pp->pci; =20 - return dw_pcie_suspend_noirq(pci); + return dw_pcie_suspend_noirq(pci, false); } =20 static int s32g_pcie_resume_noirq(struct device *dev) diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controlle= r/dwc/pcie-qcom.c index ee63a6ec99de..2693a98d0b27 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -2421,7 +2421,7 @@ static int qcom_pcie_suspend_noirq(struct device *dev) if (!pcie) return 0; =20 - ret =3D dw_pcie_suspend_noirq(pcie->pci); + ret =3D dw_pcie_suspend_noirq(pcie->pci, false); if (ret) return ret; =20 diff --git a/drivers/pci/controller/dwc/pcie-stm32.c b/drivers/pci/controll= er/dwc/pcie-stm32.c index 349618ea5b9c..7b3a8c1b04a4 100644 --- a/drivers/pci/controller/dwc/pcie-stm32.c +++ b/drivers/pci/controller/dwc/pcie-stm32.c @@ -78,7 +78,7 @@ static int stm32_pcie_suspend_noirq(struct device *dev) struct stm32_pcie *stm32_pcie =3D dev_get_drvdata(dev); int ret; =20 - ret =3D dw_pcie_suspend_noirq(&stm32_pcie->pci); + ret =3D dw_pcie_suspend_noirq(&stm32_pcie->pci, false); if (ret) return ret; =20 diff --git a/drivers/pci/controller/dwc/pcie-ultrarisc.c b/drivers/pci/cont= roller/dwc/pcie-ultrarisc.c index 51e89180490d..cb2781a1557f 100644 --- a/drivers/pci/controller/dwc/pcie-ultrarisc.c +++ b/drivers/pci/controller/dwc/pcie-ultrarisc.c @@ -187,7 +187,7 @@ static int ultrarisc_pcie_suspend_noirq(struct device *= dev) if (pci->suspended) return 0; =20 - ret =3D dw_pcie_suspend_noirq(pci); + ret =3D dw_pcie_suspend_noirq(pci, false); if (ret) return ret; =20 --=20 2.34.1 From nobody Fri Sep 25 19:15:45 2026 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 14F6D551997 for ; Wed, 9 Sep 2026 12:24:55 +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=1788956696; cv=none; b=XCiPh60lPIPl7ycJd+XCESd7QuRrayPbjh8HJEU2cjDfdLxFL+X1GmsTGQzB5tB0mRlrxJ5qrN5PYWQwccAI5bwTP9jCLCpnsrvT6FyGi5qCI26BEqI63GfKXj8arLnoCC0uwVPPiuI6PHaea4KWnOvpUTuEcCi0CUKFhsbfzYk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788956696; c=relaxed/simple; bh=P30myDYvP5LX+sAmrDp2DePMK7hRN57B5V+jKtsyPLw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mxcWi7WwRnEVr0cEDHOhU57q9n9orUeNrqYTT0j+RZYJBaDJFNJYyF/mWxMj9vYSiT1poxoIo/E6I5YqQB5H0RGbAlts715fcQpA7t0Ab+zP0iXd0tmVmsVBEllqylMREtIFVvFENGKjh8EZJ4K+hoXJyv7d/pc3X4qnnH01L88= 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=D/N3z850; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ZOfLW08R; 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="D/N3z850"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ZOfLW08R" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 689BoUpp2698507 for ; Wed, 9 Sep 2026 12:24:54 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= M8GaWE6c1jzrI5CvT8ixvf1oulBT68ZVay2UogHBWSI=; b=D/N3z850gHEsJKLg CnFFHMr+TkoyI/KBq1WbGAWTaN7wGyElwqOjw31QW8x1z+Fes7yumpjsQyJbpKtS ng/geayQGPU13dvRym5S7y6Uk3HW9BA24KijixMb5pwP/lAO8oOi6nNZi6HWebS9 I/APsOvQBlD1bz2TjXGSNVd+kGQdcKOX8UXU0iZjLaWaykiN2WUuik/1KzvodTX1 FM8CzCwKdy6Twti60JpQ4EGywiW/4A+PY3PS3U8pO7k+CZx6OT4jaECehbQmZG+c 8O4YdvJp4tEWYVFwDdfWsA8vQbX4x1E8HoFsp3LlIxd4oE5iW0IAW3h63VAftDwq V45Egg== Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gk6xh03t4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 09 Sep 2026 12:24:54 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-cbedb8673ceso5045260a12.0 for ; Wed, 09 Sep 2026 05:24:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788956694; x=1789561494; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=M8GaWE6c1jzrI5CvT8ixvf1oulBT68ZVay2UogHBWSI=; b=ZOfLW08RTrE+ECI0lbeW+rEIi967OpOqoytodt7i3O01hm6poIfFTE8Onb4VPbOuhr uHzJVWOCn2cuG7t6m24bNvhxo8kvq0w7e9uGCCs0B/3UqS1XFo0IYlqhezHvMT9VMnHj BqmfaIyQ+uLkfKj5KUoDJ5HgETRzCU42IXfucI6K7oM9Qtwzz/j2ijEDEsNCbkckFP8F pWSGkI/CRXlFdrTYTGGTWEwn3iQVlXHTqDrG+Fv7cjSHPT9MvmJabdiXGGDnJ0K/pXtJ gyxcs3jGQmY8vzcmNmf6ae39h4sW1LlTl3ZwIhfl2d4viLGhrUEmd3xe8VSyVFaSJilW NTCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788956694; x=1789561494; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=M8GaWE6c1jzrI5CvT8ixvf1oulBT68ZVay2UogHBWSI=; b=RxXwM9u5DPpHneRvRBvTGN6AXb5+OaHsmBvK1g74Yzykq0/2PLij/w1rjRp1XZj+q2 E7XCnNfANcQdFaW7tyFIHeaPrvW0e1Gbh0D3grRN/T5Ct8VEoOSym3LRhTbmVmcGX24k aoza83RDAd1E56DissnkGc8i5G0WA7jHC9CNRPFtlJfFpf7Cyy/zLoYUuzlZ9RtTJd+L fHgWvhY5/tKMOKBQxgmJ9ipn5iQ/HisWzS+7GqspGJjH+JJtlkVQIv5bzk/1YRb6THx0 Euao8ygCa3EPuXYFNlcTpdzTxlVZGwcfrkYlDVFwIk6cbESeYhtyzodXzEwyWBeCa8Vs zRHA== X-Forwarded-Encrypted: i=1; AKwUvBygXFsciJVgIT6mMrRVf/kkqvpmWCzWqTNcjxZrTizrOOv/Vapqn/AoJa2d7Jh0qbnKYwvlj3As/0Au1Jw=@vger.kernel.org X-Gm-Message-State: AFuF++kvKy+I5wTLmFh1RoP+rI43kG7QWl+h8fH/HKqIVXwDV2BMK94P sa5/4zFzfafKLrJh9jFJ10b30Rd+zZQBDfDRt9cGhnhDapLGQdlc3jBDwaJt69CWg+aiqpKX6Sz obaq6Q3MiMT8qdydwocw2OMSog4FbxQXVYA2vRkGx30jDV71EPvBzdmyes4RzRcwsPVOMpXgzx7 M= X-Gm-Gg: AYBFou186F49lSSkSiknL1wXU8KamjZcH0GUK71GKS1rSsT63AWI8xNKuogF2mB9SDK r4IQPDELE0u7GO+bb71ZjzXoTi6cEBPVip9bK6ej4VPW/Zkhavayd5TfOrFI3YoHX3ykPXPpsBH lHW1uc3t/GE3jrKq36LrN4yrSsJr7U+Lb/cP0u05zGrfbmQm/aZs7TVweFQUXl0qs7D+ENJoHCv C2k/122BnIepkff+Da/0AbrqFIqs9R8haAAcKj1+g6Prc9YmlFkDJJuR03vgBPXzwIg9gZS/Gqf PoLJnEbVWGY2QqEIGrFHZeqlJfHTJQdzkhFH9hjSN6UzMefZUFpehqOssad8uC4rpIxvKBMOXDh dCUfOnYhh4/oVf4ALvi3q8Z2XPWBefAw20eg= X-Received: by 2002:a17:90b:2f46:b0:398:9c39:520f with SMTP id 98e67ed59e1d1-39b261e763dmr53754218a91.15.1788956693652; Wed, 09 Sep 2026 05:24:53 -0700 (PDT) X-Received: by 2002:a17:90b:2f46:b0:398:9c39:520f with SMTP id 98e67ed59e1d1-39b261e763dmr53754098a91.15.1788956692758; Wed, 09 Sep 2026 05:24:52 -0700 (PDT) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-14324356931sm69372775c88.4.2026.09.09.05.24.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2026 05:24:52 -0700 (PDT) From: Krishna Chaitanya Chundru Date: Wed, 09 Sep 2026 17:54:30 +0530 Subject: [PATCH v6 3/3] PCI: qcom: Implement shutdown() callback 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: quoted-printable Message-Id: <20260909-shutdown-v6-3-62b7bd123236@oss.qualcomm.com> References: <20260909-shutdown-v6-0-62b7bd123236@oss.qualcomm.com> In-Reply-To: <20260909-shutdown-v6-0-62b7bd123236@oss.qualcomm.com> To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas Cc: konrad.dybcio@oss.qualcomm.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Krishna Chaitanya Chundru , Manivannan Sadhasivam X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1788956676; l=2842; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=aT5LRuU59fQW6FpsU0j1/exCccGHutFWHFIlybqEqY4=; b=SXim4fm4RML0CyHLzIdAdMqinp3fDHLsPlUmSiUal1UHaT3FY5arh1pNVlXkwjOhjgAxwigrM dOGlSVQVyuDA2AFpAl2grLFAe3mgJJqzJyl5w572P/og5jGTzxvqDdq X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTA5MDEzNyBTYWx0ZWRfX0+O9BKImE7DV VGrDvb7Ca0hZZC7PE8Ms0WC00OYxDoILVxxqiCZWSSgbuJR6sJMdRA7l/yD5uNs0/kqzpx/I8Uz ulgQS6t0xdIcw0j/hrWG4Qzw4ad+32gTnJEsfhYPHkKTl3xTI3kPu/XiZf7xFOBXDlbFFi4gxcm lRG3LBXJOBXzENLEpCNNI27q1uRi4flPjyPp1dbGwx1oLDzAlRXY2hcA/HZELGEECVLKwgpJ435 hjq4oJg0lUVICCSxFarWXPBFhc+7ICY7nzZYQ7z7CdO5rFlS4IYvpKUE8UQ+HALYPULUZrdc64j WGClzBcBycPhbCnSeLucMQ7iR4IXaB/5x1X06Z0T0mao0J5JrFSfqe8OoXqiM6ptCgCCTJDqNj3 MEHxJ3F95QVqPVag4VZj6yBjKExgIvzBqtlIzmWDkvJuQ/rPHK3XqI5XA90mipBrVITIZvGhDjr 0/APBFzpvLhoaRts+/g== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTA5MDEzNyBTYWx0ZWRfX1V4D+R7MixLS zCt8OiwwMEOVfdOogPVnPaIOXBsMchwCA0oGzQWsXOhCy45eQzw+cf4gOtrqXk4q6gJTcV0NDrJ Xvtsa0bu6kLdKtNNSCIAkgwScAEQTSs= X-Proofpoint-GUID: 7_rMlMf5OitL7QRl0QYMtVn8wTKHpic5 X-Authority-Analysis: v=2.4 cv=KOlqylFo c=1 sm=1 tr=0 ts=6aa15016 cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=VwQbUJbxAAAA:8 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=kXhGf0cxdCgfIYue-YsA:9 a=QEXdDO2ut3YA:10 a=_Vgx9l1VpLgwpw_dHYaR:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: 7_rMlMf5OitL7QRl0QYMtVn8wTKHpic5 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-08_03,2026-09-09_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 priorityscore=1501 spamscore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 bulkscore=0 suspectscore=0 clxscore=1015 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2609090137 From: Manivannan Sadhasivam PCIe host controllers should bring the link down cleanly before system shutdown/reboot proceeds to remove power/clocks from the controller. Without this, the link may still be up and endpoints still have transactions in flight when power/clocks are cut, which can trip SMMU translation faults or NoC protocol errors. Reuse dw_pcie_suspend_noirq() in the shutdown path to force the link into L2, putting it into D3cold. device_shutdown() runs with interrupts enabled, unlike suspend_noirq(). Mask the chained MSI IRQ(s) and the Global IRQ before tearing down the link and clocks/PHY, since a late/spurious interrupt could otherwise reach a handler that touches now-unclocked PARF/DBI registers. Signed-off-by: Manivannan Sadhasivam Signed-off-by: Krishna Chaitanya Chundru --- drivers/pci/controller/dwc/pcie-qcom.c | 35 ++++++++++++++++++++++++++++++= ++++ 1 file changed, 35 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controlle= r/dwc/pcie-qcom.c index 2693a98d0b27..3133e2b2eda6 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -1988,6 +1988,9 @@ static int qcom_pcie_ecam_host_init(struct pci_config= _window *cfg) pp->use_imsi_rx =3D true; dw_pcie_msi_init(pp); =20 + /* Stash pci so qcom_pcie_shutdown() can mask the MSI IRQ(s) later */ + platform_set_drvdata(to_platform_device(dev), pci); + return devm_add_action_or_reset(dev, qcom_pci_free_msi, pp); } =20 @@ -2408,6 +2411,37 @@ static int qcom_pcie_probe(struct platform_device *p= dev) return ret; } =20 +static void qcom_pcie_shutdown(struct platform_device *pdev) +{ + const struct qcom_pcie_cfg *pcie_cfg =3D of_device_get_match_data(&pdev->= dev); + struct qcom_pcie *pcie; + struct dw_pcie *pci; + + if (pcie_cfg && pcie_cfg->firmware_managed) { + /* + * Firmware owns the link teardown and clock/PHY shutdown in + * this mode; Linux only owns the chained MSI IRQ(s), which + * still need to be masked off before shutdown proceeds. + */ + pci =3D platform_get_drvdata(pdev); + } else { + pcie =3D platform_get_drvdata(pdev); + pci =3D pcie->pci; + + if (pcie->global_irq) + disable_irq(pcie->global_irq); + } + + if (pci->pp.use_imsi_rx) + dw_pcie_free_msi(&pci->pp); + + if (pcie) + dw_pcie_suspend_noirq(pcie->pci, true); + + pm_runtime_put_sync(&pdev->dev); + pm_runtime_disable(&pdev->dev); +} + static int qcom_pcie_suspend_noirq(struct device *dev) { struct qcom_pcie *pcie; @@ -2598,5 +2632,6 @@ static struct platform_driver qcom_pcie_driver =3D { .pm =3D &qcom_pcie_pm_ops, .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, }, + .shutdown =3D qcom_pcie_shutdown, }; builtin_platform_driver(qcom_pcie_driver); --=20 2.34.1