marvell_cesa (mv_cesa) crypto issues in Linux 4.2 kernel

This forum is for Marvell Kirkwood devices such as the GoFlex Home/Net, PogoPlug v1/v2, SheevaPlug, and ZyXEL devices.

marvell_cesa (mv_cesa) crypto issues in Linux 4.2 kernel

Postby swass » Wed Sep 02, 2015 8:51 pm

I was excited to try out the new 4.2 kernel with the mv_cesa improvements, which should be now in marvell_cesa, but while the module did load on boot, as did cryptodev, /proc/crypto only shows the kernel as module. This is for a Pogoplug v4, with the kirkwood SoC.

Any thoughts on what might have happened here? I really haven't had time to do any looking into this myself, and might not until this weekend.

EDIT: I found an interesting message out there that might help solve this, although it's not fully applicable here.
https://klausdieter0815.wordpress.com/2015/07/15/hardware-accelerated-crypto-with-dreamplug/
EDIT EDIT: Didn't see any problem with the .config, so it's not entirely clear why it isn't showing up unless maybe a bug in the driver.

Code: Select all
Module                  Size  Used by
xfs                   794171  1
dm_crypt               18858  2
algif_skcipher          7726  0
af_alg                  4830  1 algif_skcipher
dm_mod                 91076  5 dm_crypt
cfg80211              419450  0
rfkill                 16139  1 cfg80211
blowfish_generic        3649  0
blowfish_common         6613  1 blowfish_generic
m25p80                  4403  0
spi_nor                14843  1 m25p80
marvell_cesa           24671  0
nfs                   170496  0
lockd                  59295  1 nfs
grace                   1599  1 lockd
sunrpc                210093  2 nfs,lockd
cryptodev              33641  2
ip_tables              10766  0
x_tables               11602  1 ip_tables
ipv6                  319304  16


Code: Select all
name         : ecb(aes)
driver       : ecb(aes-asm)
module       : kernel
priority     : 200
refcnt       : 3
selftest     : passed
internal     : no
type         : blkcipher
blocksize    : 16
min keysize  : 16
max keysize  : 32
ivsize       : 0
geniv        : <default>

name         : cbc(blowfish)
driver       : cbc(blowfish-generic)
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : givcipher
async        : no
blocksize    : 8
min keysize  : 4
max keysize  : 56
ivsize       : 8
geniv        : eseqiv

name         : cbc(blowfish)
driver       : cbc(blowfish-generic)
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : blkcipher
blocksize    : 8
min keysize  : 4
max keysize  : 56
ivsize       : 8
geniv        : <default>

name         : blowfish
driver       : blowfish-generic
module       : blowfish_generic
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : cipher
blocksize    : 8
min keysize  : 4
max keysize  : 56

name         : cbc(aes)
driver       : cbc(aes-asm)
module       : kernel
priority     : 200
refcnt       : 1
selftest     : passed
internal     : no
type         : givcipher
async        : no
blocksize    : 16
min keysize  : 16
max keysize  : 32
ivsize       : 16
geniv        : eseqiv

name         : cbc(des3_ede)
driver       : cbc(des3_ede-generic)
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : givcipher
async        : no
blocksize    : 8
min keysize  : 24
max keysize  : 24
ivsize       : 8
geniv        : eseqiv

name         : cbc(des3_ede)
driver       : cbc(des3_ede-generic)
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : blkcipher
blocksize    : 8
min keysize  : 24
max keysize  : 24
ivsize       : 8
geniv        : <default>

name         : cbc(des)
driver       : cbc(des-generic)
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : givcipher
async        : no
blocksize    : 8
min keysize  : 8
max keysize  : 8
ivsize       : 8
geniv        : eseqiv

name         : cbc(des)
driver       : cbc(des-generic)
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : blkcipher
blocksize    : 8
min keysize  : 8
max keysize  : 8
ivsize       : 8
geniv        : <default>

