mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 22:51:42 +00:00
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: Tudor Ambarus <tudor-dan.ambarus@nxp.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
81422badb3
commit
f97581cfa6
@ -23,13 +23,7 @@
|
|||||||
#define SEC4_SG_OFFSET_MASK 0x00001fff
|
#define SEC4_SG_OFFSET_MASK 0x00001fff
|
||||||
|
|
||||||
struct sec4_sg_entry {
|
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;
|
u64 ptr;
|
||||||
#endif /* CONFIG_CRYPTO_DEV_FSL_CAAM_IMX */
|
|
||||||
u32 len;
|
u32 len;
|
||||||
u32 bpid_offset;
|
u32 bpid_offset;
|
||||||
};
|
};
|
||||||
|
@ -196,6 +196,14 @@ static inline u64 rd_reg64(void __iomem *reg)
|
|||||||
#define caam_dma_to_cpu(value) caam32_to_cpu(value)
|
#define caam_dma_to_cpu(value) caam32_to_cpu(value)
|
||||||
#endif /* CONFIG_ARCH_DMA_ADDR_T_64BIT */
|
#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
|
* jr_outentry
|
||||||
* Represents each entry in a JobR output ring
|
* Represents each entry in a JobR output ring
|
||||||
|
@ -15,7 +15,7 @@ struct sec4_sg_entry;
|
|||||||
static inline void dma_to_sec4_sg_one(struct sec4_sg_entry *sec4_sg_ptr,
|
static inline void dma_to_sec4_sg_one(struct sec4_sg_entry *sec4_sg_ptr,
|
||||||
dma_addr_t dma, u32 len, u16 offset)
|
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->len = cpu_to_caam32(len);
|
||||||
sec4_sg_ptr->bpid_offset = cpu_to_caam32(offset & SEC4_SG_OFFSET_MASK);
|
sec4_sg_ptr->bpid_offset = cpu_to_caam32(offset & SEC4_SG_OFFSET_MASK);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
Loading…
Reference in New Issue
Block a user