This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM62x crypto accelerator issue on SDK9.0

Part Number: AM6252
Other Parts Discussed in Thread: SHA-256

Tool/software:

Hi Team,

We used the SDK 10 patch to enable  crypto hardware accelerator, it works well on SDK10, but after backport to SDK9.0, it doesn't work. Test steps:

1, Merged new patch on SDK9.0,

2, Updated SDK9.0 sa2ul.c with SDK 10.00.07.04 sa2ul.c

The test result is same as before: the crypto hardware accelerator process time is same as w/o hardware accelerator processing time, please see below logs for details

With accelerator enable

Software to do crypto ways

-Thomas

  • On "but after backport to SDK9.0, it doesn't work"

    >> Q1:  provide the exact backport steps

    As i can see here: 

    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/log/drivers/crypto/sa2ul.c?h=09.00.00.006 (9.0 code base) 

    Vs

    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/log/drivers/crypto/sa2ul.c?h=10.00.07 (10.0 code base)

    There are minor differences in driver code between different baselines. 

    >> Q2: Did you try git am < file.patch> on 9.0 code base and patch applied cleanly?

  • Verify that dmesg logs doesn't have any failure logs regarding sa2ul

    Looks like sa2ul algorithms failed to register

    check cat /proc/crypto and see SHA512, sha256 and AES are getting registered with sa2ul

    As Praneeth suggested, port the minor changes manually for base file after copying

  • Yes, only two files have been modified.The drivers/crypto/sa2ul.c and drivers/crypto/sa2ul.h before and after the modification as follows.

    before modify sa2ul.cbefore modify sa2ul.h

    after modify sa2ul.cafter modify sa2ul.h

  • root@OK62xx:/# dmesg | grep sa2ul
    
    There were no search results.The result cat /proc/crypto as follow.
    root@OK62xx:/# cat /proc/crypto
    name         : md5
    driver       : md5-generic
    module       : md5
    priority     : 0
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 64
    digestsize   : 16
    
    name         : cbc(des3_ede)
    driver       : cbc(des3_ede-generic)
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : skcipher
    async        : no
    blocksize    : 8
    min keysize  : 24
    max keysize  : 24
    ivsize       : 8
    chunksize    : 8
    walksize     : 8
    
    name         : cbc(des)
    driver       : cbc(des-generic)
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : skcipher
    async        : no
    blocksize    : 8
    min keysize  : 8
    max keysize  : 8
    ivsize       : 8
    chunksize    : 8
    walksize     : 8
    
    name         : des3_ede
    driver       : des3_ede-generic
    module       : des_generic
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : cipher
    blocksize    : 8
    min keysize  : 24
    max keysize  : 24
    
    name         : des
    driver       : des-generic
    module       : des_generic
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : cipher
    blocksize    : 8
    min keysize  : 8
    max keysize  : 8
    
    name         : crct10dif
    driver       : crct10dif-arm64-ce
    module       : crct10dif_ce
    priority     : 200
    refcnt       : 2
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 1
    digestsize   : 2
    
    name         : crct10dif
    driver       : crct10dif-arm64-neon
    module       : crct10dif_ce
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 1
    digestsize   : 2
    
    name         : sha512
    driver       : sha512-sa2ul
    module       : sa2ul
    priority     : 400
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : ahash
    async        : yes
    blocksize    : 128
    digestsize   : 64
    
    name         : sha256
    driver       : sha256-sa2ul
    module       : sa2ul
    priority     : 400
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : ahash
    async        : yes
    blocksize    : 64
    digestsize   : 32
    
    name         : crc64
    driver       : mcrc
    module       : mcrc
    priority     : 200
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 1
    digestsize   : 8
    
    name         : pkcs1pad(rsa,sha256)
    driver       : pkcs1pad(rsa-generic,sha256)
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : akcipher
    
    name         : jitterentropy_rng
    driver       : jitterentropy_rng
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : rng
    seedsize     : 0
    
    name         : crc64-rocksoft
    driver       : crc64-rocksoft-generic
    module       : kernel
    priority     : 200
    refcnt       : 2
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 1
    digestsize   : 8
    
    name         : sha224
    driver       : sha224-arm64-neon
    module       : kernel
    priority     : 150
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 64
    digestsize   : 28
    
    name         : sha256
    driver       : sha256-arm64-neon
    module       : kernel
    priority     : 150
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 64
    digestsize   : 32
    
    name         : sha224
    driver       : sha224-arm64
    module       : kernel
    priority     : 125
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 64
    digestsize   : 28
    
    name         : sha256
    driver       : sha256-arm64
    module       : kernel
    priority     : 125
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 64
    digestsize   : 32
    
    name         : cbcmac(aes)
    driver       : cbcmac-aes-ce
    module       : kernel
    priority     : 300
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 1
    digestsize   : 16
    
    name         : xcbc(aes)
    driver       : xcbc-aes-ce
    module       : kernel
    priority     : 300
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 16
    digestsize   : 16
    
    name         : cmac(aes)
    driver       : cmac-aes-ce
    module       : kernel
    priority     : 300
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 16
    digestsize   : 16
    
    name         : essiv(cbc(aes),sha256)
    driver       : essiv-cbc-aes-sha256-ce
    module       : kernel
    priority     : 301
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : skcipher
    async        : no
    blocksize    : 16
    min keysize  : 16
    max keysize  : 32
    ivsize       : 16
    chunksize    : 16
    walksize     : 16
    
    name         : cts(cbc(aes))
    driver       : cts-cbc-aes-ce
    module       : kernel
    priority     : 300
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : skcipher
    async        : no
    blocksize    : 16
    min keysize  : 16
    max keysize  : 32
    ivsize       : 16
    chunksize    : 16
    walksize     : 32
    
    name         : xts(aes)
    driver       : xts-aes-ce
    module       : kernel
    priority     : 300
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : skcipher
    async        : no
    blocksize    : 16
    min keysize  : 32
    max keysize  : 64
    ivsize       : 16
    chunksize    : 16
    walksize     : 32
    
    name         : xctr(aes)
    driver       : xctr-aes-ce
    module       : kernel
    priority     : 300
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : skcipher
    async        : no
    blocksize    : 1
    min keysize  : 16
    max keysize  : 32
    ivsize       : 16
    chunksize    : 16
    walksize     : 16
    
    name         : ctr(aes)
    driver       : ctr-aes-ce
    module       : kernel
    priority     : 300
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : skcipher
    async        : no
    blocksize    : 1
    min keysize  : 16
    max keysize  : 32
    ivsize       : 16
    chunksize    : 16
    walksize     : 16
    
    name         : cbc(aes)
    driver       : cbc-aes-ce
    module       : kernel
    priority     : 300
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : skcipher
    async        : no
    blocksize    : 16
    min keysize  : 16
    max keysize  : 32
    ivsize       : 16
    chunksize    : 16
    walksize     : 16
    
    name         : ecb(aes)
    driver       : ecb-aes-ce
    module       : kernel
    priority     : 300
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : skcipher
    async        : no
    blocksize    : 16
    min keysize  : 16
    max keysize  : 32
    ivsize       : 0
    chunksize    : 16
    walksize     : 16
    
    name         : ccm(aes)
    driver       : ccm-aes-ce
    module       : kernel
    priority     : 300
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : aead
    async        : no
    blocksize    : 1
    ivsize       : 16
    maxauthsize  : 16
    geniv        : <none>
    
    name         : aes
    driver       : aes-ce
    module       : kernel
    priority     : 250
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : cipher
    blocksize    : 16
    min keysize  : 16
    max keysize  : 32
    
    name         : gcm(aes)
    driver       : gcm-aes-ce
    module       : kernel
    priority     : 300
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : aead
    async        : no
    blocksize    : 1
    ivsize       : 12
    maxauthsize  : 16
    geniv        : <none>
    
    name         : sha256
    driver       : sha256-ce
    module       : kernel
    priority     : 200
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 64
    digestsize   : 32
    
    name         : sha224
    driver       : sha224-ce
    module       : kernel
    priority     : 200
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 64
    digestsize   : 28
    
    name         : sha1
    driver       : sha1-ce
    module       : kernel
    priority     : 200
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 64
    digestsize   : 20
    
    name         : ghash
    driver       : ghash-generic
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 16
    digestsize   : 16
    
    name         : stdrng
    driver       : drbg_nopr_hmac_sha512
    module       : kernel
    priority     : 207
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : rng
    seedsize     : 0
    
    name         : stdrng
    driver       : drbg_nopr_hmac_sha256
    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_sha512
    module       : kernel
    priority     : 203
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : rng
    seedsize     : 0
    
    name         : stdrng
    driver       : drbg_pr_hmac_sha256
    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         : stdrng
    driver       : ansi_cprng
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : rng
    seedsize     : 48
    
    name         : crct10dif
    driver       : crct10dif-generic
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 1
    digestsize   : 2
    
    name         : crc32c
    driver       : crc32c-generic
    module       : kernel
    priority     : 100
    refcnt       : 3
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 1
    digestsize   : 4
    
    name         : zlib-deflate
    driver       : zlib-deflate-scomp
    module       : kernel
    priority     : 0
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : scomp
    
    name         : deflate
    driver       : deflate-scomp
    module       : kernel
    priority     : 0
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : scomp
    
    name         : deflate
    driver       : deflate-generic
    module       : kernel
    priority     : 0
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : compression
    
    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         : sha384
    driver       : sha384-generic
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 128
    digestsize   : 48
    
    name         : sha512
    driver       : sha512-generic
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 128
    digestsize   : 64
    
    name         : sha224
    driver       : sha224-generic
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 64
    digestsize   : 28
    
    name         : sha256
    driver       : sha256-generic
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 64
    digestsize   : 32
    
    name         : sha1
    driver       : sha1-generic
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : shash
    blocksize    : 64
    digestsize   : 20
    
    name         : ecb(cipher_null)
    driver       : ecb-cipher_null
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : skcipher
    async        : no
    blocksize    : 1
    min keysize  : 0
    max keysize  : 0
    ivsize       : 0
    chunksize    : 1
    walksize     : 1
    
    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         : 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         : rsa
    driver       : rsa-generic
    module       : kernel
    priority     : 100
    refcnt       : 1
    selftest     : passed
    internal     : no
    type         : akcipher
    

  • Hi, I've tested the patch out to enable AES, AEAD and SHA-256 algoritms on 9.0 and 10.0 SDK using kernel self tests and openssl

    Base commit: c1c2f1971fbf6ddad93a8c94314fe8221e7aa6be
    Tag: 09.03.01

    Please apply the 6 patches that have been shared previously (also attached here) and then this 0007-crypto-sa2ul-enable-other-algos.patch

    Previously shared patches:
    0001 0002 0003 0004 0005 0006

  • Thank you.The problem has been solved.