name         : cbc(aes)
driver       : cbc(aes-asm)
module       : kernel
priority     : 200
refcnt       : 1
selftest     : passed
internal     : no
type         : blkcipher
blocksize    : 16
min keysize  : 16
max keysize  : 32
ivsize       : 16
geniv        : <default>

name         : hmac(sha256)
driver       : hmac(sha256-asm)
module       : kernel
priority     : 150
refcnt       : 3
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 32

name         : jitterentropy_rng
driver       : jitterentropy_rng
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_nopr_hmac_sha256
module       : kernel
priority     : 207
refcnt       : 2
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_nopr_hmac_sha512
module       : kernel
priority     : 206
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_nopr_hmac_sha384
module       : kernel
priority     : 205
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_nopr_hmac_sha1
module       : kernel
priority     : 204
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_pr_hmac_sha256
module       : kernel
priority     : 203
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_pr_hmac_sha512
module       : kernel
priority     : 202
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_pr_hmac_sha384
module       : kernel
priority     : 201
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_pr_hmac_sha1
module       : kernel
priority     : 200
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : lzo
driver       : lzo-generic
module       : kernel
priority     : 0
refcnt       : 2
selftest     : passed
internal     : no
type         : compression

name         : crct10dif
driver       : crct10dif-generic
module       : kernel
priority     : 100
refcnt       : 2
selftest     : passed
internal     : no
type         : shash
blocksize    : 1
digestsize   : 2

name         : crc32c
driver       : crc32c-generic
module       : kernel
priority     : 100
refcnt       : 2
selftest     : passed
internal     : no
type         : shash
blocksize    : 1
digestsize   : 4

name         : deflate
driver       : deflate-generic
module       : kernel
priority     : 0
refcnt       : 2
selftest     : passed
internal     : no
type         : compression

name         : ecb(arc4)
driver       : ecb(arc4)-generic
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : blkcipher
blocksize    : 1
min keysize  : 1
max keysize  : 256
ivsize       : 0
geniv        : <default>

name         : arc4
driver       : arc4-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : cipher
blocksize    : 1
min keysize  : 1
max keysize  : 256

name         : aes
driver       : aes-generic
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : cipher
blocksize    : 16
min keysize  : 16
max keysize  : 32

name         : des3_ede
driver       : des3_ede-generic
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : cipher
blocksize    : 8
min keysize  : 24
max keysize  : 24

name         : des
driver       : des-generic
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : cipher
blocksize    : 8
min keysize  : 8
max keysize  : 8

name         : sha224
driver       : sha224-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 28

name         : sha256
driver       : sha256-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 32

name         : sha1
driver       : sha1-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 20

name         : md5
driver       : md5-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 16

name         : digest_null
driver       : digest_null-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 1
digestsize   : 0

name         : compress_null
driver       : compress_null-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : compression

name         : ecb(cipher_null)
driver       : ecb-cipher_null
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : blkcipher
blocksize    : 1
min keysize  : 0
max keysize  : 0
ivsize       : 0
geniv        : <default>

name         : cipher_null
driver       : cipher_null-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : cipher
blocksize    : 1
min keysize  : 0
max keysize  : 0

name         : sha512
driver       : sha512-arm
module       : kernel
priority     : 250
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 128
digestsize   : 64

name         : sha384
driver       : sha384-arm
module       : kernel
priority     : 250
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 128
digestsize   : 48

name         : sha224
driver       : sha224-asm
module       : kernel
priority     : 150
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 28

name         : sha256
driver       : sha256-asm
module       : kernel
priority     : 150
refcnt       : 4
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 32

name         : sha1
driver       : sha1-asm
module       : kernel
priority     : 150
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 20

name         : aes
driver       : aes-asm
module       : kernel
priority     : 200
refcnt       : 3
selftest     : passed
internal     : no
type         : cipher
blocksize    : 16
min keysize  : 16
max keysize  : 32

Thanks!
swass
 
Posts: 27
Joined: Mon Aug 11, 2014 3:43 pm

Re: marvell_cesa (mv_cesa) crypto issues in Linux 4.2 kernel

Postby moonman » Wed Sep 02, 2015 11:14 pm

