Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp1288494ybg; Fri, 18 Oct 2019 15:16:43 -0700 (PDT) X-Google-Smtp-Source: APXvYqw2/PqjJL4OO2xIcN1Glq2Z8SaPjVban2QGpdUqsB/7ISn5Q0cVpRyUqZX1tB82BQ54Xjyf X-Received: by 2002:aa7:c24d:: with SMTP id y13mr12321967edo.186.1571437003425; Fri, 18 Oct 2019 15:16:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571437003; cv=none; d=google.com; s=arc-20160816; b=N606mEWY+SrBdCPukzmr5wQtw9UXLDWFrUvtLqCfiQPbKu0mnTnvipP2vDz9N2Z7RD ghMprLdo82LFENy2wxzDhqE666mOXxdko1MsdQKQekVzgvvoxG0FcsxYtiMgImY4OweR HisV6XkRAZA+/XP3cTHrdPX6VrTDLxAAiOf52u5HHUmy/uUPa/DLpoeSAkOw0xly31LT yGaZygUmG4OmyRZM2kX7MwzVfDSYWiKRukH0Z4zqsVLt6OUnXgFDT+uL5Jjfro1wrBcU 15SQmTS9knf5e6M/a9Vf/VjjOq9+t8J1i1pw1jqhbm2idasyEc8TCniy5SDHs0lKKYWX FaxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=76iHHEqG+0CI32ACRZLZ+F0kTpO3F1ob+KjYzdlorVM=; b=KZ6Kwe7DyGv94nAIpZKWOQbhV74CHky8xrQhwAylszfLPHZ333UPBMr6NSyUqf5EXC CIIe08KtvoIn2jemy+zsoDntaTMGuVjP4PuJksWlDnDuixUkz4ECoDIzCSsaKpGlLMGj j3nQW/T1fdSC+iq2mVOxtvl68hQgqYIMiSGGw/XljP9PuAI1di3qsT72Y3HNgp6nVQyc DmJR+88LbKhL3NethmFRe1Kepmxm1VQK2g5Idr5rG70CPXbeUIpIfA3SbcXofiC/K69q U8Ed6IsgjOMdcqnzK55IiR2AHZCEUtKh0rz8HyP7M5ijLoS2jqaQuUM3olXdK3OGdjsb KVTA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=hdC93QzO; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d52si4820351ede.370.2019.10.18.15.16.20; Fri, 18 Oct 2019 15:16:43 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=hdC93QzO; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2394646AbfJQTdI (ORCPT + 99 others); Thu, 17 Oct 2019 15:33:08 -0400 Received: from mail-oi1-f196.google.com ([209.85.167.196]:40430 "EHLO mail-oi1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2394412AbfJQTdH (ORCPT ); Thu, 17 Oct 2019 15:33:07 -0400 Received: by mail-oi1-f196.google.com with SMTP id k9so3173622oib.7; Thu, 17 Oct 2019 12:33:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=76iHHEqG+0CI32ACRZLZ+F0kTpO3F1ob+KjYzdlorVM=; b=hdC93QzOcuW7+cnj2wrHbq4Pkd9VsZ5k9rpGhEiBOdM8j7lmLAuh1kRpCyUKAh2giU 3OXlEHGLN4S1sfeQEn5Gu3oZRoezXGMeDDDUtNaZ+mwzY9DCETk7Tjz3gjXau82joPCc YYrnTpq+KPPAGO/Ba3F7AeHoA5Dn6fYY5JVTsu42xj17d535IIVWMLylRiXOETRdjSAW Sr99dLDBNxmB0v8rlKJAUcfwnHx2ozllVkT9i2X7y0KTPKjz2J85APUiOo1uhwqx6hFr Op0aeBdZVA6vLYOd/VOq0ANpdhHG0ASR7MaGnxeBisO3lSeR2UUoRnn8HE4RyuKpuRak avpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=76iHHEqG+0CI32ACRZLZ+F0kTpO3F1ob+KjYzdlorVM=; b=b2RfHkEBVG9NBe8NITf28Ou0Dt+BwjuRClPF8GaH+v2TJQmlJJpj3AKyCjbFovl1Nt i9SlHJsIGFrU67DXFoi6CFhgldoJ1jivTh5VH4p2RVra+QEhh0BhauxTxozaLuAbS1GZ rmCLr3BswsANLXSXVtBae6flmN1DKpKyXXp8PbbMOE7U7GpWgp1SFhMGnrf1EX5py+TT GCqiXa4Qoc/1hZCL3LFYWsOuMsoRJAhtJ5MZ4rexE69xtqUrCIVmpFSm/QRHyZ1W6Pz3 pEg8sTaM0K5EMRpgvwIxnv57ZHbnznNNN7AdunlK/WvFN+V/CVUU46iMqYVwANopzwH+ 7q6Q== X-Gm-Message-State: APjAAAX/RsQORRZNlMbrwwkahHL9EKIg/UT2Z/NJrGHKF7jg1dlKr4NH 0J9rHLMTafE5xRm6PmZIRCA= X-Received: by 2002:aca:30ce:: with SMTP id w197mr4616144oiw.82.1571340786681; Thu, 17 Oct 2019 12:33:06 -0700 (PDT) Received: from localhost.localdomain ([143.166.81.254]) by smtp.gmail.com with ESMTPSA id z12sm823273oth.71.2019.10.17.12.33.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Oct 2019 12:33:06 -0700 (PDT) From: Stuart Hayes To: Bjorn Helgaas Cc: Austin Bolen , keith.busch@intel.com, Alexandru Gagniuc , "Rafael J . Wysocki" , Mika Westerberg , Andy Shevchenko , "Gustavo A . R . Silva" , Sinan Kaya , Oza Pawandeep , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, lukas@wunner.de, Stuart Hayes Subject: [PATCH v3 2/3] PCI: pciehp: Wait for PDS if in-band presence is disabled Date: Thu, 17 Oct 2019 15:32:55 -0400 Message-Id: <20191017193256.3636-3-stuart.w.hayes@gmail.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20191017193256.3636-1-stuart.w.hayes@gmail.com> References: <20191017193256.3636-1-stuart.w.hayes@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alexandru Gagniuc When inband presence is disabled, PDS may come up at any time, or not at all. PDS being low may indicate that the card is still mating, and we could expect contact bounce to bring down the link as well. It is reasonable to assume that most cards will mate in a hotplug slot in about a second. Thus, when we know PDS only reflects out-of-band presence, it's worthwhile to wait the extra second or so to make sure the card is properly mated before loading the driver, and to prevent the hotplug code from disabling a device if the presence detect change goes active after the device is enabled. Signed-off-by: Alexandru Gagniuc Signed-off-by: Stuart Hayes --- v2: replace while(true) loop with do...while v3 remove unused variable declaration (pds) modify text of warning message drivers/pci/hotplug/pciehp_hpc.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index dc109d521f30..02eb811a014f 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c @@ -242,6 +242,22 @@ static bool pci_bus_check_dev(struct pci_bus *bus, int devfn) return found; } +static void pcie_wait_for_presence(struct pci_dev *pdev) +{ + int timeout = 1250; + u16 slot_status; + + do { + pcie_capability_read_word(pdev, PCI_EXP_SLTSTA, &slot_status); + if (!!(slot_status & PCI_EXP_SLTSTA_PDS)) + return; + msleep(10); + timeout -= 10; + } while (timeout > 0); + + pci_info(pdev, "Timeout waiting for Presence Detect state to be set\n"); +} + int pciehp_check_link_status(struct controller *ctrl) { struct pci_dev *pdev = ctrl_dev(ctrl); @@ -251,6 +267,9 @@ int pciehp_check_link_status(struct controller *ctrl) if (!pcie_wait_for_link(pdev, true)) return -1; + if (ctrl->inband_presence_disabled) + pcie_wait_for_presence(pdev); + found = pci_bus_check_dev(ctrl->pcie->port->subordinate, PCI_DEVFN(0, 0)); -- 2.18.1