From nobody Sat Feb 7 08:27:42 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 415A034EF02 for ; Wed, 28 Jan 2026 11:40:58 +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=1769600459; cv=none; b=OHZx3NX8/XpS+9TPCJY377gMd9AdAGVGtx0qMYxw6MjIp07VYC8jWZnmuSAhoVwpOS0+h1CMCGEKebVZxo6D999BU0S3uvfiZkfCUVxxfAEPLKyAkwBw9FcMTNwjnoNfn2sjqn1zJKWiomtF2GNvDvx8F+mMP1xDvWSwxB5Xc4o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769600459; c=relaxed/simple; bh=2/RHS3VB+9/ela56gcCfKz5EhOgp8MbiqRV5USDd5Bg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GoNjiVFYXi84LVLf/w+4zmI5ftEu6KnZVGa+TJnUnzT4xJq5Pz0pxNsUYZbDfBOCp0C24fnM8ZQH9RmTBYndZeeZIoz3Zb/IBVrkWjse7Y7SbtfKA9V6S3g3wGl24KDBs65dRI8y8VY25fhcowyd/C3tpEilFMU0RIjrFLYRU20= 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=P8RYbQiU; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=KtfEmv2p; 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="P8RYbQiU"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="KtfEmv2p" 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 60S92CD03387339 for ; Wed, 28 Jan 2026 11:40:57 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= 26elPWs7TSj/P1iv30rj+NWpCzRlNUklVKX54bnVcaQ=; b=P8RYbQiU17NBiLJI Aqiq4/+WZO2pvPZm/LkwqpkLQ8KWPo0Gw4ClFGSJngWW0mp63MLm5jbfn0nIQFue mFZmsfeiG+H+hs21ctEhqZI5l7ytzHdzxjFeCrPXeUOH9szwmcpB5o3amv/q4291 bsymptpgkWzz332RAd13uGxXTzGHMr8XHIsJZcyhkSlHnDQDduZdFYEopnGXjYh6 GznBC0CFSCVYY966uhnloEp5jNsmj5l17GxjSHShdNL+7b+ByiLKDee3glfMLO6w 1Cldlr4Bel+mCwA67Xcrs7XsvMYp1nufzh503woCnjSyMdfgUu6qN9MuZOrGB+C2 Kr+EWA== Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4by1dfuaqn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 28 Jan 2026 11:40:57 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-c6187bdadcdso3866261a12.0 for ; Wed, 28 Jan 2026 03:40:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1769600456; x=1770205256; 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=26elPWs7TSj/P1iv30rj+NWpCzRlNUklVKX54bnVcaQ=; b=KtfEmv2pQ/6Epd66qkASK7Gc8mh19O34hU4fwakf+AY6Z3vXwiyVZHqp3cPwhRAFlH efKJRQOET24YvvTxCJDf3DvoaxSBF8Aea1YXT7CjFRubI+vo5qEtyPKD2lv0KEm70VVH LB3zc+Cq3cLp5Oy339v94n/5ekOjeg2FlYQnZ1wrcVAac4TzSbGO1k/bbRJfYyEMyan3 UgeU6Rk8t+Cg/L25Q2IU6nxgqJaY38in4vkGBpK9wy0uVafUJqq6BVTLrNgWrA7WFxm6 y7g0XGEHkqCajWEcbSn2yFic6+nkrrG8vB5QfJGzzSdclTHhBme0P5pNzN48wrTmBRUV z/Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769600456; x=1770205256; 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=26elPWs7TSj/P1iv30rj+NWpCzRlNUklVKX54bnVcaQ=; b=ldfbSrVuGLY7dbhP/TRW1nAF4ysIxQoQdRKKbS5AmjBeGkdKzbcpU80wHpoitk/rNC 5UCUQ87J1pvRh1f1KQPtO0zvJJzHs04LT890UyZY9tsAJKRd6WOGpPc8yP36TwnVR9vc Ts+rNX/98nlJ89fcqarn6BQtA0ExecjnA38lARZNDqHfI7qE929YyZDMNaOHsfBaHqct hjGZjAN4NvFjlx+Y9w5UP++qjYQ6D7n1+WrqwUlraXvh1znfpIyMnU/p9wB8SMQF3FnS vYeBPO3+/YBj6vnj4j1JOxota/8HLaXD6dyJ2nIou3EA2u9eUS30G0xK92S8gQ8ONfxB fToA== X-Forwarded-Encrypted: i=1; AJvYcCU4432n70HhwnynWZ6OGWbDMJEqGvc+RABi2ulRa8gkvLg0QY8ATznc2eRguM7PBAn+WsesbhA5X8j2lKs=@vger.kernel.org X-Gm-Message-State: AOJu0YxQuz3F5ohnIk184ZDIqA3pVceg69qq93dDv3aPsx1u1xYUF2Gi L2EejZjyPyOZx9l5qb8ngTzzFTRDdzp4lGQLHlko2mGdIzPP+5Rx2v0e+Koh0XpwbhwivXRqxMS PUdJTyLIndkVK7FbFs0H4ipStdT5OL7Z7lU8aEWlwivMDAHerfxNpojU+rzAQLwi24Ff08HmAe+ I= X-Gm-Gg: AZuq6aKBCEBDTEzwluqFUjGFYGRwtVifnJF6MNemsvEXZIuz7m1bF962KV7HQRV/s5P 8lKLd2ypkF89ml2sJ4iqv+FPQqL4VeOxMWVZkw2iRF6yxKvO7QW8zwPuGAzhG3mK8DDLHfRL8IQ BQrRc7OLl2jVKJCjZ+GUq5HZYBOLMi8Q9d9HOBWCW/bapistjBAKdEgyGlhfFzRD407Ce8InMLD R6XGoZlIZ8pR7j5GJ8/6LDinEvdgbmk6bzOGfTh5M6JwruE8NcLT3wGfXPMAJWI8dR+G79V0/bx wgQ1Qr3NpJ0j34QNTEeb0Wx0HmftjIeTdU2EnRYbmkSFjS5GCuxn4HlZ+tQJuOTk034g26dfuN+ 0MI9zZBRC1FjAqH7w70GNvNwEamuq5rXvHGkK3BXyqfVH X-Received: by 2002:a05:6a21:7a90:b0:35d:bb66:5ce3 with SMTP id adf61e73a8af0-38ec6287db1mr5032439637.12.1769600455886; Wed, 28 Jan 2026 03:40:55 -0800 (PST) X-Received: by 2002:a05:6a21:7a90:b0:35d:bb66:5ce3 with SMTP id adf61e73a8af0-38ec6287db1mr5032413637.12.1769600455424; Wed, 28 Jan 2026 03:40:55 -0800 (PST) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c642a9f41d0sm2010678a12.27.2026.01.28.03.40.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 Jan 2026 03:40:55 -0800 (PST) From: Krishna Chaitanya Chundru Date: Wed, 28 Jan 2026 17:10:41 +0530 Subject: [PATCH 1/3] PCI: host-common: Add shared D3cold eligibility helper for host bridges 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: <20260128-d3cold-v1-1-dd8f3f0ce824@oss.qualcomm.com> References: <20260128-d3cold-v1-0-dd8f3f0ce824@oss.qualcomm.com> In-Reply-To: <20260128-d3cold-v1-0-dd8f3f0ce824@oss.qualcomm.com> To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Will Deacon Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, jonathanh@nvidia.com, Krishna Chaitanya Chundru X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1769600446; l=2595; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=2/RHS3VB+9/ela56gcCfKz5EhOgp8MbiqRV5USDd5Bg=; b=9+Uq3obX1/upVJ1jSgLEdlZDN14hf6EC2Z5l3sJYRX+e2KMzaMrGwzdlT8eEsRE2LClbxTJKD nw9j0LzsDcpBv/30rGcMussGSOFuzmC9sfng9UFkEgAb0iNNoHU2HR3 X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTI4MDA5NSBTYWx0ZWRfXypW4UYgwJza8 V7chOCvP2E+/Lqkrlzc7z82OYx48JkHTH/egbnAvpWXE2sUdFvtXpiTh9AqiPQeL+y/If5vTVFI o4AzmDoezobQIhTEWkhSxWutf6/+DDtd5b++2x5mzzEIqc03UK3OTFfHlmXu+kT5Sat85/QHHpU Yu5ne455vqMCfU68wIWztRxAccpNkDJq1z5whVo92OCgB8xr5F1esvbTUOnQZZDjpBHuWaYsB/E VtLpyTAwkDL0JkLtOHh8gCl0LHssktL0VFGjPgB9bs/CxB9V1x+tyBLefWamlnajU/TAjp2ZR7i olLwVAq1D63NiMZLp4Mt4+/hxd0IxEpkGB8hF2KSk2lcHah3/LiI9uf38Zj6HoYxtIvQrsQb3dx pYDG0uFhXVjsfc+sHwvNLgATE0BAG4s4n64jm18rvsDTWUIrJ4WPq2YQ/DKRAZ6MU37+q5u0HsH 93YBwoODJYGR70gFkAw== X-Proofpoint-GUID: -ExQcDTTUs2FQFILFvc0Hb-MA2d6JgqB X-Proofpoint-ORIG-GUID: -ExQcDTTUs2FQFILFvc0Hb-MA2d6JgqB X-Authority-Analysis: v=2.4 cv=YeuwJgRf c=1 sm=1 tr=0 ts=6979f5c9 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=kXhGf0cxdCgfIYue-YsA:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-01-28_02,2026-01-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 bulkscore=0 adultscore=0 priorityscore=1501 suspectscore=0 phishscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2601280095 Add a common helper, pci_host_common_can_enter_d3cold(), to determine whether a PCI host bridge can safely transition to D3cold. The helper walks all devices on the bridge's bus and only allows the host bridge to enter D3cold if all PCIe endpoints are already in PCI_D3hot. For devices that may wake the system, it additionally requires that the device supports PME wakeup from D3cold(with WAKE#). Devices without wakeup enabled are not restricted by this check and can be allowed to keep device in D3cold. Signed-off-by: Krishna Chaitanya Chundru --- drivers/pci/controller/pci-host-common.c | 29 +++++++++++++++++++++++++++++ drivers/pci/controller/pci-host-common.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/drivers/pci/controller/pci-host-common.c b/drivers/pci/control= ler/pci-host-common.c index c473e7c03bacad2de07c798768f99652443431e0..225472c5ac82c6c5b44257d68a0= fc503ec046ff1 100644 --- a/drivers/pci/controller/pci-host-common.c +++ b/drivers/pci/controller/pci-host-common.c @@ -106,5 +106,34 @@ void pci_host_common_remove(struct platform_device *pd= ev) } EXPORT_SYMBOL_GPL(pci_host_common_remove); =20 +static int pci_host_common_check_d3cold(struct pci_dev *pdev, void *userda= ta) +{ + bool *d3cold_allow =3D userdata; + + if (pci_pcie_type(pdev) !=3D PCI_EXP_TYPE_ENDPOINT) + return 0; + + if (pdev->current_state !=3D PCI_D3hot) + goto exit; + + if (device_may_wakeup(&pdev->dev) && !pci_pme_capable(pdev, PCI_D3cold)) + goto exit; + + return 0; +exit: + *d3cold_allow =3D false; + return -EBUSY; +} + +bool pci_host_common_can_enter_d3cold(struct pci_host_bridge *bridge) +{ + bool d3cold_allow =3D true; + + pci_walk_bus(bridge->bus, pci_host_common_check_d3cold, &d3cold_allow); + + return d3cold_allow; +} +EXPORT_SYMBOL_GPL(pci_host_common_can_enter_d3cold); + MODULE_DESCRIPTION("Common library for PCI host controller drivers"); MODULE_LICENSE("GPL v2"); diff --git a/drivers/pci/controller/pci-host-common.h b/drivers/pci/control= ler/pci-host-common.h index b5075d4bd7eb31fbf1dc946ef1a6afd5afb5b3c6..18a731bca058828340bca84776d= 0e91da1edbbf7 100644 --- a/drivers/pci/controller/pci-host-common.h +++ b/drivers/pci/controller/pci-host-common.h @@ -20,4 +20,6 @@ void pci_host_common_remove(struct platform_device *pdev); =20 struct pci_config_window *pci_host_common_ecam_create(struct device *dev, struct pci_host_bridge *bridge, const struct pci_ecam_ops *ops); + +bool pci_host_common_can_enter_d3cold(struct pci_host_bridge *bridge); #endif --=20 2.34.1