{"id":2175534,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2175534/?format=json","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/1.0/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},"msgid":"<20251218-pci-dwc-suspend-rework-v2-2-5a7778c6094a@oss.qualcomm.com>","date":"2025-12-18T12:04:53","name":"[v2,2/2] PCI: dwc: Do not return failure if link is in Detect.Quiet/Active states","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"0ecdc13270e98985a5eeeeaf275b8bf21b3f07c1","submitter":{"id":91277,"url":"http://patchwork.ozlabs.org/api/1.0/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/20251218-pci-dwc-suspend-rework-v2-2-5a7778c6094a@oss.qualcomm.com/mbox/","series":[{"id":485835,"url":"http://patchwork.ozlabs.org/api/1.0/series/485835/?format=json","date":"2025-12-18T12:04:51","name":"PCI: dwc: Suspend/resume rework","version":2,"mbox":"http://patchwork.ozlabs.org/series/485835/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2175534/checks/","tags":{},"headers":{"Return-Path":"\n <linux-pci+bounces-43288-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=pSLKg+6N;\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-43288-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=\"pSLKg+6N\"","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 4dX8WP0HC3z1xty\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 18 Dec 2025 23:05:37 +1100 (AEDT)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 08FD8302B755\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 18 Dec 2025 12:04:57 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 6578832E154;\n\tThu, 18 Dec 2025 12:04:55 +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 3D82432E125;\n\tThu, 18 Dec 2025 12:04:54 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPS id CB9D0C19423;\n\tThu, 18 Dec 2025 12:04:54 +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 BD998D6ACEE;\n\tThu, 18 Dec 2025 12:04:54 +0000 (UTC)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1766059495; cv=none;\n b=UjiABsqdW3tMye/+mVwzdYFEtBp2s7PU4KjsSsrrBcwA+cZDDXV6lN2vljLysagWfCvEyYHdypSvuYDbmNETABniBQbD8zzESh1EFYl0N4cmMaW0z27NmgbrHbQUZcgkBxvYvCznORX1TNF5wzsYS8C7wrsDQen5H4vFEY4eUaA=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1766059495; c=relaxed/simple;\n\tbh=C0J8oGxG5D8j+AS06y9xcZtwDLJm3/yoCsvNjt7rWdY=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:\n\t In-Reply-To:To:Cc;\n b=rlZnvtqFlz86xbQ3/zJ8aOSVdiArX3Su2LbMy661Z/F85mPCWut0BSnUwPJ9MQ4z0WxawGighv/anEPSOvOugtXp6/0mHFAKEkXR9/JHEth/30zLrN5vinW/y4OhoCWgcA832HHzJ/w+e0dSn9yCPwJyUe8xIjtjyH0wiOx+sP0=","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=pSLKg+6N; 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=1766059494;\n\tbh=C0J8oGxG5D8j+AS06y9xcZtwDLJm3/yoCsvNjt7rWdY=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;\n\tb=pSLKg+6NgJ6teqzRjt6EN1E6Ub7BM5pwH8cV9oCDqsXuhQseiLFqxp47RXl8ZhL35\n\t yvSnCq/x2nAhplQ3KFoAdf8ZlhFaam4yW/XLSyUbfpHNRD11heU/AxH47ehJFcMSAH\n\t /MdEBM0kwHjcs7JTdjNYaRhVU1sjKqPdsV6MgdXZ44xTMDqlH1dCS4pU+yjc+6Syhi\n\t P5O5eZmbQs/beXKxXtXik2XLzxqx62+kBRcwkRu7pxUx5N/O4nz+zpa1ju/4pbXp3+\n\t HJaggtXBtcfJbwggFAx8skXHlRsGOhkew1uyHnMoKFMA9TL1eu4ZPirFRlpR6+zJcI\n\t DzNk6vYVA0xTQ==","From":"Manivannan Sadhasivam via B4 Relay\n <devnull+manivannan.sadhasivam.oss.qualcomm.com@kernel.org>","Date":"Thu, 18 Dec 2025 17:34:53 +0530","Subject":"[PATCH v2 2/2] PCI: dwc: Do not return failure if link is in\n Detect.Quiet/Active states","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":"\n <20251218-pci-dwc-suspend-rework-v2-2-5a7778c6094a@oss.qualcomm.com>","References":"\n <20251218-pci-dwc-suspend-rework-v2-0-5a7778c6094a@oss.qualcomm.com>","In-Reply-To":"\n <20251218-pci-dwc-suspend-rework-v2-0-5a7778c6094a@oss.qualcomm.com>","To":"Jingoo Han <jingoohan1@gmail.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>, Bjorn Helgaas <bhelgaas@google.com>","Cc":"linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,\n vincent.guittot@linaro.org, zhangsenchuan@eswincomputing.com,\n Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>","X-Mailer":"b4 0.14.3","X-Developer-Signature":"v=1; a=openpgp-sha256; l=3023;\n i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id;\n bh=D2MBlxbTAfw057cQLiitH+T4lD/EKzE736CiStKl0vQ=;\n b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpQ+3lWTFs8FC7hQKkTIRIHEtEPIQGu0zYHqUgo\n wDtrFZH+7aJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaUPt5QAKCRBVnxHm/pHO\n 9QdoB/9jpC+5JFgFx4xfgXRsSqBywS7cW4VhUKTHW7wjwnU/3eM9Dd9+L4redzxZZn1DwVxxPVd\n Pyb7HzxWOUrUJW1Kz9syDYn5IvB1PxsPe+kXHotiEjuGVVkmBFC1XlKqcfyKMC2K/bbVwVYwQGi\n I26J8rxxub/pgVM0Sjo3isN10WiREH1hLFYoej7JdRUm0yoS2/aeS1WeiA4v0hWiArhHzkFcIDz\n mji7x/2E2/9vpmOSyZnoAx9Gx/XFV8am5NFLiIarVnT/lUneNMUW0a/G9bmZnzR96YkNstbaRF2\n bn0fd9ua5oqePX8jqdc/979LH2qbOc+IqZAr8EZHYQ3yzs6Y","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\ndw_pcie_wait_for_link() API waits for the link to be up and returns failure\nif the link is not up within the 1 second interval. But if there was no\ndevice connected to the bus, then the link up failure would be expected.\nIn that case, the callers might want to skip the failure in a hope that the\nlink will be up later when a device gets connected.\n\nOne of the callers, dw_pcie_host_init() is currently skipping the failure\nirrespective of the link state, in an assumption that the link may come up\nlater. But this assumption is wrong, since LTSSM states other than\nDetect.Quiet and Detect.Active during link training phase are considered to\nbe fatal and the link needs to be retrained.\n\nSo to avoid callers making wrong assumptions, skip returning failure from\ndw_pcie_wait_for_link() only if the link is in Detect.Quiet or\nDetect.Active states after timeout and also check the return value of the\nAPI in dw_pcie_host_init().\n\nSigned-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>\n---\n drivers/pci/controller/dwc/pcie-designware-host.c |  8 +++++---\n drivers/pci/controller/dwc/pcie-designware.c      | 12 +++++++++++-\n 2 files changed, 16 insertions(+), 4 deletions(-)","diff":"diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c\nindex 43d091128ef7..ef6d9ae6eddb 100644\n--- a/drivers/pci/controller/dwc/pcie-designware-host.c\n+++ b/drivers/pci/controller/dwc/pcie-designware-host.c\n@@ -670,9 +670,11 @@ int dw_pcie_host_init(struct dw_pcie_rp *pp)\n \t * If there is no Link Up IRQ, we should not bypass the delay\n \t * because that would require users to manually rescan for devices.\n \t */\n-\tif (!pp->use_linkup_irq)\n-\t\t/* Ignore errors, the link may come up later */\n-\t\tdw_pcie_wait_for_link(pci);\n+\tif (!pp->use_linkup_irq) {\n+\t\tret = dw_pcie_wait_for_link(pci);\n+\t\tif (ret)\n+\t\t\tgoto err_stop_link;\n+\t}\n \n \tret = pci_host_probe(bridge);\n \tif (ret)\ndiff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/controller/dwc/pcie-designware.c\nindex 75fc8b767fcc..b58baf26ce58 100644\n--- a/drivers/pci/controller/dwc/pcie-designware.c\n+++ b/drivers/pci/controller/dwc/pcie-designware.c\n@@ -641,7 +641,7 @@ void dw_pcie_disable_atu(struct dw_pcie *pci, u32 dir, int index)\n \n int dw_pcie_wait_for_link(struct dw_pcie *pci)\n {\n-\tu32 offset, val;\n+\tu32 offset, val, ltssm;\n \tint retries;\n \n \t/* Check if the link is up or not */\n@@ -653,6 +653,16 @@ int dw_pcie_wait_for_link(struct dw_pcie *pci)\n \t}\n \n \tif (retries >= PCIE_LINK_WAIT_MAX_RETRIES) {\n+\t\t/*\n+\t\t * If the link is in Detect.Quiet or Detect.Active state, it\n+\t\t * indicates that no device is detected. So return success to\n+\t\t * allow the device to show up later.\n+\t\t */\n+\t\tltssm = dw_pcie_get_ltssm(pci);\n+\t\tif (ltssm == DW_PCIE_LTSSM_DETECT_QUIET ||\n+\t\t    ltssm == DW_PCIE_LTSSM_DETECT_ACT)\n+\t\t\treturn 0;\n+\n \t\tdev_info(pci->dev, \"Phy link never came up\\n\");\n \t\treturn -ETIMEDOUT;\n \t}\n","prefixes":["v2","2/2"]}