From: Arnd Bergmann <arnd@arndb.de>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Liviu Dudau <Liviu.Dudau@arm.com>,
Bjorn Helgaas <bhelgaas@google.com>,
linux-pci <linux-pci@vger.kernel.org>,
Catalin Marinas <Catalin.Marinas@arm.com>,
Will Deacon <Will.Deacon@arm.com>,
linaro-kernel <linaro-kernel@lists.linaro.org>,
LKML <linux-kernel@vger.kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
LAKML <linux-arm-kernel@lists.infradead.org>,
Tanmay Inamdar <tinamdar@apm.com>,
Grant Likely <grant.likely@secretlab.ca>
Subject: Re: [PATCH v7 4/6] pci: Introduce a domain number for pci_host_bridge.
Date: Fri, 11 Apr 2014 10:36:06 +0200 [thread overview]
Message-ID: <5745677.MbvfSQPiZ9@wuerfel> (raw)
In-Reply-To: <1397192469.19518.11.camel@pasglop>
On Friday 11 April 2014 15:01:09 Benjamin Herrenschmidt wrote:
> On Thu, 2014-04-10 at 22:46 +0200, Arnd Bergmann wrote:
>
> > Half of it ;-)
> >
> > I think it would be better to not have an architecture specific data
> > structure, just like it would be better not to have architecture specific
> > pcibios_* functions that get called by the PCI core. Note that the
> > architecture specific functions are the ones that rely on the architecture
> > specific data structures as well. If they only use the common fields,
> > it should also be possible to share the code.
>
> I don't understand... we'll never get rid of architecture specific hooks
> in one form or another.
>
> We'll always need to some things in an architecture or host-bridge
> specific way. Now if you don't want to call them arch hooks, then call
> them host bridge ops, but they are needed and thus they will need some
> kind of architecture specific extension to the base host bridge
> structure.
Absolutely right. The thing I'd like to get rid of in the long run
is global functions defined in the architecture code that are called
by core code for host bridge specific functionality. In a lot of
cases, they should not be needed if we can express the same things
in a generic way. In other cases, we can use function pointers that
are set at the time that the host bridge is registered.
> EEH is one big nasty example on powerpc.
>
> Another random one that happens to be hot in my brain right now because
> we just finished debugging it: On powernv, we are just fixing a series
> of bugs caused by the generic code trying to do hot resets on PCIe "by
> hand" by directly toggling the secondary reset register in bridges.
>
> Well, on our root complexes, this triggers a link loss which triggers
> a fatal EEH "ER_all" interrupt which we escalate into a fence and all
> hell breaks loose.
>
> We need to mask some error traps in the hardware before doing something
> that can cause an intentional link loss... and unmask them when done.
> (Among other things, there are other issues on P7 with hot reset).
>
> So hot reset must be an architecture hook.
This sounds to me very much host bridge specific, not architecture specific.
If you have the same host bridge in an ARM system, you'd want the same
things to happen, and if you have another host bridge on PowerPC, you
probably don't want that code to be called.
> PERST (fundamental reset) can *only* be a hook. The way to generate a
> PERST is not specified. In fact, on our machines, we have special GPIOs
> we can use to generate PERST on individual slots below a PLX bridge
> and a different methods for slots directly on a PHB.
>
> Eventually most of those hooks land into firmware, and as such it's akin
> to ACPI which also keeps a separate state structure and a pile of hooks.
On PowerPC, there are currently a bunch of platform specific callbacks
in the ppc_md: pcibios_after_init, pci_exclude_device,
pcibios_fixup_resources, pcibios_fixup_bus, pcibios_enable_device_hook,
pcibios_fixup_phb, pcibios_window_alignment, and possibly some more.
There is some architecture specific code that gets called by the
PCI core, with the main purpose of calling into these.
On ARM32, we have a similar set of callbacks in the architecture
private pci_sys_data: swizzle, map_irq, align_resource, add_bus,
remove_bus, and some more callbacks for setup in the hw_pci
structure that is used at initialization time: setup, scan,
preinit, postinit. Again, these are called from architecture
specific code that gets called by the PCI core.
I'm sure some of the other architectures have similar things, most
of them probably less verbose because there is fewer variability
between subarchitectures.
I think a nice way to deal with these in the long run would be
to have a generic 'struct pci_host_bridge_ops' that can be defined
by the architecture or the platform, or a particular host bridge
driver. We'd have to define exactly which function pointers would
go in there, but a good start would be the set of functions that
are today provided by each architecture. The reset method you describe
above would also fit well into this.
A host bridge driver can fill out the pointers with its own functions,
or put platform or architecture specific function pointers in there,
that get called by the PCI core. There are multiple ways to deal with
default implementations here, one way would be that the core just
falls back to a generic implementation (which is currently the __weak
function) if it sees a NULL pointer. Another way would be to require
each driver to either fill out all pointers or none of them, in which
case we would use a default pci_host_bridge_ops struct that contains
the pointers to the global pcibios_*() functions.
Arnd
next prev parent reply other threads:[~2014-04-11 8:36 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-14 15:34 [PATCH v7 0/6] Support for creating generic host_bridge from device tree Liviu Dudau
2014-03-14 15:34 ` [PATCH v7 1/6] pci: Introduce pci_register_io_range() helper function Liviu Dudau
[not found] ` <1394811272-1547-2-git-send-email-Liviu.Dudau-5wv7dgnIgG8@public.gmane.org>
2014-04-05 0:19 ` Bjorn Helgaas
2014-04-06 9:49 ` Benjamin Herrenschmidt
2014-04-07 8:35 ` Liviu Dudau
2014-04-07 9:13 ` Benjamin Herrenschmidt
2014-04-07 11:16 ` Arnd Bergmann
[not found] ` <20140405001953.GE15806-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2014-04-07 8:31 ` Liviu Dudau
2014-04-07 11:36 ` Arnd Bergmann
2014-04-07 13:42 ` Liviu Dudau
2014-04-07 17:58 ` Bjorn Helgaas
2014-04-08 9:50 ` Liviu Dudau
2014-04-08 10:22 ` Arnd Bergmann
2014-04-08 16:54 ` Bjorn Helgaas
2014-06-26 8:59 ` Catalin Marinas
2014-06-26 9:30 ` Liviu Dudau
[not found] ` <20140626093029.GB12812-2JSQmVVBSi7ZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2014-06-26 14:11 ` Catalin Marinas
2014-06-26 14:14 ` Will Deacon
2014-06-27 0:44 ` Rob Herring
2014-06-27 11:03 ` Arnd Bergmann
2014-06-27 12:49 ` Will Deacon
2014-06-27 13:16 ` Arnd Bergmann
2014-06-27 13:38 ` Catalin Marinas
2014-06-27 16:15 ` Rob Herring
2014-06-30 10:17 ` Will Deacon
[not found] ` <CAL_JsqKCHf6VXR3FFcBSu1xuhP54dYsAJCZwT-X9p5iTZAOJfQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-06-27 14:14 ` Catalin Marinas
2014-06-27 14:55 ` Bjorn Helgaas
2014-06-27 15:18 ` Liviu Dudau
2014-04-07 23:21 ` Bjorn Helgaas
2014-04-08 7:12 ` Arnd Bergmann
2014-04-08 9:49 ` Liviu Dudau
2014-04-08 10:11 ` Arnd Bergmann
2014-04-08 16:48 ` Bjorn Helgaas
2014-03-14 15:34 ` [PATCH v7 2/6] pci: OF: Fix the conversion of IO ranges into IO resources Liviu Dudau
2014-03-14 17:05 ` Arnd Bergmann
2014-03-14 17:19 ` Liviu Dudau
2014-03-14 18:46 ` Arnd Bergmann
2014-03-14 19:00 ` Liviu Dudau
[not found] ` <20140314190017.GA6457-2JSQmVVBSi7ZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2014-03-14 19:16 ` Arnd Bergmann
2014-03-17 13:41 ` Liviu Dudau
2014-03-14 15:34 ` [PATCH v7 3/6] pci: Create pci_host_bridge before its associated bus in pci_create_root_bus Liviu Dudau
2014-03-14 15:34 ` [PATCH v7 4/6] pci: Introduce a domain number for pci_host_bridge Liviu Dudau
2014-04-05 0:00 ` Bjorn Helgaas
2014-04-07 8:46 ` Liviu Dudau
2014-04-07 9:14 ` Benjamin Herrenschmidt
2014-04-07 10:07 ` Liviu Dudau
2014-04-07 22:44 ` Bjorn Helgaas
2014-04-08 10:20 ` Liviu Dudau
[not found] ` <20140408102043.GV17163-2JSQmVVBSi7ZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2014-04-08 16:28 ` Bjorn Helgaas
2014-04-09 12:07 ` Liviu Dudau
2014-04-09 14:02 ` Bjorn Helgaas
2014-04-09 14:08 ` Arnd Bergmann
2014-04-09 23:49 ` Benjamin Herrenschmidt
[not found] ` <CAErSpo4BmoYzf6GxOPRni=q563zhON57s7=5Hz=2Cf-X2ft-1A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-04-10 1:27 ` Liviu Dudau
2014-04-10 3:48 ` Bjorn Helgaas
2014-04-10 8:00 ` Arnd Bergmann
2014-04-10 13:50 ` Bjorn Helgaas
[not found] ` <CAErSpo6u7kr+QdnhAXBo20izg-DNHR4zHT+kRvq34whp68RJCQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-04-10 14:07 ` Arnd Bergmann
2014-04-10 14:53 ` Liviu Dudau
2014-04-10 20:46 ` Arnd Bergmann
2014-04-11 5:01 ` Benjamin Herrenschmidt
2014-04-11 8:36 ` Arnd Bergmann [this message]
2014-04-11 9:16 ` Benjamin Herrenschmidt
2014-04-11 9:22 ` Liviu Dudau
2014-04-11 13:51 ` Arnd Bergmann
2014-07-01 16:37 ` Liviu Dudau
2014-07-04 14:57 ` Liviu Dudau
2014-07-08 1:11 ` Bjorn Helgaas
2014-07-08 10:21 ` Liviu Dudau
2014-03-14 15:34 ` [PATCH v7 5/6] pci: Export find_pci_host_bridge() function Liviu Dudau
2014-04-04 23:39 ` Bjorn Helgaas
2014-04-07 14:20 ` Liviu Dudau
2014-04-07 14:38 ` One Thousand Gnomes
2014-03-14 15:34 ` [PATCH v7 6/6] pci: Add support for creating a generic host_bridge from device tree Liviu Dudau
2014-04-08 12:57 ` Hanjun Guo
2014-04-08 13:09 ` Liviu Dudau
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=5745677.MbvfSQPiZ9@wuerfel \
--to=arnd@arndb.de \
--cc=Catalin.Marinas@arm.com \
--cc=Liviu.Dudau@arm.com \
--cc=Will.Deacon@arm.com \
--cc=benh@kernel.crashing.org \
--cc=bhelgaas@google.com \
--cc=devicetree@vger.kernel.org \
--cc=grant.likely@secretlab.ca \
--cc=linaro-kernel@lists.linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=tinamdar@apm.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).