[Skiboot] [PATCH] hw/npu2: support creset of npu2 devices

Balbir Singh bsingharora at gmail.com
Fri Dec 15 13:59:42 AEDT 2017


creset calls in the hw procedure that resets the PHY, we don't
take them out of reset, just put them in reset.

Signed-off-by: Balbir Singh <bsingharora at gmail.com>
---
 hw/npu2-hw-procedures.c |  2 +-
 hw/npu2.c               | 21 ++++++++++++++++++++-
 include/npu2.h          |  1 +
 3 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/hw/npu2-hw-procedures.c b/hw/npu2-hw-procedures.c
index 1318e867..dfff4a2a 100644
--- a/hw/npu2-hw-procedures.c
+++ b/hw/npu2-hw-procedures.c
@@ -233,7 +233,7 @@ static bool poll_fence_status(struct npu2_dev *ndev, uint64_t val)
 }
 
 /* Procedure 1.2.1 - Reset NPU/NDL */
-static uint32_t reset_ntl(struct npu2_dev *ndev)
+uint32_t reset_ntl(struct npu2_dev *ndev)
 {
 	uint64_t val;
 
diff --git a/hw/npu2.c b/hw/npu2.c
index 7ffb0941..ee75b6fd 100644
--- a/hw/npu2.c
+++ b/hw/npu2.c
@@ -1170,6 +1170,25 @@ static int64_t npu2_freset(struct pci_slot *slot __unused)
 	return OPAL_SUCCESS;
 }
 
+static int64_t npu2_creset(struct pci_slot *slot)
+{
+	struct npu2 *p;
+	int i;
+	struct npu2_dev *ndev;
+
+	p = phb_to_npu2(slot->phb);
+	NPU2INF(p, "Creset PHB state\n");
+
+	for (i = 0; i < p->total_devices; i++) {
+		ndev = &p->devices[i];
+		if (ndev) {
+			NPU2DEVINF(ndev, "Resetting device\n");
+			reset_ntl(ndev);
+		}
+	}
+	return OPAL_SUCCESS;
+}
+
 static struct pci_slot *npu2_slot_create(struct phb *phb)
 {
 	struct pci_slot *slot;
@@ -1191,7 +1210,7 @@ static struct pci_slot *npu2_slot_create(struct phb *phb)
 	slot->ops.poll_link           = NULL;
 	slot->ops.hreset              = npu2_hreset;
 	slot->ops.freset              = npu2_freset;
-	slot->ops.creset              = NULL;
+	slot->ops.creset              = npu2_creset;
 
 	return slot;
 }
diff --git a/include/npu2.h b/include/npu2.h
index dae152a6..c1f39616 100644
--- a/include/npu2.h
+++ b/include/npu2.h
@@ -162,5 +162,6 @@ int64_t npu2_dev_procedure(void *dev, struct pci_cfg_reg_filter *pcrf,
 void npu2_dev_procedure_reset(struct npu2_dev *dev);
 void npu2_set_link_flag(struct npu2_dev *ndev, uint8_t flag);
 void npu2_clear_link_flag(struct npu2_dev *ndev, uint8_t flag);
+uint32_t reset_ntl(struct npu2_dev *ndev);
 extern int nv_zcal_nominal;
 #endif /* __NPU2_H */
-- 
2.13.6



More information about the Skiboot mailing list