devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Arnd Bergmann <arnd@arndb.de>
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 19:16:59 +1000	[thread overview]
Message-ID: <1397207819.19518.26.camel@pasglop> (raw)
In-Reply-To: <5745677.MbvfSQPiZ9@wuerfel>

On Fri, 2014-04-11 at 10:36 +0200, Arnd Bergmann wrote:

> > 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.

Yes, it is partially host bridge specific, partially firmware related
(OPAL vs. ACPI, vs....) so it's a mixture here.

So I do agree, host bridge ops to replace most of these pcibios_* hooks
does make sense.
> 
> > 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.

Yes. Most of them could be made into host bridge hooks fairly easily.

The remaining ones are going to need somebody (probably me) to
untangle :-)

> 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.

Well, the host bridge needs either a "driver" or be subclassed or
both...

>  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.

Either works, we can start with the easy ones like window alignment, and
move from there.

Ben.

  reply	other threads:[~2014-04-11  9:16 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
2014-04-11  9:16                                             ` Benjamin Herrenschmidt [this message]
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=1397207819.19518.26.camel@pasglop \
    --to=benh@kernel.crashing.org \
    --cc=Catalin.Marinas@arm.com \
    --cc=Liviu.Dudau@arm.com \
    --cc=Will.Deacon@arm.com \
    --cc=arnd@arndb.de \
    --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).