All of lore.kernel.org
 help / color / mirror / Atom feed
From: Frederic Barrat <fbarrat@linux.ibm.com>
To: linuxppc-dev@lists.ozlabs.org, andrew.donnellan@au1.ibm.com,
	clombard@linux.ibm.com
Cc: aik@ozlabs.ru, arbab@linux.ibm.com, oohall@gmail.com,
	groug@kaod.org, alastair@au1.ibm.com
Subject: [RFC 05/11] powerpc/powernv/ioda: Find opencapi slot for a device node
Date: Wed, 19 Jun 2019 15:28:34 +0200	[thread overview]
Message-ID: <20190619132840.27634-6-fbarrat@linux.ibm.com> (raw)
In-Reply-To: <20190619132840.27634-1-fbarrat@linux.ibm.com>

Unlike real PCI slots, opencapi slots are directly associated to
the (virtual) opencapi PHB, there's no intermediate bridge. So when
looking for a slot ID, we must start the search from the device node
itself and not its parent.

Also, the slot ID is not attached to a specific bdfn, so let's build
it from the PHB ID, like skiboot.

Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com>
---
 arch/powerpc/include/asm/pnv-pci.h   |  1 +
 arch/powerpc/platforms/powernv/pci.c | 10 +++++++---
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/include/asm/pnv-pci.h b/arch/powerpc/include/asm/pnv-pci.h
index b5a85f1bb305..4b4dfa6bfdd3 100644
--- a/arch/powerpc/include/asm/pnv-pci.h
+++ b/arch/powerpc/include/asm/pnv-pci.h
@@ -15,6 +15,7 @@
 #define PCI_SLOT_ID_PREFIX	(1UL << 63)
 #define PCI_SLOT_ID(phb_id, bdfn)	\
 	(PCI_SLOT_ID_PREFIX | ((uint64_t)(bdfn) << 16) | (phb_id))
+#define PCI_PHB_SLOT_ID(phb_id)		(phb_id)
 
 extern int pnv_pci_get_slot_id(struct device_node *np, uint64_t *id);
 extern int pnv_pci_get_device_tree(uint32_t phandle, void *buf, uint64_t len);
diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
index ff1a33fee8e6..3e4e75a883e1 100644
--- a/arch/powerpc/platforms/powernv/pci.c
+++ b/arch/powerpc/platforms/powernv/pci.c
@@ -49,13 +49,14 @@ int pnv_pci_get_slot_id(struct device_node *np, uint64_t *id)
 		return -ENXIO;
 
 	bdfn = ((bdfn & 0x00ffff00) >> 8);
-	while ((parent = of_get_parent(parent))) {
+	for (parent = np; parent; parent = of_get_parent(parent)) {
 		if (!PCI_DN(parent)) {
 			of_node_put(parent);
 			break;
 		}
 
-		if (!of_device_is_compatible(parent, "ibm,ioda2-phb")) {
+		if (!of_device_is_compatible(parent, "ibm,ioda2-phb") &&
+		    !of_device_is_compatible(parent, "ibm,ioda2-npu2-opencapi-phb")) {
 			of_node_put(parent);
 			continue;
 		}
@@ -66,7 +67,10 @@ int pnv_pci_get_slot_id(struct device_node *np, uint64_t *id)
 			return -ENXIO;
 		}
 
-		*id = PCI_SLOT_ID(phbid, bdfn);
+		if (of_device_is_compatible(parent, "ibm,ioda2-npu2-opencapi-phb"))
+			*id = PCI_PHB_SLOT_ID(phbid);
+		else
+			*id = PCI_SLOT_ID(phbid, bdfn);
 		return 0;
 	}
 
-- 
2.21.0


  parent reply	other threads:[~2019-06-19 13:46 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-19 13:28 [RFC 00/11] opencapi: enable card reset and link retraining Frederic Barrat
2019-06-19 13:28 ` [RFC 01/11] powerpc/powernv/ioda: Fix ref count for devices with their own PE Frederic Barrat
2019-06-19 13:28 ` [RFC 02/11] powerpc/powernv/ioda: Protect PE list Frederic Barrat
2019-07-02  6:21   ` Andrew Donnellan
2019-06-19 13:28 ` [RFC 03/11] powerpc/powernv/ioda: set up PE on opencapi device when enabling Frederic Barrat
2019-06-19 13:28 ` [RFC 04/11] powerpc/powernv/ioda: Release opencapi device Frederic Barrat
2019-06-19 13:28 ` Frederic Barrat [this message]
2019-06-19 13:28 ` [RFC 06/11] pci/hotplug/pnv-php: Remove erroneous warning Frederic Barrat
2019-06-19 13:28 ` [RFC 07/11] pci/hotplug/pnv-php: Improve error msg on power state change failure Frederic Barrat
2019-06-19 13:28 ` [RFC 08/11] pci/hotplug/pnv-php: Register opencapi slots Frederic Barrat
2019-06-19 13:28 ` [RFC 09/11] pci/hotplug/pnv-php: Relax check when disabling slot Frederic Barrat
2019-07-02  7:36   ` Andrew Donnellan
2019-06-19 13:28 ` [RFC 10/11] pci/hotplug/pnv-php: Wrap warnings in macro Frederic Barrat
2019-06-19 13:28 ` [RFC 11/11] ocxl: Add PCI hotplug dependency to Kconfig Frederic Barrat
2019-07-02  7:33   ` Andrew Donnellan

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=20190619132840.27634-6-fbarrat@linux.ibm.com \
    --to=fbarrat@linux.ibm.com \
    --cc=aik@ozlabs.ru \
    --cc=alastair@au1.ibm.com \
    --cc=andrew.donnellan@au1.ibm.com \
    --cc=arbab@linux.ibm.com \
    --cc=clombard@linux.ibm.com \
    --cc=groug@kaod.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=oohall@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.