linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Gavin Shan <gwshan@linux.vnet.ibm.com>
To: linuxppc-dev@lists.ozlabs.org
Cc: bhelgaas@google.com, linux-pci@vger.kernel.org,
	Gavin Shan <gwshan@linux.vnet.ibm.com>
Subject: [PATCH v3 00/21] PowerPC/PowerNV: PCI Slot Management
Date: Mon, 27 Apr 2015 16:37:32 +1000	[thread overview]
Message-ID: <1430116673-22500-1-git-send-email-gwshan@linux.vnet.ibm.com> (raw)

The series of patches intend to support PCI slot for PowerPC PowerNV platform,
which is running on top of skiboot firmware. The patchset requires corresponding
changes from skiboot firmware, which is sent to skiboot@lists.ozlabs.org for
review. The PCI slots are exposed by skiboot with device node properties, and
kernel utilizes those properties to populated PCI slots accordingly.

The original PCI infrastructure on PowerNV platform can't support hotplug because
the PE is assigned during PHB fixup time, which is called for once during system
boot time. For this, the PCI infrastructure on PowerNV platform has been reworked
for a lot. After that, the PE and its corresponding resources (IODT, M32DT, M64
segments, DMA32 and bypass window) are assigned upon updating PCI bridge's
resources, which might decide PE# assigned to the PE (e.g. M64 resources, on P8
strictly speaking). Each PE will maintain a reference count, which is (number of
child PCI devices + 1). That indicates when last child PCI device leaves the PE,
the PE and its included resources will be relased and put back into free pool
again. With this design, the PE will be released when EEH PE is released.
PATCH[1 - 8] are related to this part.

>From skiboot perspective, PCI slot is providing (hot/fundamental/complete) resets
to EEH. The kernel gets to know if skiboot supports various reset on one particular
PCI slot through device-tree node. If it does, EEH will utilize the functionality
provided by skiboot. Besides, the device-tree nodes have to change in order to
support PCI hotplug. For example, when one PCI adapter inserted to one slot,
its device-tree node should be added to the system dynamically. Conversely, the
device-tree node should be removed from the system when the PCI adapter is going
to be offline. Since pci_dn and eeh_dev have same life cyle as PCI device nodes,
they should be added/removed accordingly during PCI hotplug. Patch[9 - 20] are
doing the related work.

The last patch is the standalone PCI hotplug driver for PowerNV platform. When
removing PCI adapter from one PCI slot, which is invoked by command in userland,
the skiboot will power off the slot to save power and remove all device-tree
nodes for all PCI devices behind the slot. Conversely, the Power to the slot
is turned on, the PCI devices behind the slot is rescanned, and the device-tree
nodes for those newly detected PCI devices will be built in skiboot. For both
of cases, one message will be sent to kernel by skiboot so that the kernel
can adjust the device-tree accordingly. At the same time, the kernel also have
to deallocate or allocate PE# and its related resources (PE# and so on) for the
removed/added PCI devices.

Changelog
=========
v3:
   * Rebased to 4.1.RC0
   * PowerNV PCI infrasturcture is total refactored in order to support PCI
     hotplug. The PowerNV hotplug driver is also reworked a lot because of
     the changes in skiboot in order to support PCI hotplug.


