From nobody Fri Apr 17 14:58:48 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 400D3311971 for ; Wed, 18 Feb 2026 08:12:42 +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=1771402363; cv=none; b=HO917uZJQxzhqNborwH48FQffhz2M1DAnzupyHBxvxuypT0plq+ZvfsuZble9RWCNUWoCkcUg/Zzv+cSqxSA1XvZ1XHbIwqQ+vz+5kFUBH8akL7GTV0J/hptBzlCDg5p5fZOB21ZTvELd5E1Cd8/uquazV4gmnkEZPGcfDs9+rY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771402363; c=relaxed/simple; bh=zi60RThwEC6uT58cj6Q/kkhix9+cyecfzrsXBYVuP1k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=p8a7Devy8gmdsx7kF/GqekGKJ5xmSRvP6Lyh5omeZvnmMeMVSfpBoCSc/YsV7VPnE5Lwehhn4vckvxcYkWDbVuEgVgRcizVJTwK+0CWDQS8zhiKgVQF9LvMnCI4AioyHzTcf1FT1bNlWidYZRNvrcvspXjPZbl50I8atAC/CGvc= 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=TzBeFqWA; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=LPr3YkpQ; 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="TzBeFqWA"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="LPr3YkpQ" 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 61I7taSn1943542 for ; Wed, 18 Feb 2026 08:12:41 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= Abn9qINMymGVFN5Pnfphqo7NCfbB6ioA+GMclfrnZvM=; b=TzBeFqWARdJ1hxzi FmZhJzxUQylNXHMWvg72sXWQQbKOoARmMAtAV/2yq3gYHtoKXaFtx0QmY0KBsjTh T4CQve3z+0cm8poATq1DvMpcFzdShtFRZNbuXVpe+2dajGzMcEQW11XBV/wJc3u4 RCh99mNQtalVtSIZU4ucWNYjjMVGpfmeSjZnI4SRcXBPpTkF0qZp6IjjiE93/OCb aXFBVxxu1TilZEmIrw6ZGbM/cxmU8Pu/QOdizUb9gk7ERxuXq0SXUoM/oEshpcrF 2ujdHvo4mNk4Cc4pmpHXOhJKZwcjHJ3bNuYO5wXwWAkuCCOdPNM7wnqz6Ukgzu0r VFIA1A== 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 4ccq4g3b5h-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 18 Feb 2026 08:12:40 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2a943e214daso249912445ad.3 for ; Wed, 18 Feb 2026 00:12:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771402360; x=1772007160; 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=Abn9qINMymGVFN5Pnfphqo7NCfbB6ioA+GMclfrnZvM=; b=LPr3YkpQr0vduW24PN/i2PTJ2ReMcibeTZsO1g2bBkXDOplOUeebxZs1slGvKchhh6 jft90iO7BMCrjKNBYHw/kMSb7xII0V7krpl1+NzDrtt4if82gdmr1fZvN3X6bnzLmPy/ pWu5hrbyphVgVEZk9phvOFOogrN2S6iMqTrXAh5kmlijFDRSGMC5bUhSQTrHyAqH+fJO eVXByOHIzhaw4Ao8o+ybQaTGr6RFgUBWJJ/c+nYD63X7pqsarQKqzUn9NIO0kaTjXamm pqLzNmUX11rZetqIPY3j/x5jn+fo3TsbVS/B2ji9c05dS0Ur+lfXRZfiyErQe+J7Jxa1 CJ5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771402360; x=1772007160; 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=Abn9qINMymGVFN5Pnfphqo7NCfbB6ioA+GMclfrnZvM=; b=ucquOBRTDpCQZlKphNUV6nZheNRlf/gnn5gyL3YQNWPVhoerXZEXy5JSN6rAAsA02k EaiFTZq9q+xdnkOC526sfZWH4GyFuqzlGeC25T1oriISg/GBhbrC83q+77LpsCfzuO04 woFOn2HGyJ/ICz8gcTOHapALjyJbXp19BG9jaOVfTyW67yn3MJbzzPpkbV+8OrXvfNLL S6lEPZKEv1zuatlF7uciLMSsgN/NxTHLnfKX14KBEXlZmiQqC+BC6V85IWzAHH/GjJTa kM7MxaUivre8sVdux47JU6E95nJ0FKCgt1n37Sy/eIpzdSHvC0w/2eVcQg6j2AXsd7eC bf8A== X-Forwarded-Encrypted: i=1; AJvYcCUIfHFIr9GYsFYz1E0JFJTCMl3XIAAa8dkFxw/hCXzY+2JtHjRt8HHwOm0Stv0EAox8GYtBWm2TuRhVzNg=@vger.kernel.org X-Gm-Message-State: AOJu0Yzpo7SfODrbcyDYxyi2IaCwV2qCY0jM8+6Og1nnRCPtUJau+lEZ 2HHSxdQAUo0O4+HxChSpxnW9042iNgLCPX7lL/eYZExZLLoGhAZioKhZz39LS/4opz/vzOt38sS fLjp2Gt3dS28qz4JJyJ5xBXi+7ZD7ypl5BLD5MvvRjq//rThPm/1ESbjH2XvcWstnpNLDYvhPwB k= X-Gm-Gg: AZuq6aJWYr4c3mR3psZWsChvy7lbUMSKBXIx1luoOer1ShX0JwKSQ4epMlBIkGzuDbR 2q/0XRScu3sx01JD7xCeGDKIt937iZL1ApUz7AP5N/Q5+3kBQet3GY8pu2Z9ceiUSG/io8VgpFe +C6wbw3UcdCP/4oakAQU3bWpS9qY3GQaIAosv3XM/Y3e4mYPckrrQtcptkM1ha2kOIxB2SkRKKb lfydZGLWXq1FH5i/GXeHnOqyqlwl27YgPwWESizg4PpShSm9MjXWF6AcJO1/HTFpdjaCz/0n2EK aFBxq+cQU/HxV/CEYBScGCw+gch5ScJow4zd7PcsOM4scXtEUUOO3gWozrJDY7YvG4e+Q749XIW mavTE39FyYgRK4urw4613wkWGHa+z52gRUOwdgeemO2yi15nZUGZTvlmi X-Received: by 2002:a17:903:1a07:b0:2aa:e39a:a7c4 with SMTP id d9443c01a7336-2ab4cf4f7f6mr150956345ad.1.1771402359584; Wed, 18 Feb 2026 00:12:39 -0800 (PST) X-Received: by 2002:a17:903:1a07:b0:2aa:e39a:a7c4 with SMTP id d9443c01a7336-2ab4cf4f7f6mr150956045ad.1.1771402359100; Wed, 18 Feb 2026 00:12:39 -0800 (PST) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ad1a9d624esm118123685ad.49.2026.02.18.00.12.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Feb 2026 00:12:38 -0800 (PST) From: Krishna Chaitanya Chundru Date: Wed, 18 Feb 2026 13:42:23 +0530 Subject: [PATCH v7 1/3] PM: sleep: wakeirq: Add support for dedicated shared wake IRQ setup 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: <20260218-wakeirq_support-v7-1-0d4689830207@oss.qualcomm.com> References: <20260218-wakeirq_support-v7-0-0d4689830207@oss.qualcomm.com> In-Reply-To: <20260218-wakeirq_support-v7-0-0d4689830207@oss.qualcomm.com> To: "Rafael J. Wysocki" , Len Brown , Pavel Machek , Greg Kroah-Hartman , Danilo Krummrich , Bjorn Helgaas , Bartosz Golaszewski , Linus Walleij , Bartosz Golaszewski , Linus Walleij Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-gpio@vger.kernel.org, quic_vbadigan@quicinc.com, quic_mrana@quicinc.com, sherry.sun@nxp.com, driver-core@lists.linux.dev, Krishna Chaitanya Chundru X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1771402347; l=4919; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=zi60RThwEC6uT58cj6Q/kkhix9+cyecfzrsXBYVuP1k=; b=noK8LQipAKG2D7C1FRq6ywjqy7FzAkbdoYSMHusSRkOVbJWZkG8O8YGXJVGOnOPjcZDn+4PLL FA48oqomtubDXYh3Cim6SO/3o29N4jvqzUymr5+J38HDqDQfqXnQHmC X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjE4MDA3MSBTYWx0ZWRfX3j6ifJ0oJGT4 PoNrDzt4lCOu8Scz89vTV9Tuq3xXPlgR6et268pzG0qn8J3SP1pJjFNZiSijCDu2BW8GMXdA83D AEmsPboq/lqTlSTkPqTWTorMtX4Mv649jnjCsdIjGAjMEjlsuJg29ld6Zw9YmHwg+9IcEBrgZR1 lu3C7ExbFIGtBuXs0EVBm9Rc5mt69bX5Wyyv1q2c7czjNeemoN1igLUxVv4hIBqOHkOhyHkc1mE leoVbGz957wAe4Wdg2YNytWrnwJ4V+kyuYEAQLuyyamy7iJnjZb2+B/KLsC8qi91PGUzYY9KHrT UN3U1ceHmVUJohvbUlZIhmonh8zCja1r2KYwJWaKZyKNDwP8eZvUUACg4kxAJA0PJB5UwYRGZBo FVeABGYrXKonkVhMpTWNQbWaTMF9S56dHdlnMXT+7Txj2+xfeJRn5BEImJ1t3QhvlECDKc0BLiT yvo8JSBE5/GnZ0yI3Bg== X-Proofpoint-ORIG-GUID: PLeOI5Gj3XE4YP_zn1CF3EP_zbUwCeNC X-Proofpoint-GUID: PLeOI5Gj3XE4YP_zn1CF3EP_zbUwCeNC X-Authority-Analysis: v=2.4 cv=YdiwJgRf c=1 sm=1 tr=0 ts=69957478 cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=GqrSgIjjxmp09zFQf4gA:9 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R: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-02-17_04,2026-02-16_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 adultscore=0 spamscore=0 bulkscore=0 malwarescore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602180071 Some devices require more flexibility when configuring their dedicated wake-up interrupts, such as support for IRQF_SHARED or other IRQ flags. This is particularly useful in PCIe systems where multiple endpoints (e.g., Wi-Fi and Bluetooth controllers) share a common WAKE# signal line which requests platform to re-establish power and reference clocks to the components. In such cases, drivers can use this new API dev_pm_set_dedicated_shared_wake_irq() to register a shared wake IRQ. Update the internal helper __dev_pm_set_dedicated_wake_irq() to accept an irq_flags argument. Modify the existing dev_pm_set_dedicated_wake_irq() and dev_pm_set_dedicated_wake_irq_reverse() to preserve current behavior. When IRQ registered with IRQF_SHARED we can't use IRQF_NO_AUTOEN flag, so after registering for irq, disable it explicitly. Signed-off-by: Krishna Chaitanya Chundru Acked-by: Rafael J. Wysocki (Intel) --- drivers/base/power/wakeirq.c | 39 ++++++++++++++++++++++++++++++++++----- include/linux/pm_wakeirq.h | 6 ++++++ 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/drivers/base/power/wakeirq.c b/drivers/base/power/wakeirq.c index c0809d18fc5406b224206e0c8e5028aa8f4183b0..a3ac133496d1aadd31a2a951732= 2f4ff1c5be7b4 100644 --- a/drivers/base/power/wakeirq.c +++ b/drivers/base/power/wakeirq.c @@ -171,7 +171,8 @@ static irqreturn_t handle_threaded_wake_irq(int irq, vo= id *_wirq) return IRQ_HANDLED; } =20 -static int __dev_pm_set_dedicated_wake_irq(struct device *dev, int irq, un= signed int flag) +static int __dev_pm_set_dedicated_wake_irq(struct device *dev, int irq, un= signed int flag, + unsigned int irq_flags) { struct wake_irq *wirq; int err; @@ -200,8 +201,7 @@ static int __dev_pm_set_dedicated_wake_irq(struct devic= e *dev, int irq, unsigned * so we use a threaded irq. */ err =3D request_threaded_irq(irq, NULL, handle_threaded_wake_irq, - IRQF_ONESHOT | IRQF_NO_AUTOEN, - wirq->name, wirq); + IRQF_ONESHOT | irq_flags, wirq->name, wirq); if (err) goto err_free_name; =20 @@ -237,7 +237,7 @@ static int __dev_pm_set_dedicated_wake_irq(struct devic= e *dev, int irq, unsigned */ int dev_pm_set_dedicated_wake_irq(struct device *dev, int irq) { - return __dev_pm_set_dedicated_wake_irq(dev, irq, 0); + return __dev_pm_set_dedicated_wake_irq(dev, irq, 0, IRQF_NO_AUTOEN); } EXPORT_SYMBOL_GPL(dev_pm_set_dedicated_wake_irq); =20 @@ -258,10 +258,39 @@ EXPORT_SYMBOL_GPL(dev_pm_set_dedicated_wake_irq); */ int dev_pm_set_dedicated_wake_irq_reverse(struct device *dev, int irq) { - return __dev_pm_set_dedicated_wake_irq(dev, irq, WAKE_IRQ_DEDICATED_REVER= SE); + return __dev_pm_set_dedicated_wake_irq(dev, irq, WAKE_IRQ_DEDICATED_REVER= SE, + IRQF_NO_AUTOEN); } EXPORT_SYMBOL_GPL(dev_pm_set_dedicated_wake_irq_reverse); =20 +/** + * dev_pm_set_dedicated_shared_wake_irq - Request a dedicated shared wake-= up interrupt + * @dev: Device entry + * @irq: Device wake-up interrupt + * @flags: Custom IRQ flags (e.g., IRQ_TYPE_EDGE_FALLING) + * + * This API sets up a threaded interrupt handler for a device that has + * a shared wake-up interrupt in addition to the device IO interrupt. It a= lso + * sets IRQ flags like IRQ_TYPE_EDGE_FALLING passed by the caller. + * + * Returns 0 on success or a negative error code on failure. + */ +int dev_pm_set_dedicated_shared_wake_irq(struct device *dev, int irq, unsi= gned long flags) +{ + struct wake_irq *wirq; + int ret; + + ret =3D __dev_pm_set_dedicated_wake_irq(dev, irq, 0, IRQF_SHARED | flags= ); + if (ret) + return ret; + + wirq =3D dev->power.wakeirq; + disable_irq_nosync(wirq->irq); + + return 0; +} +EXPORT_SYMBOL_GPL(dev_pm_set_dedicated_shared_wake_irq); + /** * dev_pm_enable_wake_irq_check - Checks and enables wake-up interrupt * @dev: Device diff --git a/include/linux/pm_wakeirq.h b/include/linux/pm_wakeirq.h index 25b63ed51b765c2c6919f259668a12675330835e..61f1e840745b56baa57db37563e= 450cb2d757a85 100644 --- a/include/linux/pm_wakeirq.h +++ b/include/linux/pm_wakeirq.h @@ -11,6 +11,7 @@ extern int dev_pm_set_dedicated_wake_irq(struct device *d= ev, int irq); extern int dev_pm_set_dedicated_wake_irq_reverse(struct device *dev, int i= rq); extern void dev_pm_clear_wake_irq(struct device *dev); extern int devm_pm_set_wake_irq(struct device *dev, int irq); +extern int dev_pm_set_dedicated_shared_wake_irq(struct device *dev, int ir= q, unsigned long flags); =20 #else /* !CONFIG_PM */ =20 @@ -38,5 +39,10 @@ static inline int devm_pm_set_wake_irq(struct device *de= v, int irq) return 0; } =20 +static inline int dev_pm_set_dedicated_shared_wake_irq(struct device *dev, + int irq, unsigned long flags) +{ + return 0; +} #endif /* CONFIG_PM */ #endif /* _LINUX_PM_WAKEIRQ_H */ --=20 2.34.1 From nobody Fri Apr 17 14:58:48 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 92729318B8D for ; Wed, 18 Feb 2026 08:12: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=1771402369; cv=none; b=RrXXqUURt5ARVf32V6qOghkbeKBhWUyX1F+CiZGKqXKguxsAbk52eMNYvMSk3VYvnbR0wSSWTbRw2afNwoJCUfCnwJ82r3rAzBFt1KbNBQaz0ARUc9+2p10HDNYL0YrNGwKal0oEmU/phodqqG5yIFuAuLPCd4X7glTZb4SuigU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771402369; c=relaxed/simple; bh=kr27uYpqKnl3/NaFELLNpZzJB0wElVbtKvpi6VqgH1k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=t2dPsB1AgngIPha/aQiJRkve8C2/LEOdZ5Dk+IdzmL5NtCwbUwzPTofZXr2tWPormGIAieigmIhjiHhYJCq7XbC7MeZjJo/a3m9pIqgx6ZnASfnmLYfqAno5uGs/IqNu27PII9Tpyusz7BGLR8nS8k6oOWPoS79uh0UI7Snozkg= 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=VIyYDvwG; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=MkoMn48l; 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="VIyYDvwG"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="MkoMn48l" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61HLnWPV420224 for ; Wed, 18 Feb 2026 08:12: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= iocoITrqzOavAzny70iEVGcoDGpxtUqYXZTgwIQV1KU=; b=VIyYDvwG2NMuEJ8Z QqIv6XDRxCwMPB3WoF/mNYBu7FrrxN+zjRq0q3qTETgZfWx5BplPVFnJ7wb1Jjxe AHOjVekZN2rd4OHTZyoDWXGq/v10wGiBZlnmW7KiUR9mH36eIAS6WFNEPJvHQcBl S5HvO1zYyxy7h1EYYseORgqEyVRulDcv7hKtnA63ZGBnp5vK2xhljplyKpxhN7ja hJBx8z5OYSUgVyyPpV/XFgGhiz3hO/9CFcAXuZrjYcppsrHA1QqFzXubWwPyzIA5 UsPgZ0/caPzaPZjjsJLsKfXd815AT9ueXsNM/meSlAvbAOuw+zew5ExzreGF0xD6 kvk+OQ== 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 4cd0k5h871-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 18 Feb 2026 08:12:46 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2aaf0dbd073so64302565ad.3 for ; Wed, 18 Feb 2026 00:12:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771402365; x=1772007165; 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=iocoITrqzOavAzny70iEVGcoDGpxtUqYXZTgwIQV1KU=; b=MkoMn48lut9BGOAJvMPpVAViP+nIHJilfaaTDvPCsZ6MTi7/P20ak5faYjYGl32jbn 6ZVA6mZmhj/edcdlND33A9x71XTS2hHy2X1KdFVjQFZPUjyHmZ3Du5HNiVVJj7FKLaY5 aa32wwLp+8dXlV+H6udixDun4fURpmVAfA62gZZwQfubhCnSWo/6WYy+dulC3vq7w3c8 Moyu9HUdPiQsbBu20WibgOkd36L/OWC6SXql9fewfuyjQ/wfq2DqpG8Y99aUbO7ABNyK XcAQXpZt90IoVwZGCIscQlhq+mUWs1dUbeZcft0ZzDthSd6q+dWTH/Zkl85ey2ebxRuI DS4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771402365; x=1772007165; 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=iocoITrqzOavAzny70iEVGcoDGpxtUqYXZTgwIQV1KU=; b=oMcWA84vvv/pOtD+96RwdW6v5QgoUAhfHA/eHM9enrw/4uZaJGLKmJGiRr+5TobnHr YbgttdWdUgMGZQQQHip1fRG7NOBdy7+XdOoLcEPRw6xPi1t9CqiaNiAMT3rf3nYO0Ukq XWVMB5UZ6fGW7qHb34cXiRjyPIVGK4WlP1Fs0CBM5D1OIA7bzRgddU5kKT00ExtPKIrS Wxnesce92P8Mm/HwMQCSiIy18d8aX8Y/ne4x5qayKzm43wYisW46nq79ukch+KX/h62E 8xl5ZwKsaPNmJDQwoOQ333wSjZarjjIEeQxWPTV1uhF6OZtW23S/r2kyFeuf+ZuT6UQH FpNA== X-Forwarded-Encrypted: i=1; AJvYcCU1hA2nmaKaPbMesDRXyPuPMjulz8SVxWKmNMx9BN6BviXVGm3vxZF8Faj/PVhsflus3Byet8RJyY/6nZo=@vger.kernel.org X-Gm-Message-State: AOJu0YyxgeeD+J6lJgqCHJs3rebYrjCnP4dJwqYk4/xBS1syyy+OrpnO WsbiwhJk5gzlpg/RyGdhOfB+1p1VuMm+tU2xff5NSnkbyxNgZSphTDRcoFAq0DcTENSNySmIGsL f8jz/7tkjXz+UfkDPAYrIWF6aa0l0GcRsjXTRZUkgytImourq4e+Jzwu/HtNjDolQrzg= X-Gm-Gg: AZuq6aIbLLJZX/VMDOTot2qbnNoHHRkEV2+JBFeRfLITDxYakseOIBjgJ2IXe0lsSEj Uq3Bto/B2O3Ms1qCI9f5CtIcxr+1/fXig/q+vYHKqjiwpd0gXMghQiXWXGa5oVplBp8L403+/Po BDYHwQ1q3Vc9NuV/aJdNBuq6vrnAJVYP3ttD9m8S0xKbj86OdBa3ZqaqL6Rz9Oi421C4G4aGAiQ do8DVQh2YCGLjez85r9igwBWaOxP2KxcA04UpTojikoCShwPeX+4WoVQ5aVJdrYuCofIojvbukO tbMvJ3WhPgnt8VVyqzcLGaoJ59SMUSkmVvQ6/aMOg4jlVEzkOBaEMOsFqizJbHlbPOyWLIpnNn5 EzbEWTjl1w/9FuG012h9wF92Ia6gHlvnvdMZft+NN9YOqzQ/92c2o9wau X-Received: by 2002:a17:903:320e:b0:2a9:5c0b:e5f4 with SMTP id d9443c01a7336-2ab505c0e87mr138782755ad.28.1771402365450; Wed, 18 Feb 2026 00:12:45 -0800 (PST) X-Received: by 2002:a17:903:320e:b0:2a9:5c0b:e5f4 with SMTP id d9443c01a7336-2ab505c0e87mr138782615ad.28.1771402364996; Wed, 18 Feb 2026 00:12:44 -0800 (PST) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ad1a9d624esm118123685ad.49.2026.02.18.00.12.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Feb 2026 00:12:44 -0800 (PST) From: Krishna Chaitanya Chundru Date: Wed, 18 Feb 2026 13:42:24 +0530 Subject: [PATCH v7 2/3] gpio: Add fwnode_gpiod_get() helper 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: <20260218-wakeirq_support-v7-2-0d4689830207@oss.qualcomm.com> References: <20260218-wakeirq_support-v7-0-0d4689830207@oss.qualcomm.com> In-Reply-To: <20260218-wakeirq_support-v7-0-0d4689830207@oss.qualcomm.com> To: "Rafael J. Wysocki" , Len Brown , Pavel Machek , Greg Kroah-Hartman , Danilo Krummrich , Bjorn Helgaas , Bartosz Golaszewski , Linus Walleij , Bartosz Golaszewski , Linus Walleij Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-gpio@vger.kernel.org, quic_vbadigan@quicinc.com, quic_mrana@quicinc.com, sherry.sun@nxp.com, driver-core@lists.linux.dev, Krishna Chaitanya Chundru X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1771402347; l=1194; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=kr27uYpqKnl3/NaFELLNpZzJB0wElVbtKvpi6VqgH1k=; b=CHIK6Dfv3xgeAdlKFHR8JSiT1167UOJDFNWBSMNuEKKQj5r4d7YEoEK+RMUc/wYwINFP5f56O Nubwn8ni7TBC+yld0IihIzYNB+K6wwABaSn5UR9uMig/MvicYBQ3pFu X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Authority-Analysis: v=2.4 cv=JqX8bc4C c=1 sm=1 tr=0 ts=6995747e cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=EUspDBNiAAAA:8 a=Ocqi7cVID08-S0eeb-IA:9 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-GUID: UlQ8tP3F1TWYQe5rcKR84T8LjidoYsy7 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjE4MDA3MSBTYWx0ZWRfX9LGsH3vxd5iB 8IseqlfKR1lMaQd+EdBDgdiTXWEsi0mpTx8FiwC6ItpuBxBwKab1d1pbXOvyz9ubzT1hu2cJmiF 2E/Zpq/vhPOwHdcLU5zHZpeDu2K4aIUIJrgnV+gzE7PZ+flwDcalfWm9knvvVRYhjbI3nOdy2Sn ELchO0vR94vuq0jp9kA9TGS0CNP3vecmLJUTfdfLvBBbqGXR6bKeNW37GGwszdnzG7V/qdaF2ou ahXVaqBmAyYLZFq5Ej2vOyY/vDlCuQEh8iFQVC59PYlDmMtmFI4EaCubcxkvBcxfKsqu0LPc3xy UyazBqHGjNuiTQkjvPTEC5ejINE/Zui/B0PknuGp+kosVAq99SkaleQaZipPGeYV2b6Lhz11lMA fxZnRLUKDJcRDDnpzky1SklxYgw6ktJPbieBNdsWWHAloOEuIxpVkY2edwDHEn+EJb7eZA2MTbn H8HnmzGsQFMV2nomUkQ== X-Proofpoint-ORIG-GUID: UlQ8tP3F1TWYQe5rcKR84T8LjidoYsy7 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-02-17_04,2026-02-16_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 priorityscore=1501 phishscore=0 adultscore=0 clxscore=1015 bulkscore=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602180071 Add fwnode_gpiod_get() as a convenience wrapper around fwnode_gpiod_get_index() for the common case where only the first GPIO is required. This mirrors existing gpiod_get() and devm_gpiod_get() helpers and avoids open-coding index 0 at call sites. Signed-off-by: Krishna Chaitanya Chundru Acked-by: Manivannan Sadhasivam Reviewed-by: Linus Walleij Suggested-by: Manivannan Sadhasivam --- include/linux/gpio/consumer.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h index 0d8408582918680bfea6a04ccedfc0c75211907a..fee926c0262ce9dc4b9a3c151e7= 4f2cf37470a49 100644 --- a/include/linux/gpio/consumer.h +++ b/include/linux/gpio/consumer.h @@ -596,6 +596,15 @@ static inline int gpiod_disable_hw_timestamp_ns(struct= gpio_desc *desc, } #endif /* CONFIG_GPIOLIB && CONFIG_HTE */ =20 +static inline +struct gpio_desc *fwnode_gpiod_get(struct fwnode_handle *fwnode, + const char *con_id, + enum gpiod_flags flags, + const char *label) +{ + return fwnode_gpiod_get_index(fwnode, con_id, 0, flags, label); +} + static inline struct gpio_desc *devm_fwnode_gpiod_get(struct device *dev, struct fwnode_handle *fwnode, --=20 2.34.1 From nobody Fri Apr 17 14:58:48 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 B35F2318142 for ; Wed, 18 Feb 2026 08:12:53 +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=1771402375; cv=none; b=tqGW0uh7XpUENrl6p1psMS03aeKYQTB4TOiYpGsh8UnGBQSiGv9/Ck7cOnlOhxjxNx/YlgFmKcYYTxAdIEhiqXsBA2P4QOI6aC1zPRA8HVvAPon/jswoCGiR1V8jA50jxgQoTjnXQkW7oMgqkIpthmDveZ9s+7bNheXGPrwWQEA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771402375; c=relaxed/simple; bh=YyvIpWrTFLi6XlA78epLgR4oDc+qO1nmiVhSzx9chWw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TRAFuHRjbVY9/cJ7yIKlVmTOV8X1gWApL81izsZEtPDsOU1CRC4A0UDNdA8dV3ljq/tMwtGfiBkB6Mnt3w7bU3Pfxu9P+vhR5b/yodLZzU00XkRizLnHQhJ0lribdVYPApUL46uvnqiJD4u1wmH/I1Zkc4f/eJCskMarDXoXZi8= 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=bQcCVZVL; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ZZJKswC7; 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="bQcCVZVL"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ZZJKswC7" 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 61HMOeJO1029650 for ; Wed, 18 Feb 2026 08:12:52 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= fygRWP8pcLbQ34jhJxnxGK22lbC+YAxbQQyhOVa/yJs=; b=bQcCVZVLa3xhQUCe cX0vsq84LQfdwfq8BWnjE3XhMCpMDjPCWIOEONVNqGX2vVug6wBSVClvAbUMd5da uSHUvUm5DVOASlwu1gKUfrb9uxuYYhmOsTQvFdK28gz85sbnaUTqhLfp+TcZedbF g15TAoGBcfLoz1d6MAPBle88GHbGywPQ6WJU8MOrOUWJPRxcpM9h4sDDBX6Xja4r dfb9FxTRu7u/0n4hVBGFzyNQorReOtAL2Z/37ep9vGdsosL60mTd5sqymb4xF9NX BIP/F013UK1n4yF+SDsGUCCfVQm752UdSg/VH3LMT58pFb6nUCJeC8RNaQPV1gNZ nU8oCg== 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 4cd13rs4w5-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 18 Feb 2026 08:12:52 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2aad3f8367bso60794395ad.0 for ; Wed, 18 Feb 2026 00:12:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771402371; x=1772007171; 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=fygRWP8pcLbQ34jhJxnxGK22lbC+YAxbQQyhOVa/yJs=; b=ZZJKswC7DSpjI8+ZGf0HA6wxBSNL971o+UCsbsSRssiw2W7IvZPxEaNPhPbRDG4O4h 0Hhw3WwGO0csX9DqDx5QyQEyiFiQBfyWg31NBrHmC8A7/OLNS4390PTKnILrFeVd7Nu+ DPZkf7H2RT7r9b/r8KvcvQe4Gigl4vluBUT/kbWwI+9qP92Se3oc5T8W9YsrsyI1AKwz dunpcSt4eaPWy9NFsUV2EYyrN6Us6w9ny2iRV20cR8O7UXal3Q+jCEls8E6RsZjOHisR voDPFOhFZnZex9bU1sTXMJQWCP2+pjMXpbS/mtf7IUvSF6VSQg/JZIbhnak1zzIamsWp 0DAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771402371; x=1772007171; 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=fygRWP8pcLbQ34jhJxnxGK22lbC+YAxbQQyhOVa/yJs=; b=CdLlsB/+dyopdtTSYnUQFOkPM77GmI/GxaCPhxSaPVl7W7BWbr221x6Fgu01t4CrXk gePosersiw18hto3i/vz9JbqOuw64rR4NepxAPiSwNyjvEFR8uUWN/zPLpS2cII4C3Rc rFUGTx3BL2fzQ+tQQNAPTBHjC0HPFj0PZozE0I6pX+PeYfkuixPUfpc8ComcK5+iWm1F fbpMRJic02QZqKPajJVLpcCPR22+Mht4Jt9GohUDdA7vqmpHhH7RzE1oUR9AvxdVd906 t771FWmj1edGi8OrOgIiHF8JNB6uvqvgM8jy7Pbjj2TP9vatJQAH2sReMD0zZ/tzqKQ1 p+jw== X-Forwarded-Encrypted: i=1; AJvYcCV1EO+IHRN9mcg3DgY6BEaINY7FPU5BOCnEncYgA8mkoyzv1HEeRuwICyx2NgEZcYp2+x4YLfsuENInETI=@vger.kernel.org X-Gm-Message-State: AOJu0YwR1AVPhLA/P9UrM2Ub+B4RoKQnHc3UYSmK/PMb3j83c3MN/VzV 80nL2AtdY/0Qi/DmojOGMqo2Z0J3ovwxty8SucRWsMgYUgsEZZ3Zs8bvSSjaoPv3R7A6ZZgSDg+ tj4FsrorTYNknLRHz/U9bbctD6H1ID2L+QsJGNiBKtQ6sjwARlbqUjrFFJ1Wy+oCfRS0= X-Gm-Gg: AZuq6aKIBU9YXq1xGmsI5d63yqhKATTo9v62oJq7mX1uhxje5yIcSSrcMJoRYOe65RE XYSUCNP/5GGRcrsspdER4ckUZmdT5Wj0KtPFUl3G+GFi/EOaG5/H81fiWge0He+W4NGz9oXXIC1 Z/YEthPsfHEKJNE7+Ccuie4zt7ffM9TWUBTyzjGYvuxlBcqg71C/WoX9cj2RITGQrjoFFEGL2C7 NGHD8/17zd7TohdfHIiiBqi/GYO0eYVg1znCx2Wk3i8PCoMi7qUfkttZLsi+iA8+Lv4JQpm/yvD ZUMHL/TAbCfcX5pVy74AiAcCTq1WauBoerqt4i65VfC51ENMEVvfcfQEEhPp11x3EBIdItdO6lN cmMQN4mUkeiImXx/vBV2v+EXENgGwlLXQCjTlK7xgJD/ln43sF7MG2+P7 X-Received: by 2002:a17:903:2b10:b0:2a9:5b48:2b57 with SMTP id d9443c01a7336-2ad1754a10cmr133301905ad.45.1771402371311; Wed, 18 Feb 2026 00:12:51 -0800 (PST) X-Received: by 2002:a17:903:2b10:b0:2a9:5b48:2b57 with SMTP id d9443c01a7336-2ad1754a10cmr133301625ad.45.1771402370825; Wed, 18 Feb 2026 00:12:50 -0800 (PST) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ad1a9d624esm118123685ad.49.2026.02.18.00.12.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Feb 2026 00:12:50 -0800 (PST) From: Krishna Chaitanya Chundru Date: Wed, 18 Feb 2026 13:42:25 +0530 Subject: [PATCH v7 3/3] PCI: Add support for PCIe WAKE# interrupt 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: <20260218-wakeirq_support-v7-3-0d4689830207@oss.qualcomm.com> References: <20260218-wakeirq_support-v7-0-0d4689830207@oss.qualcomm.com> In-Reply-To: <20260218-wakeirq_support-v7-0-0d4689830207@oss.qualcomm.com> To: "Rafael J. Wysocki" , Len Brown , Pavel Machek , Greg Kroah-Hartman , Danilo Krummrich , Bjorn Helgaas , Bartosz Golaszewski , Linus Walleij , Bartosz Golaszewski , Linus Walleij Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-gpio@vger.kernel.org, quic_vbadigan@quicinc.com, quic_mrana@quicinc.com, sherry.sun@nxp.com, driver-core@lists.linux.dev, Krishna Chaitanya Chundru X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1771402347; l=7967; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=YyvIpWrTFLi6XlA78epLgR4oDc+qO1nmiVhSzx9chWw=; b=T9yc43Z0e8+NjXJSIlHu3tdFO6HaY32cKsWHdKZZ2VqhHBCDBrlY90crKCb6DxcOXTnxOfSLF 9SUKBwO4bV5D1Zrj1R2rRIXSVgYARNPyuZm3lMN/9oxEZq/mzzo65Bk X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Proofpoint-GUID: JzB3dH6rdboQmEm30DxZwAV-fiDaYAKE X-Proofpoint-ORIG-GUID: JzB3dH6rdboQmEm30DxZwAV-fiDaYAKE X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjE4MDA3MSBTYWx0ZWRfX+vTDtoZxzerQ rdf4NqQYJWjDqVzJyA9KsIy9C4mHBAF9cYrO7h4gS8aa8Ff5r4r0LEFtTNApvDD+kbb1bFgtojx kgvpCAdmEE1yeYVR1NvaOWBf+gAZldqfeT/INcDzzk+BkjgFpwEi9yqhmSXKGPiFox2iBCM7N5E 5pdcZVX1Ejk/VhJrA6cFPypYtG76lsJFh7xrdh7FnvUUg9gav3SOyD6DlZhYlh+eG7X0NQMOWSy u7AWWW5BMrGf1fSb+OpLV5xY/VjpxUPu37mE4UUMK/8iEm3BwEfIPPwNP6nxv5v7DMAJfU4ldw3 Nw+4+nHpNCnFAGpBARIyGlj+tByZ7OSFU9aKWKLTQhXacUJisuZ/sEREYcTFY0xJMIEBUnNteiI x/iuKiLzBHxR1RO/P3iOavNHB8LJrf7X2DLAfPSCefxoC8diofw+ybyk2is0m8qo9b26JwNFA8V rPduYsyWB4AoFcymcYw== X-Authority-Analysis: v=2.4 cv=Q8rfIo2a c=1 sm=1 tr=0 ts=69957484 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=NEAV23lmAAAA:8 a=KKAkSRfTAAAA:8 a=ttF918e8ocTVMR-R1j4A:9 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 a=cvBusfyB2V15izCimMoJ: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-02-17_04,2026-02-16_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 impostorscore=0 clxscore=1015 bulkscore=0 suspectscore=0 adultscore=0 priorityscore=1501 malwarescore=0 spamscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602180071 According to the PCI Express specification (PCIe r7.0, Section 5.3.3.2), two link wakeup mechanisms are defined: Beacon and WAKE#. Beacon is a hardware-only mechanism and is invisible to software (PCIe r7.0, Section 4.2.7.8.1). This change adds support for the WAKE# mechanism in the PCI core. According to the PCIe specification, multiple WAKE# signals can exist in a system or each component in the hierarchy could share a single WAKE# signal. In configurations involving a PCIe switch, each downstream port (DSP) of the switch may be connected to a separate WAKE# line, allowing each endpoint to signal WAKE# independently. From figure 5.4 in sec 5.3.3.2, WAKE# can also be terminated at the switch itself. To support this, the WAKE# should be described in the device tree node of the endpoint/bridge. If all endpoints share a single WAKE# line, then each endpoint node should describe the same WAKE# signal or a single WAKE# in the Root Port node. In pci_device_add(), PCI framework will search for the WAKE# in device node, If not found, it searches in its upstream port only if upstream port is Root Port. Once found, register for the wake IRQ in shared mode, as the WAKE# may be shared among multiple endpoints. When a device asserts WAKE#, PM core will wakeup the system, resume the device and its parent(s) in the hierarchy, which will cause the restoration of power and refclk to the device. WAKE# is added in dts schema and merged based on below links. Link: https://lore.kernel.org/all/20250515090517.3506772-1-krishna.chundru@= oss.qualcomm.com/ Link: https://github.com/devicetree-org/dt-schema/pull/170 Reviewed-by: Linus Walleij Signed-off-by: Krishna Chaitanya Chundru --- drivers/pci/of.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++= ++++ drivers/pci/pci.c | 9 +++++++++ drivers/pci/pci.h | 8 ++++++++ drivers/pci/probe.c | 2 ++ drivers/pci/remove.c | 1 + include/linux/pci.h | 2 ++ 6 files changed, 77 insertions(+) diff --git a/drivers/pci/of.c b/drivers/pci/of.c index 9bb5f258759be3f1e23496f083353600a4ef6743..23248900253faafaf9509d87c53= 1b454fca41798 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -7,6 +7,7 @@ #define pr_fmt(fmt) "PCI: OF: " fmt =20 #include +#include #include #include #include @@ -15,6 +16,7 @@ #include #include #include +#include #include "pci.h" =20 #ifdef CONFIG_PCI @@ -586,6 +588,59 @@ int of_irq_parse_and_map_pci(const struct pci_dev *dev= , u8 slot, u8 pin) return irq_create_of_mapping(&oirq); } EXPORT_SYMBOL_GPL(of_irq_parse_and_map_pci); + +static void pci_configure_wake_irq(struct pci_dev *pdev, struct gpio_desc = *wake) +{ + int ret, wake_irq; + + wake_irq =3D gpiod_to_irq(wake); + if (wake_irq < 0) { + pci_err(pdev, "Failed to get wake irq: %d\n", wake_irq); + return; + } + + device_init_wakeup(&pdev->dev, true); + + ret =3D dev_pm_set_dedicated_shared_wake_irq(&pdev->dev, wake_irq, + IRQ_TYPE_EDGE_FALLING); + if (ret < 0) { + pci_err(pdev, "Failed to set wake IRQ: %d\n", ret); + device_init_wakeup(&pdev->dev, false); + } +} + +void pci_configure_of_wake_gpio(struct pci_dev *dev) +{ + struct device_node *dn =3D pci_device_to_OF_node(dev); + struct pci_dev *upstream; + struct gpio_desc *gpio; + + if (!dn) + return; + + gpio =3D fwnode_gpiod_get(of_fwnode_handle(dn), "wake", + GPIOD_IN | GPIOD_FLAGS_BIT_NONEXCLUSIVE, NULL); + if (IS_ERR(gpio)) { + /* + * In case the entire topology shares a single WAKE# signal, look for it + * in the upstream bridge node. But if it is not Root Port, then skip it. + */ + upstream =3D pci_upstream_bridge(dev); + if (upstream && pci_is_root_bus(upstream->bus) && upstream->wake) + pci_configure_wake_irq(dev, upstream->wake); + } else { + dev->wake =3D gpio; + pci_configure_wake_irq(dev, gpio); + } +} + +void pci_remove_of_wake_gpio(struct pci_dev *dev) +{ + dev_pm_clear_wake_irq(&dev->dev); + device_init_wakeup(&dev->dev, false); + gpiod_put(dev->wake); + dev->wake =3D NULL; +} #endif /* CONFIG_OF_IRQ */ =20 static int pci_parse_request_of_pci_ranges(struct device *dev, diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index f3244630bfd05b15d52f866d80a015ed21f98f49..225cb861b3425700fc0d9d4805f= 5d9efcaab6f56 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -1123,6 +1123,15 @@ static inline bool platform_pci_bridge_d3(struct pci= _dev *dev) return acpi_pci_bridge_d3(dev); } =20 +void platform_pci_configure_wake(struct pci_dev *dev) +{ + return pci_configure_of_wake_gpio(dev); +} + +void platform_pci_remove_wake(struct pci_dev *dev) +{ + return pci_remove_of_wake_gpio(dev); +} /** * pci_update_current_state - Read power state of given device and cache it * @dev: PCI device to handle. diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 13d998fbacce6698514d92500dfea03cc562cdc2..22709573e41caf0ed45b20ee7de= d5963f55aa9fe 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -282,6 +282,8 @@ void pci_msix_init(struct pci_dev *dev); bool pci_bridge_d3_possible(struct pci_dev *dev); void pci_bridge_d3_update(struct pci_dev *dev); int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_typ= e); +void platform_pci_configure_wake(struct pci_dev *dev); +void platform_pci_remove_wake(struct pci_dev *dev); =20 static inline bool pci_bus_rrs_vendor_id(u32 l) { @@ -1195,6 +1197,9 @@ void pci_release_of_node(struct pci_dev *dev); void pci_set_bus_of_node(struct pci_bus *bus); void pci_release_bus_of_node(struct pci_bus *bus); =20 +void pci_configure_of_wake_gpio(struct pci_dev *dev); +void pci_remove_of_wake_gpio(struct pci_dev *dev); + int devm_of_pci_bridge_init(struct device *dev, struct pci_host_bridge *br= idge); bool of_pci_supply_present(struct device_node *np); int of_pci_get_equalization_presets(struct device *dev, @@ -1240,6 +1245,9 @@ static inline int devm_of_pci_bridge_init(struct devi= ce *dev, struct pci_host_br return 0; } =20 +static inline void pci_configure_of_wake_gpio(struct pci_dev *dev) { } +static inline void pci_remove_of_wake_gpio(struct pci_dev *dev) { } + static inline bool of_pci_supply_present(struct device_node *np) { return false; diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 2975974f35e88b5025701d2b721df8386419de8d..7f5132c0c8de36a6ec2775468a3= d4e5156a046d0 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -2771,6 +2771,8 @@ void pci_device_add(struct pci_dev *dev, struct pci_b= us *bus) /* Establish pdev->tsm for newly added (e.g. new SR-IOV VFs) */ pci_tsm_init(dev); =20 + platform_pci_configure_wake(dev); + pci_npem_create(dev); =20 pci_doe_sysfs_init(dev); diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c index e9d519993853f92f1810d3eff9f44ca7e3e1abd9..d781b41e57c4444077075690cec= 926a9fe15334f 100644 --- a/drivers/pci/remove.c +++ b/drivers/pci/remove.c @@ -35,6 +35,7 @@ static void pci_destroy_dev(struct pci_dev *dev) if (pci_dev_test_and_set_removed(dev)) return; =20 + platform_pci_remove_wake(dev); pci_doe_sysfs_teardown(dev); pci_npem_remove(dev); =20 diff --git a/include/linux/pci.h b/include/linux/pci.h index 1c270f1d512301de4d462fe7e5097c32af5c6f8d..d1e08df8a8deaa87780589f2324= 2767fdcdba541 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -586,6 +586,8 @@ struct pci_dev { /* These methods index pci_reset_fn_methods[] */ u8 reset_methods[PCI_NUM_RESET_METHODS]; /* In priority order */ =20 + struct gpio_desc *wake; /* Holds WAKE# gpio */ + #ifdef CONFIG_PCIE_TPH u16 tph_cap; /* TPH capability offset */ u8 tph_mode; /* TPH mode */ --=20 2.34.1