Allow one to retrieve supported FEC setting for specific LMAC. Signed-off-by: Tomasz Duszynski <tduszyn...@marvell.com> --- drivers/raw/cnxk_bphy/cnxk_bphy_cgx.c | 9 +++++++++ drivers/raw/cnxk_bphy/cnxk_bphy_cgx_test.c | 23 ++++++++++++++++++++++ drivers/raw/cnxk_bphy/rte_pmd_bphy.h | 1 + 3 files changed, 33 insertions(+)
diff --git a/drivers/raw/cnxk_bphy/cnxk_bphy_cgx.c b/drivers/raw/cnxk_bphy/cnxk_bphy_cgx.c index 3da2244146..693a9cd2d5 100644 --- a/drivers/raw/cnxk_bphy/cnxk_bphy_cgx.c +++ b/drivers/raw/cnxk_bphy/cnxk_bphy_cgx.c @@ -62,6 +62,7 @@ cnxk_bphy_cgx_process_buf(struct cnxk_bphy_cgx *cgx, unsigned int queue, struct cnxk_bphy_cgx_msg_link_info *link_info; struct roc_bphy_cgx_link_info rlink_info; struct roc_bphy_cgx_link_mode rlink_mode; + enum roc_bphy_cgx_eth_link_fec *fec; unsigned int lmac = qp->lmac; void *rsp = NULL; int ret; @@ -122,6 +123,14 @@ cnxk_bphy_cgx_process_buf(struct cnxk_bphy_cgx *cgx, unsigned int queue, case CNXK_BPHY_CGX_MSG_TYPE_STOP_RXTX: ret = roc_bphy_cgx_stop_rxtx(cgx->rcgx, lmac); break; + case CNXK_BPHY_CGX_MSG_TYPE_GET_SUPPORTED_FEC: + fec = rte_zmalloc(NULL, sizeof(*fec), 0); + if (!fec) + return -ENOMEM; + + ret = roc_bphy_cgx_fec_supported_get(cgx->rcgx, lmac, fec); + rsp = fec; + break; default: return -EINVAL; } diff --git a/drivers/raw/cnxk_bphy/cnxk_bphy_cgx_test.c b/drivers/raw/cnxk_bphy/cnxk_bphy_cgx_test.c index cb4dd4b221..cd3e6b2e97 100644 --- a/drivers/raw/cnxk_bphy/cnxk_bphy_cgx_test.c +++ b/drivers/raw/cnxk_bphy/cnxk_bphy_cgx_test.c @@ -87,6 +87,22 @@ cnxk_bphy_cgx_link_cond(uint16_t dev_id, unsigned int queue, int cond) return -ETIMEDOUT; } +static int +cnxk_bphy_cgx_get_supported_fec(uint16_t dev_id, unsigned int queue, + enum cnxk_bphy_cgx_eth_link_fec *fec) +{ + struct cnxk_bphy_cgx_msg msg = { + .type = CNXK_BPHY_CGX_MSG_TYPE_GET_SUPPORTED_FEC, + }; + int ret; + + ret = cnxk_bphy_cgx_enq_msg(dev_id, queue, &msg); + if (ret) + return ret; + + return cnxk_bphy_cgx_deq_msg(dev_id, queue, (void **)&fec); +} + int cnxk_bphy_cgx_dev_selftest(uint16_t dev_id) { @@ -103,6 +119,7 @@ cnxk_bphy_cgx_dev_selftest(uint16_t dev_id) for (i = 0; i < queues; i++) { struct cnxk_bphy_cgx_msg_set_link_state link_state; + enum cnxk_bphy_cgx_eth_link_fec fec; struct cnxk_bphy_cgx_msg msg; unsigned int descs; @@ -198,6 +215,12 @@ cnxk_bphy_cgx_dev_selftest(uint16_t dev_id) break; } ret = 0; + + ret = cnxk_bphy_cgx_get_supported_fec(dev_id, i, &fec); + if (ret) { + RTE_LOG(ERR, PMD, "Failed to get supported FEC\n"); + break; + } } rte_rawdev_stop(dev_id); diff --git a/drivers/raw/cnxk_bphy/rte_pmd_bphy.h b/drivers/raw/cnxk_bphy/rte_pmd_bphy.h index f3387f38e3..0737964149 100644 --- a/drivers/raw/cnxk_bphy/rte_pmd_bphy.h +++ b/drivers/raw/cnxk_bphy/rte_pmd_bphy.h @@ -17,6 +17,7 @@ enum cnxk_bphy_cgx_msg_type { CNXK_BPHY_CGX_MSG_TYPE_SET_LINK_STATE, CNXK_BPHY_CGX_MSG_TYPE_START_RXTX, CNXK_BPHY_CGX_MSG_TYPE_STOP_RXTX, + CNXK_BPHY_CGX_MSG_TYPE_GET_SUPPORTED_FEC, }; enum cnxk_bphy_cgx_eth_link_speed { -- 2.25.1