mbox series

[v4,00/33] crypto: rockchip: permit to pass self-tests

Message ID 20220401201804.2867154-1-clabbe@baylibre.com
Headers show
Series crypto: rockchip: permit to pass self-tests | expand

Message

Corentin Labbe April 1, 2022, 8:17 p.m. UTC
Hello

The rockchip crypto driver is broken and do not pass self-tests.
This serie's goal is to permit to become usable and pass self-tests.

This serie also adds support for 2 more SoCs.

This whole serie is tested on a rk3328-rock64, rk3288-miqi with selftests (with
CONFIG_CRYPTO_MANAGER_EXTRA_TESTS=y)
The serie is also tested on a rk3399 by Hugh Cole-Baker
<sigmaris@gmail.com> and Igor Velkov <iav@iav.lv>, Thanks to them for
testing.

Regards

Changes since v1:
- select CRYPTO_ENGINE
- forgot to free fallbacks TFMs
- fixed kernel test robots warning
- add the PM patch

Changes since v2:
- Added DMA clock back to 3288 since it dont work without it
- fallback needed to select CBC and ECB configs
- Added support for rk3399
- Added more patch (style, read_poll_timeout)

Changes since v3:
- full rewrite of support for RK3399
- splited dt-binding patch in two

Corentin Labbe (33):
  crypto: rockchip: use dev_err for error message about interrupt
  crypto: rockchip: do not use uninitialized variable
  crypto: rockchip: do not do custom power management
  crypto: rockchip: fix privete/private typo
  crypto: rockchip: do not store mode globally
  crypto: rockchip: add fallback for cipher
  crypto: rockchip: add fallback for ahash
  crypto: rockchip: better handle cipher key
  crypto: rockchip: remove non-aligned handling
  crypto: rockchip: rework by using crypto_engine
  crypto: rockchip: rewrite type
  crypto: rockchip: add debugfs
  crypto: rockchip: introduce PM
  crypto: rockchip: handle reset also in PM
  crypto: rockchip: use clk_bulk to simplify clock management
  crypto: rockchip: add myself as maintainer
  crypto: rockchip: use read_poll_timeout
  crypto: rockchip: fix style issue
  crypto: rockchip: add support for rk3328
  crypto: rockchip: rename ablk functions to cipher
  crypto: rockchip: rework rk_handle_req function
  crypto: rockchip: use a rk_crypto_info variable instead of lot of indirection
  crypto: rockchip: use the rk_crypto_info given as parameter
  crypto: rockchip: rename crypto_info to main in TFM context
  crypto: rockchip: store crypto_info in request context
  crypto: rockchip: Add support for rk3399
  dt-bindings: crypto: convert rockchip-crypto to yaml
  dt-bindings: crypto: rockchip: convert to new driver bindings
  clk: rk3399: use proper crypto0 name
  ARM: dts: rk3288: crypto does not need reset-names anymore
  arm64: dts: rockchip: add rk3328 crypto node
  arm64: dts: rockchip: rk3399: add crypto node
  crypto: rockchip: Check for clocks numbers and their frequencies

 .../crypto/rockchip,rk3288-crypto.yaml        | 117 ++++
 .../bindings/crypto/rockchip-crypto.txt       |  28 -
 MAINTAINERS                                   |   7 +
 arch/arm/boot/dts/rk3288.dtsi                 |   1 -
 arch/arm64/boot/dts/rockchip/rk3328.dtsi      |  10 +
 arch/arm64/boot/dts/rockchip/rk3399.dtsi      |  18 +
 drivers/crypto/Kconfig                        |  15 +
 drivers/crypto/rockchip/rk3288_crypto.c       | 505 ++++++++--------
 drivers/crypto/rockchip/rk3288_crypto.h       |  99 +--
 drivers/crypto/rockchip/rk3288_crypto_ahash.c | 256 +++++---
 .../crypto/rockchip/rk3288_crypto_skcipher.c  | 571 ++++++++++--------
 include/dt-bindings/clock/rk3399-cru.h        |   6 +-
 12 files changed, 959 insertions(+), 674 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/crypto/rockchip,rk3288-crypto.yaml
 delete mode 100644 Documentation/devicetree/bindings/crypto/rockchip-crypto.txt

Comments

John Keeping April 4, 2022, 11:31 a.m. UTC | #1
On Fri, Apr 01, 2022 at 08:17:39PM +0000, Corentin Labbe wrote:
> The key should not be set in hardware too much in advance, this will
> fail it 2 TFM with different keys generate alternative requests.
> The key should be stored and used just before doing cipher operations.
> 
> Fixes: ce0183cb6464b ("crypto: rockchip - switch to skcipher API")
> Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
> ---
>  drivers/crypto/rockchip/rk3288_crypto.h          |  1 +
>  drivers/crypto/rockchip/rk3288_crypto_skcipher.c | 10 +++++++---
>  2 files changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h
> index 8b1e15d8ddc6..826508e4a0c3 100644
> --- a/drivers/crypto/rockchip/rk3288_crypto.h
> +++ b/drivers/crypto/rockchip/rk3288_crypto.h
> @@ -245,6 +245,7 @@ struct rk_ahash_rctx {
>  struct rk_cipher_ctx {
>  	struct rk_crypto_info		*dev;
>  	unsigned int			keylen;
> +	u32 key[AES_MAX_KEY_SIZE / 4];

Should this be u8?  It's only ever memcpy'd so the fact the registers
are 32-bit is irrelevant.

(Also a very minor nit: this should probably be aligned in the same was
as the above two variables.)
John Keeping April 4, 2022, 11:39 a.m. UTC | #2
On Fri, Apr 01, 2022 at 08:17:49PM +0000, Corentin Labbe wrote:
> This patch fixes some warning reported by checkpatch
> 
> Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
> ---
>  drivers/crypto/rockchip/rk3288_crypto_ahash.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)

There's also a badly indented comment in rk_hash_run() which could be
fixed in this patch.
Rob Herring April 6, 2022, 4:07 p.m. UTC | #3
On Fri, 01 Apr 2022 20:18:00 +0000, Corentin Labbe wrote:
> RK3399 has 2 crypto instance, named crypto0 and crypto1 in the TRM.
> Only reset for crypto1 is correctly named, but crypto0 is not.
> Since nobody use them, add a 0 to be consistent with the TRM and crypto1 entries.
> 
> Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
> ---
>  include/dt-bindings/clock/rk3399-cru.h | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 

Acked-by: Rob Herring <robh@kernel.org>