Are you on linux-kirkwood or linux-kirkwood-dt? Don't know if matters, but can't check at the moment
Pogoplug V4 | GoFlex Home | Raspberry Pi 4 4GB | CuBox-i4 Pro | ClearFog | BeagleBone Black | Odroid U2 | Odroid C1 | Odroid XU4
-----------------------------------------------------------------------------------------------------------------------
[armv5] Updated U-Boot | [armv5] NAND Rescue System
moonman
Developer
 
Posts: 3314
Joined: Sat Jan 15, 2011 3:36 am

Re: marvell_cesa (mv_cesa) crypto issues in Linux 4.2 kernel

Postby swass » Wed Sep 02, 2015 11:19 pm

I'm on linux-kirkwood. Everything looks like it should work, but doesn't. Checked and see the allhwsupport is set to 1 in /sys/modules/marvell_kirkwood.

Can anyone verify on their kirkwood?
swass
 
Posts: 27
Joined: Mon Aug 11, 2014 3:43 pm

Re: marvell_cesa (mv_cesa) crypto issues in Linux 4.2 kernel

Postby moonman » Thu Sep 03, 2015 7:32 am

DT kernel on Pogoplug v4:
Code: Select all
name         : hmac(sha1)
driver       : mv-hmac-sha1
module       : marvell_cesa
priority     : 300
refcnt       : 1
selftest     : passed
internal     : no
type         : ahash
async        : yes
blocksize    : 64
digestsize   : 20

name         : hmac(md5)
driver       : mv-hmac-md5
module       : marvell_cesa
priority     : 300
refcnt       : 1
selftest     : passed
internal     : no
type         : ahash
async        : yes
blocksize    : 64
digestsize   : 16

name         : sha1
driver       : mv-sha1
module       : marvell_cesa
priority     : 300
refcnt       : 1
selftest     : passed
internal     : no
type         : ahash
async        : yes
blocksize    : 64
digestsize   : 20

name         : md5
driver       : mv-md5
module       : marvell_cesa
priority     : 300
refcnt       : 1
selftest     : passed
internal     : no
type         : ahash
async        : yes
blocksize    : 64
digestsize   : 16

name         : cbc(aes)
driver       : mv-cbc-aes
module       : marvell_cesa
priority     : 300
refcnt       : 1
selftest     : passed
internal     : no
type         : ablkcipher
async        : yes
blocksize    : 16
min keysize  : 16
max keysize  : 32
ivsize       : 16
geniv        : <default>

name         : ecb(aes)
driver       : mv-ecb-aes
module       : marvell_cesa
priority     : 300
refcnt       : 1
selftest     : passed
internal     : no
type         : ablkcipher
async        : yes
blocksize    : 16
min keysize  : 16
max keysize  : 32
ivsize       : 0
geniv        : <default>

name         : cbc(des3_ede)
driver       : mv-cbc-des3-ede
module       : marvell_cesa
priority     : 300
refcnt       : 1
selftest     : passed
internal     : no
type         : ablkcipher
async        : yes
blocksize    : 8
min keysize  : 24
max keysize  : 24
ivsize       : 8
geniv        : <default>

name         : ecb(des3_ede)
driver       : mv-ecb-des3-ede
module       : marvell_cesa
priority     : 300
refcnt       : 1
selftest     : passed
internal     : no
type         : ablkcipher
async        : yes
blocksize    : 8
min keysize  : 24
max keysize  : 24
ivsize       : 8
geniv        : <default>

name         : cbc(des)
driver       : mv-cbc-des
module       : marvell_cesa
priority     : 300
refcnt       : 1
selftest     : passed
internal     : no
type         : ablkcipher
async        : yes
blocksize    : 8
min keysize  : 8
max keysize  : 8
ivsize       : 8
geniv        : <default>

name         : ecb(des)
driver       : mv-ecb-des
module       : marvell_cesa
priority     : 300
refcnt       : 1
selftest     : passed
internal     : no
type         : ablkcipher
async        : yes
blocksize    : 8
min keysize  : 8
max keysize  : 8
ivsize       : 0
geniv        : <default>

