event/cnxk: add timer cancel
[dpdk.git] / drivers / event / cnxk / cnxk_eventdev.c
index a390031..7189ee3 100644 (file)
@@ -77,6 +77,9 @@ cnxk_sso_xaq_allocate(struct cnxk_sso_evdev *dev)
        xaq_cnt = dev->nb_event_queues * CNXK_SSO_XAQ_CACHE_CNT;
        if (dev->xae_cnt)
                xaq_cnt += dev->xae_cnt / dev->sso.xae_waes;
+       else if (dev->adptr_xae_cnt)
+               xaq_cnt += (dev->adptr_xae_cnt / dev->sso.xae_waes) +
+                          (CNXK_SSO_XAQ_SLACK * dev->nb_event_queues);
        else
                xaq_cnt += (dev->sso.iue / dev->sso.xae_waes) +
                           (CNXK_SSO_XAQ_SLACK * dev->nb_event_queues);
@@ -125,6 +128,36 @@ alloc_fail:
        return rc;
 }
 
+int
+cnxk_sso_xae_reconfigure(struct rte_eventdev *event_dev)
+{
+       struct cnxk_sso_evdev *dev = cnxk_sso_pmd_priv(event_dev);
+       int rc = 0;
+
+       if (event_dev->data->dev_started)
+               event_dev->dev_ops->dev_stop(event_dev);
+
+       rc = roc_sso_hwgrp_release_xaq(&dev->sso, dev->nb_event_queues);
+       if (rc < 0) {
+               plt_err("Failed to release XAQ %d", rc);
+               return rc;
+       }
+
+       rte_mempool_free(dev->xaq_pool);
+       dev->xaq_pool = NULL;
+       rc = cnxk_sso_xaq_allocate(dev);
+       if (rc < 0) {
+               plt_err("Failed to alloc XAQ %d", rc);
+               return rc;
+       }
+
+       rte_mb();
+       if (event_dev->data->dev_started)
+               event_dev->dev_ops->dev_start(event_dev);
+
+       return 0;
+}
+
 int
 cnxk_setup_event_ports(const struct rte_eventdev *event_dev,
                       cnxk_sso_init_hws_mem_t init_hws_fn,
@@ -326,6 +359,14 @@ cnxk_sso_timeout_ticks(struct rte_eventdev *event_dev, uint64_t ns,
        return 0;
 }
 
+void
+cnxk_sso_dump(struct rte_eventdev *event_dev, FILE *f)
+{
+       struct cnxk_sso_evdev *dev = cnxk_sso_pmd_priv(event_dev);
+
+       roc_sso_dump(&dev->sso, dev->sso.nb_hws, dev->sso.nb_hwgrp, f);
+}
+
 static void
 cnxk_handle_event(void *arg, struct rte_event event)
 {
@@ -574,6 +615,8 @@ cnxk_sso_init(struct rte_eventdev *event_dev)
        dev->nb_event_queues = 0;
        dev->nb_event_ports = 0;
 
+       cnxk_tim_init(&dev->sso);
+
        return 0;
 
 error:
@@ -590,6 +633,7 @@ cnxk_sso_fini(struct rte_eventdev *event_dev)
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
                return 0;
 
+       cnxk_tim_fini();
        roc_sso_rsrc_fini(&dev->sso);
        roc_sso_dev_fini(&dev->sso);