Hi Corentin thanks for working on it > Gesendet: Dienstag, 07. November 2023 um 16:55 Uhr > Von: "Corentin Labbe" <clabbe@xxxxxxxxxxxx> > An: davem@xxxxxxxxxxxxx, heiko@xxxxxxxxx, herbert@xxxxxxxxxxxxxxxxxxx, krzysztof.kozlowski+dt@xxxxxxxxxx, mturquette@xxxxxxxxxxxx, p.zabel@xxxxxxxxxxxxxx, robh+dt@xxxxxxxxxx, sboyd@xxxxxxxxxx > Cc: ricardo@xxxxxxxxxxx, devicetree@xxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-clk@xxxxxxxxxxxxxxx, linux-crypto@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, linux-rockchip@xxxxxxxxxxxxxxxxxxx, "Corentin Labbe" <clabbe@xxxxxxxxxxxx> > Betreff: [PATCH 6/6] crypto: rockchip: add rk3588 driver > > RK3588 have a new crypto IP, this patch adds basic support for it. > Only hashes and cipher are handled for the moment. > > Signed-off-by: Corentin Labbe <clabbe@xxxxxxxxxxxx> > --- > drivers/crypto/Kconfig | 29 + > drivers/crypto/rockchip/Makefile | 5 + > drivers/crypto/rockchip/rk2_crypto.c | 739 ++++++++++++++++++ > drivers/crypto/rockchip/rk2_crypto.h | 246 ++++++ > drivers/crypto/rockchip/rk2_crypto_ahash.c | 344 ++++++++ > drivers/crypto/rockchip/rk2_crypto_skcipher.c | 576 ++++++++++++++ > 6 files changed, 1939 insertions(+) > create mode 100644 drivers/crypto/rockchip/rk2_crypto.c > create mode 100644 drivers/crypto/rockchip/rk2_crypto.h > create mode 100644 drivers/crypto/rockchip/rk2_crypto_ahash.c > create mode 100644 drivers/crypto/rockchip/rk2_crypto_skcipher.c > > diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig > index 79c3bb9c99c3..b6a2027b1f9a 100644 > --- a/drivers/crypto/Kconfig > +++ b/drivers/crypto/Kconfig > @@ -660,6 +660,35 @@ config CRYPTO_DEV_ROCKCHIP_DEBUG > the number of requests per algorithm and other internal stats. > > > +config CRYPTO_DEV_ROCKCHIP2 > + tristate "Rockchip's cryptographic offloader V2" > + depends on OF && ARCH_ROCKCHIP > + depends on PM it should depend on CONFIG_CRYPTO_DEV_ROCKCHIP as rockchip folder is not included without it drivers/crypto/Makefile obj-$(CONFIG_CRYPTO_DEV_ROCKCHIP) += rockchip/ > + select CRYPTO_ECB > + select CRYPTO_CBC > + select CRYPTO_AES > + select CRYPTO_MD5 > + select CRYPTO_SHA1 > + select CRYPTO_SHA256 > + select CRYPTO_SHA512 > + select CRYPTO_SM3_GENERIC > + select CRYPTO_HASH > + select CRYPTO_SKCIPHER > + select CRYPTO_ENGINE > + > + help > + This driver interfaces with the hardware crypto offloader present > + on RK3566, RK3568 and RK3588. > + > +config CRYPTO_DEV_ROCKCHIP2_DEBUG > + bool "Enable Rockchip V2 crypto stats" > + depends on CRYPTO_DEV_ROCKCHIP2 > + depends on DEBUG_FS > + help > + Say y to enable Rockchip crypto debug stats. > + This will create /sys/kernel/debug/rk3588_crypto/stats for displaying > + the number of requests per algorithm and other internal stats. > + > config CRYPTO_DEV_ZYNQMP_AES > tristate "Support for Xilinx ZynqMP AES hw accelerator" > depends on ZYNQMP_FIRMWARE || COMPILE_TEST > diff --git a/drivers/crypto/rockchip/Makefile b/drivers/crypto/rockchip/Makefile > index 785277aca71e..452a12ff6538 100644 else i did some tests, but it does not seem that the offloader is used (requests stay at initial value after the bootup test) i wonder about the last 3 lines in dmesg (fallback), seems i miss something for these. root@bpi-r2pro:~# dmesg | grep crypto [ 0.150643] alg: extra crypto tests enabled. This is intended for developer use only. [ 2.718110] rk2-crypto fe380000.crypto: will run requests pump with realtime priority [ 2.720605] rk2-crypto fe380000.crypto: Registers crypto algos [ 2.721910] rk2-crypto fe380000.crypto: Register ecb(aes) as ecb-aes-rk2 [ 2.724435] rk2-crypto fe380000.crypto: Register cbc(aes) as cbc-aes-rk2 [ 2.725072] rk2-crypto fe380000.crypto: Register xts(aes) as xts-aes-rk2 [ 2.725731] rk2-crypto fe380000.crypto: Register md5 as rk2-md5 3 [ 2.726310] rk2-crypto fe380000.crypto: Register sha1 as rk2-sha1 4 [ 2.726901] rk2-crypto fe380000.crypto: Register sha256 as rk2-sha256 5 [ 2.727521] rk2-crypto fe380000.crypto: Register sha384 as rk2-sha384 6 [ 2.728142] rk2-crypto fe380000.crypto: Register sha512 as rk2-sha512 7 [ 2.728763] rk2-crypto fe380000.crypto: Register sm3 as rk2-sm3 8 [ 3.502442] rk2-crypto fe380000.crypto: Fallback for xts-aes-rk2 is xts-aes-ce [ 3.770678] rk2-crypto fe380000.crypto: Fallback for cbc-aes-rk2 is cbc-aes-ce [ 3.939055] rk2-crypto fe380000.crypto: Fallback for ecb-aes-rk2 is ecb-aes-ce root@bpi-r2pro:~# cat /sys/kernel/debug/rk2_crypto/stats rk2-crypto fe380000.crypto requests: 581 ecb-aes-rk2 ecb(aes) reqs=132 fallback=1994 fallback due to length: 342 fallback due to alignment: 1648 fallback due to SGs: 0 cbc-aes-rk2 cbc(aes) reqs=156 fallback=2182 fallback due to length: 329 fallback due to alignment: 1841 fallback due to SGs: 6 xts-aes-rk2 xts(aes) reqs=137 fallback=2143 fallback due to length: 116 fallback due to alignment: 739 fallback due to SGs: 0 rk2-md5 md5 reqs=14 fallback=739 rk2-sha1 sha1 reqs=28 fallback=716 rk2-sha256 sha256 reqs=25 fallback=654 rk2-sha384 sha384 reqs=32 fallback=656 rk2-sha512 sha512 reqs=34 fallback=638 rk2-sm3 sm3 reqs=23 fallback=712 root@bpi-r2pro:~# kcapi-rng -b 512 > rng.bin root@bpi-r2pro:~# cat /sys/kernel/debug/rk2_crypto/stats rk2-crypto fe380000.crypto requests: 581 ecb-aes-rk2 ecb(aes) reqs=132 fallback=1994 fallback due to length: 342 fallback due to alignment: 1648 fallback due to SGs: 0 cbc-aes-rk2 cbc(aes) reqs=156 fallback=2182 fallback due to length: 329 fallback due to alignment: 1841 fallback due to SGs: 6 xts-aes-rk2 xts(aes) reqs=137 fallback=2143 fallback due to length: 116 fallback due to alignment: 739 fallback due to SGs: 0 rk2-md5 md5 reqs=14 fallback=739 rk2-sha1 sha1 reqs=28 fallback=716 rk2-sha256 sha256 reqs=25 fallback=654 rk2-sha384 sha384 reqs=32 fallback=656 rk2-sha512 sha512 reqs=34 fallback=638 rk2-sm3 sm3 reqs=23 fallback=712 root@bpi-r2pro:~# if needed this is my current defconfig/tree: https://github.com/frank-w/BPI-Router-Linux/blob/6.6-r2pro2/arch/arm64/configs/quartz64_defconfig#L924 regards Frank