name         : cbc(aes)
driver       : cbc(aes-asm)
module       : kernel
priority     : 200
refcnt       : 1
selftest     : passed
internal     : no
type         : blkcipher
blocksize    : 16
min keysize  : 16
max keysize  : 32
ivsize       : 16
geniv        : <default>

name         : hmac(sha256)
driver       : hmac(sha256-asm)
module       : kernel
priority     : 150
refcnt       : 2
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 32

name         : jitterentropy_rng
driver       : jitterentropy_rng
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_nopr_hmac_sha256
module       : kernel
priority     : 207
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_nopr_hmac_sha512
module       : kernel
priority     : 206
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_nopr_hmac_sha384
module       : kernel
priority     : 205
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_nopr_hmac_sha1
module       : kernel
priority     : 204
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_pr_hmac_sha256
module       : kernel
priority     : 203
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_pr_hmac_sha512
module       : kernel
priority     : 202
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_pr_hmac_sha384
module       : kernel
priority     : 201
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : stdrng
driver       : drbg_pr_hmac_sha1
module       : kernel
priority     : 200
refcnt       : 1
selftest     : passed
internal     : no
type         : rng
seedsize     : 0

name         : lzo
driver       : lzo-generic
module       : kernel
priority     : 0
refcnt       : 2
selftest     : passed
internal     : no
type         : compression

name         : crct10dif
driver       : crct10dif-generic
module       : kernel
priority     : 100
refcnt       : 2
selftest     : passed
internal     : no
type         : shash
blocksize    : 1
digestsize   : 2

name         : crc32c
driver       : crc32c-generic
module       : kernel
priority     : 100
refcnt       : 2
selftest     : passed
internal     : no
type         : shash
blocksize    : 1
digestsize   : 4

name         : deflate
driver       : deflate-generic
module       : kernel
priority     : 0
refcnt       : 2
selftest     : passed
internal     : no
type         : compression

name         : ecb(arc4)
driver       : ecb(arc4)-generic
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : blkcipher
blocksize    : 1
min keysize  : 1
max keysize  : 256
ivsize       : 0
geniv        : <default>

name         : arc4
driver       : arc4-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : cipher
blocksize    : 1
min keysize  : 1
max keysize  : 256

name         : aes
driver       : aes-generic
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : cipher
blocksize    : 16
min keysize  : 16
max keysize  : 32

name         : des3_ede
driver       : des3_ede-generic
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : cipher
blocksize    : 8
min keysize  : 24
max keysize  : 24

name         : des
driver       : des-generic
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : cipher
blocksize    : 8
min keysize  : 8
max keysize  : 8

name         : sha224
driver       : sha224-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 28

name         : sha256
driver       : sha256-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 32

name         : sha1
driver       : sha1-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 20

name         : md5
driver       : md5-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 16

name         : digest_null
driver       : digest_null-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 1
digestsize   : 0

name         : compress_null
driver       : compress_null-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : compression

name         : ecb(cipher_null)
driver       : ecb-cipher_null
module       : kernel
priority     : 100
refcnt       : 1
selftest     : passed
internal     : no
type         : blkcipher
blocksize    : 1
min keysize  : 0
max keysize  : 0
ivsize       : 0
geniv        : <default>

name         : cipher_null
driver       : cipher_null-generic
module       : kernel
priority     : 0
refcnt       : 1
selftest     : passed
internal     : no
type         : cipher
blocksize    : 1
min keysize  : 0
max keysize  : 0

name         : sha512
driver       : sha512-arm
module       : kernel
priority     : 250
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 128
digestsize   : 64

name         : sha384
driver       : sha384-arm
module       : kernel
priority     : 250
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 128
digestsize   : 48

name         : sha224
driver       : sha224-asm
module       : kernel
priority     : 150
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 28

name         : sha256
driver       : sha256-asm
module       : kernel
priority     : 150
refcnt       : 3
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 32

