From patchwork Tue Sep 22 23:49:17 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Daney X-Patchwork-Id: 521484 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 7B039140770 for ; Wed, 23 Sep 2015 09:50:12 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=PdYzsVoQ; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759889AbbIVXtv (ORCPT ); Tue, 22 Sep 2015 19:49:51 -0400 Received: from mail-ig0-f170.google.com ([209.85.213.170]:36657 "EHLO mail-ig0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759823AbbIVXt3 (ORCPT ); Tue, 22 Sep 2015 19:49:29 -0400 Received: by igcrk20 with SMTP id rk20so90966900igc.1; Tue, 22 Sep 2015 16:49:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=AqNdhFGeanzYhqXdN7uezeLiAdM5FTEnjEXR5H1Su0E=; b=PdYzsVoQisk49ZIPveMUMpjZTacmRXKdJZndlKrwZUjz9v7MwMom75JjMgePScWKiR 9O5/rBeUODbNmCo6+wqvIGq8Q0Jfn2AyPX0lbUzmDOhCLwDdVK0oEGu2dpAvrSnvKhPM TYBa8OlrQOWY+jzfHKu49t5npP8wSTA5OBV4do1VFtcv1O7GK71hUF4oQKtmmGtuyMpy 3YleskHkaMXWo/E1Kh7tdPf+mZqmu3rPms6cW2jXHPhgvwOnwHJTe3xXbMT177muhzvS ruy6Z4OotYs7kDgQ4TDXjzncIY8aXaEOnsmSlSOyK86YRbRJ9XHx+Kyk0+mtCm6owihS W2yQ== X-Received: by 10.50.124.40 with SMTP id mf8mr20950548igb.60.1442965769005; Tue, 22 Sep 2015 16:49:29 -0700 (PDT) Received: from dl.caveonetworks.com (64.2.3.194.ptr.us.xo.net. [64.2.3.194]) by smtp.gmail.com with ESMTPSA id k2sm2139245igx.0.2015.09.22.16.49.24 (version=TLSv1 cipher=RC4-SHA bits=128/128); Tue, 22 Sep 2015 16:49:25 -0700 (PDT) Received: from dl.caveonetworks.com (localhost.localdomain [127.0.0.1]) by dl.caveonetworks.com (8.14.5/8.14.5) with ESMTP id t8MNnNxE012990; Tue, 22 Sep 2015 16:49:23 -0700 Received: (from ddaney@localhost) by dl.caveonetworks.com (8.14.5/8.14.5/Submit) id t8MNnNmS012989; Tue, 22 Sep 2015 16:49:23 -0700 From: David Daney To: linux-kernel@vger.kernel.org, Bjorn Helgaas , linux-pci@vger.kernel.org, Will Deacon , Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Marc Zyngier Cc: David Daney Subject: [PATCH v3 6/6] PCI: generic: Claim device resources if PCI_PROBE_ONLY Date: Tue, 22 Sep 2015 16:49:17 -0700 Message-Id: <1442965757-12925-7-git-send-email-ddaney.cavm@gmail.com> X-Mailer: git-send-email 1.7.11.7 In-Reply-To: <1442965757-12925-1-git-send-email-ddaney.cavm@gmail.com> References: <1442965757-12925-1-git-send-email-ddaney.cavm@gmail.com> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org From: David Daney In the case where the PCI_PROBE_ONLY flag is set, we need to claim the resources for all PCI devices added to the bus. Failure to claim SRIOV BAR resources prevents SRIOV devices from being being enabled. So, when the PCI_PROBE_ONLY flag is set, claim MEM and IO resources for all devices that were added to the bus. Signed-off-by: David Daney --- Added this patch in v3. drivers/pci/host/pci-host-generic.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/drivers/pci/host/pci-host-generic.c b/drivers/pci/host/pci-host-generic.c index e364232..b163fdc 100644 --- a/drivers/pci/host/pci-host-generic.c +++ b/drivers/pci/host/pci-host-generic.c @@ -209,6 +209,24 @@ static int gen_pci_parse_map_cfg_windows(struct gen_pci *pci) return 0; } +static int gen_pci_claim_resource_cb(struct pci_dev *dev, void *arg) +{ + int resno; + + for (resno = 0; resno < PCI_BRIDGE_RESOURCES; resno++) { + struct resource *res = &dev->resource[resno]; + + /* If it already has a parent, don't claim it. */ + if (res->parent) + continue; + + if (resource_type(res) == IORESOURCE_MEM || + resource_type(res) == IORESOURCE_IO) + pci_claim_resource(dev, resno); + } + return 0; +} + static int gen_pci_probe(struct platform_device *pdev) { int err; @@ -277,6 +295,9 @@ static int gen_pci_probe(struct platform_device *pdev) } pci_bus_add_devices(bus); + + if (pci_has_flag(PCI_PROBE_ONLY)) + pci_walk_bus(bus, gen_pci_claim_resource_cb, NULL); return 0; }