From: Kalesh AP <[email protected]>
The Rx/Tx timestamp will now be made available using the HWRM cmd
PORT_TS_QUERY on BCM57414 chips.
Get rid of the earlier code that was fetching this using register
access.
Fixes: b11cceb83a34 ("net/bnxt: support timesync")
Cc: [email protected]
Signed-off-by: Kalesh AP <[email protected]>
Signed-off-by: Mohammad Shuab Siddique <[email protected]>
---
drivers/net/bnxt/bnxt_ethdev.c | 109 +--------------------------------
drivers/net/bnxt/bnxt_rxr.c | 17 ++++-
2 files changed, 19 insertions(+), 107 deletions(-)
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 14d8fa705d..64b12ada9f 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -3754,99 +3754,6 @@ bnxt_dev_supported_ptypes_get_op(struct rte_eth_dev *dev,
return ptypes;
}
-static uint64_t bnxt_cc_read(struct bnxt *bp)
-{
- uint64_t ns;
-
- ns = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
- BNXT_GRCPF_REG_SYNC_TIME));
- ns |= (uint64_t)(rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
- BNXT_GRCPF_REG_SYNC_TIME + 4))) << 32;
- return ns;
-}
-
-static int bnxt_get_tx_ts(struct bnxt *bp, uint64_t *ts)
-{
- struct bnxt_ptp_cfg *ptp = bp->ptp_cfg;
- uint32_t fifo;
-
- fifo = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
- ptp->tx_mapped_regs[BNXT_PTP_TX_FIFO]));
- if (fifo & BNXT_PTP_TX_FIFO_EMPTY)
- return -EAGAIN;
-
- fifo = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
- ptp->tx_mapped_regs[BNXT_PTP_TX_FIFO]));
- *ts = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
- ptp->tx_mapped_regs[BNXT_PTP_TX_TS_L]));
- *ts |= (uint64_t)rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
- ptp->tx_mapped_regs[BNXT_PTP_TX_TS_H])) << 32;
- rte_read32((uint8_t *)bp->bar0 + ptp->tx_mapped_regs[BNXT_PTP_TX_SEQ]);
-
- return 0;
-}
-
-static int bnxt_clr_rx_ts(struct bnxt *bp, uint64_t *last_ts)
-{
- struct bnxt_ptp_cfg *ptp = bp->ptp_cfg;
- struct bnxt_pf_info *pf = bp->pf;
- uint16_t port_id;
- int i = 0;
- uint32_t fifo;
-
- if (!ptp || (bp->flags & BNXT_FLAG_CHIP_P5))
- return -EINVAL;
-
- port_id = pf->port_id;
- fifo = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
- ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO]));
- while ((fifo & BNXT_PTP_RX_FIFO_PENDING) && (i < BNXT_PTP_RX_PND_CNT)) {
- rte_write32(1 << port_id, (uint8_t *)bp->bar0 +
- ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO_ADV]);
- fifo = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
- ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO]));
- *last_ts = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
- ptp->rx_mapped_regs[BNXT_PTP_RX_TS_L]));
- *last_ts |= (uint64_t)rte_le_to_cpu_32(rte_read32((uint8_t
*)bp->bar0 +
- ptp->rx_mapped_regs[BNXT_PTP_RX_TS_H]))
<< 32;
- i++;
- }
-
- if (i >= BNXT_PTP_RX_PND_CNT)
- return -EBUSY;
-
- return 0;
-}
-
-static int bnxt_get_rx_ts(struct bnxt *bp, uint64_t *ts)
-{
- struct bnxt_ptp_cfg *ptp = bp->ptp_cfg;
- struct bnxt_pf_info *pf = bp->pf;
- uint16_t port_id;
- uint32_t fifo;
-
- fifo = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
- ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO]));
- if (!(fifo & BNXT_PTP_RX_FIFO_PENDING))
- return -EAGAIN;
-
- port_id = pf->port_id;
- rte_write32(1 << port_id, (uint8_t *)bp->bar0 +
- ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO_ADV]);
-
- fifo = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
- ptp->rx_mapped_regs[BNXT_PTP_RX_FIFO]));
- if (fifo & BNXT_PTP_RX_FIFO_PENDING)
- return bnxt_clr_rx_ts(bp, ts);
-
- *ts = rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
- ptp->rx_mapped_regs[BNXT_PTP_RX_TS_L]));
- *ts |= (uint64_t)rte_le_to_cpu_32(rte_read32((uint8_t *)bp->bar0 +
- ptp->rx_mapped_regs[BNXT_PTP_RX_TS_H])) << 32;
-
- return 0;
-}
-
static int
bnxt_timesync_write_time(struct rte_eth_dev *dev, const struct timespec *ts)
{
@@ -3877,12 +3784,9 @@ bnxt_timesync_read_time(struct rte_eth_dev *dev, struct
timespec *ts)
if (!ptp)
return -ENOTSUP;
- /* TODO Revisit for Thor 2 */
if (BNXT_CHIP_P5(bp))
rc = bnxt_hwrm_port_ts_query(bp, BNXT_PTP_FLAGS_CURRENT_TIME,
&systime_cycles);
- else
- systime_cycles = bnxt_cc_read(bp);
ns = rte_timecounter_update(&ptp->tc, systime_cycles);
*ts = rte_ns_to_timespec(ns);
@@ -3965,11 +3869,7 @@ bnxt_timesync_read_rx_timestamp(struct rte_eth_dev *dev,
if (!ptp)
return -ENOTSUP;
- /* TODO Revisit for Thor 2 */
- if (BNXT_CHIP_P5(bp))
- rx_tstamp_cycles = ptp->rx_timestamp;
- else
- bnxt_get_rx_ts(bp, &rx_tstamp_cycles);
+ rx_tstamp_cycles = ptp->rx_timestamp;
ns = rte_timecounter_update(&ptp->rx_tstamp_tc, rx_tstamp_cycles);
*timestamp = rte_ns_to_timespec(ns);
@@ -3990,11 +3890,8 @@ bnxt_timesync_read_tx_timestamp(struct rte_eth_dev *dev,
return -ENOTSUP;
/* TODO Revisit for Thor 2 */
- if (BNXT_CHIP_P5(bp))
- rc = bnxt_hwrm_port_ts_query(bp, BNXT_PTP_FLAGS_PATH_TX,
- &tx_tstamp_cycles);
- else
- rc = bnxt_get_tx_ts(bp, &tx_tstamp_cycles);
+ rc = bnxt_hwrm_port_ts_query(bp, BNXT_PTP_FLAGS_PATH_TX,
+ &tx_tstamp_cycles);
ns = rte_timecounter_update(&ptp->tx_tstamp_tc, tx_tstamp_cycles);
*timestamp = rte_ns_to_timespec(ns);
diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c
index 73fee40401..fb7c70fd45 100644
--- a/drivers/net/bnxt/bnxt_rxr.c
+++ b/drivers/net/bnxt/bnxt_rxr.c
@@ -727,6 +727,18 @@ bnxt_set_ol_flags(struct bnxt_rx_ring_info *rxr, struct
rx_pkt_cmpl *rxcmp,
mbuf->ol_flags |= ol_flags;
}
+static void bnxt_get_rx_ts(struct bnxt *bp)
+{
+ struct bnxt_ptp_cfg *ptp = bp->ptp_cfg;
+
+ if (!ptp)
+ return;
+
+ rte_spinlock_lock(&ptp->ptp_lock);
+ ptp->rx_timestamp = ptp->old_time;
+ rte_spinlock_unlock(&ptp->ptp_lock);
+}
+
static void
bnxt_get_rx_ts_p5(struct bnxt *bp, uint32_t rx_ts_cmpl)
{
@@ -1198,7 +1210,10 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,
bp->ptp_cfg) {
mbuf->ol_flags |= RTE_MBUF_F_RX_IEEE1588_PTP |
RTE_MBUF_F_RX_IEEE1588_TMST;
- bnxt_get_rx_ts_p5(rxq->bp, rxcmp1->reorder);
+ if (BNXT_CHIP_P5(bp))
+ bnxt_get_rx_ts_p5(rxq->bp, rxcmp1->reorder);
+ else
+ bnxt_get_rx_ts(rxq->bp);
#ifndef RTE_IOVA_IN_MBUF
bnxt_timestamp_dynfield_set(mbuf,
bp->ptp_cfg->mb_rx_timestamp_offset,
--
2.47.3