name         : sha1
driver       : sha1-asm
module       : kernel
priority     : 150
refcnt       : 1
selftest     : passed
internal     : no
type         : shash
blocksize    : 64
digestsize   : 20

name         : aes
driver       : aes-asm
module       : kernel
priority     : 200
refcnt       : 1
selftest     : passed
internal     : no
type         : cipher
blocksize    : 16
min keysize  : 16
max keysize  : 32


I will revert to mv_cesa on non-dt kernel (or something needs to be changed in the kernel or the driver to support this setup without device tree - but there is no point since all that code has been removed in mainline anyway)
Pogoplug V4 | GoFlex Home | Raspberry Pi 4 4GB | CuBox-i4 Pro | ClearFog | BeagleBone Black | Odroid U2 | Odroid C1 | Odroid XU4
-----------------------------------------------------------------------------------------------------------------------
[armv5] Updated U-Boot | [armv5] NAND Rescue System
moonman
Developer
 
Posts: 3314
Joined: Sat Jan 15, 2011 3:36 am

Re: marvell_cesa (mv_cesa) crypto issues in Linux 4.2 kernel

Postby swass » Thu Sep 03, 2015 12:29 pm

EDIT: Thanks, moonman. I actually just upgraded to linux-kirkwood-dt and it is working now. However, the driver seems to be performing poorly -- actually more poorly than with mv_cesa previously.

Here is something interesting that I noticed:

# cat /sys/devices/platform/mbus/f1030000.crypto/of_node/compatible; echo
marvell,orion-crypto

Shouldn't this be marvell,kirkwood-crypto? When I glanced at the source for the driver before, I think I remember that DMA was only enabled if it is kirkwood and orion disables it. Not 100% sure on that though. To my knowledge, this SoC should be kirkwood. Thoughts?

Also, for someone who doesn't work with uboot much, do you have a link to an instruction on how to upgrade to the latest uboot that is generally complete?
swass
 
Posts: 27
Joined: Mon Aug 11, 2014 3:43 pm

Re: marvell_cesa (mv_cesa) crypto issues in Linux 4.2 kernel

Postby swass » Thu Sep 03, 2015 6:41 pm

Just found this in the source. Therefore I think it's safe to say the driver does not believe the 88f6192 has a TDMA block.

Code: Select all
static const struct of_device_id mv_cesa_of_match_table[] = {
   { .compatible = "marvell,orion-crypto", .data = &orion_caps },
   { .compatible = "marvell,kirkwood-crypto", .data = &kirkwood_caps },
   { .compatible = "marvell,dove-crypto", .data = &kirkwood_caps },
   { .compatible = "marvell,armada-370-crypto", .data = &armada_370_caps },
   { .compatible = "marvell,armada-xp-crypto", .data = &armada_xp_caps },
   { .compatible = "marvell,armada-375-crypto", .data = &armada_xp_caps },
   { .compatible = "marvell,armada-38x-crypto", .data = &armada_xp_caps },
   {}
};


Code: Select all
/**
 * struct mv_cesa_caps - CESA device capabilities
 * @engines:      number of engines
 * @has_tdma:      whether this device has a TDMA block
 * @cipher_algs:   supported cipher algorithms
 * @ncipher_algs:   number of supported cipher algorithms
 * @ahash_algs:      supported hash algorithms
 * @nahash_algs:   number of supported hash algorithms
 *
 * Structure used to describe CESA device capabilities.
 */
struct mv_cesa_caps {
   int nengines;
   bool has_tdma;
   struct crypto_alg **cipher_algs;
   int ncipher_algs;
   struct ahash_alg **ahash_algs;
   int nahash_algs;
};


Code: Select all
static const struct mv_cesa_caps orion_caps = {
   .nengines = 1,
   .cipher_algs = orion_cipher_algs,
   .ncipher_algs = ARRAY_SIZE(orion_cipher_algs),
   .ahash_algs = orion_ahash_algs,
   .nahash_algs = ARRAY_SIZE(orion_ahash_algs),
   .has_tdma = false,
};


