[PATCH RESEND v2 0/7] powerpc/powernv: Unified PCI slot reset and hotplug
Gavin Shan
gwshan at linux.vnet.ibm.com
Tue Feb 17 18:13:16 AEDT 2015
The patchset was built based on patchset "powerpc/powernv: Simplify EEH
implementation", which can be found from:
https://patchwork.ozlabs.org/patch/439956/
The patchset corresponds to skiboot changes, which manages PCI slots
in a unified way: OPAL APIs used to do slot reset, power management,
presence status retrival. The patchset shouldn't be merged before
the OPAL firmware counterpart is merged:
https://patchwork.ozlabs.org/patch/440463/
The kernel changes have been split into 2 parts:
(A) Use the unified PCI slot reset OPAL API, PATCH[1] and PATCH[2]
(B) powernv-php driver to support PCI hotplug for PowerNV platform, starting
from PATCH[3]. The device tree is scanned when the driver is loaded. If
any PCI device node is equipped with property "ibm,slot-pluggable" and
"ibm,reset-by-firmware", it's regarded as hotpluggable slot and the driver
creates/registers slot for it. After that, the sysfs entries can be used
to operate the slot.
PATCH[3/4/5/6]: Necessary code changes to PPC PCI subsystem in order to
support PCI slots for PPC PowerNV platform.
PATCH[7] : powernv-php driver to support PCI hotplug for PowerNV
platform.
Hotplug testing
===============
# cat /proc/cpuinfo | grep -i powernv
platform : PowerNV
machine : PowerNV 8286-41A
# pwd
/sys/bus/pci/slots
# ls
C10 C11 C12 C14 C15 C6 C7 C8 C9
# lspci -s 0003::.
0003:00:00.0 PCI bridge: IBM Device 03dc
0003:01:00.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:01.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:08.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:09.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:10.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:11.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:03:00.0 USB controller: Texas Instruments TUSB73x0 SuperSpeed USB 3.0 xHCI Host Controller (rev 02)
0003:09:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)
0003:09:00.1 Ethernet controller: Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)
0003:09:00.2 Ethernet controller: Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)
0003:09:00.3 Ethernet controller: Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)
0003:0f:00.0 Network controller: Mellanox Technologies MT27500 Family [ConnectX-3]
# pwd
/sys/bus/pci/slots/C10
# cat address
0003:09:00
# cat cur_bus_speed
5.0 GT/s PCIe
# cat max_bus_speed
8.0 GT/s PCIe
# cat power
1
# echo 0 > power
# lspci -s 0003::.
0003:00:00.0 PCI bridge: IBM Device 03dc
0003:01:00.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:01.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:08.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:09.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:10.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:11.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:03:00.0 USB controller: Texas Instruments TUSB73x0 SuperSpeed USB 3.0 xHCI Host Controller (rev 02)
0003:0f:00.0 Network controller: Mellanox Technologies MT27500 Family [ConnectX-3]
# echo 1 > power
# lspci -s 0003::.
0003:00:00.0 PCI bridge: IBM Device 03dc
0003:01:00.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:01.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:08.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:09.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:10.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:02:11.0 PCI bridge: PLX Technology, Inc. Device 8748 (rev ca)
0003:03:00.0 USB controller: Texas Instruments TUSB73x0 SuperSpeed USB 3.0 xHCI Host Controller (rev 02)
0003:09:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)
0003:09:00.1 Ethernet controller: Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)
0003:09:00.2 Ethernet controller: Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)
0003:09:00.3 Ethernet controller: Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)
0003:0f:00.0 Network controller: Mellanox Technologies MT27500 Family [ConnectX-3]
Changelog
=========
v1 -> v2
* Keep opal_pci_reinit(). In case the slot is resetted by kernel,
instead of skiboot, this API should be called to restore states
for those affected devices.
* Reworked slot ID scheme so that old/new kernel can work with
skiboot with or without unified PCI slot management support.
* Code cleanup here and there.
* Separate powernv-php driver to support PCI hotplug for
PowerNV platform.
* Check if the OPAL API supported by firmware before calling
into it, which is necessary for back-compability.
* Separate patch for factoring pnv_pci_poll().
Gavin Shan (7):
powerpc/powernv: Use PCI slot reset infrastructure
powerpc/powernv: Issue fundamental reset if required
powerpc/pci: Move pcibios_find_pci_bus() around
powerpc/pci: Don't scan empty slot
powerpc/powernv: Introduce pnv_pci_poll()
powerpc/powernv: Functions to retrieve PCI slot status
PCI/hotplug: PowerPC PowerNV PCI hotplug driver
arch/powerpc/include/asm/eeh.h | 1 +
arch/powerpc/include/asm/opal.h | 14 +-
arch/powerpc/include/asm/pnv-pci.h | 3 +
arch/powerpc/kernel/pci-hotplug.c | 39 ++-
arch/powerpc/platforms/powernv/eeh-powernv.c | 258 +++++++++--------
arch/powerpc/platforms/powernv/opal-wrappers.S | 2 +
arch/powerpc/platforms/powernv/pci.c | 43 +++
arch/powerpc/platforms/powernv/pci.h | 1 +
arch/powerpc/platforms/pseries/pci_dlpar.c | 32 ---
drivers/pci/hotplug/Kconfig | 12 +
drivers/pci/hotplug/Makefile | 4 +
drivers/pci/hotplug/powernv_php.c | 126 ++++++++
drivers/pci/hotplug/powernv_php.h | 70 +++++
drivers/pci/hotplug/powernv_php_slot.c | 382 +++++++++++++++++++++++++
14 files changed, 817 insertions(+), 170 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
--
1.8.3.2
More information about the Linuxppc-dev
mailing list