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 11/21] powerpc/powernv: Fundamental reset for PCI bus reset
Date: Mon, 27 Apr 2015 16:37:43 +1000	[thread overview]
Message-ID: <1430116673-22500-12-git-send-email-gwshan@linux.vnet.ibm.com> (raw)
In-Reply-To: <1430116673-22500-1-git-send-email-gwshan@linux.vnet.ibm.com>

Function pnv_pci_reset_secondary_bus() is used to reset specified
PCI bus, which is leaded by root complex or PCI bridge. That means
the function shouldn't be called on PCI root bus and the patch
removes the logic for that case.

Also, some adapters beneath the indicated PCI bus may require
fundamental reset in order to successfully reload their firmwares
after the reset. The patch translates hot reset to fundamental reset
for that case.

Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/powernv/eeh-powernv.c | 35 +++++++++++++++++++++-------
 1 file changed, 26 insertions(+), 9 deletions(-)

diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
index 3c01095..58e4dcf 100644
--- a/arch/powerpc/platforms/powernv/eeh-powernv.c
+++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
@@ -888,18 +888,35 @@ static int pnv_eeh_bridge_reset(struct pci_dev *dev, int option)
 	return (rc == OPAL_SUCCESS) ? 0 : -EIO;
 }
 
-void pnv_pci_reset_secondary_bus(struct pci_dev *dev)
+static int pnv_pci_dev_reset_type(struct pci_dev *pdev, void *data)
 {
-	struct pci_controller *hose;
+	int *freset = data;
 
-	if (pci_is_root_bus(dev->bus)) {
-		hose = pci_bus_to_host(dev->bus);
-		pnv_eeh_phb_reset(hose, EEH_RESET_HOT);
-		pnv_eeh_phb_reset(hose, EEH_RESET_DEACTIVATE);
-	} else {
-		pnv_eeh_bridge_reset(dev, EEH_RESET_HOT);
-		pnv_eeh_bridge_reset(dev, EEH_RESET_DEACTIVATE);
+	/*
+	 * Stop the iteration immediately if there is any
+	 * one PCI device requesting fundamental reset
+	 */
+	*freset |= pdev->needs_freset;
+	return *freset;
+}
+
+void pnv_pci_reset_secondary_bus(struct pci_dev *pdev)
+{
+	int option = EEH_RESET_HOT;
+	int freset = 0;
+
+	/* Check if there're any PCI devices asking for fundamental reset */
+	if (pdev->subordinate) {
+		pci_walk_bus(pdev->subordinate,
+			     pnv_pci_dev_reset_type,
+			     &freset);
+		if (freset)
+			option = EEH_RESET_FUNDAMENTAL;
 	}
+
+	/* Issue the requested type of reset */
+	pnv_eeh_bridge_reset(pdev, option);
+	pnv_eeh_bridge_reset(pdev, EEH_RESET_DEACTIVATE);
 }
 
 /**
-- 
2.1.0

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

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-27  6:37 [PATCH v3 00/21] PowerPC/PowerNV: PCI Slot Management Gavin Shan
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 ` Gavin Shan [this message]
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-12-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).