From: Satha Rao <skoteshwar@marvell.com>
With this patch implemented api to dump platform registers for
debug purposes.
Signed-off-by: Satha Rao <skoteshwar@marvell.com>
---
doc/guides/nics/cnxk.rst | 1 +
doc/guides/nics/features/cnxk.ini | 1 +
doc/guides/nics/features/cnxk_vec.ini | 1 +
doc/guides/nics/features/cnxk_vf.ini | 1 +
drivers/net/cnxk/cnxk_ethdev.c | 1 +
drivers/net/cnxk/cnxk_ethdev.h | 4 ++++
drivers/net/cnxk/cnxk_ethdev_ops.c | 25 +++++++++++++++++++++++++
7 files changed, 34 insertions(+)
@@ -32,6 +32,7 @@ Features of the CNXK Ethdev PMD are:
- MTU update
- Scatter-Gather IO support
- Vector Poll mode driver
+- Debug utilities - Context dump and error interrupt support
- Support Rx interrupt
Prerequisites
@@ -38,6 +38,7 @@ Stats per queue = Y
Extended stats = Y
FW version = Y
Module EEPROM dump = Y
+Registers dump = Y
Linux = Y
ARMv8 = Y
Usage doc = Y
@@ -36,6 +36,7 @@ Stats per queue = Y
Extended stats = Y
FW version = Y
Module EEPROM dump = Y
+Registers dump = Y
Linux = Y
ARMv8 = Y
Usage doc = Y
@@ -33,6 +33,7 @@ Stats per queue = Y
Extended stats = Y
FW version = Y
Module EEPROM dump = Y
+Registers dump = Y
Linux = Y
ARMv8 = Y
Usage doc = Y
@@ -1180,6 +1180,7 @@ struct eth_dev_ops cnxk_eth_dev_ops = {
.txq_info_get = cnxk_nix_txq_info_get,
.tx_done_cleanup = cnxk_nix_tx_done_cleanup,
.filter_ctrl = cnxk_nix_filter_ctrl,
+ .get_reg = cnxk_nix_dev_get_reg,
};
static int
@@ -313,6 +313,10 @@ void *cnxk_nix_fastpath_lookup_mem_get(void);
int cnxk_ethdev_parse_devargs(struct rte_devargs *devargs,
struct cnxk_eth_dev *dev);
+/* Debug */
+int cnxk_nix_dev_get_reg(struct rte_eth_dev *eth_dev,
+ struct rte_dev_reg_info *regs);
+
/* Inlines */
static __rte_always_inline uint64_t
cnxk_pktmbuf_detach(struct rte_mbuf *m)
@@ -702,3 +702,28 @@ cnxk_nix_tx_done_cleanup(void *txq, uint32_t free_cnt)
return 0;
}
+
+int
+cnxk_nix_dev_get_reg(struct rte_eth_dev *eth_dev, struct rte_dev_reg_info *regs)
+{
+ struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev);
+ struct roc_nix *nix = &dev->nix;
+ uint64_t *data = regs->data;
+ int rc = -ENOTSUP;
+
+ if (data == NULL) {
+ rc = roc_nix_lf_get_reg_count(nix);
+ if (rc > 0) {
+ regs->length = rc;
+ regs->width = 8;
+ rc = 0;
+ }
+ return rc;
+ }
+
+ if (!regs->length ||
+ regs->length == (uint32_t)roc_nix_lf_get_reg_count(nix))
+ return roc_nix_lf_reg_dump(nix, data);
+
+ return rc;
+}