.. versus ..

Code: Select all
static const struct mv_cesa_caps kirkwood_caps = {
   .nengines = 1,
   .cipher_algs = orion_cipher_algs,
   .ncipher_algs = ARRAY_SIZE(orion_cipher_algs),
   .ahash_algs = orion_ahash_algs,
   .nahash_algs = ARRAY_SIZE(orion_ahash_algs),
   .has_tdma = true,
};


However, the architecture document from Marvell indicates it does:
https://origin-www.marvell.com/embedded-processors/kirkwood/assets/HW_88F619x_OpenSource.pdf
Cryptographic engine
• Hardware implementation on encryption and authentication engines, to boost packet processing speed
• Dedicated DMA to feed the hardware engines with data from the internal SRAM memory or from the DDR memory
• Implements AES, DES, and 3DES encryption algorithms
• Implements SHA1 and MD5 authentication algorithms
swass
 
Posts: 27
Joined: Mon Aug 11, 2014 3:43 pm

Re: marvell_cesa (mv_cesa) crypto issues in Linux 4.2 kernel

Postby moonman » Thu Sep 03, 2015 8:54 pm

Since you are running arch already you can just install uboot-pogoplugv4 and answer 'y' when prompted. That's it for uboot installation. Environment is already set up the right way to get uImage and zImage + corresponding fdt.

You are free to submit a patch to get it working if you wish.

My GoFlex shows the same thing:
Code: Select all
marvell,orion-crypto
Pogoplug V4 | GoFlex Home | Raspberry Pi 4 4GB | CuBox-i4 Pro | ClearFog | BeagleBone Black | Odroid U2 | Odroid C1 | Odroid XU4
-----------------------------------------------------------------------------------------------------------------------
[armv5] Updated U-Boot | [armv5] NAND Rescue System
moonman
Developer
 
Posts: 3314
Joined: Sat Jan 15, 2011 3:36 am

Re: marvell_cesa (mv_cesa) crypto issues in Linux 4.2 kernel

Postby swass » Thu Sep 03, 2015 9:04 pm

Thanks for the tip on uboot, moonman.

I'm a little rusty to be submitting patches for them, but I'm curious what might be going on here. Based on what one of the driver authors said in a patch, it chooses marvell,orion-crypto by default for compatibility reasons with non-dt kernels, but then I would have also expected the non-dt kernel to work just fine with the driver (perhaps without DMA, as is currently the case). I'm at this point just trying to understand why it is choosing that -- if something is wrong with the DT or because it isn't finding a property.
swass
 
Posts: 27
Joined: Mon Aug 11, 2014 3:43 pm

Re: marvell_cesa (mv_cesa) crypto issues in Linux 4.2 kernel

Postby moonman » Thu Sep 03, 2015 9:10 pm

Maybe this patch required: http://code.bulix.org/qul84q-88670
But from what I can see it is not in the latest next kernel source either.
Pogoplug V4 | GoFlex Home | Raspberry Pi 4 4GB | CuBox-i4 Pro | ClearFog | BeagleBone Black | Odroid U2 | Odroid C1 | Odroid XU4
-----------------------------------------------------------------------------------------------------------------------
[armv5] Updated U-Boot | [armv5] NAND Rescue System
moonman
Developer
 
Posts: 3314
Joined: Sat Jan 15, 2011 3:36 am

Re: marvell_cesa (mv_cesa) crypto issues in Linux 4.2 kernel

Postby swass » Thu Sep 03, 2015 10:25 pm

That looks like it may be along the lines of what we're looking for. Looked to me like it wasn't supplying the right property to the driver, which isn't really the driver's fault I guess. I'm trying a really ugly patch to cesa.c right now to see if I can hack it into working, at least for my purposes, and then compiling linux-kirkwood-dt to see what happens. I just really want to have DMA for LUKS. :D
swass
 
Posts: 27
Joined: Mon Aug 11, 2014 3:43 pm

Next

Return to Marvell Kirkwood

Who is online

Users browsing this forum: No registered users and 4 guests