Skip to content

Commit

Permalink
crypto: atmel-authenc - add support to authenc(hmac(shaX), Y(aes)) modes
Browse files Browse the repository at this point in the history
This patchs allows to combine the AES and SHA hardware accelerators on
some Atmel SoCs. Doing so, AES blocks are only written to/read from the
AES hardware. Those blocks are also transferred from the AES to the SHA
accelerator internally, without additionnal accesses to the system busses.

Hence, the AES and SHA accelerators work in parallel to process all the
data blocks, instead of serializing the process by (de)crypting those
blocks first then authenticating them after like the generic
crypto/authenc.c driver does.

Of course, both the AES and SHA hardware accelerators need to be available
before we can start to process the data blocks. Hence we use their crypto
request queue to synchronize both drivers.

Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
  • Loading branch information
Cyrille Pitchen authored and Herbert Xu committed Feb 3, 2017
1 parent a1f613f commit 89a82ef
Show file tree
Hide file tree
Showing 6 changed files with 883 additions and 15 deletions.
12 changes: 12 additions & 0 deletions drivers/crypto/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,18 @@ config CRYPTO_DEV_BFIN_CRC
Newer Blackfin processors have CRC hardware. Select this if you
want to use the Blackfin CRC module.

config CRYPTO_DEV_ATMEL_AUTHENC
tristate "Support for Atmel IPSEC/SSL hw accelerator"
depends on (ARCH_AT91 && HAS_DMA) || COMPILE_TEST
select CRYPTO_AUTHENC
select CRYPTO_DEV_ATMEL_AES
select CRYPTO_DEV_ATMEL_SHA
help
Some Atmel processors can combine the AES and SHA hw accelerators
to enhance support of IPSEC/SSL.
Select this if you want to use the Atmel modules for
authenc(hmac(shaX),Y(cbc)) algorithms.

config CRYPTO_DEV_ATMEL_AES
tristate "Support for Atmel AES hw accelerator"
depends on HAS_DMA
Expand Down
16 changes: 16 additions & 0 deletions drivers/crypto/atmel-aes-regs.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,22 @@
#define AES_CTRR 0x98
#define AES_GCMHR(x) (0x9c + ((x) * 0x04))

#define AES_EMR 0xb0
#define AES_EMR_APEN BIT(0) /* Auto Padding Enable */
#define AES_EMR_APM BIT(1) /* Auto Padding Mode */
#define AES_EMR_APM_IPSEC 0x0
#define AES_EMR_APM_SSL BIT(1)
#define AES_EMR_PLIPEN BIT(4) /* PLIP Enable */
#define AES_EMR_PLIPD BIT(5) /* PLIP Decipher */
#define AES_EMR_PADLEN_MASK (0xFu << 8)
#define AES_EMR_PADLEN_OFFSET 8
#define AES_EMR_PADLEN(padlen) (((padlen) << AES_EMR_PADLEN_OFFSET) &\
AES_EMR_PADLEN_MASK)
#define AES_EMR_NHEAD_MASK (0xFu << 16)
#define AES_EMR_NHEAD_OFFSET 16
#define AES_EMR_NHEAD(nhead) (((nhead) << AES_EMR_NHEAD_OFFSET) &\
AES_EMR_NHEAD_MASK)

#define AES_TWR(x) (0xc0 + ((x) * 0x04))
#define AES_ALPHAR(x) (0xd0 + ((x) * 0x04))

Expand Down
Loading

0 comments on commit 89a82ef

Please sign in to comment.