Allocate info ring, tail pointers and HARQ layout memory for a device
only if it hasn't already been allocated.

Signed-off-by: Hernan Vargas <hernan.var...@intel.com>
---
 drivers/baseband/acc100/acc100_pmd.h     | 9 ++++++---
 drivers/baseband/acc100/rte_acc100_pmd.c | 9 ++++++---
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/drivers/baseband/acc100/acc100_pmd.h 
b/drivers/baseband/acc100/acc100_pmd.h
index 4a8d2e17ec..f9ccb1ea8e 100644
--- a/drivers/baseband/acc100/acc100_pmd.h
+++ b/drivers/baseband/acc100/acc100_pmd.h
@@ -61,8 +61,10 @@
 #define ACC100_SIZE_64MBYTE            (64*1024*1024)
 /* Number of elements in an Info Ring */
 #define ACC100_INFO_RING_NUM_ENTRIES   1024
-/* Number of elements in HARQ layout memory */
-#define ACC100_HARQ_LAYOUT             (64*1024*1024)
+/* Number of elements in HARQ layout memory
+ * 128M x 32kB = 4GB addressable memory
+ */
+#define ACC100_HARQ_LAYOUT             (128*1024*1024)
 /* Assume offset for HARQ in memory */
 #define ACC100_HARQ_OFFSET             (32*1024)
 #define ACC100_HARQ_OFFSET_SHIFT       15
@@ -215,7 +217,8 @@ union acc100_dma_rsp_desc {
                        timestampEn:1,
                        iterCountFrac:8,
                        iter_cnt:8,
-                       rsrvd3:6,
+                       harq_failure:1,
+                       rsrvd3:5,
                        sdone:1,
                        fdone:1;
                uint32_t add_info_0;
diff --git a/drivers/baseband/acc100/rte_acc100_pmd.c 
b/drivers/baseband/acc100/rte_acc100_pmd.c
index 8240df76cc..429cda2c9f 100644
--- a/drivers/baseband/acc100/rte_acc100_pmd.c
+++ b/drivers/baseband/acc100/rte_acc100_pmd.c
@@ -582,7 +582,8 @@ allocate_info_ring(struct rte_bbdev *dev)
        else
                reg_addr = &vf_reg_addr;
        /* Allocate InfoRing */
-       d->info_ring = rte_zmalloc_socket("Info Ring",
+       if (d->info_ring == NULL)
+               d->info_ring = rte_zmalloc_socket("Info Ring",
                        ACC100_INFO_RING_NUM_ENTRIES *
                        sizeof(*d->info_ring), RTE_CACHE_LINE_SIZE,
                        dev->data->socket_id);
@@ -679,7 +680,8 @@ acc100_setup_queues(struct rte_bbdev *dev, uint16_t 
num_queues, int socket_id)
        acc100_reg_write(d, reg_addr->ring_size, value);
 
        /* Configure tail pointer for use when SDONE enabled */
-       d->tail_ptrs = rte_zmalloc_socket(
+       if (d->tail_ptrs == NULL)
+               d->tail_ptrs = rte_zmalloc_socket(
                        dev->device->driver->name,
                        ACC100_NUM_QGRPS * ACC100_NUM_AQS * sizeof(uint32_t),
                        RTE_CACHE_LINE_SIZE, socket_id);
@@ -711,7 +713,8 @@ acc100_setup_queues(struct rte_bbdev *dev, uint16_t 
num_queues, int socket_id)
                /* Continue */
        }
 
-       d->harq_layout = rte_zmalloc_socket("HARQ Layout",
+       if (d->harq_layout == NULL)
+               d->harq_layout = rte_zmalloc_socket("HARQ Layout",
                        ACC100_HARQ_LAYOUT * sizeof(*d->harq_layout),
                        RTE_CACHE_LINE_SIZE, dev->data->socket_id);
        if (d->harq_layout == NULL) {
-- 
2.37.1

Reply via email to