event/octeontx2: support PTP for SSO
Add PTP support for SSO based on rx_offloads of the queue connected to it. Signed-off-by: Harman Kalra <hkalra@marvell.com> Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
This commit is contained in:
parent
0fe4accd8e
commit
8980a15300
@ -1095,6 +1095,7 @@ otx2_sso_port_setup(struct rte_eventdev *event_dev, uint8_t port_id,
|
||||
sizeof(uintptr_t) * OTX2_SSO_MAX_VHGRP);
|
||||
ws->fc_mem = dev->fc_mem;
|
||||
ws->xaq_lmt = dev->xaq_lmt;
|
||||
ws->tstamp = dev->tstamp;
|
||||
otx2_write64(val, OTX2_SSOW_GET_BASE_ADDR(
|
||||
ws->ws_state[0].getwrk_op) + SSOW_LF_GWS_NW_TIM);
|
||||
otx2_write64(val, OTX2_SSOW_GET_BASE_ADDR(
|
||||
@ -1107,6 +1108,7 @@ otx2_sso_port_setup(struct rte_eventdev *event_dev, uint8_t port_id,
|
||||
sizeof(uintptr_t) * OTX2_SSO_MAX_VHGRP);
|
||||
ws->fc_mem = dev->fc_mem;
|
||||
ws->xaq_lmt = dev->xaq_lmt;
|
||||
ws->tstamp = dev->tstamp;
|
||||
otx2_write64(val, base + SSOW_LF_GWS_NW_TIM);
|
||||
}
|
||||
|
||||
|
@ -149,6 +149,8 @@ struct otx2_sso_evdev {
|
||||
/* MSIX offsets */
|
||||
uint16_t sso_msixoff[OTX2_SSO_MAX_VHGRP];
|
||||
uint16_t ssow_msixoff[OTX2_SSO_MAX_VHWS];
|
||||
/* PTP timestamp */
|
||||
struct otx2_timesync_info *tstamp;
|
||||
} __rte_cache_aligned;
|
||||
|
||||
#define OTX2_SSOGWS_OPS \
|
||||
@ -173,6 +175,8 @@ struct otx2_ssogws {
|
||||
uint64_t xaq_lmt __rte_cache_aligned;
|
||||
uint64_t *fc_mem;
|
||||
uintptr_t grps_base[OTX2_SSO_MAX_VHGRP];
|
||||
/* PTP timestamp */
|
||||
struct otx2_timesync_info *tstamp;
|
||||
} __rte_cache_aligned;
|
||||
|
||||
struct otx2_ssogws_state {
|
||||
@ -190,6 +194,8 @@ struct otx2_ssogws_dual {
|
||||
uint64_t xaq_lmt __rte_cache_aligned;
|
||||
uint64_t *fc_mem;
|
||||
uintptr_t grps_base[OTX2_SSO_MAX_VHGRP];
|
||||
/* PTP timestamp */
|
||||
struct otx2_timesync_info *tstamp;
|
||||
} __rte_cache_aligned;
|
||||
|
||||
static inline struct otx2_sso_evdev *
|
||||
|
@ -297,6 +297,7 @@ otx2_sso_rx_adapter_queue_add(const struct rte_eventdev *event_dev,
|
||||
}
|
||||
|
||||
dev->rx_offloads |= otx2_eth_dev->rx_offload_flags;
|
||||
dev->tstamp = &otx2_eth_dev->tstamp;
|
||||
sso_fastpath_fns_set((struct rte_eventdev *)(uintptr_t)event_dev);
|
||||
|
||||
return 0;
|
||||
|
@ -68,6 +68,9 @@ otx2_ssogws_get_work(struct otx2_ssogws *ws, struct rte_event *ev,
|
||||
event.event_type == RTE_EVENT_TYPE_ETHDEV) {
|
||||
otx2_wqe_to_mbuf(get_work1, mbuf, event.sub_event_type,
|
||||
(uint32_t) event.get_work0, flags, lookup_mem);
|
||||
/* Extracting tstamp, if PTP enabled*/
|
||||
otx2_nix_mbuf_to_tstamp((struct rte_mbuf *)mbuf, ws->tstamp,
|
||||
flags);
|
||||
get_work1 = mbuf;
|
||||
}
|
||||
|
||||
@ -127,6 +130,9 @@ otx2_ssogws_get_work_empty(struct otx2_ssogws *ws, struct rte_event *ev,
|
||||
event.event_type == RTE_EVENT_TYPE_ETHDEV) {
|
||||
otx2_wqe_to_mbuf(get_work1, mbuf, event.sub_event_type,
|
||||
(uint32_t) event.get_work0, flags, NULL);
|
||||
/* Extracting tstamp, if PTP enabled*/
|
||||
otx2_nix_mbuf_to_tstamp((struct rte_mbuf *)mbuf, ws->tstamp,
|
||||
flags);
|
||||
get_work1 = mbuf;
|
||||
}
|
||||
|
||||
|
@ -158,7 +158,8 @@ otx2_ssogws_dual_deq_ ##name(void *port, struct rte_event *ev, \
|
||||
\
|
||||
gw = otx2_ssogws_dual_get_work(&ws->ws_state[ws->vws], \
|
||||
&ws->ws_state[!ws->vws], ev, \
|
||||
flags, ws->lookup_mem); \
|
||||
flags, ws->lookup_mem, \
|
||||
ws->tstamp); \
|
||||
ws->vws = !ws->vws; \
|
||||
\
|
||||
return gw; \
|
||||
@ -191,13 +192,15 @@ otx2_ssogws_dual_deq_timeout_ ##name(void *port, struct rte_event *ev, \
|
||||
\
|
||||
gw = otx2_ssogws_dual_get_work(&ws->ws_state[ws->vws], \
|
||||
&ws->ws_state[!ws->vws], ev, \
|
||||
flags, ws->lookup_mem); \
|
||||
flags, ws->lookup_mem, \
|
||||
ws->tstamp); \
|
||||
ws->vws = !ws->vws; \
|
||||
for (iter = 1; iter < timeout_ticks && (gw == 0); iter++) { \
|
||||
gw = otx2_ssogws_dual_get_work(&ws->ws_state[ws->vws], \
|
||||
&ws->ws_state[!ws->vws], \
|
||||
ev, flags, \
|
||||
ws->lookup_mem); \
|
||||
ws->lookup_mem, \
|
||||
ws->tstamp); \
|
||||
ws->vws = !ws->vws; \
|
||||
} \
|
||||
\
|
||||
@ -234,7 +237,8 @@ otx2_ssogws_dual_deq_seg_ ##name(void *port, struct rte_event *ev, \
|
||||
gw = otx2_ssogws_dual_get_work(&ws->ws_state[ws->vws], \
|
||||
&ws->ws_state[!ws->vws], ev, \
|
||||
flags | NIX_RX_MULTI_SEG_F, \
|
||||
ws->lookup_mem); \
|
||||
ws->lookup_mem, \
|
||||
ws->tstamp); \
|
||||
ws->vws = !ws->vws; \
|
||||
\
|
||||
return gw; \
|
||||
@ -271,14 +275,16 @@ otx2_ssogws_dual_deq_seg_timeout_ ##name(void *port, \
|
||||
gw = otx2_ssogws_dual_get_work(&ws->ws_state[ws->vws], \
|
||||
&ws->ws_state[!ws->vws], ev, \
|
||||
flags | NIX_RX_MULTI_SEG_F, \
|
||||
ws->lookup_mem); \
|
||||
ws->lookup_mem, \
|
||||
ws->tstamp); \
|
||||
ws->vws = !ws->vws; \
|
||||
for (iter = 1; iter < timeout_ticks && (gw == 0); iter++) { \
|
||||
gw = otx2_ssogws_dual_get_work(&ws->ws_state[ws->vws], \
|
||||
&ws->ws_state[!ws->vws], \
|
||||
ev, flags | \
|
||||
NIX_RX_MULTI_SEG_F, \
|
||||
ws->lookup_mem); \
|
||||
ws->lookup_mem, \
|
||||
ws->tstamp); \
|
||||
ws->vws = !ws->vws; \
|
||||
} \
|
||||
\
|
||||
|
@ -16,7 +16,8 @@ static __rte_always_inline uint16_t
|
||||
otx2_ssogws_dual_get_work(struct otx2_ssogws_state *ws,
|
||||
struct otx2_ssogws_state *ws_pair,
|
||||
struct rte_event *ev, const uint32_t flags,
|
||||
const void * const lookup_mem)
|
||||
const void * const lookup_mem,
|
||||
struct otx2_timesync_info * const tstamp)
|
||||
{
|
||||
const uint64_t set_gw = BIT_ULL(16) | 1;
|
||||
union otx2_sso_event event;
|
||||
@ -69,6 +70,8 @@ otx2_ssogws_dual_get_work(struct otx2_ssogws_state *ws,
|
||||
event.event_type == RTE_EVENT_TYPE_ETHDEV) {
|
||||
otx2_wqe_to_mbuf(get_work1, mbuf, event.sub_event_type,
|
||||
(uint32_t) event.get_work0, flags, lookup_mem);
|
||||
/* Extracting tstamp, if PTP enabled*/
|
||||
otx2_nix_mbuf_to_tstamp((struct rte_mbuf *)mbuf, tstamp, flags);
|
||||
get_work1 = mbuf;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user