Commit 6c5f898f authored by Andrey Smirnov's avatar Andrey Smirnov Committed by Herbert Xu

crypto: caam - drop explicit usage of struct jr_outentry

Using struct jr_outentry to specify the layout of JobR output ring is
not appropriate for all 64-bit SoC, since some of them, like i.MX8MQ,
use 32-bit pointers there which doesn't match 64-bit
dma_addr_t. Convert existing code to use explicit helper functions to
access any of the JobR output ring elements, so that the support for
i.MX8MQ can be added later. No functional change intended.
Signed-off-by: default avatarAndrey Smirnov <andrew.smirnov@gmail.com>
Cc: Chris Spencer <christopher.spencer@sea.co.uk>
Cc: Cory Tusar <cory.tusar@zii.aero>
Cc: Chris Healy <cphealy@gmail.com>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Horia Geantă <horia.geanta@nxp.com>
Cc: Aymen Sghaier <aymen.sghaier@nxp.com>
Cc: Leonard Crestez <leonard.crestez@nxp.com>
Cc: linux-crypto@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent e27d9629
......@@ -58,7 +58,7 @@ struct caam_drv_private_jr {
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 */
};
/*
......
......@@ -211,7 +211,7 @@ static void caam_jr_dequeue(unsigned long devarg)
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 */
}
......@@ -220,7 +220,8 @@ static void caam_jr_dequeue(unsigned long devarg)
/* 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);
......@@ -231,7 +232,8 @@ static void caam_jr_dequeue(unsigned long devarg)
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
......@@ -438,7 +440,7 @@ static int caam_jr_init(struct device *dev)
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)
......
......@@ -71,6 +71,7 @@
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) \
......@@ -208,10 +209,41 @@ static inline u64 caam_dma_to_cpu(u64 value)
* jr_outentry
* Represents each entry in a JobR output ring
*/
struct jr_outentry {
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;
} __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 {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment