From nobody Tue Apr 7 13:09: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 E80F3366079 for ; Fri, 13 Mar 2026 07:09:00 +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=1773385743; cv=none; b=YZ8+Lg/0EqXKRgfHiMZ8+/ZI/TdOwOfn/+GZwnVJM/YHg53DDPl0uR0vFawpkQxoQL6JySB2KdxJLwkWgsiAzvJU7rSVKjp24i+b9JkweVoj7HuRgjL4dZWo6rhBhyTP9wwClO+Fwc39+dC3EPK5d6d5Gg5cyH5BX5vzX1+dCeM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773385743; c=relaxed/simple; bh=rZiOZBnfnYQhiYHGIxAvJ9diYifTV8qWwPU2z0ofvp8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kaC9w4M5ub7v6Zwn5j41PDnQVfwgFuA4cKRGSDWADcLDqAQXwRyayKWhtxx4cZ9DCHXRLrF7Wc2HiJ3dCXEFUyRofdlj5EAQzCawiRGm/mCRfSKvHq6pelVqdq+2wQuL00a3zbRwukFdX3NUjw2K1XyTLY92rXkaYzDjMv7fW1Q= 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=VtQZISQ4; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=V1PtwJ47; 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="VtQZISQ4"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="V1PtwJ47" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62D5tePh052359 for ; Fri, 13 Mar 2026 07:09:00 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= vcScscqC6ncRDOFK8ujM+tWz/LTHnr7UQ8J+Pxb8j2M=; b=VtQZISQ4gXif4eDM f+9MBd27EG8icye0NwvCDGtfeiTqdpiNWJOYCUp7SPKQ6vVIG1K8wx/DJFsNH3Ha SUaTCM7ZGEQSt5PlCbDdMyjcT6kHxBq9ZCOsVTXOkOmsl9QA5n32ndJPTnH8sVGf Dx6ExBfVyWgS+SwRm4Zbep5GPcAABzlu/WiA2kKv3JTTc45LQ9uDMpW7Dy9ODPvK 0eldBnWNhzlj5qlq9OniUuY+jczVDFqXkaRpFpIITJh5HPKSfG+63XWuBE4iKyMh IVH+3QPVrQu/m5WZKs0xBmJZjT/18lyl3pkQOP8bV0YU6bRuBu9zktQ5K/5Purxu w1t8kg== Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cuh4w4yeg-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 13 Mar 2026 07:08:59 +0000 (GMT) Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-829b7ed8958so6190010b3a.1 for ; Fri, 13 Mar 2026 00:08:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773385738; x=1773990538; 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=vcScscqC6ncRDOFK8ujM+tWz/LTHnr7UQ8J+Pxb8j2M=; b=V1PtwJ47qsdkSd6FIn01I+/RAX0Nolo2j7qZoBVMjchyOw41yu2owlDpgGF5OSWabY +kVLHkiKDLkz5nGlcI0gOTcKKcUNMN8xlY4xfZeZ5Tg57emBgj3TkL19TFB2rxjnj/OA KGdoukXKFM5grMUwV2wy0tSdBPZDtrlWI09Twk/GfpvcwJdNbgWDmlmz8+lxpU9k2Fje SOb2O6+hckzCpbdXwmIbtia73lFalzExiWw3jIEv54pgu2kR2qYeL282yYr9auyN+EGP H/hgujkiEmUD1avGealPxZxtIJheR8mnHHFyuD9F8IdM5QqfpzWXFMhEAHVRlxv8wbNn tCQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773385738; x=1773990538; 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=vcScscqC6ncRDOFK8ujM+tWz/LTHnr7UQ8J+Pxb8j2M=; b=EaJYVILkBofgEj9Mm9fUh+WKnE1Cn+HvMx/Q8+Eaug8Dukwwf9519LkScHM4Pu47ai qOoS2csfB91KW3y4Cdnmj/m/hUBKu5WMxhXW3cmTGPzhmeEXWy//78giD9rWl+C+gEXY WN1VDbp9uCHHXH8MNUoD9S0BA/pVbvl2g8UqcLx63TmhZV+M8I6bO1rGgucCQUXRsS+4 XXizglMSVmp0FqQnQsg6WVvLHCjJEs/uNIV1PrqeiFszNAgYr/jyNaVDdtMBkoqyZFzp //bbVTSiqPsGfYbgYhBFBugr5QJfnVmVK1hmRzxSZ9tAF6oJvSwVhIsAetkehl9qrO2d oueA== X-Forwarded-Encrypted: i=1; AJvYcCXu07yXV/HshEdQQ1S2Qz87rQnMsnPy1F9fISfusj3fE1kj6fK7CFo+mt/8efBoO4rORXk5atPlOGBcjns=@vger.kernel.org X-Gm-Message-State: AOJu0Yyz1P4qGSDsZdgoZVuHstaHIbPpduKVFHOzjSw6evIig4ORzSyA jDWubRybp8ldreF+W3PeHPVksNXvtqtONZMQ62ZWNC8OwZmS9UrjAqxnfTzExmmSzhNXGHeuFta i60nezfVPm+vTC6RrCNTfRmbnO6A9S8ODMRr0LD8xrTM0clhS4A/pevZKW+bjM1qFf6I= X-Gm-Gg: ATEYQzxR4SPyTejrB4rrJ3zJhxuLhmJfIKK932GacBQ69nIWC/uZ7NX6aSU/OjEldV+ Ue9+B9Ax0wK7ZDsGuFKJZmsyJrZBxRWR3bLqO1qJNVHk95I7wNe4toXh6+2dM145OOkk4dvxvTu dUQJP9pF+3oPOQvwTLQRGT2w2q1IUws7YsLeHHdNP/HZZydSxWDWD99zn64ZDwTzDFqcQLYRhDY fd9SBv8TKHTcalLwkqDhf2ID7NCSH69G+aBqRfm7NibHP4lL6Du7WYRTv3+mcoBhbwgsN2zFnvL X+GkE7cflJkXh0YB1E1evx08RQqc4wA+enrTcWfHg4XEqRRRLmHSDjvVfYCXFRl9aHmmlmq5/bx gkIu3cHRhLz9Mj0O8506bIWCAFqVxM9CbSSr2Z9cdguoSJ+RP2KCTnQOO X-Received: by 2002:a05:6a00:2d0b:b0:829:7553:afbe with SMTP id d2e1a72fcca58-82a19952539mr1970545b3a.57.1773385738489; Fri, 13 Mar 2026 00:08:58 -0700 (PDT) X-Received: by 2002:a05:6a00:2d0b:b0:829:7553:afbe with SMTP id d2e1a72fcca58-82a19952539mr1970522b3a.57.1773385738021; Fri, 13 Mar 2026 00:08:58 -0700 (PDT) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82a07340518sm5148536b3a.34.2026.03.13.00.08.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 00:08:57 -0700 (PDT) From: Krishna Chaitanya Chundru Date: Fri, 13 Mar 2026 12:38:40 +0530 Subject: [PATCH v8 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: <20260313-wakeirq_support-v8-1-48a0a702518a@oss.qualcomm.com> References: <20260313-wakeirq_support-v8-0-48a0a702518a@oss.qualcomm.com> In-Reply-To: <20260313-wakeirq_support-v8-0-48a0a702518a@oss.qualcomm.com> To: "Rafael J. Wysocki" , Len Brown , Pavel Machek , Greg Kroah-Hartman , Danilo Krummrich , Bjorn Helgaas , Bartosz Golaszewski , Linus Walleij , Bartosz Golaszewski , Rob Herring , Saravana Kannan , 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, sherry.sun@nxp.com, driver-core@lists.linux.dev, devicetree@vger.kernel.org, Krishna Chaitanya Chundru X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1773385725; l=4919; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=rZiOZBnfnYQhiYHGIxAvJ9diYifTV8qWwPU2z0ofvp8=; b=sK1VrvyBMnRqI17H0rZDdjGA2MW67ilKN3wCvOiI+I1r7BhnpKu8+OppiMuh1kfZPziuvlf4j 840DYh/TkB1CtDnzPkpYqpPHl5+uafsLEr8iVy+8k4GhAvdc4Fm88jV X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Proofpoint-GUID: oUn7ihGjM9nxc4VbHhZf-NF5Ttd_xF6U X-Authority-Analysis: v=2.4 cv=Cpays34D c=1 sm=1 tr=0 ts=69b3b80b cx=c_pps a=mDZGXZTwRPZaeRUbqKGCBw==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=GqrSgIjjxmp09zFQf4gA:9 a=QEXdDO2ut3YA:10 a=zc0IvFSfCIW2DFIPzwfm:22 X-Proofpoint-ORIG-GUID: oUn7ihGjM9nxc4VbHhZf-NF5Ttd_xF6U X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEzMDA1NiBTYWx0ZWRfX3vWhi4z4nuom pEFyj1RbGyZ/WUIe2mIoyE9cW99b+/PFt+LiuLebPDxi4P59fwwko80k3+KlCo6nhdmHpcktqyh r4bUDMRYb8h1eTQ5kUihIj877h/R/2pL3tZcgar1rhzq6jTHwjNnZPm6ShBdowgsn3Rr603Uczf 9zTXIAG69iO285Da5p+tgWiA8J6udMEW77KqYecEj1Ho7/bTTewA7R5t2PNsp6VwRl08V40CjNI hemwkS50NvAtMwfCzkMgCKwfUD/tR2xZ0jmGBCM4iSENzWXbGRY6gqmv5h26KzGJlyOnHB0pDiG i5XFoxMIm01B7gquR6TBAvip6HE8sGvtqzfpMJCzR6O7O+t3t1FPiO32QkR1dMLJCfAmTuUNQwD ko5ATDUvsJHmOBtkvOI2XQQTI3epzZuNQHmtDflBIB9pdW854ajHrVPDOaOarkYR9x0NZxSsGyr HGE6ZOPgb6S0mxgpM+Q== 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-03-13_01,2026-03-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 phishscore=0 adultscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0 suspectscore=0 spamscore=0 impostorscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603130056 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 ad23f0fa5d1a5a9eb49b1af2288ee4908082b13e..b7b106f55559a7c85cb35d9e5ed= 22fe37970662d 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 Tue Apr 7 13:09: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 41D1E36655C for ; Fri, 13 Mar 2026 07:09:05 +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=1773385749; cv=none; b=PfSwGcu47L091HXT/izupsSts+fj4H9gi68V21nKDxSMl/og9SRgs43vgMefKatjo7358x7Abtj/ft1sOFBgWOVXrrF5z+L093vIxq7NQQsbzDy92QFG4PPWRjIWtTcJDF1SLobtr8JAUII1l0iO7K0zCjQRfPuHsgAzlofXwQA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773385749; c=relaxed/simple; bh=RJyJVigQaOLM0F29T8s/4IhVwmKqS4ZNXPoeDAhzrkA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rRMjRdWYyL71DM7J/E2DuNUH52+fMMYqkAWz9LOraycrjYvmt/CXhPSPPSFFduN4X6c8H3QxKgLrVlpL+KQ3egShGgMX6R7vGE6hgfhmKX71i1OEI5zKsLznjdY5F7gfR6bGPxHwMKhg8Cw1i+eJuD8tq6+OIf0bKIDGcBW7UrM= 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=QnBwfq7R; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=VI7/5gM5; 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="QnBwfq7R"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="VI7/5gM5" 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 62D6oNFo793015 for ; Fri, 13 Mar 2026 07:09:05 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= ZBGna102s7UxMKQ9bLg8nid6z7Q/g4WSEiY00RCl3L0=; b=QnBwfq7RRGsS3fGU Js0PO1nYVjvfiAJCG45vb7H4EMdm7X/FyaN9eqS2/9BUbqjcOMG1Orztb2eyy0JD bTcegnnN4N1BK1c0OAbWET1IivwkcjZZ6tdluibyaEZjn0Eh92Z8s5AgTGZlBek0 gB0SA/7CQe6KWMRHn4tUjqDSb/2ledeWJiAmcFsxkCR7jVGuz6LNAWYA4dR7NYQz LJ8c5PQf7HGm5yOHBztsbdNZ12NIPDBYk4Ue8C96LEcyxjCtZjIsZILdK/jlHDi3 OOMQJFcz4ZXarzx7S0e1TlcapeluhzVe5+CmWxRfxZm/l5yqQ/JPVUL3gCiclzI5 YAOl9g== Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cvdnt0204-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 13 Mar 2026 07:09:05 +0000 (GMT) Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-829b6b22dabso781773b3a.0 for ; Fri, 13 Mar 2026 00:09:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773385745; x=1773990545; 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=ZBGna102s7UxMKQ9bLg8nid6z7Q/g4WSEiY00RCl3L0=; b=VI7/5gM5MVJcJXXboli4yxn8NlPLbkuV2Mfq7hNgu32Ud3k5mxzcm/Ny8nruVr+0YI ipt8GNnC6/eqx+PpY1rzwxreoai/Mqx+HtVQCUPVii/6Vhbj+/9PyYB/6XGzYB2+wyQf Ea7jAcjeGqFXeECrESA2Xf9Hg9Sj6A1mE+EWUDf+WwNY54Cd6J6Yo3Ql5IYRW6EfXe0J L6onM+0sMW4YT2t/9mKWW4iccupQ+Z7QLyXvwbl+REb3aTVym4aoHY0R66axSnOkZl44 kBgHUnNEOrSeYmxsXG3Wl9WEz9AXVFPAXjuAUTCnt73w7Pqwf4KtdwoSiJboLE++smAM dioA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773385745; x=1773990545; 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=ZBGna102s7UxMKQ9bLg8nid6z7Q/g4WSEiY00RCl3L0=; b=cgDgVSBUgHn/HzLr781ayJLe+n1VycFBVwsWBhYQRed1GR9Tet7zOq4bFpP4ByRWjI 2V0YBUj2craH//8IaQJVkbMHgmHt3TFs7BwU0v3frQNaEr9ILTOzN1YFL9/91CTdufbI p+LdCf456Qrkj8v2WXnX2sKMRM/e7+YO2KSFhG3Uet+CINWlWeOWx33dq3mx+6lQzRjk CsASXBdD/ILcv+RMmjW7YJti3dfjT5wUjT9W/tu8FFBPigC/OFD2ZX7ffOi8XEV3s9w4 fnkyrxFcR9M0yMmoerR3XEFU5MspCqd7Ag8LYwfzrOZ1T+eOmyrXh7sGB/ihqQAEtMAx gYqg== X-Forwarded-Encrypted: i=1; AJvYcCVd7PY1b41DKMS8WZGPG/ZeuCATekB7VVXu5aU1k67Lz49jphKk2SmXkyGrs0CM7/k0/MB/s++BuaT4FJ4=@vger.kernel.org X-Gm-Message-State: AOJu0YzVpdFCPKuRsBeHiHhVQRnb2YDPQEtvcxTWeP+NHS4C9O+QnETa EhrMs0/Nh3mCWkqQbwfH26YwFD68zpHqLIM+ANqeKuebmTx9rw7mjyLE6+r1XlRBQxmzeTcUkAs SE770RN+3iYFQSZxTgLXwmEzjSkBK7j4rP9OFy+xMlQcRLlxAvxtOv83CFLJkMM7Dy+g= X-Gm-Gg: ATEYQzzw7/843dwGItaRhmQB2Tg96JuILfFMoxS0n0N7suruqo2VxB5qcEjhOxfYa5b oun4J5wXMv9MGf+aQiFENIY5lyaBC9IdHA8GvL4sCmIlRqJz9e1YviDTwEhNnAeoSOLAUU1WAcQ gTta6rHrUfJINeyAWl/NCm48yuB37QS+05XhwQWM+Nqxx4r2uZHXhGtMf7DvwL8J+XBAwopTc36 ym22HX54r0D9fokXUKcVIeHC6ueQqQffHE49S+kcyAukHMGFB2y+QRi87GgPR+cpas4oWuqVfZb K5rk+H3IunrZzPFzed1R/0JMyBOG39KcvgwuFYyedLO2BOAEGq0hLuLGXaTEc/2bwgbfUWwxO6y oam5r275j0Dit/lxpne6nDSiRJmitcjaPmRVe6icBfGlNlRDHUhAjVnpa X-Received: by 2002:a05:6a00:928a:b0:81e:4476:f67c with SMTP id d2e1a72fcca58-82a196d976emr1922410b3a.3.1773385744782; Fri, 13 Mar 2026 00:09:04 -0700 (PDT) X-Received: by 2002:a05:6a00:928a:b0:81e:4476:f67c with SMTP id d2e1a72fcca58-82a196d976emr1922376b3a.3.1773385744317; Fri, 13 Mar 2026 00:09:04 -0700 (PDT) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82a07340518sm5148536b3a.34.2026.03.13.00.08.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 00:09:03 -0700 (PDT) From: Krishna Chaitanya Chundru Date: Fri, 13 Mar 2026 12:38:41 +0530 Subject: [PATCH v8 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: <20260313-wakeirq_support-v8-2-48a0a702518a@oss.qualcomm.com> References: <20260313-wakeirq_support-v8-0-48a0a702518a@oss.qualcomm.com> In-Reply-To: <20260313-wakeirq_support-v8-0-48a0a702518a@oss.qualcomm.com> To: "Rafael J. Wysocki" , Len Brown , Pavel Machek , Greg Kroah-Hartman , Danilo Krummrich , Bjorn Helgaas , Bartosz Golaszewski , Linus Walleij , Bartosz Golaszewski , Rob Herring , Saravana Kannan , 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, sherry.sun@nxp.com, driver-core@lists.linux.dev, devicetree@vger.kernel.org, Krishna Chaitanya Chundru , Manivannan Sadhasivam X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1773385725; l=1348; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=RJyJVigQaOLM0F29T8s/4IhVwmKqS4ZNXPoeDAhzrkA=; b=D8zrgRQtWArQCv0Zo1sugUcPcd6RMCLTFZxMCAirCh1759Ub3bZFRNHVBFJlIJBo9VhI1BjAH n+15tflY2ABAjeEzI0mPp3HJ+vk9sBQ+glRmAnvJ+fcrsp15205EQG5 X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Authority-Analysis: v=2.4 cv=KZrfcAYD c=1 sm=1 tr=0 ts=69b3b811 cx=c_pps a=m5Vt/hrsBiPMCU0y4gIsQw==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=Ocqi7cVID08-S0eeb-IA:9 a=QEXdDO2ut3YA:10 a=IoOABgeZipijB_acs4fv:22 X-Proofpoint-GUID: xwWZvLTr7dq_FGx3QtN4_C7GRG7NYXSu X-Proofpoint-ORIG-GUID: xwWZvLTr7dq_FGx3QtN4_C7GRG7NYXSu X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEzMDA1NiBTYWx0ZWRfX20DKg6zk45Pd KHjAVTVa1brk6YqBSJWyrw3UXc7BPM1DfimoI5jNIbbBJX8jhs2bsWsdZUFwO9Wft8PqSHR7L8D 78WHlgUxUCCx6LSgT8lgZzDuCkZrqcnkYgXMW7tX6pibxYZhIYbslYGwffC5awcN7b7+8PJJSBo Hqnfj5CNHlOzf8JA9O6gg6z/HtzMX/IB68oxz82jhKAAiYvpLxymdhA/A+JTJAl0hlpPlBPdx0F +3S/szbKE2HdFivnYS49C5kief6DSHfLN8MLGlG9X1Y/vcn9fxkZH5qRBch/wJIgmDF7qjIHg+n AGEaa0yFQx4YmsewqsOdqI/3bS3Aty6h8TFoykPCYrlfysnTabWsyVFIlQCVSo284+5xChIrNZG w+E49teqRD+1+gWWOcaGklb43Axos7kzVnGSP3TPu3tStEk/Gl/mOyfsAILND9cbc34BcfHOq+T d6WvoskPwnufWkxXbGQ== 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-03-13_01,2026-03-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 spamscore=0 lowpriorityscore=0 priorityscore=1501 bulkscore=0 malwarescore=0 impostorscore=0 adultscore=0 clxscore=1015 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603130056 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. Suggested-by: Manivannan Sadhasivam Acked-by: Manivannan Sadhasivam Reviewed-by: Linus Walleij Signed-off-by: Krishna Chaitanya Chundru Acked-by: Bartosz Golaszewski --- 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 Tue Apr 7 13:09: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 6E4DD36C9D5 for ; Fri, 13 Mar 2026 07:09:12 +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=1773385755; cv=none; b=s7hRNNu8L53aV3zZ8gfrNf8GNRQmrh2l01CstgoQiJtf0OnufQhbi6YGFWP+YEe8aHoXtHpV+1AxL7j+cKG2PvIToqrpjRdteEuX0MMC69eL7O1SXnMKWOQWAK9Am4xMUyS2HaIRKFGBfKpFEI3lF2j/2S7aPdDnu+W6PabI1hY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773385755; c=relaxed/simple; bh=dRR0utfxiVW1TMW7nZdLzpAZJ8WGa5nY3AdMtZ8XzxQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Mou2RUj8oAvzY2nzQa3IXdDxCn1IGyBTYWEwHQu96k2JsI6OPUYR23/WRs6tHoS5YxLIlOg9OTXlYVjs3c7xgZhC3b7dcn6O5rd6ZqAP9rW/3ezuEXSeQFkxpSApGmZrG2iadVtBU/okMP3cES4ELu8BbA/MRPkHprvbVP/fK+E= 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=HWG0GFy+; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Z5VI4BcQ; 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="HWG0GFy+"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Z5VI4BcQ" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62D5tgjo052375 for ; Fri, 13 Mar 2026 07:09:12 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= lQwM/wT8NrUVJJ28qh2UUCUaImA9dv9ckAeGdiv9hNI=; b=HWG0GFy+nIllQodp sgv//T9ux3X4dUhX5R8aQ3C/6SP6nS4YL66BQOJr2wY+YPZ3cwcVmdKtGe4AjtNT 7VnvOzGl356XEeyHEsqZHz+RA4FTZk1TmOKfCO6i40xwliLFwbqbEyF0f95Rzn/H iiwtGSAAmUu7n7eU1j+EnJKPC5NKRw0ASVoyo7LwNG35gZ7Zajg1OrJJhSGtBe9X Hhz9Kg+IzOmmWdufPZ2r9ETVFqsuUBsLC48dNqJ4jr9oeLUNcJ/gn+Zz63GZ7a0Y wuFvZVfXfzs/w/QcTseiGu/ckZ1XHAwCsliryFZbTA5RyvrjAjOvGh4z+/TWT5aG L5HRKA== 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 4cuh4w4yfc-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 13 Mar 2026 07:09:11 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-c629a3276e9so7977285a12.2 for ; Fri, 13 Mar 2026 00:09:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773385751; x=1773990551; 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=lQwM/wT8NrUVJJ28qh2UUCUaImA9dv9ckAeGdiv9hNI=; b=Z5VI4BcQXVcXui61sM1GpzHXVbY4F1O8fOLgZX4Zb9ntLPEFo+CjqwjlibUuTsfz4o BsRwA/Vw5RTGRnWWfbrfjp383bXZcW6jnHWOsdrIhNf2j/7fe5xs0scCgNdIT62Jdmwg jSGWkPjmqEUmMrCtTpaWYMf80BAqbQaLlRVDM0zpd+ZBDYW2uFf6nQ+wR9BdDR30BtcQ tJHLSAzN7yGD6tib3/5tvZAG9SgGpLB8vqwoU/m5llHUyASqk9BLGdL13HBpuhYy+205 cAJEmyY0dv9wqedfZ1UE5nAZJ9TxfQCbG+0VRAWGRl6i+F7ReNPzVhmu5Y8bYDImy0lN dK3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773385751; x=1773990551; 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=lQwM/wT8NrUVJJ28qh2UUCUaImA9dv9ckAeGdiv9hNI=; b=K32JgYj6M8ofg/VWiIIrvD/n7nmINPmU/aHi6Lyi9IVnNzArn0pVT7kwa26KOu2Yjx 6nQHcLAy1PPEAQj/3cvlpGQlsWs0hXVAH8D2pNXjNYrl2sjN0DeXDhrHuicvdOJmV0jW ZSTTosE3YjP9UbHNgR6xJw3oD2omBw1KShbikRJYCbzVOw4Mn8QZ4z+Sx2cC5mK7QYAB kYGwbupXARiu/iFK7Wq5MrAif4YlogwJ6VEcK2RaPygP2lvzoI2LLcY6sSNgki42X2Ms LhQZ+HLdnQW4XmiGDS+CFcU53FI2ahcktDA11HrC6Lk3fIhoamJHi8PouHtC4XYxJv/v wAYw== X-Forwarded-Encrypted: i=1; AJvYcCUgs33VIIBiiU0xUb14lR8hHAuZtnGZwLWc+ndFSTG/DfSwLZDuAAn5d6+i3ZlGjK7E+l8sx2+AdHmfOrM=@vger.kernel.org X-Gm-Message-State: AOJu0YxwYHifBN4ilxscxKZulEg19mPPCU07ZPFQjps20diGQtof9yNZ D4RypoH3fr3OAhcbn6lIMIjjeSaLXn8Z+ng+RSdCfnWzLD7Vkv8erB7vSJ+wm8CW/FjgcjW5h8s FZULjbEROKFag/pYZp2NuKJeKwnWCj+0UpgI9gF8OArkTX6BtlIaFmZetyq65YoZ4a6g= X-Gm-Gg: ATEYQzyjGjrDB1udEtdwYMiMEfy7xAa28sysdmWIClqNLFmfx9CcRxD0e+59jKsLYfu s+PzPcOVTOCbax3v/YKwqoti0m4BVkAlgYkzD7GM/IfXdf6VmA9UGOD/mkWQgiRgQ5GQFEtmpEV e9xZtdH3uh8kkxsg41OOtbE/CVxR94nNW900Q4oecRl1gQYw25NbHeTHNwJ5AHY5+GvpTq/PIpK Vr/ZCtCDvgEz9U7kYyn2iFDYflBZejdNYMzQ6NPy8cX4C1mypf+dvSc5Qnw2xW+VhSUJFbO/n3/ i6jrs9zgY1lVpYjjC+eCiugo81o1qJ7rtMGgHd9pQr45MogpsEWbRvwWiN/hfcv9Z7PCIjg2fd4 8b4u6U6hU2zmXKTAwnwIai3KTojOKB4hIscZQNuFuSLFMFtzl8sgkqsOv X-Received: by 2002:a05:6a00:4009:b0:82a:1428:da3c with SMTP id d2e1a72fcca58-82a198d717cmr1894922b3a.35.1773385750938; Fri, 13 Mar 2026 00:09:10 -0700 (PDT) X-Received: by 2002:a05:6a00:4009:b0:82a:1428:da3c with SMTP id d2e1a72fcca58-82a198d717cmr1894882b3a.35.1773385750379; Fri, 13 Mar 2026 00:09:10 -0700 (PDT) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82a07340518sm5148536b3a.34.2026.03.13.00.09.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 00:09:10 -0700 (PDT) From: Krishna Chaitanya Chundru Date: Fri, 13 Mar 2026 12:38:42 +0530 Subject: [PATCH v8 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: <20260313-wakeirq_support-v8-3-48a0a702518a@oss.qualcomm.com> References: <20260313-wakeirq_support-v8-0-48a0a702518a@oss.qualcomm.com> In-Reply-To: <20260313-wakeirq_support-v8-0-48a0a702518a@oss.qualcomm.com> To: "Rafael J. Wysocki" , Len Brown , Pavel Machek , Greg Kroah-Hartman , Danilo Krummrich , Bjorn Helgaas , Bartosz Golaszewski , Linus Walleij , Bartosz Golaszewski , Rob Herring , Saravana Kannan , 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, sherry.sun@nxp.com, driver-core@lists.linux.dev, devicetree@vger.kernel.org, Krishna Chaitanya Chundru X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1773385725; l=9592; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=dRR0utfxiVW1TMW7nZdLzpAZJ8WGa5nY3AdMtZ8XzxQ=; b=fLmhx0oZdoItLLNgEENY4IhUcvTmCA9X6MCXg7tPqlrQU/gJJ/fAAY5UgkWtvPpRYUe4UDDuu Rjg5CwFx6UdD8AojHu/6HJHeM70tcdQF6Fg21/Wp8jZ5jyA6odv0Ox8 X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Proofpoint-GUID: r60vjQ9Y05rJMvijHV0mxU4jJW0UtQLH X-Authority-Analysis: v=2.4 cv=Cpays34D c=1 sm=1 tr=0 ts=69b3b817 cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=NEAV23lmAAAA:8 a=KKAkSRfTAAAA:8 a=XVdArZcsv8hm62BSzCUA:9 a=QEXdDO2ut3YA:10 a=_Vgx9l1VpLgwpw_dHYaR:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: r60vjQ9Y05rJMvijHV0mxU4jJW0UtQLH X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEzMDA1NiBTYWx0ZWRfX1Xx6nJugZDTT 1GSwsUnprFdLo8YPrcK3lS4SLjsjig/1HXHM0M9SFXledzA7hRKJG7mhtHjVTVV6yOYOR+w3+3x 6eDxLVrG4t6jKH8tuFcL4/45tOoObJtp4ktBoHQ+fYFiQovYsdtzqgybK1lvzpn5vlwG44Oxrtl 7U8pZl6OCRxEUqAnSZMs5eN3OQDuWA1jEZw2oFJydtaYe4+QOyPeO2DLWw+JA7mJpQOKqLm4bOp x2UwGq4asx5+ITBx9iQkQLUkpUoWk4GcixN0G/btAjvrx8itZ10da8J6h59QO3GoQ4Ro9RMCIK8 XyfaX6KG8gS3HATq35tuFd336FH6U6eGHd8239pshvMU6MCx6oKjpyghHVnW0Nu/jy/zwQtmxjL qbgCISMgGcHRpc1sdRKrVtdCPt9YjWuYQzQ7e2fnJFAzMNHdJpG5FNvUb4X3+l9nDFKVqCZ9hd4 VBGSqoDZIUV1zDgLdFQ== 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-03-13_01,2026-03-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 phishscore=0 adultscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0 suspectscore=0 spamscore=0 impostorscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603130056 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. dev_pm_set_dedicated_shared_wake_irq() associates a wakeup IRQ with a device and requests it, but the PM core keeps the IRQ disabled by default. The IRQ is enabled only when the device is permitted to wake the system, i.e. during system suspend and after runtime suspend, and only when device wakeup is enabled. When the wake IRQ fires, the wakeirq handler invokes pm_runtime_resume() to bring the device back to an active power state, such as transitioning from D3cold to D0. Once the device is active and the link is usable, the endpoint may generate a PME, which is then handled by the PCI core through PME polling or the PCIe PME service driver to complete the wakeup of the endpoint. 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 | 74 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ drivers/pci/pci.c | 10 +++++++ drivers/pci/pci.h | 2 ++ drivers/pci/probe.c | 2 ++ drivers/pci/remove.c | 1 + include/linux/of_pci.h | 4 +++ include/linux/pci.h | 2 ++ 7 files changed, 95 insertions(+) diff --git a/drivers/pci/of.c b/drivers/pci/of.c index 9f8eb5df279ed28db7a3b2fd29c65da9975c2efa..b7199d3598b31b62245716c178a= 5a73565efc89e 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,78 @@ 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); + + /* + * dev_pm_set_dedicated_shared_wake_irq() associates a wakeup IRQ with the + * device and requests it, but the PM core keeps it disabled by default. + * The IRQ is enabled only when the device is allowed to wake the system + * (during system suspend and after runtime suspend), and only if device + * wakeup is enabled. + * + * When the wake IRQ fires, the wakeirq handler invokes pm_runtime_resume= () + * to bring the device back to an active power state (e.g. from D3cold to= D0). + * Once the device is active and the link is usable, the endpoint may sig= nal + * a PME, which is then handled by the PCI core (either via PME polling o= r the + * PCIe PME service driver) to wakeup particular endpoint. + */ + 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; + + /* + * The devices in a hierarchy expose wakeup capability through the 'wake-= gpios' + * property defined either in the device node or in the Slot node. So fir= st check + * for the property in device node and if not available, check in the Slo= t node. + */ + gpio =3D fwnode_gpiod_get(of_fwnode_handle(dn), "wake", + GPIOD_IN | GPIOD_FLAGS_BIT_NONEXCLUSIVE, NULL); + if (IS_ERR(gpio)) { + 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) +{ + struct device_node *dn =3D pci_device_to_OF_node(dev); + + if (!dn) + return; + + 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 8479c2e1f74f1044416281aba11bf071ea89488a..3d858f36ab48a6daec645574ca9= 027d9d6f071de 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -1123,6 +1124,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..65ca9551e558d2e3331fab0a968= 620d6b2a2522a 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) { diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index bccc7a4bdd794384b7877d453c7989941471c999..372b0d2f4531ea53c0570608306= a547101d59e7b 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/of_pci.h b/include/linux/of_pci.h index 29658c0ee71ff10122760214d04ee2bab01709fd..0efd6e9cb4d3d3beaafb42ea411= 303139f1150d5 100644 --- a/include/linux/of_pci.h +++ b/include/linux/of_pci.h @@ -30,12 +30,16 @@ static inline void of_pci_check_probe_only(void) { } =20 #if IS_ENABLED(CONFIG_OF_IRQ) int of_irq_parse_and_map_pci(const struct pci_dev *dev, u8 slot, u8 pin); +void pci_configure_of_wake_gpio(struct pci_dev *dev); +void pci_remove_of_wake_gpio(struct pci_dev *dev); #else static inline int of_irq_parse_and_map_pci(const struct pci_dev *dev, u8 slot, u8 pin) { return 0; } +static inline void pci_configure_of_wake_gpio(struct pci_dev *dev) { } +static inline void pci_remove_of_wake_gpio(struct pci_dev *dev) { } #endif =20 #endif 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