aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederic Barrat <fbarrat@linux.ibm.com>2020-02-06 14:22:43 +0100
committerVasant Hegde <hegdevasant@linux.vnet.ibm.com>2020-03-12 10:32:39 +0530
commit7cfa22eb54b83a91ffe8ee4b21e9dd405b70541b (patch)
tree518f9a60b0a8bdb9d8f1c8ef901dbfacd2f52dd3
parent4a166db990dba98d4c41ef242ae863f6f20e3ea6 (diff)
downloadskiboot-7cfa22eb54b83a91ffe8ee4b21e9dd405b70541b.zip
skiboot-7cfa22eb54b83a91ffe8ee4b21e9dd405b70541b.tar.gz
skiboot-7cfa22eb54b83a91ffe8ee4b21e9dd405b70541b.tar.bz2
npu2-opencapi: Allow platforms to identify physical slots
[ Upstream commit 9de4f2284c54433f7f4ff3dc3d13a39c657e2c19 ] This patch lets each platform define the name of the opencapi slots. It makes it easier to identify which physical card is generating errors or messages in the linux or skiboot log files. The patch provides slot names for mihawk and witherspoon. If the platform doesn't define any, then we default to 'OPENCAPI-xxxx' There are various ways to find out about the slot names: skiboot log lspci command (if the PCI hotplug driver pnv-php is loaded) lshw checking the device tree and probably others.... Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com> Reviewed-by: Andrew Donnellan <ajd@linux.ibm.com> Signed-off-by: Oliver O'Halloran <oohall@gmail.com> Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
-rw-r--r--hw/npu2-opencapi.c16
-rw-r--r--include/platform.h1
-rw-r--r--platforms/astbmc/mihawk.c20
-rw-r--r--platforms/astbmc/witherspoon.c20
-rw-r--r--platforms/ibm-fsp/zz.c20
5 files changed, 74 insertions, 3 deletions
diff --git a/hw/npu2-opencapi.c b/hw/npu2-opencapi.c
index 0d371d5..0b953d2 100644
--- a/hw/npu2-opencapi.c
+++ b/hw/npu2-opencapi.c
@@ -1342,7 +1342,9 @@ static int64_t npu2_opencapi_hreset(struct pci_slot *slot __unused)
static void make_slot_hotpluggable(struct pci_slot *slot, struct phb *phb)
{
- char label[40];
+ struct npu2_dev *dev = phb_to_npu2_dev_ocapi(phb);
+ char name[40];
+ const char *label = NULL;
/*
* Add a few definitions to the DT so that the linux PCI
@@ -1353,8 +1355,16 @@ static void make_slot_hotpluggable(struct pci_slot *slot, struct phb *phb)
*/
slot->pluggable = 1;
pci_slot_add_dt_properties(slot, phb->dt_node);
- snprintf(label, sizeof(label), "OPENCAPI-%04x",
- (int)PCI_SLOT_PHB_INDEX(slot->id));
+
+ if (platform.ocapi->ocapi_slot_label)
+ label = platform.ocapi->ocapi_slot_label(dev->npu->chip_id,
+ dev->brick_index);
+
+ if (!label) {
+ snprintf(name, sizeof(name), "OPENCAPI-%04x",
+ (int)PCI_SLOT_PHB_INDEX(slot->id));
+ label = name;
+ }
dt_add_property_string(phb->dt_node, "ibm,slot-label", label);
}
diff --git a/include/platform.h b/include/platform.h
index 0b04385..09729e3 100644
--- a/include/platform.h
+++ b/include/platform.h
@@ -63,6 +63,7 @@ struct platform_ocapi {
uint8_t i2c_presence_brick5; /* I2C pin to read for presence on brick 5 */
bool odl_phy_swap; /* Swap ODL1 to use brick 2 rather than
* brick 1 lanes */
+ const char *(*ocapi_slot_label)(uint32_t chip_id, uint32_t brick_index);
};
struct dt_node;
diff --git a/platforms/astbmc/mihawk.c b/platforms/astbmc/mihawk.c
index 6816acc..d33d16b 100644
--- a/platforms/astbmc/mihawk.c
+++ b/platforms/astbmc/mihawk.c
@@ -55,6 +55,25 @@ static void mihawk_get_slot_info(struct phb *phb, struct pci_device *pd)
slot_table_get_slot_info(phb, pd);
}
+static const char *mihawk_ocapi_slot_label(uint32_t chip_id,
+ uint32_t brick_index)
+{
+ const char *name = NULL;
+
+ if (chip_id == 0) {
+ if (brick_index == 2)
+ name = "JP90NVB1";
+ else
+ name = "JP90NVT1";
+ } else {
+ if (brick_index == 2)
+ name = "JP91NVB1";
+ else
+ name = "JP91NVT1";
+ }
+ return name;
+}
+
static const struct platform_ocapi mihawk_ocapi = {
.i2c_engine = 1,
.i2c_port = 4,
@@ -69,6 +88,7 @@ static const struct platform_ocapi mihawk_ocapi = {
.i2c_presence_brick4 = 0, /* unused */
.i2c_presence_brick5 = 0, /* unused */
.odl_phy_swap = true,
+ .ocapi_slot_label = mihawk_ocapi_slot_label,
};
static const struct slot_table_entry P1E1A_x8_PLX8748_down[] = {
diff --git a/platforms/astbmc/witherspoon.c b/platforms/astbmc/witherspoon.c
index 8aaed97..e9527bf 100644
--- a/platforms/astbmc/witherspoon.c
+++ b/platforms/astbmc/witherspoon.c
@@ -325,6 +325,25 @@ i2c_failed:
return;
}
+static const char *witherspoon_ocapi_slot_label(uint32_t chip_id,
+ uint32_t brick_index)
+{
+ const char *name = NULL;
+
+ if (chip_id == 0) {
+ if (brick_index == 3)
+ name = "OPENCAPI-GPU0";
+ else if (brick_index == 4)
+ name = "OPENCAPI-GPU1";
+ } else {
+ if (brick_index == 3)
+ name = "OPENCAPI-GPU3";
+ else if (brick_index == 4)
+ name = "OPENCAPI-GPU4";
+ }
+ return name;
+}
+
const struct platform_ocapi witherspoon_ocapi = {
.i2c_engine = 1,
.i2c_port = 4,
@@ -348,6 +367,7 @@ const struct platform_ocapi witherspoon_ocapi = {
.i2c_presence_brick3 = 0,
.i2c_presence_brick4 = 0,
.i2c_presence_brick5 = 0,
+ .ocapi_slot_label = witherspoon_ocapi_slot_label,
};
static int gpu_slot_to_num(const char *slot)
diff --git a/platforms/ibm-fsp/zz.c b/platforms/ibm-fsp/zz.c
index 92f4fcb..f4aa85f 100644
--- a/platforms/ibm-fsp/zz.c
+++ b/platforms/ibm-fsp/zz.c
@@ -15,6 +15,25 @@
#include "ibm-fsp.h"
#include "lxvpd.h"
+static const char *zz_ocapi_slot_label(uint32_t chip_id,
+ uint32_t brick_index)
+{
+ const char *name = NULL;
+
+ if (chip_id == 0) {
+ if (brick_index == 2)
+ name = "P1-T5";
+ else
+ name = "P1-T6";
+ } else {
+ if (brick_index == 2)
+ name = "P1-T7";
+ else
+ name = "P1-T8";
+ }
+ return name;
+}
+
/* We don't yet create NPU device nodes on ZZ, but these values are correct */
static const struct platform_ocapi zz_ocapi = {
.i2c_engine = 1,
@@ -30,6 +49,7 @@ static const struct platform_ocapi zz_ocapi = {
.i2c_presence_brick4 = 0, /* unused */
.i2c_presence_brick5 = 0, /* unused */
.odl_phy_swap = true,
+ .ocapi_slot_label = zz_ocapi_slot_label,
};
#define NPU_BASE 0x5011000