From: Arnd Bergmann <arnd@arndb.de>
To: linux-arm-kernel@lists.infradead.org
Cc: Rob Herring <robherring2@gmail.com>,
devicetree@vger.kernel.org,
Peter Maydell <peter.maydell@linaro.org>,
Russell King <linux@arm.linux.org.uk>,
Rob Herring <robh@kernel.org>,
linux-pci@vger.kernel.org,
Linus Walleij <linus.walleij@linaro.org>,
arm@kernel.org, Bjorn Helgaas <bhelgaas@google.com>
Subject: Re: [PATCH 4/9] pci: add DT based ARM Versatile PCI host driver
Date: Tue, 30 Dec 2014 22:58 +0100 [thread overview]
Message-ID: <2308474.mrIrUSfiTv@wuerfel> (raw)
In-Reply-To: <1419967718-26909-5-git-send-email-robherring2@gmail.com>
On Tuesday 30 December 2014 13:28:33 Rob Herring wrote:
> From: Rob Herring <robh@kernel.org>
>
> This converts the Versatile PCI host code to a platform driver using
> the commom DT parsing and setup. The driver uses only an empty ARM
> pci_sys_data struct and does not use pci_common_init_dev init function.
> The old host code will be removed in a subsequent commit when Versatile
> is completely converted to DT.
>
> I've tested this on QEMU with the sym53c8xx driver in both i/o and
> memory mapped modes.
Ah, this is quite clever, I think you tried to explain to me what you
did with the pci_sys_data before, but I didn't get it then.
> +
> +static void __iomem *__pci_addr(struct pci_bus *bus,
> + unsigned int devfn, int offset)
> +{
> + unsigned int busnr = bus->number;
> +
> + /*
> + * Trap out illegal values
> + */
> + BUG_ON(offset > 255);
> + BUG_ON(busnr > 255);
> + BUG_ON(devfn > 255);
Isn't an offset>255 something that can be triggered by a non-broken
driver or even user space?
Maybe just return PCIBIOS_BAD_REGISTER_NUMBER in this case?
> +static int versatile_pci_parse_request_of_pci_ranges(struct device *dev,
> + struct list_head *res)
> +{
> + int err, mem = 1, res_valid = 0;
> + struct device_node *np = dev->of_node;
> + resource_size_t iobase;
> + struct pci_host_bridge_window *win;
> +
> + err = of_pci_get_host_bridge_resources(np, 0, 0xff, res, &iobase);
> + if (err)
> + return err;
> +
> + list_for_each_entry(win, res, list) {
> + struct resource *parent, *res = win->res;
> +
> + switch (resource_type(res)) {
> + case IORESOURCE_IO:
> + parent = &ioport_resource;
> + err = pci_remap_iospace(res, iobase);
> + if (err) {
> + dev_warn(dev, "error %d: failed to map resource %pR\n",
> + err, res);
> + continue;
> + }
> + break;
> + case IORESOURCE_MEM:
> + parent = &iomem_resource;
> + res_valid |= !(res->flags & IORESOURCE_PREFETCH);
> +
> + writel(res->start >> 28, PCI_IMAP(mem));
> + writel(PHYS_OFFSET >> 28, PCI_SMAP(mem));
> + mem++;
> +
> + break;
> + case IORESOURCE_BUS:
> + default:
> + continue;
> + }
> +
> + err = devm_request_resource(dev, parent, res);
> + if (err)
> + goto out_release_res;
> + }
I wonder if we should also request the physical resource for the I/O space
window to have it show up in /proc/iomem. We are rather inconsistent in this
regard between drivers.
> + pci_add_flags(PCI_ENABLE_PROC_DOMAINS);
> + pci_add_flags(PCI_REASSIGN_ALL_BUS | PCI_REASSIGN_ALL_RSRC);
> +
> + bus = pci_scan_root_bus(&pdev->dev, 0, &pci_versatile_ops, &sys, &pci_res);
> + if (!bus)
> + return -ENOMEM;
> +
> + pci_fixup_irqs(pci_common_swizzle, of_irq_parse_and_map_pci);
> + pci_assign_unassigned_bus_resources(bus);
> +
> + return 0;
One general question, mainly for Bjorn: pci_scan_root_bus adds all the devices
at the Linux driver level by calling pci_bus_add_devices(), but then we call
pci_fixup_irqs and pci_assign_unassigned_bus_resources after that, which will
change the devices again. Is this how it's meant to work? How do we ensure
that we have the correct irq number and resources by the time we enter the
probe() function of the PCI device driver that gets bound to a device here?
Arnd
next prev parent reply other threads:[~2014-12-30 21:58 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-30 19:28 [PATCH 0/9] ARM Versatile multi-platform support Rob Herring
[not found] ` <1419967718-26909-1-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-12-30 19:28 ` [PATCH 1/9] dt/bindings: add versatile PCI binding Rob Herring
2014-12-30 19:28 ` [PATCH 2/9] dts: versatile: add PCI controller binding Rob Herring
2014-12-30 19:28 ` [PATCH 3/9] ARM: versatile: add DT based PCI detection Rob Herring
[not found] ` <1419967718-26909-4-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-12-30 21:37 ` Arnd Bergmann
2014-12-30 23:05 ` Rob Herring
[not found] ` <CAL_Jsq+iVWPsN9LXEMT6DmjS7MGsnmgJLgyb33N3me=OcCet6g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-12-31 15:23 ` Arnd Bergmann
2014-12-31 16:13 ` Peter Maydell
[not found] ` <CAFEAcA9=eoP4-F0Z8J171=DHE5JHVn7ahMnQrHQFz9SHePQHNQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-12-31 19:22 ` Rob Herring
[not found] ` <CAL_JsqLBCeCc2VKvHAdG5bBJt=2qmX5BnosdGd_2n+Pb9BhuZQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-12-31 21:07 ` Peter Maydell
[not found] ` <CAFEAcA-=2GGEAdnO9+8EV+8OkwUHj3tRiMYWvS4b-cpy6P6rYg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-01 15:35 ` Arnd Bergmann
2015-01-01 15:52 ` Peter Maydell
2015-01-08 19:37 ` Linus Walleij
[not found] ` <CACRpkdYEHwXhw3nEPHp7+4rtzXyh9Qb2QCpsRMfopxNoaX3rLA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-08 21:34 ` Rob Herring
2014-12-30 19:28 ` [PATCH 5/9] dts: versatile: add sysregs nodes Rob Herring
[not found] ` <1419967718-26909-6-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-01-08 19:44 ` Linus Walleij
[not found] ` <CACRpkdbinR3Uvi5zZmQJFxJgnWfvE6JZouMVxxRRGVtMNXkBQQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-08 23:53 ` Rob Herring
[not found] ` <CAL_JsqKBLx03E1w0NMH8CH+Pm_L8yQvnR6VTTDxqnpOwAoDhXg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-09 7:10 ` Linus Walleij
[not found] ` <CACRpkdZFxToT5L0sJXap-NQGtjkryn4KTZVnweKCxXL9WvFLEg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-09 11:53 ` Lorenzo Pieralisi
2015-01-15 16:06 ` Lorenzo Pieralisi
2015-01-19 10:25 ` Linus Walleij
2014-12-30 19:28 ` [PATCH 6/9] ARM: versatile: switch to DT only booting and remove legacy code Rob Herring
2014-12-30 19:28 ` [PATCH 7/9] ARM: versatile: move mach includes into mach directory Rob Herring
[not found] ` <1419967718-26909-8-git-send-email-robherring2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-12-30 22:05 ` Arnd Bergmann
2014-12-30 19:28 ` [PATCH 8/9] ARM: versatile: convert to multi-platform Rob Herring
2014-12-30 19:28 ` [PATCH 9/9] ARM: versatile: consolidate code to single file Rob Herring
2014-12-30 22:08 ` [PATCH 0/9] ARM Versatile multi-platform support Arnd Bergmann
2014-12-31 9:25 ` Peter Maydell
[not found] ` <CAFEAcA9pKdRNQ-fgKumQhjTjei-4NJ-OB1gSOxTCnCjShy10jw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-05 9:50 ` Marc Zyngier
[not found] ` <54AA5E7C.1040706-5wv7dgnIgG8@public.gmane.org>
2015-01-05 10:08 ` Peter Maydell
[not found] ` <CAFEAcA8Nq6BPOerN7EhHpT_oa9W3+2Y_=5+zBuQD_c5fh0Yb1A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-05 11:19 ` Marc Zyngier
[not found] ` <87y4ph79wb.fsf-BgpFEFc6EmV6Fr0h90IsVGS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2015-01-05 17:41 ` Peter Maydell
2015-01-08 19:47 ` Linus Walleij
[not found] ` <CACRpkda8T8CwghVYtTw41h_y+GdCA5xCEaSL1Jy4VZBo3MAy-Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-08 21:38 ` Rob Herring
[not found] ` <CAL_JsqKLNPVDCUELaZU8JW0roT3RcyqcxtJbvbYQrjzxjt3FeQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-09 8:34 ` Linus Walleij
2014-12-30 19:28 ` [PATCH 4/9] pci: add DT based ARM Versatile PCI host driver Rob Herring
2014-12-30 21:58 ` Arnd Bergmann [this message]
2015-01-02 18:14 ` Rob Herring
2015-01-02 20:52 ` Arnd Bergmann
2015-01-02 23:13 ` Rob Herring
2015-01-05 9:35 ` Arnd Bergmann
2015-01-24 1:01 ` Bjorn Helgaas
2015-01-24 0:54 ` Bjorn Helgaas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2308474.mrIrUSfiTv@wuerfel \
--to=arnd@arndb.de \
--cc=arm@kernel.org \
--cc=bhelgaas@google.com \
--cc=devicetree@vger.kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=peter.maydell@linaro.org \
--cc=robh@kernel.org \
--cc=robherring2@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).