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: Frederic Barrat <fbarrat@linux.ibm.com>,
	groug@kaod.org, alastair@au1.ibm.com
Subject: [PATCH v2 05/11] powerpc/powernv/ioda: Find opencapi slot for a device node
Date: Thu, 21 Nov 2019 14:49:12 +0100	[thread overview]
Message-ID: <20191121134918.7155-6-fbarrat@linux.ibm.com> (raw)
In-Reply-To: <20191121134918.7155-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>
---
Changelog:
v2:
 - rename variable used when looping (Andrew)


 arch/powerpc/include/asm/pnv-pci.h   |  1 +
 arch/powerpc/platforms/powernv/pci.c | 24 ++++++++++++++----------
 2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/arch/powerpc/include/asm/pnv-pci.h b/arch/powerpc/include/asm/pnv-pci.h
index edcb1fc50aeb..d0ee0ede5767 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 2825d004dece..44c973bfaa97 100644
--- a/arch/powerpc/platforms/powernv/pci.c
+++ b/arch/powerpc/platforms/powernv/pci.c
@@ -38,7 +38,7 @@ static DEFINE_MUTEX(tunnel_mutex);
 
 int pnv_pci_get_slot_id(struct device_node *np, uint64_t *id)
 {
-	struct device_node *parent = np;
+	struct device_node *node = np;
 	u32 bdfn;
 	u64 phbid;
 	int ret;
@@ -48,25 +48,29 @@ 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))) {
-		if (!PCI_DN(parent)) {
-			of_node_put(parent);
+	for (node = np; node; node = of_get_parent(node)) {
+		if (!PCI_DN(node)) {
+			of_node_put(node);
 			break;
 		}
 
-		if (!of_device_is_compatible(parent, "ibm,ioda2-phb") &&
-		    !of_device_is_compatible(parent, "ibm,ioda3-phb")) {
-			of_node_put(parent);
+		if (!of_device_is_compatible(node, "ibm,ioda2-phb") &&
+		    !of_device_is_compatible(node, "ibm,ioda3-phb") &&
+		    !of_device_is_compatible(node, "ibm,ioda2-npu2-opencapi-phb")) {
+			of_node_put(node);
 			continue;
 		}
 
-		ret = of_property_read_u64(parent, "ibm,opal-phbid", &phbid);
+		ret = of_property_read_u64(node, "ibm,opal-phbid", &phbid);
 		if (ret) {
-			of_node_put(parent);
+			of_node_put(node);
 			return -ENXIO;
 		}
 
-		*id = PCI_SLOT_ID(phbid, bdfn);
+		if (of_device_is_compatible(node, "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-11-21 14:17 UTC|newest]

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

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=20191121134918.7155-6-fbarrat@linux.ibm.com \
    --to=fbarrat@linux.ibm.com \
    --cc=alastair@au1.ibm.com \
    --cc=andrew.donnellan@au1.ibm.com \
    --cc=clombard@linux.ibm.com \
    --cc=groug@kaod.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 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.