Gavin Shan (21):
  pci: Add pcibios_setup_bridge()
  powerpc/powernv: Enable M64 on P7IOC
  powerpc/powernv: M64 support improvement
  powerpc/powernv: Improve IO and M32 mapping
  powerpc/powernv: Improve DMA32 segment assignment
  powerpc/powernv: Create PEs dynamically
  powerpc/powernv: Release PEs dynamically
  powerpc/powernv: Drop pnv_ioda_setup_dev_PE()
  powerpc/eeh: Delay probing EEH device during hotplug
  powerpc/powernv: Use PCI slot reset infrastructure
  powerpc/powernv: Fundamental reset for PCI bus reset
  powerpc/pci: Don't scan empty slot
  powerpc/pci: Move pcibios_find_pci_bus() around
  powerpc/powernv: Introduce pnv_pci_poll()
  powerpc/powernv: Functions to get/reset PCI slot status
  powerpc/pci: Delay creating pci_dn
  powerpc/pci: Create eeh_dev while creating pci_dn
  powerpc/pci: Export traverse_pci_device_nodes()
  powerpc/pci: Update bridge windows on PCI plugging
  powerpc/powernv: Select OF_DYNAMIC
  pci/hotplug: PowerPC PowerNV PCI hotplug driver

 arch/powerpc/include/asm/eeh.h                 |    7 +-
 arch/powerpc/include/asm/opal-api.h            |    7 +-
 arch/powerpc/include/asm/opal.h                |    7 +-
 arch/powerpc/include/asm/pci-bridge.h          |    7 +-
 arch/powerpc/include/asm/pnv-pci.h             |    5 +
 arch/powerpc/include/asm/ppc-pci.h             |    7 +-
 arch/powerpc/kernel/eeh.c                      |    7 +
 arch/powerpc/kernel/eeh_dev.c                  |   20 +-
 arch/powerpc/kernel/pci-common.c               |   18 +-
 arch/powerpc/kernel/pci-hotplug.c              |   44 +-
 arch/powerpc/kernel/pci_dn.c                   |  119 +-
 arch/powerpc/platforms/maple/pci.c             |   35 +-
 arch/powerpc/platforms/pasemi/pci.c            |    3 -
 arch/powerpc/platforms/powermac/pci.c          |   39 +-
 arch/powerpc/platforms/powernv/Kconfig         |    1 +
 arch/powerpc/platforms/powernv/eeh-powernv.c   |  245 ++--
 arch/powerpc/platforms/powernv/opal-wrappers.S |    3 +
 arch/powerpc/platforms/powernv/pci-ioda.c      | 1657 +++++++++++++++---------
 arch/powerpc/platforms/powernv/pci.c           |   64 +-
 arch/powerpc/platforms/powernv/pci.h           |   52 +-
 arch/powerpc/platforms/pseries/msi.c           |    4 +-
 arch/powerpc/platforms/pseries/pci_dlpar.c     |   32 -
 arch/powerpc/platforms/pseries/setup.c         |    9 +-
 drivers/pci/hotplug/Kconfig                    |   12 +
 drivers/pci/hotplug/Makefile                   |    4 +
 drivers/pci/hotplug/powernv_php.c              |  146 +++
 drivers/pci/hotplug/powernv_php.h              |   78 ++
 drivers/pci/hotplug/powernv_php_slot.c         |  913 +++++++++++++
 drivers/pci/setup-bus.c                        |   12 +-
 include/linux/pci.h                            |    1 +
 30 files changed, 2623 insertions(+), 935 deletions(-)
 create mode 100644 drivers/pci/hotplug/powernv_php.c
 create mode 100644 drivers/pci/hotplug/powernv_php.h
 create mode 100644 drivers/pci/hotplug/powernv_php_slot.c

-- 
2.1.0

             reply	other threads:[~2015-04-27  6:38 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-27  6:37 Gavin Shan [this message]
2015-04-27  6:37 ` [PATCH v3 01/21] pci: Add pcibios_setup_bridge() Gavin Shan
2015-04-27  6:37 ` [PATCH v3 02/21] powerpc/powernv: Enable M64 on P7IOC Gavin Shan
2015-04-27  6:37 ` [PATCH v3 03/21] powerpc/powernv: M64 support improvement Gavin Shan
2015-04-27  6:37 ` [PATCH v3 04/21] powerpc/powernv: Improve IO and M32 mapping Gavin Shan
2015-04-27  6:37 ` [PATCH v3 05/21] powerpc/powernv: Improve DMA32 segment assignment Gavin Shan
2015-04-27  6:37 ` [PATCH v3 06/21] powerpc/powernv: Create PEs dynamically Gavin Shan
2015-04-27  6:37 ` [PATCH v3 07/21] powerpc/powernv: Release " Gavin Shan
2015-04-27  6:37 ` [PATCH v3 08/21] powerpc/powernv: Drop pnv_ioda_setup_dev_PE() Gavin Shan
2015-04-27  6:37 ` [PATCH v3 09/21] powerpc/eeh: Delay probing EEH device during hotplug Gavin Shan
2015-04-27  6:37 ` [PATCH v3 10/21] powerpc/powernv: Use PCI slot reset infrastructure Gavin Shan
2015-04-27  6:37 ` [PATCH v3 11/21] powerpc/powernv: Fundamental reset for PCI bus reset Gavin Shan
2015-04-27  6:37 ` [PATCH v3 12/21] powerpc/pci: Don't scan empty slot Gavin Shan
2015-04-27  6:37 ` [PATCH v3 13/21] powerpc/pci: Move pcibios_find_pci_bus() around Gavin Shan
2015-04-27  6:37 ` [PATCH v3 14/21] powerpc/powernv: Introduce pnv_pci_poll() Gavin Shan
2015-04-27  6:37 ` [PATCH v3 15/21] powerpc/powernv: Functions to get/reset PCI slot status Gavin Shan
2015-04-27  6:37 ` [PATCH v3 16/21] powerpc/pci: Delay creating pci_dn Gavin Shan
2015-04-27  6:37 ` [PATCH v3 17/21] powerpc/pci: Create eeh_dev while " Gavin Shan
2015-04-27  6:37 ` [PATCH v3 18/21] powerpc/pci: Export traverse_pci_device_nodes() Gavin Shan
2015-04-27  6:37 ` [PATCH v3 19/21] powerpc/pci: Update bridge windows on PCI plugging Gavin Shan
2015-04-27  6:37 ` [PATCH v3 20/21] powerpc/powernv: Select OF_DYNAMIC Gavin Shan
2015-04-27  6:37 ` [PATCH v3 21/21] pci/hotplug: PowerPC PowerNV PCI hotplug driver Gavin Shan

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=1430116673-22500-1-git-send-email-gwshan@linux.vnet.ibm.com \
    --to=gwshan@linux.vnet.ibm.com \
    --cc=bhelgaas@google.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.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).