From patchwork Fri Aug 17 10:26:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 144462 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp595656ljj; Fri, 17 Aug 2018 03:27:43 -0700 (PDT) X-Google-Smtp-Source: AA+uWPz/qdU6JOsEp7QMwBjjaFaR71sGG00N7ojlb6IVqt19Dq5tDE+qYBPcWKUfxqCPr0noJYsg X-Received: by 2002:a17:902:48c8:: with SMTP id u8-v6mr33157326plh.152.1534501662981; Fri, 17 Aug 2018 03:27:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534501662; cv=none; d=google.com; s=arc-20160816; b=CpBiePocdqT3ywSHD8LoKlI7Qz0w9HTPKLAeWaz8w+SobidExE3VZvukIQux76oYyp VMPX6eq9ZZ+24ACkuLZYBa+MrwZIQxwg50d3awaJe12ItVN0e0KtLdY4Vnx0yIxXgWHY 1pfbNLUABYCFKyMwPeXdk5ZYBVYk0BJ6KfDQ6w3xrUCkx0mIZ+gPQQ/iqw1y3flFPNWU reEbYBAJ0Df9ybt1sh16ayJYZPor3AxbSsDJITpPPhb7hgQ6NZXMOfOO6+r2TLqzZh3v h0u/L6PzIwAsIf70yfvQj0lClLwB3JcIKr8zpqJ1OG1SJRLK5mn7ur27iW9F+iIFilas AnfA== 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:arc-authentication-results; bh=WY/BzzXOVhHdn8tUGz9NNnmNsgm1zDkmOPBX3FrXEyY=; b=nGcLw7TEnmihLlgrZflq87H+Pz1waRffH0lL2KO/X6/65qoW+6glgINR0Gj72scC+F aQqVdqS7EtH8/GjL9pMJ0O5yJe3d+K4BmTGl45YhSd8xXM7Pgsk4kyS6MUUV3dN0KUqY dV9aFp21+HPNOKqSaad5a3PAsPp/jvmSjRTDGh6dYAReUA+ONQ8vHdy5TjAKWqLYzxr4 kvINSBq8ZH1lefkmIQZgorbUZainy6JvmCOAu/AWKYDKdFng5sdyVpf6MD66oqVHKumA 7uxIQ6WQ7SmAPT42x6kFWP+3PxDsG0/H+tdHaJYY2ubfZKcbWhS2L87Oc5KjpdbVmWf/ KnXw== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m11-v6si1953668pgk.468.2018.08.17.03.27.42; Fri, 17 Aug 2018 03:27:42 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727273AbeHQNad (ORCPT + 32 others); Fri, 17 Aug 2018 09:30:33 -0400 Received: from mout.kundenserver.de ([212.227.17.24]:49229 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726218AbeHQNab (ORCPT ); Fri, 17 Aug 2018 09:30:31 -0400 Received: from wuerfel.lan ([109.193.40.16]) by mrelayeu.kundenserver.de (mreue101 [212.227.15.145]) with ESMTPA (Nemesis) id 0LbrfA-1gFk7r2rG0-00jIgT; Fri, 17 Aug 2018 12:27:15 +0200 From: Arnd Bergmann To: linux-pci@vger.kernel.org, Bjorn Helgaas Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Lorenzo Pieralisi , Benjamin Herrenschmidt , linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org, Arnd Bergmann Subject: [RFC 01/15] PCI: clean up legacy host bridge scan functions Date: Fri, 17 Aug 2018 12:26:31 +0200 Message-Id: <20180817102645.3839621-2-arnd@arndb.de> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180817102645.3839621-1-arnd@arndb.de> References: <20180817102645.3839621-1-arnd@arndb.de> X-Provags-ID: V03:K1:qDqhbuzSX8z08T2QJlMsg/+ruOlcqG1c6ro78J/5MxdL56nnRad yO5HhKo3efL2siEaAAY7qOiJJ3tKLIqKd6DJd1500VXoRHZnzIU11B5eNkG3bBfbRbiMaOC 7sIxy4pZO0kdRg2lK5a97hD/1JtCLT9+XU9Bhcz8Phl5VVvzt8s/T5OnHN6eXScNldLezo9 2xaQ1mtfde4n2i8BI3gDQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:jfQRhFGulKg=:XukBP/UhVY4BRzkO84yddY qQprVATs/qCyceQTQaz+NSylj38T+4mtihVDs3Lu2LdCa1KYaNdq3gRlgvmqPRcs8HvdHy6Oi 9gEnQJaQJTT28Na47z6gb3ssYaSqkriElVDkOJ6POo3RjjkpCPEf+02/pTfuqK3E4fvzcxwD0 BsvGfrcRv1rBlbcLybB4/WrFXvSLSgbapLU9ENLSsVJRMKh9bgR5IJtNotnR14UkHxxJl3X5k 9pIUmf11wUVON5jlM9WT8wJBOFmcmsKfAxcQ5/dhB8fnzqtofDUYi8ghIisUjtYpusFeyI+lP XCOQ5IRbxIL1Mv+LBQ/O/jqMQ0hJwza3VFRwmrsFihyPai9gybRhVVear1GmMLGvHu1rpMjXP PkfaKh/Nche6GRkGXkltaZsVuMqrlDwFxTWN/qVCg92pRQk1VMSUQLvbWZYhelAs3GKgcKBRm uXLFTlGeXM3t3x6/3HyDjg4GBGEfs7MxcbUlJfhSkI1niAgMYb5TTB6fkbBex2PXKOah0tDE3 NLbO9MPHnbrM88zKxCyN4CziOFndAmJTEH42nME+FcgVqAJc2gJkOGzJL9DwcC+zDTSule+RG lvvEzhnosFOE+1Phg9bv8wgPAmbyGBaoDqUia7FHDe0LutTZgvUruaDaa25nfzFZGGqRV8d4S GnUtdvrrcKhF2BVCA+dU2Gnpmp0a6aap6Q0M8QFyLPMA3HDxd2vt8msowj/dDlKIVlzE= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Aside from the modern pci_host_bridge based interfaces, we have a couple of interfaces from old times that are still used in a couple of platforms: pci_create_root_bus(), pci_scan_bus() and pci_scan_root_bus(). As a first step towards getting everybody to use the new interfaces, this simplifies the latter two to call the pci_alloc_host_bridge() and pci_register_host_bridge()/pci_scan_root_bus_bridge() interfaces directly. The behavior should be entirely unchanged here, but we can then push down the functions into the individual host implementations. Signed-off-by: Arnd Bergmann --- drivers/pci/probe.c | 86 ++++++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 41 deletions(-) -- 2.18.0 diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index ec784009a36b..b0f666271245 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -23,13 +23,6 @@ #define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */ #define CARDBUS_RESERVE_BUSNR 3 -static struct resource busn_resource = { - .name = "PCI busn", - .start = 0, - .end = 255, - .flags = IORESOURCE_BUS, -}; - /* Ugh. Need to stop exporting this to modules. */ LIST_HEAD(pci_root_buses); EXPORT_SYMBOL(pci_root_buses); @@ -3060,53 +3053,64 @@ EXPORT_SYMBOL(pci_scan_root_bus_bridge); struct pci_bus *pci_scan_root_bus(struct device *parent, int bus, struct pci_ops *ops, void *sysdata, struct list_head *resources) { - struct resource_entry *window; - bool found = false; - struct pci_bus *b; - int max; - - resource_list_for_each_entry(window, resources) - if (window->res->flags & IORESOURCE_BUS) { - found = true; - break; - } + struct pci_host_bridge *bridge; + int error; - b = pci_create_root_bus(parent, bus, ops, sysdata, resources); - if (!b) + bridge = pci_alloc_host_bridge(0); + if (!bridge) return NULL; - if (!found) { - dev_info(&b->dev, - "No busn resource found for root bus, will use [bus %02x-ff]\n", - bus); - pci_bus_insert_busn_res(b, bus, 255); - } + list_splice_init(resources, &bridge->windows); + bridge->dev.parent = parent; + bridge->sysdata = sysdata; + bridge->busnr = bus; + bridge->ops = ops; - max = pci_scan_child_bus(b); + error = pci_scan_root_bus_bridge(bridge); + if (error < 0) + goto err_out; - if (!found) - pci_bus_update_busn_res_end(b, max); + return bridge->bus; - return b; +err_out: + kfree(bridge); + return NULL; } EXPORT_SYMBOL(pci_scan_root_bus); +static struct resource busn_resource = { + .name = "PCI busn", + .start = 0, + .end = 255, + .flags = IORESOURCE_BUS, +}; + struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata) { - LIST_HEAD(resources); - struct pci_bus *b; + struct pci_host_bridge *bridge; + int error; - pci_add_resource(&resources, &ioport_resource); - pci_add_resource(&resources, &iomem_resource); - pci_add_resource(&resources, &busn_resource); - b = pci_create_root_bus(NULL, bus, ops, sysdata, &resources); - if (b) { - pci_scan_child_bus(b); - } else { - pci_free_resource_list(&resources); - } - return b; + bridge = pci_alloc_host_bridge(0); + if (!bridge) + goto err; + + pci_add_resource(&bridge->windows, &ioport_resource); + pci_add_resource(&bridge->windows, &iomem_resource); + pci_add_resource(&bridge->windows, &busn_resource); + bridge->sysdata = sysdata; + bridge->busnr = bus; + bridge->ops = ops; + + error = pci_scan_root_bus_bridge(bridge); + if (error < 0) + goto err; + + return bridge->bus; + +err: + pci_free_host_bridge(bridge); + return NULL; } EXPORT_SYMBOL(pci_scan_bus);