{"id":2223168,"url":"http://patchwork.ozlabs.org/api/patches/2223168/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/patch/20260414-l1ss-fix-v1-1-adbb4555b5ab@oss.qualcomm.com/","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/projects/28/?format=json","name":"Linux PCI development","link_name":"linux-pci","list_id":"linux-pci.vger.kernel.org","list_email":"linux-pci@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260414-l1ss-fix-v1-1-adbb4555b5ab@oss.qualcomm.com>","list_archive_url":null,"date":"2026-04-14T15:59:39","name":"[1/4] PCI: Introduce an API to check if RC/platform can retain device context during suspend","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"8cb41f3e3389662539fc23822ea6d7a38af0276e","submitter":{"id":91277,"url":"http://patchwork.ozlabs.org/api/people/91277/?format=json","name":"Manivannan Sadhasivam via B4 Relay","email":"devnull+manivannan.sadhasivam.oss.qualcomm.com@kernel.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-pci/patch/20260414-l1ss-fix-v1-1-adbb4555b5ab@oss.qualcomm.com/mbox/","series":[{"id":499863,"url":"http://patchwork.ozlabs.org/api/series/499863/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/list/?series=499863","date":"2026-04-14T15:59:38","name":"PCI: Introduce pci_dev_suspend_retention_supported() API","version":1,"mbox":"http://patchwork.ozlabs.org/series/499863/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2223168/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2223168/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <linux-pci+bounces-52510-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=uXKky96s;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-pci+bounces-52510-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"uXKky96s\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"],"Received":["from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fw8F74w3Gz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 02:02:51 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id BDDAF3080C26\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 16:00:15 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id B743B3ED13A;\n\tTue, 14 Apr 2026 16:00:12 +0000 (UTC)","from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 8BFB83ED12A;\n\tTue, 14 Apr 2026 16:00:12 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPS id 22753C2BCB3;\n\tTue, 14 Apr 2026 16:00:12 +0000 (UTC)","from aws-us-west-2-korg-lkml-1.web.codeaurora.org\n (localhost.localdomain [127.0.0.1])\n\tby smtp.lore.kernel.org (Postfix) with ESMTP id 15844F9D0DA;\n\tTue, 14 Apr 2026 16:00:12 +0000 (UTC)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776182412; cv=none;\n b=g+at8VWfbcBOxS6aN+QjcUoBeFTJJC4d+6aZySzD4T82hXiEskVBZ5jZt/Z1Orxco8+9A0gNmHN2a5KTsLVMHXxKa2h0+Abe6oE2wPoobMEkl9/0QP3eaCOPz28wzMO1is3lW7lTHYnEpwqgYE9o8LpIuIQTRa7peLkx1aTqA28=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776182412; c=relaxed/simple;\n\tbh=iAKBGCABkb4xVXmTd/HHowC129P8QPZmpSjEkWgabaM=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:\n\t In-Reply-To:To:Cc;\n b=f3iWN8RUNWL6Ayuz7nTo7/ymkY94Vrbg7xpUDVgR/LzKwJzObdu3oKONb/ibBDgtUML1bx77wL36fzN7ZV/3uaUqiF8moEQrUODczzIjZxiqQvMunc+Cu8BAItD/00a2Z0Z0kSQPpOIoqbkehzO0c0+2B+fsFgK9Yt4O1QwmsGw=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=uXKky96s; arc=none smtp.client-ip=10.30.226.201","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1776182412;\n\tbh=iAKBGCABkb4xVXmTd/HHowC129P8QPZmpSjEkWgabaM=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;\n\tb=uXKky96s4f2fZd0xkfLHCZWRm0T+DxsrWxzfjtB7AOPiXXzA5Kyk78F1z4PckZRUx\n\t 6dBpazkd8sU1PsIiC8RbU14IDR8+aMY0fwXYekDXJFd3SIrBwU7BZsTHWqMINkqxrD\n\t SmU8eOtOQ3kdt0NBCtRM30KnMMbLWl4tmznpDodwjbB1dJPfBswvSPihMfiqcb7eTU\n\t 12CVznGksApMcdpekQzScV/6ApRjWtyqmNOPzPuDvm5oTBU39oQdYbFzDrGbtGV2W1\n\t LElrarzAYZ1A3NqJWHSgqlXuej06LBcjoLTQWJGSCWyIcg4Noqs2MObe4ueVtg4o7x\n\t 3ZFjpzUkQ+r1g==","From":"Manivannan Sadhasivam via B4 Relay\n <devnull+manivannan.sadhasivam.oss.qualcomm.com@kernel.org>","Date":"Tue, 14 Apr 2026 21:29:39 +0530","Subject":"[PATCH 1/4] PCI: Introduce an API to check if RC/platform can\n retain device context during suspend","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"7bit","Message-Id":"<20260414-l1ss-fix-v1-1-adbb4555b5ab@oss.qualcomm.com>","References":"<20260414-l1ss-fix-v1-0-adbb4555b5ab@oss.qualcomm.com>","In-Reply-To":"<20260414-l1ss-fix-v1-0-adbb4555b5ab@oss.qualcomm.com>","To":"Bjorn Helgaas <bhelgaas@google.com>,\n  Manivannan Sadhasivam <mani@kernel.org>,\n  Lorenzo Pieralisi <lpieralisi@kernel.org>, =?utf-8?q?Krzysztof_Wilczy?=\n\t=?utf-8?q?=C5=84ski?= <kwilczynski@kernel.org>,\n  Rob Herring <robh@kernel.org>, Keith Busch <kbusch@kernel.org>,\n  Jens Axboe <axboe@kernel.dk>, Christoph Hellwig <hch@lst.de>,\n  Sagi Grimberg <sagi@grimberg.me>","Cc":"linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,\n linux-arm-msm@vger.kernel.org, linux-nvme@lists.infradead.org,\n Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>","X-Mailer":"b4 0.15.0","X-Developer-Signature":"v=1; a=openpgp-sha256; l=3214;\n i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id;\n bh=dSaPO8AlhFDgfohNEVxN4pE727IFbvTr7L0udrmkbZ4=;\n b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp3mSJQGw7NOXWNlGDoeSfbsV1IadRDRAOlYwji\n DQFQoP4FhCJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCad5kiQAKCRBVnxHm/pHO\n 9QAXCACJnEGJZagKmL2MdEaxeZuzF4dIIzTKziQQG5AIPw3Z4UVbWgIj3Zb7SbPKzv/aCmagape\n iwuDEL0M7cXyE0HwQivolMkYcD4r1gd15o9rmUTnO/V6Bsi5vq0VKiMVZV+/k8ZjPJaw52gAeTA\n m2lzJvk20/tKA0OAf+V3483lrzls8SnxpHReWcBIljHufXnZo6pnTBbcu2J/4rbWgeuw7qYCXP3\n mfW5qvK0FFmPAt+UUVlx6UPvrLXcXtvG71WtlydGXCW2vnYRqwj0kD6exEgFM1QEQUueP4GkgFB\n Vi8P2tAYTG55YT2bsXz/Z1R46f3iEZKY/M/0gPExjMHiJ5x1","X-Developer-Key":"i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp;\n fpr=C668AEC3C3188E4C611465E7488550E901166008","X-Endpoint-Received":"by B4 Relay for\n manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461","X-Original-From":"Manivannan Sadhasivam\n <manivannan.sadhasivam@oss.qualcomm.com>","Reply-To":"manivannan.sadhasivam@oss.qualcomm.com"},"content":"From: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>\n\nCurrently, the PCI endpoint drivers like NVMe checks whether the device\ncontext will be retained or not during system suspend, with the help of\npm_suspend_via_firmware() API.\n\nBut it is possible that the device context might be lost due to some\nplatform limitation as well. Having those checks in the endpoint drivers\nwill not scale and will cause a lot of code duplication.\n\nSo introduce an API that acts as a sole point of truth that the endpoint\ndrivers can rely on to check whether they can expect the device context\nto be retained or not.\n\nIf the API returns 'false', then the client drivers need to prepare for\ncontext loss by performing actions such as resetting the device, saving\nthe context, shutting it down etc... If it returns 'true', then the drivers\ndo not need to perform any special action and can leave the device in\nactive state.\n\nRight now, this API only incorporates the pm_suspend_via_firmware() check.\nBut will be extended in the future commits.\n\nSigned-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>\n---\n drivers/pci/pci.c   | 23 +++++++++++++++++++++++\n include/linux/pci.h |  7 +++++++\n 2 files changed, 30 insertions(+)","diff":"diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c\nindex 8479c2e1f74f..211616467a77 100644\n--- a/drivers/pci/pci.c\n+++ b/drivers/pci/pci.c\n@@ -33,6 +33,7 @@\n #include <asm/dma.h>\n #include <linux/aer.h>\n #include <linux/bitfield.h>\n+#include <linux/suspend.h>\n #include \"pci.h\"\n \n DEFINE_MUTEX(pci_slot_mutex);\n@@ -2900,6 +2901,28 @@ void pci_config_pm_runtime_put(struct pci_dev *pdev)\n \t\tpm_runtime_put_sync(parent);\n }\n \n+/**\n+ * pci_dev_suspend_retention_supported - Check if the platform can retain the device\n+ *\t\t\t\t\t context during system suspend\n+ * @pdev: PCI device to check\n+ *\n+ * Returns true if the platform can guarantee to retain the device context,\n+ * false otherwise.\n+ */\n+bool pci_dev_suspend_retention_supported(struct pci_dev *pdev)\n+{\n+\t/*\n+\t * If the platform firmware (like ACPI) is involved at the end of system\n+\t * suspend, device context may not be retained.\n+\t */\n+\tif (pm_suspend_via_firmware())\n+\t\treturn false;\n+\n+\t/* Assume that the context is retained by default */\n+\treturn true;\n+}\n+EXPORT_SYMBOL_GPL(pci_dev_suspend_retention_supported);\n+\n static const struct dmi_system_id bridge_d3_blacklist[] = {\n #ifdef CONFIG_X86\n \t{\ndiff --git a/include/linux/pci.h b/include/linux/pci.h\nindex 1c270f1d5123..d9bc7ad4eaa4 100644\n--- a/include/linux/pci.h\n+++ b/include/linux/pci.h\n@@ -2080,6 +2080,8 @@ pci_release_mem_regions(struct pci_dev *pdev)\n \t\t\t    pci_select_bars(pdev, IORESOURCE_MEM));\n }\n \n+bool pci_dev_suspend_retention_supported(struct pci_dev *pdev);\n+\n #else /* CONFIG_PCI is not enabled */\n \n static inline void pci_set_flags(int flags) { }\n@@ -2239,6 +2241,11 @@ pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,\n static inline void pci_free_irq_vectors(struct pci_dev *dev)\n {\n }\n+\n+static inline bool pci_dev_suspend_retention_supported(struct pci_dev *pdev)\n+{\n+\treturn true;\n+}\n #endif /* CONFIG_PCI */\n \n /* Include architecture-dependent settings and functions */\n","prefixes":["1/4"]}