Skip to content

Commit 2e9b3fa

Browse files
PavanNikhileshJerin Jacob
authored andcommitted
event/cnkx: add pre-schedule support
Add device level and port level pre-schedule support for cnxk eventdev. Signed-off-by: Pavan Nikhilesh <[email protected]> Acked-by: Jerin Jacob <[email protected]>
1 parent 9e86506 commit 2e9b3fa

File tree

7 files changed

+41
-15
lines changed

7 files changed

+41
-15
lines changed

doc/guides/eventdevs/cnxk.rst

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,6 @@ Runtime Config Options
7878

7979
-a 0002:0e:00.0,single_ws=1
8080

81-
- ``CN10K Getwork mode``
82-
83-
CN10K supports three getwork prefetch modes no prefetch[0], prefetch
84-
immediately[1] and delayed prefetch on forward progress event[2].
85-
The default getwork mode is 2.
86-
87-
For example::
88-
89-
-a 0002:0e:00.0,gw_mode=1
90-
9181
- ``Event Group QoS support``
9282

9383
SSO GGRPs i.e. queue uses DRAM & SRAM buffers to hold in-flight

doc/guides/eventdevs/features/cnxk.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ carry_flow_id = Y
1717
maintenance_free = Y
1818
runtime_queue_attr = Y
1919
profile_links = Y
20+
preschedule = Y
2021

2122
[Eth Rx adapter Features]
2223
internal_port = Y

drivers/event/cnxk/cn10k_eventdev.c

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,7 @@ cn10k_sso_fp_fns_set(struct rte_eventdev *event_dev)
527527

528528
event_dev->dma_enqueue = cn10k_dma_adapter_enqueue;
529529
event_dev->profile_switch = cn10k_sso_hws_profile_switch;
530+
event_dev->preschedule_modify = cn10k_sso_hws_preschedule_modify;
530531
#else
531532
RTE_SET_USED(event_dev);
532533
#endif
@@ -541,6 +542,9 @@ cn10k_sso_info_get(struct rte_eventdev *event_dev,
541542
dev_info->driver_name = RTE_STR(EVENTDEV_NAME_CN10K_PMD);
542543
cnxk_sso_info_get(dev, dev_info);
543544
dev_info->max_event_port_enqueue_depth = UINT32_MAX;
545+
dev_info->event_dev_cap |= RTE_EVENT_DEV_CAP_EVENT_PRESCHEDULE |
546+
RTE_EVENT_DEV_CAP_EVENT_PRESCHEDULE_ADAPTIVE |
547+
RTE_EVENT_DEV_CAP_PER_PORT_PRESCHEDULE;
544548
}
545549

546550
static int
@@ -566,6 +570,19 @@ cn10k_sso_dev_configure(const struct rte_eventdev *event_dev)
566570
if (rc < 0)
567571
goto cnxk_rsrc_fini;
568572

573+
switch (event_dev->data->dev_conf.preschedule_type) {
574+
default:
575+
case RTE_EVENT_PRESCHEDULE_NONE:
576+
dev->gw_mode = CN10K_GW_MODE_NONE;
577+
break;
578+
case RTE_EVENT_PRESCHEDULE:
579+
dev->gw_mode = CN10K_GW_MODE_PREF;
580+
break;
581+
case RTE_EVENT_PRESCHEDULE_ADAPTIVE:
582+
dev->gw_mode = CN10K_GW_MODE_PREF_WFE;
583+
break;
584+
}
585+
569586
rc = cnxk_setup_event_ports(event_dev, cn10k_sso_init_hws_mem,
570587
cn10k_sso_hws_setup);
571588
if (rc < 0)
@@ -1199,7 +1216,6 @@ cn10k_sso_init(struct rte_eventdev *event_dev)
11991216
return 0;
12001217
}
12011218

1202-
dev->gw_mode = CN10K_GW_MODE_PREF_WFE;
12031219
rc = cnxk_sso_init(event_dev);
12041220
if (rc < 0)
12051221
return rc;
@@ -1256,7 +1272,6 @@ RTE_PMD_REGISTER_KMOD_DEP(event_cn10k, "vfio-pci");
12561272
RTE_PMD_REGISTER_PARAM_STRING(event_cn10k, CNXK_SSO_XAE_CNT "=<int>"
12571273
CNXK_SSO_GGRP_QOS "=<string>"
12581274
CNXK_SSO_FORCE_BP "=1"
1259-
CN10K_SSO_GW_MODE "=<int>"
12601275
CN10K_SSO_STASH "=<string>"
12611276
CNXK_TIM_DISABLE_NPA "=1"
12621277
CNXK_TIM_CHNK_SLOTS "=<int>"

drivers/event/cnxk/cn10k_worker.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,3 +442,24 @@ cn10k_sso_hws_profile_switch(void *port, uint8_t profile)
442442

443443
return 0;
444444
}
445+
446+
int __rte_hot
447+
cn10k_sso_hws_preschedule_modify(void *port, enum rte_event_dev_preschedule_type type)
448+
{
449+
struct cn10k_sso_hws *ws = port;
450+
451+
ws->gw_wdata &= ~(BIT(19) | BIT(20));
452+
switch (type) {
453+
default:
454+
case RTE_EVENT_PRESCHEDULE_NONE:
455+
break;
456+
case RTE_EVENT_PRESCHEDULE:
457+
ws->gw_wdata |= BIT(19);
458+
break;
459+
case RTE_EVENT_PRESCHEDULE_ADAPTIVE:
460+
ws->gw_wdata |= BIT(19) | BIT(20);
461+
break;
462+
}
463+
464+
return 0;
465+
}

drivers/event/cnxk/cn10k_worker.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,8 @@ uint16_t __rte_hot cn10k_sso_hws_enq_fwd_burst(void *port,
377377
const struct rte_event ev[],
378378
uint16_t nb_events);
379379
int __rte_hot cn10k_sso_hws_profile_switch(void *port, uint8_t profile);
380+
int __rte_hot cn10k_sso_hws_preschedule_modify(void *port,
381+
enum rte_event_dev_preschedule_type type);
380382

381383
#define R(name, flags) \
382384
uint16_t __rte_hot cn10k_sso_hws_deq_##name( \

drivers/event/cnxk/cnxk_eventdev.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -624,8 +624,6 @@ cnxk_sso_parse_devargs(struct cnxk_sso_evdev *dev, struct rte_devargs *devargs)
624624
&dev->force_ena_bp);
625625
rte_kvargs_process(kvlist, CN9K_SSO_SINGLE_WS, &parse_kvargs_flag,
626626
&single_ws);
627-
rte_kvargs_process(kvlist, CN10K_SSO_GW_MODE, &parse_kvargs_value,
628-
&dev->gw_mode);
629627
rte_kvargs_process(kvlist, CN10K_SSO_STASH,
630628
&parse_sso_kvargs_stash_dict, dev);
631629
dev->dual_ws = !single_ws;

drivers/event/cnxk/cnxk_eventdev.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
#define CNXK_SSO_GGRP_QOS "qos"
3131
#define CNXK_SSO_FORCE_BP "force_rx_bp"
3232
#define CN9K_SSO_SINGLE_WS "single_ws"
33-
#define CN10K_SSO_GW_MODE "gw_mode"
3433
#define CN10K_SSO_STASH "stash"
3534

3635
#define CNXK_SSO_MAX_PROFILES 2

0 commit comments

Comments
 (0)