dma_addr_t *inpring;    /* Base of input ring, alloc DMA-safe */
        int out_ring_read_index;        /* Output index "tail" */
        int tail;                       /* entinfo (s/w ring) tail index */
-       struct jr_outentry *outring;    /* Base of output ring, DMA-safe */
+       void *outring;                  /* Base of output ring, DMA-safe */
 };
 
 /*
 
                for (i = 0; CIRC_CNT(head, tail + i, JOBR_DEPTH) >= 1; i++) {
                        sw_idx = (tail + i) & (JOBR_DEPTH - 1);
 
-                       if (jrp->outring[hw_idx].desc ==
+                       if (jr_outentry_desc(jrp->outring, hw_idx) ==
                            caam_dma_to_cpu(jrp->entinfo[sw_idx].desc_addr_dma))
                                break; /* found */
                }
 
                /* Unmap just-run descriptor so we can post-process */
                dma_unmap_single(dev,
-                                caam_dma_to_cpu(jrp->outring[hw_idx].desc),
+                                caam_dma_to_cpu(jr_outentry_desc(jrp->outring,
+                                                                 hw_idx)),
                                 jrp->entinfo[sw_idx].desc_size,
                                 DMA_TO_DEVICE);
 
                usercall = jrp->entinfo[sw_idx].callbk;
                userarg = jrp->entinfo[sw_idx].cbkarg;
                userdesc = jrp->entinfo[sw_idx].desc_addr_virt;
-               userstatus = caam32_to_cpu(jrp->outring[hw_idx].jrstatus);
+               userstatus = caam32_to_cpu(jr_outentry_jrstatus(jrp->outring,
+                                                               hw_idx));
 
                /*
                 * Make sure all information from the job has been obtained
        if (!jrp->inpring)
                return -ENOMEM;
 
-       jrp->outring = dmam_alloc_coherent(dev, sizeof(*jrp->outring) *
+       jrp->outring = dmam_alloc_coherent(dev, SIZEOF_JR_OUTENTRY *
                                           JOBR_DEPTH, &outbusaddr,
                                           GFP_KERNEL);
        if (!jrp->outring)
 
 
 extern bool caam_little_end;
 extern bool caam_imx;
+extern size_t caam_ptr_sz;
 
 #define caam_to_cpu(len)                                               \
 static inline u##len caam##len ## _to_cpu(u##len val)                  \
  * jr_outentry
  * Represents each entry in a JobR output ring
  */
-struct jr_outentry {
-       dma_addr_t desc;/* Pointer to completed descriptor */
-       u32 jrstatus;   /* Status for completed descriptor */
-} __packed;
+
+static inline void jr_outentry_get(void *outring, int hw_idx, dma_addr_t *desc,
+                                  u32 *jrstatus)
+{
+       struct {
+               dma_addr_t desc;/* Pointer to completed descriptor */
+               u32 jrstatus;   /* Status for completed descriptor */
+       } __packed *outentry = outring;
+
+       *desc = outentry[hw_idx].desc;
+       *jrstatus = outentry[hw_idx].jrstatus;
+}
+
+#define SIZEOF_JR_OUTENTRY     (caam_ptr_sz + sizeof(u32))
+
+static inline dma_addr_t jr_outentry_desc(void *outring, int hw_idx)
+{
+       dma_addr_t desc;
+       u32 unused;
+
+       jr_outentry_get(outring, hw_idx, &desc, &unused);
+
+       return desc;
+}
+
+static inline u32 jr_outentry_jrstatus(void *outring, int hw_idx)
+{
+       dma_addr_t unused;
+       u32 jrstatus;
+
+       jr_outentry_get(outring, hw_idx, &unused, &jrstatus);
+
+       return jrstatus;
+}
+
 
 /* Version registers (Era 10+) e80-eff */
 struct version_regs {