#include "qbman_sys_decl.h"
 
+#define CENA_WRITE_ENABLE 0
+#define CINH_WRITE_ENABLE 1
+
 /* Debugging assists */
 static inline void __hexdump(unsigned long start, unsigned long end,
                             unsigned long p, size_t sz, const unsigned char *c)
                s->addr_cena, s->idx, offset);
 #endif
        QBMAN_BUG_ON(offset & 63);
+#ifdef RTE_ARCH_64
        return (s->addr_cena + offset);
+#else
+       return (s->addr_cinh + offset);
+#endif
 }
 
 static inline void qbman_cena_write_complete(struct qbman_swp_sys *s,
                s->addr_cena, s->idx, offset, shadow);
        hexdump(cmd, 64);
 #endif
+#ifdef RTE_ARCH_64
        for (loop = 15; loop >= 1; loop--)
                __raw_writel(shadow[loop], s->addr_cena +
                                         offset + loop * 4);
        lwsync();
                __raw_writel(shadow[0], s->addr_cena + offset);
+#else
+       for (loop = 15; loop >= 1; loop--)
+               __raw_writel(shadow[loop], s->addr_cinh +
+                                        offset + loop * 4);
+       lwsync();
+       __raw_writel(shadow[0], s->addr_cinh + offset);
+#endif
        dcbf(s->addr_cena + offset);
 }
 
                s->addr_cena, s->idx, offset, shadow);
 #endif
 
+#ifdef RTE_ARCH_64
        for (loop = 0; loop < 16; loop++)
                shadow[loop] = __raw_readl(s->addr_cena + offset
                                        + loop * 4);
+#else
+       for (loop = 0; loop < 16; loop++)
+               shadow[loop] = __raw_readl(s->addr_cinh + offset
+                                       + loop * 4);
+#endif
 #ifdef QBMAN_CENA_TRACE
        hexdump(shadow, 64);
 #endif
                                     uint8_t dqrr_size)
 {
        uint32_t reg;
+#ifdef RTE_ARCH_64
+       uint8_t wn = CENA_WRITE_ENABLE;
+#else
+       uint8_t wn = CINH_WRITE_ENABLE;
+#endif
 
        s->addr_cena = d->cena_bar;
        s->addr_cinh = d->cinh_bar;
        QBMAN_BUG_ON(reg);
 #endif
        if (s->eqcr_mode == qman_eqcr_vb_array)
-               reg = qbman_set_swp_cfg(dqrr_size, 0, 0, 3, 2, 3, 1, 1, 1, 1,
+               reg = qbman_set_swp_cfg(dqrr_size, wn, 0, 3, 2, 3, 1, 1, 1, 1,
                                        1, 1);
        else
-               reg = qbman_set_swp_cfg(dqrr_size, 0, 1, 3, 2, 2, 1, 1, 1, 1,
+               reg = qbman_set_swp_cfg(dqrr_size, wn, 1, 3, 2, 2, 1, 1, 1, 1,
                                        1, 1);
        qbman_cinh_write(s, QBMAN_CINH_SWP_CFG, reg);
        reg = qbman_cinh_read(s, QBMAN_CINH_SWP_CFG);
 
        /****************/
        /* arch assists */
        /****************/
+#if defined(RTE_ARCH_ARM64)
 #define dcbz(p) { asm volatile("dc zva, %0" : : "r" (p) : "memory"); }
 #define lwsync() { asm volatile("dmb st" : : : "memory"); }
 #define dcbf(p) { asm volatile("dc cvac, %0" : : "r"(p) : "memory"); }
 {
        asm volatile("prfm pstl1keep, [%0, #0]" : : "r" (p));
 }
+#elif defined(RTE_ARCH_ARM)
+#define dcbz(p) memset(p, 0, 64)
+#define lwsync() { asm volatile("dmb st" : : : "memory"); }
+#define dcbf(p)        RTE_SET_USED(p)
+#define dccivac(p)     RTE_SET_USED(p)
+#define prefetch_for_load(p) { asm volatile ("pld [%0]" : : "r" (p)); }
+#define prefetch_for_store(p) { asm volatile ("pld [%0]" : : "r" (p)); }
+#endif