1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(C) 2021 Marvell.
6 #include <rte_cycles.h>
8 #include <rte_malloc.h>
9 #include <rte_rawdev.h>
11 #include "cnxk_bphy_cgx.h"
12 #include "rte_pmd_bphy.h"
15 cnxk_bphy_cgx_enq_msg(uint16_t dev_id, unsigned int queue, void *msg)
17 struct rte_rawdev_buf *bufs[1];
18 struct rte_rawdev_buf buf;
22 q = (void *)(size_t)queue;
26 ret = rte_rawdev_enqueue_buffers(dev_id, bufs, 1, q);
36 cnxk_bphy_cgx_deq_msg(uint16_t dev_id, unsigned int queue, void **msg)
38 struct rte_rawdev_buf *bufs[1];
39 struct rte_rawdev_buf buf;
43 q = (void *)(size_t)queue;
46 ret = rte_rawdev_dequeue_buffers(dev_id, bufs, 1, q);
58 cnxk_bphy_cgx_link_cond(uint16_t dev_id, unsigned int queue, int cond)
63 struct cnxk_bphy_cgx_msg_link_info *link_info = NULL;
64 struct cnxk_bphy_cgx_msg msg;
66 msg.type = CNXK_BPHY_CGX_MSG_TYPE_GET_LINKINFO;
67 ret = cnxk_bphy_cgx_enq_msg(dev_id, queue, &msg);
71 ret = cnxk_bphy_cgx_deq_msg(dev_id, queue, (void **)&link_info);
75 if (link_info->link_up == cond) {
91 cnxk_bphy_cgx_dev_selftest(uint16_t dev_id)
93 unsigned int queues, i;
96 queues = rte_rawdev_queue_count(dev_id);
100 ret = rte_rawdev_start(dev_id);
104 for (i = 0; i < queues; i++) {
105 struct cnxk_bphy_cgx_msg_set_link_state link_state;
106 struct cnxk_bphy_cgx_msg msg;
109 ret = rte_rawdev_queue_conf_get(dev_id, i, &descs,
114 RTE_LOG(ERR, PMD, "Wrong number of descs reported\n");
119 RTE_LOG(INFO, PMD, "Testing queue %d\n", i);
122 msg.type = CNXK_BPHY_CGX_MSG_TYPE_STOP_RXTX;
123 ret = cnxk_bphy_cgx_enq_msg(dev_id, i, &msg);
125 RTE_LOG(ERR, PMD, "Failed to stop rx/tx\n");
130 msg.type = CNXK_BPHY_CGX_MSG_TYPE_START_RXTX;
131 ret = cnxk_bphy_cgx_enq_msg(dev_id, i, &msg);
133 RTE_LOG(ERR, PMD, "Failed to start rx/tx\n");
138 link_state.state = false;
139 msg.type = CNXK_BPHY_CGX_MSG_TYPE_SET_LINK_STATE;
140 msg.data = &link_state;
141 ret = cnxk_bphy_cgx_enq_msg(dev_id, i, &msg);
143 RTE_LOG(ERR, PMD, "Failed to set link down\n");
147 ret = cnxk_bphy_cgx_link_cond(dev_id, i, 0);
150 "Timed out waiting for a link down\n");
153 link_state.state = true;
154 msg.type = CNXK_BPHY_CGX_MSG_TYPE_SET_LINK_STATE;
155 msg.data = &link_state;
156 ret = cnxk_bphy_cgx_enq_msg(dev_id, i, &msg);
158 RTE_LOG(ERR, PMD, "Failed to set link up\n");
162 ret = cnxk_bphy_cgx_link_cond(dev_id, i, 1);
164 RTE_LOG(ERR, PMD, "Timed out waiting for a link up\n");
166 /* enable internal loopback */
167 msg.type = CNXK_BPHY_CGX_MSG_TYPE_INTLBK_ENABLE;
168 ret = cnxk_bphy_cgx_enq_msg(dev_id, i, &msg);
170 RTE_LOG(ERR, PMD, "Failed to enable internal lbk\n");
174 /* disable internal loopback */
175 msg.type = CNXK_BPHY_CGX_MSG_TYPE_INTLBK_DISABLE;
176 ret = cnxk_bphy_cgx_enq_msg(dev_id, i, &msg);
178 RTE_LOG(ERR, PMD, "Failed to disable internal lbk\n");
183 msg.type = CNXK_BPHY_CGX_MSG_TYPE_PTP_RX_ENABLE;
184 ret = cnxk_bphy_cgx_enq_msg(dev_id, i, &msg);
185 /* ptp not available on RPM */
186 if (ret < 0 && ret != -ENOTSUP) {
187 RTE_LOG(ERR, PMD, "Failed to enable ptp\n");
193 msg.type = CNXK_BPHY_CGX_MSG_TYPE_PTP_RX_DISABLE;
194 ret = cnxk_bphy_cgx_enq_msg(dev_id, i, &msg);
195 /* ptp not available on RPM */
196 if (ret < 0 && ret != -ENOTSUP) {
197 RTE_LOG(ERR, PMD, "Failed to disable ptp\n");
203 rte_rawdev_stop(dev_id);