From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH 1/2] PCI: generic: remove dependency on hw_pci
Date: Wed, 29 Apr 2015 18:43:57 +0100 [thread overview]
Message-ID: <20150429174356.GA20947@red-moon> (raw)
In-Reply-To: <6662179.AoBfCMOsxD@wuerfel>
On Wed, Apr 29, 2015 at 01:34:20PM +0100, Arnd Bergmann wrote:
> On Wednesday 29 April 2015 17:09:58 Jayachandran C wrote:
> > The current code in pci-host-generic.c uses pci_common_init_dev()
> > from the arch/arm/ to do a part of the PCI initialization, and this
> > prevents it from being used on arm64.
> >
> > The initialization done by pci_common_init_dev() that is really
> > needed by pci-host-generic.c can be done in the same file without
> > using the hw_pci API of ARM.
> >
> > The ARM platform requires a pci_sys_data as sysdata for the PCI bus,
> > this is be handled by setting up 'struct gen_pci' to embed a
> > pci_sys_data variable as the first element on the ARM platform.
> >
> > Signed-off-by: Jayachandran C <jchandra@broadcom.com>
>
> This seems very useful
Yes, it is getting less awful, waiting for pci_sys_data to disappear.
> > -static int gen_pci_setup(int nr, struct pci_sys_data *sys)
> > +static int gen_pci_init(struct device *dev, struct gen_pci *pci)
> > {
> > - struct gen_pci *pci = sys->private_data;
> > - list_splice_init(&pci->resources, &sys->resources);
> > - return 1;
> > + struct pci_bus *bus;
> > +
> > + pci_add_flags(PCI_REASSIGN_ALL_RSRC);
>
> Do we want to set that flag unconditionally? At least for servers,
> the resources should get assigned by firmware, and things might
> go wrong if Linux tries to reassign them. This is probably the
> case on kvmtool as well.
I will give it a go on kvmtool, but at first glance concern is
shared.
> > + bus = pci_scan_root_bus(dev, 0, &gen_pci_ops, pci, &pci->resources);
> > + if (!bus) {
> > + dev_err(dev, "Scanning rootbus failed");
> > + return -ENODEV;
> > + }
> > + pci_fixup_irqs(pci_common_swizzle, of_irq_parse_and_map_pci);
>
> I thought this was done by default now. If it is not, can
> we make the of_irq swizzling the default?
Possibly yes.
> > + if (!pci_has_flag(PCI_PROBE_ONLY)) {
> > + pci_bus_size_bridges(bus);
> > + pci_bus_assign_resources(bus);
> > + }
> > + pci_bus_add_devices(bus);
> > +
> > + /* Configure PCI Express settings */
> > + if (pci_has_flag(PCI_PROBE_ONLY)) {
> > + struct pci_bus *child;
> > +
> > + list_for_each_entry(child, &bus->children, node)
> > + pcie_bus_configure_settings(child);
> > + }
> > + return 0;
> > }
>
> We should also try to come up wtih a way to make that
> pcie_bus_configure_settings() automatic if it's required here.
>
> > static int gen_pci_probe(struct platform_device *pdev)
> > @@ -214,13 +237,6 @@ static int gen_pci_probe(struct platform_device *pdev)
> > struct device *dev = &pdev->dev;
> > struct device_node *np = dev->of_node;
> > struct gen_pci *pci = devm_kzalloc(dev, sizeof(*pci), GFP_KERNEL);
> > - struct hw_pci hw = {
> > - .nr_controllers = 1,
> > - .private_data = (void **)&pci,
> > - .setup = gen_pci_setup,
> > - .map_irq = of_irq_parse_and_map_pci,
> > - .ops = &gen_pci_ops,
> > - };
> >
> > if (!pci)
> > return -ENOMEM;
> > @@ -258,8 +274,7 @@ static int gen_pci_probe(struct platform_device *pdev)
> > return err;
> > }
> >
> > - pci_common_init_dev(dev, &hw);
> > - return 0;
> > + return gen_pci_init(dev, pci);
>
> How about moving the new code right into the probe() function?
+1.
I suspect the PCI_PROBE_ONLY case was not tested on arm64, since we
still need a patch to prevent resources enablement there (in the
pcibios_enable_device call - actually the check for PCI_PROBE_ONLY
should be moved to the default pcibios_enable_device function in
drivers/pci/pci.c).
The other bit missing is MSI handling, that should still be implemented.
Lorenzo
next prev parent reply other threads:[~2015-04-29 17:43 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-29 11:39 [RFC PATCH 1/2] PCI: generic: remove dependency on hw_pci Jayachandran C
2015-04-29 11:39 ` [RFC PATCH 2/2] PCI: generic: add arm64 support Jayachandran C
2015-04-29 12:14 ` [RFC PATCH 1/2] PCI: generic: remove dependency on hw_pci Will Deacon
2015-04-29 12:34 ` Arnd Bergmann
2015-04-29 14:25 ` Jayachandran C.
2015-04-29 14:42 ` Arnd Bergmann
2015-04-29 17:43 ` Lorenzo Pieralisi [this message]
2015-04-30 9:59 ` Jayachandran C.
2015-05-01 8:40 ` Lorenzo Pieralisi
2015-05-01 18:22 ` Jayachandran C.
2015-05-03 21:06 ` Suravee Suthikulpanit
2015-05-04 4:51 ` Jayachandran C.
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=20150429174356.GA20947@red-moon \
--to=lorenzo.pieralisi@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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).