Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f97581cf authored by Tudor Ambarus's avatar Tudor Ambarus Committed by Herbert Xu
Browse files

crypto: caam - treat SGT address pointer as u64



Even for i.MX, CAAM is able to use address pointers greater than
32 bits, the address pointer field being interpreted as a double word.
Enforce u64 address pointer in the sec4_sg_entry struct.

This patch fixes the SGT address pointer endianness issue for
32bit platforms where core endianness != caam endianness.

Signed-off-by: default avatarTudor Ambarus <tudor-dan.ambarus@nxp.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 81422bad
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -23,13 +23,7 @@
#define SEC4_SG_OFFSET_MASK	0x00001fff

struct sec4_sg_entry {
#if !defined(CONFIG_ARCH_DMA_ADDR_T_64BIT) && \
	defined(CONFIG_CRYPTO_DEV_FSL_CAAM_IMX)
	u32 rsvd1;
	dma_addr_t ptr;
#else
	u64 ptr;
#endif /* CONFIG_CRYPTO_DEV_FSL_CAAM_IMX */
	u32 len;
	u32 bpid_offset;
};
+8 −0
Original line number Diff line number Diff line
@@ -196,6 +196,14 @@ static inline u64 rd_reg64(void __iomem *reg)
#define caam_dma_to_cpu(value) caam32_to_cpu(value)
#endif /* CONFIG_ARCH_DMA_ADDR_T_64BIT  */

#ifdef CONFIG_CRYPTO_DEV_FSL_CAAM_IMX
#define cpu_to_caam_dma64(value) \
		(((u64)cpu_to_caam32(lower_32_bits(value)) << 32) | \
		 (u64)cpu_to_caam32(upper_32_bits(value)))
#else
#define cpu_to_caam_dma64(value) cpu_to_caam64(value)
#endif

/*
 * jr_outentry
 * Represents each entry in a JobR output ring
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@ struct sec4_sg_entry;
static inline void dma_to_sec4_sg_one(struct sec4_sg_entry *sec4_sg_ptr,
				      dma_addr_t dma, u32 len, u16 offset)
{
	sec4_sg_ptr->ptr = cpu_to_caam_dma(dma);
	sec4_sg_ptr->ptr = cpu_to_caam_dma64(dma);
	sec4_sg_ptr->len = cpu_to_caam32(len);
	sec4_sg_ptr->bpid_offset = cpu_to_caam32(offset & SEC4_SG_OFFSET_MASK);
#ifdef DEBUG