[PATCH] crypto: ux500: make interrupt mode plausible

Herbert Xu herbert at gondor.apana.org.au
Thu Jul 3 06:44:00 PDT 2014


On Thu, Jun 26, 2014 at 01:43:02PM +0200, Arnd Bergmann wrote:
> The interrupt handler in the ux500 crypto driver has an obviously
> incorrect way to access the data buffer, which for a while has
> caused this build warning:
> 
> ../ux500/cryp/cryp_core.c: In function 'cryp_interrupt_handler':
> ../ux500/cryp/cryp_core.c:234:5: warning: passing argument 1 of '__fswab32' makes integer from pointer without a cast [enabled by default]
>      writel_relaxed(ctx->indata,
>      ^
> In file included from ../include/linux/swab.h:4:0,
>                  from ../include/uapi/linux/byteorder/big_endian.h:12,
>                  from ../include/linux/byteorder/big_endian.h:4,
>                  from ../arch/arm/include/uapi/asm/byteorder.h:19,
>                  from ../include/asm-generic/bitops/le.h:5,
>                  from ../arch/arm/include/asm/bitops.h:340,
>                  from ../include/linux/bitops.h:33,
>                  from ../include/linux/kernel.h:10,
>                  from ../include/linux/clk.h:16,
>                  from ../drivers/crypto/ux500/cryp/cryp_core.c:12:
> ../include/uapi/linux/swab.h:57:119: note: expected '__u32' but argument is of type 'const u8 *'
>  static inline __attribute_const__ __u32 __fswab32(__u32 val)
> 
> There are at least two, possibly three problems here:
> a) when writing into the FIFO, we copy the pointer rather than the
>    actual data we want to give to the hardware
> b) the data pointer is an array of 8-bit values, while the FIFO
>    is 32-bit wide, so both the read and write access fail to do
>    a proper type conversion
> c) This seems incorrect for big-endian kernels, on which we need to
>    byte-swap any register access, but not normally FIFO accesses,
>    at least the DMA case doesn't do it either.
> 
> This converts the bogus loop to use the same readsl/writesl pair
> that we use for the two other modes (DMA and polling). This is
> more efficient and consistent, and probably correct for endianess.
> 
> The bug has existed since the driver was first merged, and was
> probably never detected because nobody tried to use interrupt mode.
> It might make sense to backport this fix to stable kernels, depending
> on how the crypto maintainers feel about that.

Patch applied.  I'm not going to push this to stable though until
I see some more testing.  We can always push this later if needed.

Thanks,
-- 
Email: Herbert Xu <herbert at gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt



More information about the linux-arm-kernel mailing list