From bb63dd2d5bf42cd2c5535952fc9467296a9c1837 Mon Sep 17 00:00:00 2001 From: aakkll <94471752+aakkll@users.noreply.github.com> Date: Fri, 22 Jul 2022 18:12:53 +0800 Subject: [PATCH 1/2] kernel: bump 5.18 to 5.18.13 (#9818) Signed-off-by: aakkll <94471752+aakkll@users.noreply.github.com> --- include/kernel-5.18 | 4 +- ...k-events-support-multiple-registrant.patch | 30 +- ...-linux-kernel-to-support-shortcut-fe.patch | 8 +- .../600-netfilter_conntrack_flush.patch | 4 +- ...-netfilter_optional_tcp_window_check.patch | 6 +- .../patches-5.18/801-fix-stmmac_mdio.patch | 16 +- ...o-rockchip-permit-to-pass-self-tests.patch | 10433 ++++------------ 7 files changed, 2146 insertions(+), 8355 deletions(-) diff --git a/include/kernel-5.18 b/include/kernel-5.18 index 95b078940c699a..a8b82aa4c5652d 100644 --- a/include/kernel-5.18 +++ b/include/kernel-5.18 @@ -1,2 +1,2 @@ -LINUX_VERSION-5.18 = .12 -LINUX_KERNEL_HASH-5.18.12 = 40b74d0942f255da07481710e1083412d06e37e45b8f9d9e34ae856db37b9527 +LINUX_VERSION-5.18 = .13 +LINUX_KERNEL_HASH-5.18.13 = 430e1affe62fcca274f217b150290995a33ceb0d5ad5e72ca6ee8a2d28276bda diff --git a/target/linux/generic/hack-5.18/952-add-net-conntrack-events-support-multiple-registrant.patch b/target/linux/generic/hack-5.18/952-add-net-conntrack-events-support-multiple-registrant.patch index 8a538d2dd76422..71d304ef0cd63e 100644 --- a/target/linux/generic/hack-5.18/952-add-net-conntrack-events-support-multiple-registrant.patch +++ b/target/linux/generic/hack-5.18/952-add-net-conntrack-events-support-multiple-registrant.patch @@ -22,7 +22,7 @@ Signed-off-by: Zhi Chen --- a/include/net/netfilter/nf_conntrack_ecache.h +++ b/include/net/netfilter/nf_conntrack_ecache.h -@@ -83,9 +83,14 @@ struct nf_ct_event_notifier { +@@ -81,9 +81,14 @@ struct nf_ct_event_notifier { int (*exp_event)(unsigned int events, const struct nf_exp_event *item); }; @@ -38,7 +38,7 @@ Signed-off-by: Zhi Chen void nf_ct_deliver_cached_events(struct nf_conn *ct); int nf_conntrack_eventmask_report(unsigned int eventmask, struct nf_conn *ct, -@@ -111,11 +116,13 @@ static inline void +@@ -109,11 +114,13 @@ static inline void nf_conntrack_event_cache(enum ip_conntrack_events event, struct nf_conn *ct) { #ifdef CONFIG_NF_CONNTRACK_EVENTS @@ -53,7 +53,7 @@ Signed-off-by: Zhi Chen e = nf_ct_ecache_find(ct); if (e == NULL) -@@ -130,10 +137,12 @@ nf_conntrack_event_report(enum ip_conntr +@@ -128,10 +135,12 @@ nf_conntrack_event_report(enum ip_conntr u32 portid, int report) { #ifdef CONFIG_NF_CONNTRACK_EVENTS @@ -66,7 +66,7 @@ Signed-off-by: Zhi Chen return nf_conntrack_eventmask_report(1 << event, ct, portid, report); #else -@@ -145,10 +154,12 @@ static inline int +@@ -143,10 +152,12 @@ static inline int nf_conntrack_event(enum ip_conntrack_events event, struct nf_conn *ct) { #ifdef CONFIG_NF_CONNTRACK_EVENTS @@ -81,7 +81,7 @@ Signed-off-by: Zhi Chen #else --- a/include/net/netns/conntrack.h +++ b/include/net/netns/conntrack.h -@@ -113,6 +113,9 @@ struct netns_ct { +@@ -112,6 +112,9 @@ struct netns_ct { struct ct_pcpu __percpu *pcpu_lists; struct ip_conntrack_stat __percpu *stat; @@ -110,7 +110,7 @@ Signed-off-by: Zhi Chen depends on NETFILTER_ADVANCED --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c -@@ -2815,6 +2815,10 @@ int nf_conntrack_init_net(struct net *ne +@@ -2837,6 +2837,10 @@ int nf_conntrack_init_net(struct net *ne nf_conntrack_helper_pernet_init(net); nf_conntrack_proto_pernet_init(net); @@ -123,9 +123,9 @@ Signed-off-by: Zhi Chen err_expect: --- a/net/netfilter/nf_conntrack_ecache.c +++ b/net/netfilter/nf_conntrack_ecache.c -@@ -18,6 +18,9 @@ +@@ -17,6 +17,9 @@ + #include #include - #include #include +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS +#include @@ -133,7 +133,7 @@ Signed-off-by: Zhi Chen #include #include #include -@@ -168,6 +171,35 @@ static int __nf_conntrack_eventmask_repo +@@ -162,6 +165,35 @@ static int __nf_conntrack_eventmask_repo return ret; } @@ -169,7 +169,7 @@ Signed-off-by: Zhi Chen int nf_conntrack_eventmask_report(unsigned int events, struct nf_conn *ct, u32 portid, int report) { -@@ -204,10 +236,52 @@ int nf_conntrack_eventmask_report(unsign +@@ -197,10 +229,52 @@ int nf_conntrack_eventmask_report(unsign return ret; } @@ -222,7 +222,7 @@ Signed-off-by: Zhi Chen void nf_ct_deliver_cached_events(struct nf_conn *ct) { struct nf_conntrack_ecache *e; -@@ -233,6 +307,7 @@ void nf_ct_deliver_cached_events(struct +@@ -226,6 +300,7 @@ void nf_ct_deliver_cached_events(struct */ __nf_conntrack_eventmask_report(e, events, e->missed, &item); } @@ -230,7 +230,7 @@ Signed-off-by: Zhi Chen EXPORT_SYMBOL_GPL(nf_ct_deliver_cached_events); void nf_ct_expect_event_report(enum ip_conntrack_expect_events event, -@@ -265,20 +340,43 @@ out_unlock: +@@ -258,20 +333,43 @@ out_unlock: rcu_read_unlock(); } @@ -276,7 +276,7 @@ Signed-off-by: Zhi Chen void nf_conntrack_unregister_notifier(struct net *net) { mutex_lock(&nf_ct_ecache_mutex); -@@ -286,6 +384,7 @@ void nf_conntrack_unregister_notifier(st +@@ -279,6 +377,7 @@ void nf_conntrack_unregister_notifier(st mutex_unlock(&nf_ct_ecache_mutex); /* synchronize_rcu() is called after netns pre_exit */ } @@ -306,7 +306,7 @@ Signed-off-by: Zhi Chen struct nf_conn *ct = item->ct; struct sk_buff *skb; unsigned int type; -@@ -3772,11 +3779,17 @@ static int ctnetlink_stat_exp_cpu(struct +@@ -3825,11 +3832,17 @@ static int ctnetlink_stat_exp_cpu(struct } #ifdef CONFIG_NF_CONNTRACK_EVENTS @@ -324,7 +324,7 @@ Signed-off-by: Zhi Chen static const struct nfnl_callback ctnl_cb[IPCTNL_MSG_MAX] = { [IPCTNL_MSG_CT_NEW] = { -@@ -3875,8 +3888,12 @@ static int __net_init ctnetlink_net_init +@@ -3928,8 +3941,12 @@ static int __net_init ctnetlink_net_init static void ctnetlink_net_pre_exit(struct net *net) { #ifdef CONFIG_NF_CONNTRACK_EVENTS diff --git a/target/linux/generic/hack-5.18/953-net-patch-linux-kernel-to-support-shortcut-fe.patch b/target/linux/generic/hack-5.18/953-net-patch-linux-kernel-to-support-shortcut-fe.patch index 7c2b0c8d8a8f2e..c7346c36a84f49 100644 --- a/target/linux/generic/hack-5.18/953-net-patch-linux-kernel-to-support-shortcut-fe.patch +++ b/target/linux/generic/hack-5.18/953-net-patch-linux-kernel-to-support-shortcut-fe.patch @@ -38,7 +38,7 @@ #endif --- a/include/net/netfilter/nf_conntrack_ecache.h +++ b/include/net/netfilter/nf_conntrack_ecache.h -@@ -86,6 +86,8 @@ struct nf_ct_event_notifier { +@@ -84,6 +84,8 @@ struct nf_ct_event_notifier { #ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS extern int nf_conntrack_register_notifier(struct net *net, struct notifier_block *nb); extern int nf_conntrack_unregister_notifier(struct net *net, struct notifier_block *nb); @@ -152,7 +152,7 @@ --- a/net/netfilter/nf_conntrack_ecache.c +++ b/net/netfilter/nf_conntrack_ecache.c -@@ -149,12 +149,23 @@ static int __nf_conntrack_eventmask_repo +@@ -143,12 +143,23 @@ static int __nf_conntrack_eventmask_repo rcu_read_lock(); notify = rcu_dereference(net->ct.nf_conntrack_event_cb); @@ -178,7 +178,7 @@ rcu_read_unlock(); if (likely(ret >= 0 && missed == 0)) -@@ -346,6 +357,11 @@ int nf_conntrack_register_notifier(struc +@@ -339,6 +350,11 @@ int nf_conntrack_register_notifier(struc { return atomic_notifier_chain_register(&net->ct.nf_conntrack_chain, nb); } @@ -190,7 +190,7 @@ #else int nf_conntrack_register_notifier(struct net *net, const struct nf_ct_event_notifier *new) -@@ -376,6 +392,11 @@ int nf_conntrack_unregister_notifier(str +@@ -369,6 +385,11 @@ int nf_conntrack_unregister_notifier(str { return atomic_notifier_chain_unregister(&net->ct.nf_conntrack_chain, nb); } diff --git a/target/linux/generic/pending-5.18/600-netfilter_conntrack_flush.patch b/target/linux/generic/pending-5.18/600-netfilter_conntrack_flush.patch index a88e3d7d9a77eb..6514c932e2206d 100644 --- a/target/linux/generic/pending-5.18/600-netfilter_conntrack_flush.patch +++ b/target/linux/generic/pending-5.18/600-netfilter_conntrack_flush.patch @@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau #include #ifdef CONFIG_SYSCTL #include -@@ -462,6 +463,56 @@ static int ct_cpu_seq_show(struct seq_fi +@@ -465,6 +466,56 @@ static int ct_cpu_seq_show(struct seq_fi return 0; } @@ -74,7 +74,7 @@ Signed-off-by: Felix Fietkau static const struct seq_operations ct_cpu_seq_ops = { .start = ct_cpu_seq_start, .next = ct_cpu_seq_next, -@@ -475,8 +526,9 @@ static int nf_conntrack_standalone_init_ +@@ -478,8 +529,9 @@ static int nf_conntrack_standalone_init_ kuid_t root_uid; kgid_t root_gid; diff --git a/target/linux/generic/pending-5.18/613-netfilter_optional_tcp_window_check.patch b/target/linux/generic/pending-5.18/613-netfilter_optional_tcp_window_check.patch index 067fc3fb1cae75..ca0c2d30aaf285 100644 --- a/target/linux/generic/pending-5.18/613-netfilter_optional_tcp_window_check.patch +++ b/target/linux/generic/pending-5.18/613-netfilter_optional_tcp_window_check.patch @@ -40,7 +40,7 @@ Signed-off-by: Christian 'Ansuel' Marangi --- a/net/netfilter/nf_conntrack_standalone.c +++ b/net/netfilter/nf_conntrack_standalone.c -@@ -633,6 +633,7 @@ enum nf_ct_sysctl_index { +@@ -636,6 +636,7 @@ enum nf_ct_sysctl_index { #endif NF_SYSCTL_CT_PROTO_TCP_LOOSE, NF_SYSCTL_CT_PROTO_TCP_LIBERAL, @@ -48,7 +48,7 @@ Signed-off-by: Christian 'Ansuel' Marangi NF_SYSCTL_CT_PROTO_TCP_IGNORE_INVALID_RST, NF_SYSCTL_CT_PROTO_TCP_MAX_RETRANS, NF_SYSCTL_CT_PROTO_TIMEOUT_UDP, -@@ -849,6 +850,14 @@ static struct ctl_table nf_ct_sysctl_tab +@@ -852,6 +853,14 @@ static struct ctl_table nf_ct_sysctl_tab .extra1 = SYSCTL_ZERO, .extra2 = SYSCTL_ONE, }, @@ -63,7 +63,7 @@ Signed-off-by: Christian 'Ansuel' Marangi [NF_SYSCTL_CT_PROTO_TCP_IGNORE_INVALID_RST] = { .procname = "nf_conntrack_tcp_ignore_invalid_rst", .maxlen = sizeof(u8), -@@ -1065,6 +1074,7 @@ static void nf_conntrack_standalone_init +@@ -1068,6 +1077,7 @@ static void nf_conntrack_standalone_init XASSIGN(LOOSE, &tn->tcp_loose); XASSIGN(LIBERAL, &tn->tcp_be_liberal); diff --git a/target/linux/rockchip/patches-5.18/801-fix-stmmac_mdio.patch b/target/linux/rockchip/patches-5.18/801-fix-stmmac_mdio.patch index 328b1af9eb9cc4..50d8d9a9d8cf79 100644 --- a/target/linux/rockchip/patches-5.18/801-fix-stmmac_mdio.patch +++ b/target/linux/rockchip/patches-5.18/801-fix-stmmac_mdio.patch @@ -11,9 +11,23 @@ if (priv->plat->phy_node || mdio_node) goto bus_register_done; +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +@@ -498,6 +498,11 @@ int stmmac_mdio_register(struct net_devi + if (priv->plat->has_xgmac) + stmmac_xgmac2_mdio_read(new_bus, 0, MII_ADDR_C45); + ++ stmmac_mdio_write(new_bus,0,31,2627); ++ stmmac_mdio_write(new_bus,0,25,0x1801); ++ stmmac_mdio_write(new_bus,0,31,0); ++ stmmac_mdio_write(new_bus,0,0,0x8000); ++ + if (priv->plat->phy_node || mdio_node) + goto bus_register_done; + --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c -@@ -2907,6 +2907,8 @@ static int stmmac_init_dma_engine(struct +@@ -2852,6 +2852,8 @@ static int stmmac_init_dma_engine(struct if (priv->extend_desc && (priv->mode == STMMAC_RING_MODE)) atds = 1; diff --git a/target/linux/rockchip/patches-5.18/903-crypto-rockchip-permit-to-pass-self-tests.patch b/target/linux/rockchip/patches-5.18/903-crypto-rockchip-permit-to-pass-self-tests.patch index 1614355779f9d5..af346f09d6bed5 100644 --- a/target/linux/rockchip/patches-5.18/903-crypto-rockchip-permit-to-pass-self-tests.patch +++ b/target/linux/rockchip/patches-5.18/903-crypto-rockchip-permit-to-pass-self-tests.patch @@ -124,8519 +124,2296 @@ Signed-off-by: Corentin Labbe drivers/crypto/rockchip/rk3288_crypto.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) -diff --git a/drivers/crypto/rockchip/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index 35d73061d156..45cc5f766788 100644 --- a/drivers/crypto/rockchip/rk3288_crypto.c +++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -371,8 +371,7 @@ static int rk_crypto_probe(struct platform_device *pdev) +@@ -14,235 +14,162 @@ + #include + #include + #include ++#include + #include + #include + #include - crypto_info->irq = platform_get_irq(pdev, 0); - if (crypto_info->irq < 0) { -- dev_warn(crypto_info->dev, -- "control Interrupt is not available.\n"); -+ dev_err(&pdev->dev, "control Interrupt is not available.\n"); - err = crypto_info->irq; - goto err_crypto; - } - -From patchwork Wed Jul 6 09:03:41 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907887 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 742A4C43334 - for ; - Wed, 6 Jul 2022 10:22:21 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=YeLk32Ra0a9Qd34jqG1ZYZtQ1RahBj2VPT7T9vQW6ww=; b=xJo/tdgmqEp8aE - ubiAz1L1C4yD2kdPWUExbdKtTbK4XqqxUhbSgffZ1prCuw+n8N23FPHSiApZFueI6ah8whdPdGb0j - uvMltTkBjXN7zcHV3rxeY0STeenNM1g0ZMatky8Z3SH9AnkmWIEFL/JQIOsJGU6gbDwJAZNGDGcBl - fj4LF2PpmcFFVilFEDBKpMB3yKqTki4dj7eiHZtjYC1M57qLAA1YoEPKpNtuJ/PW+yNPPyw3VBafU - k2BWcyk1gYot1zJl9/Q6ABOe5rHcgBDqBxk8fB44K+v6S0QbTBBnqwP5W6s78Vc5zUxTRFIuB8rr9 - v4RmBMYVdDJIHSXlgPvQ==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92Ac-008OqD-8z; Wed, 06 Jul 2022 10:22:10 +0000 -Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xa-007bkG-7t - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:42 +0000 -Received: by mail-wr1-x429.google.com with SMTP id v16so9613976wrd.13 - for ; - Wed, 06 Jul 2022 02:04:36 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=5oq+K0wpCSsh7jUwt6+vmm/hcvr/21v0i001Dyw+Eww=; - b=k8LlTAqfCG2MWgGVosUzsf/3RmyqtW/i+DpBCpSfQ22u42x1tejqkBDQ6ffKHO3bJ1 - 3wzV83iQGKTtCe9UxhxmSsAKVTMOKE/2muz17umcnBAnr29UDj98wi6EEIN4pa22LhXS - Y6Zk4BNnre57MmSW1zFna8x0+vRrRI8hazfxFw7GgUcPN5igcUqRZLBRkDDKZR9A9yCk - i9enxCyKUOU70JpxnLdzPyPdZbGrk5UzkcekofjqylR2mSK9Ix/7AU9S0BrQPWx3jKz2 - kmIFnnzwY8/rQzM6Au1RaEn5KUfLhq89YgifALgPUsvVlMDthcCOKseLJzR+8V1yiLW1 - j2LQ== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=5oq+K0wpCSsh7jUwt6+vmm/hcvr/21v0i001Dyw+Eww=; - b=h7gLymZukRhaVd9xufD6E50pQYrv3KpJRd4Sp6bUxcmLpI9JfjEyG6/TvXpAdN+un3 - GHMJDOCbzvZVv7LF9YsPhVEEjikIDrumXpvvo84JHb+q+6OXPuc6i5vQqdkBhjfszRG5 - BQ2d8Uz/KnO1WArHz7SObpY/BDeFMbyE/1ZFUQ0ZbJRzvhbr623NSSwGsVo4x1b8NWmz - 6n0XDYrsfm9CNaUInnKh0oDiDjvH8MJ18ECKaYpPPqdeQXs+7zR+piobGVhgCkQAVWy0 - qOqmCtxHDjsE36xq8TOOAJkwvu1lqupyuCfF9bJdk+nVIK9Ol69YwftYc5BLFrYhaNzr - 8uyg== -X-Gm-Message-State: AJIora8jWJU33OdBbGxaP+9lySuasvvEviC1ORJKMUbr5HI3vbOWxD8t - yhQ3eJuV/3grfzd4k2TU13T2nQ== -X-Google-Smtp-Source: - AGRyM1vW2O1Tjam4DfMdiLa04E+GjcW9Az1x+XRRK+o2g1q0r9++MfwNim2xWPdJ0BepE8gNKN85hQ== -X-Received: by 2002:a05:6000:1243:b0:21d:6123:7a80 with SMTP id - j3-20020a056000124300b0021d61237a80mr20480718wrx.354.1657098275124; - Wed, 06 Jul 2022 02:04:35 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.34 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:34 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 02/33] crypto: rockchip: do not use uninitialized variable -Date: Wed, 6 Jul 2022 09:03:41 +0000 -Message-Id: <20220706090412.806101-3-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020438_347314_8D2B1347 -X-CRM114-Status: GOOD ( 11.14 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -crypto_info->dev is not yet set, so use pdev->dev instead. - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index 45cc5f766788..21d3f1458584 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.c -+++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -381,7 +381,7 @@ static int rk_crypto_probe(struct platform_device *pdev) - "rk-crypto", pdev); +-static int rk_crypto_enable_clk(struct rk_crypto_info *dev) ++static struct rockchip_ip rocklist = { ++ .dev_list = LIST_HEAD_INIT(rocklist.dev_list), ++ .lock = __SPIN_LOCK_UNLOCKED(rocklist.lock), ++}; ++ ++struct rk_crypto_info *get_rk_crypto(void) + { +- int err; ++ struct rk_crypto_info *first; - if (err) { -- dev_err(crypto_info->dev, "irq request failed.\n"); -+ dev_err(&pdev->dev, "irq request failed.\n"); - goto err_crypto; +- err = clk_prepare_enable(dev->sclk); +- if (err) { +- dev_err(dev->dev, "[%s:%d], Couldn't enable clock sclk\n", +- __func__, __LINE__); +- goto err_return; +- } +- err = clk_prepare_enable(dev->aclk); +- if (err) { +- dev_err(dev->dev, "[%s:%d], Couldn't enable clock aclk\n", +- __func__, __LINE__); +- goto err_aclk; ++ spin_lock(&rocklist.lock); ++ first = list_first_entry_or_null(&rocklist.dev_list, ++ struct rk_crypto_info, list); ++ list_rotate_left(&rocklist.dev_list); ++ spin_unlock(&rocklist.lock); ++ return first; ++} ++ ++static const struct rk_variant rk3288_variant = { ++ .num_clks = 4, ++ .rkclks = { ++ { "sclk", 150000000}, } +- err = clk_prepare_enable(dev->hclk); +- if (err) { +- dev_err(dev->dev, "[%s:%d], Couldn't enable clock hclk\n", +- __func__, __LINE__); +- goto err_hclk; +- } +- err = clk_prepare_enable(dev->dmaclk); +- if (err) { +- dev_err(dev->dev, "[%s:%d], Couldn't enable clock dmaclk\n", +- __func__, __LINE__); +- goto err_dmaclk; +- } +- return err; +-err_dmaclk: +- clk_disable_unprepare(dev->hclk); +-err_hclk: +- clk_disable_unprepare(dev->aclk); +-err_aclk: +- clk_disable_unprepare(dev->sclk); +-err_return: +- return err; +-} ++}; - -From patchwork Wed Jul 6 09:03:42 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12908008 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id EBEA6C433EF - for ; - Wed, 6 Jul 2022 11:31:26 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=8FANSH56U7ZeEh7je+6pQ6oMu3LiyfUyksXenNd26oI=; b=hq9jO23uHtJaKP - q0fUt9BE/mSvaew/8DoBM+ZOSABh4WF5JZy+p4vaeDGeZAiIQA9RE0MWnVXk8cJTx57lx3HYqrD9R - vAxFa19YJQ5gX7o+acx/6a56lg5KN0Y18+r//D6BbdUImbOzpEz/HFTxI4Q+e2+o6PaGcH3qwPbv+ - bc5pVsd6KzwZRZX6FganpI1u8UsZBRxBhV7yOj1liGSkhdqdrtVRqzMtwBV+E9gfJ2tOPTbvM6+t4 - zxe9r3PqzczgVWlYZM2ujp9DU+Escho9BVjL7TfR8QGqWDdZPmwJQv8eo12kZizZuvSGWk8V1PJih - wO+0mr9VTumMex8CiIXw==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o93FN-009dcG-IN; Wed, 06 Jul 2022 11:31:09 +0000 -Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xc-007blz-SF - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:45 +0000 -Received: by mail-wr1-x433.google.com with SMTP id b26so21080099wrc.2 - for ; - Wed, 06 Jul 2022 02:04:38 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=859E0YEubESiyrb+oeUTAg5/XBxqc58UKlJ7e69ztp0=; - b=h9PhuTJWLoltGwBkAxtkiSdX7roGbTC4vn3P+0UWJW7wwDcEfsRRYmEfoA1fapinEY - a0BzS/CVuEJxsi8fFfmWTf2fRSCt+A2DQJ6wVGLUF4V41Q9VEb3BGRi4ZSSf15P1IKfn - +mTz6R7YRqs8lkGu5o3p6NI2L4bMEve2rjxQiMoRmsKvpeO8KfA0iShRpaCPvI2ppQ1e - qXrCJwvGgyMCfUyZrpBKM363GQuAA7VLC5sjZ2jsR7b3jWSYYla0cRJqLgCzCi3wI7pI - ig4nFOh9ubUh6QnMxs+vEVfJHlkefBHsxhjDwsXaVacd8RtTkUFUdrdxAEkGA35psGeX - rimA== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=859E0YEubESiyrb+oeUTAg5/XBxqc58UKlJ7e69ztp0=; - b=wZUY0ibMqNL8y+9hdm36eaZhlpUVLyFG9zGn4s/zmW4KOcDXc7LB4MpGT1FW92KB4K - ulxOWNGYvjRA1UHQ1PyMB3SH0Jvew+9arOC4Yn6UF6X5K1HfvhA1VIPmVgYmyJYXj/Kp - mByPYNs3wUM7SHpS6JTBfLx6SXuyE/XmeEwDxuG8lHDAW8CHAUsXeGzP9BEC3J6Pwwo0 - T2stgsp7zQx/cYUNCc+3g85hbBpBiCobhBF6PgRU+Jyyuc/LlJvUFBleSpMGHo1nl6yX - f1fN8Rk0I86pZ4ERFhpt8nzAytStvdLR6d4T5O47IrOUSQ0VkjToTfzDLSURKHD3XTmO - nSTQ== -X-Gm-Message-State: AJIora8R7cTCHEfoizhUn9q0Tl6s2cZYQyZ6T/0glzWTWa0ohsOcLPuT - mqbdMV2RRTy9/UeDZJVNP6r2ag== -X-Google-Smtp-Source: - AGRyM1uGaPfIfWwxoEeJp2iiYMlfNF64ryMNj2+XHW0wolxABcxBDbUoxclVB8+24W1gt3JVoHyNMQ== -X-Received: by 2002:a5d:59a9:0:b0:21d:7ee2:8f90 with SMTP id - p9-20020a5d59a9000000b0021d7ee28f90mr1316055wrr.598.1657098276166; - Wed, 06 Jul 2022 02:04:36 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.35 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:35 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 03/33] crypto: rockchip: do not do custom power management -Date: Wed, 6 Jul 2022 09:03:42 +0000 -Message-Id: <20220706090412.806101-4-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020441_003461_51A9D1D3 -X-CRM114-Status: GOOD ( 15.38 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -The clock enable/disable at tfm init/exit is fragile, -if 2 tfm are init in the same time and one is removed just after, -it will leave the hardware uncloked even if a user remains. - -Instead simply enable clocks at probe time. -We will do PM later. - -Fixes: ce0183cb6464b ("crypto: rockchip - switch to skcipher API") -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.c | 4 ++-- - drivers/crypto/rockchip/rk3288_crypto.h | 2 -- - drivers/crypto/rockchip/rk3288_crypto_ahash.c | 3 +-- - drivers/crypto/rockchip/rk3288_crypto_skcipher.c | 5 +++-- - 4 files changed, 6 insertions(+), 8 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index 21d3f1458584..4cff49b82983 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.c -+++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -394,8 +394,7 @@ static int rk_crypto_probe(struct platform_device *pdev) - rk_crypto_done_task_cb, (unsigned long)crypto_info); - crypto_init_queue(&crypto_info->queue, 50); - -- crypto_info->enable_clk = rk_crypto_enable_clk; -- crypto_info->disable_clk = rk_crypto_disable_clk; -+ rk_crypto_enable_clk(crypto_info); - crypto_info->load_data = rk_load_data; - crypto_info->unload_data = rk_unload_data; - crypto_info->enqueue = rk_crypto_enqueue; -@@ -422,6 +421,7 @@ static int rk_crypto_remove(struct platform_device *pdev) - struct rk_crypto_info *crypto_tmp = platform_get_drvdata(pdev); - - rk_crypto_unregister(); -+ rk_crypto_disable_clk(crypto_tmp); - tasklet_kill(&crypto_tmp->done_task); - tasklet_kill(&crypto_tmp->queue_task); - return 0; -diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h -index 97278c2574ff..2fa7131e4060 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.h -+++ b/drivers/crypto/rockchip/rk3288_crypto.h -@@ -220,8 +220,6 @@ struct rk_crypto_info { - int (*start)(struct rk_crypto_info *dev); - int (*update)(struct rk_crypto_info *dev); - void (*complete)(struct crypto_async_request *base, int err); -- int (*enable_clk)(struct rk_crypto_info *dev); -- void (*disable_clk)(struct rk_crypto_info *dev); - int (*load_data)(struct rk_crypto_info *dev, - struct scatterlist *sg_src, - struct scatterlist *sg_dst); -diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -index ed03058497bc..49017d1fb510 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -@@ -301,7 +301,7 @@ static int rk_cra_hash_init(struct crypto_tfm *tfm) - sizeof(struct rk_ahash_rctx) + - crypto_ahash_reqsize(tctx->fallback_tfm)); - -- return tctx->dev->enable_clk(tctx->dev); -+ return 0; +-static void rk_crypto_disable_clk(struct rk_crypto_info *dev) +-{ +- clk_disable_unprepare(dev->dmaclk); +- clk_disable_unprepare(dev->hclk); +- clk_disable_unprepare(dev->aclk); +- clk_disable_unprepare(dev->sclk); +-} +- +-static int check_alignment(struct scatterlist *sg_src, +- struct scatterlist *sg_dst, +- int align_mask) +-{ +- int in, out, align; +- +- in = IS_ALIGNED((uint32_t)sg_src->offset, 4) && +- IS_ALIGNED((uint32_t)sg_src->length, align_mask); +- if (!sg_dst) +- return in; +- out = IS_ALIGNED((uint32_t)sg_dst->offset, 4) && +- IS_ALIGNED((uint32_t)sg_dst->length, align_mask); +- align = in && out; +- +- return (align && (sg_src->length == sg_dst->length)); +-} +- +-static int rk_load_data(struct rk_crypto_info *dev, +- struct scatterlist *sg_src, +- struct scatterlist *sg_dst) +-{ +- unsigned int count; +- +- dev->aligned = dev->aligned ? +- check_alignment(sg_src, sg_dst, dev->align_size) : +- dev->aligned; +- if (dev->aligned) { +- count = min(dev->left_bytes, sg_src->length); +- dev->left_bytes -= count; +- +- if (!dma_map_sg(dev->dev, sg_src, 1, DMA_TO_DEVICE)) { +- dev_err(dev->dev, "[%s:%d] dma_map_sg(src) error\n", +- __func__, __LINE__); +- return -EINVAL; +- } +- dev->addr_in = sg_dma_address(sg_src); ++static const struct rk_variant rk3328_variant = { ++ .num_clks = 3, ++}; + +- if (sg_dst) { +- if (!dma_map_sg(dev->dev, sg_dst, 1, DMA_FROM_DEVICE)) { +- dev_err(dev->dev, +- "[%s:%d] dma_map_sg(dst) error\n", +- __func__, __LINE__); +- dma_unmap_sg(dev->dev, sg_src, 1, +- DMA_TO_DEVICE); +- return -EINVAL; +- } +- dev->addr_out = sg_dma_address(sg_dst); +- } +- } else { +- count = (dev->left_bytes > PAGE_SIZE) ? +- PAGE_SIZE : dev->left_bytes; +- +- if (!sg_pcopy_to_buffer(dev->first, dev->src_nents, +- dev->addr_vir, count, +- dev->total - dev->left_bytes)) { +- dev_err(dev->dev, "[%s:%d] pcopy err\n", +- __func__, __LINE__); +- return -EINVAL; +- } +- dev->left_bytes -= count; +- sg_init_one(&dev->sg_tmp, dev->addr_vir, count); +- if (!dma_map_sg(dev->dev, &dev->sg_tmp, 1, DMA_TO_DEVICE)) { +- dev_err(dev->dev, "[%s:%d] dma_map_sg(sg_tmp) error\n", +- __func__, __LINE__); +- return -ENOMEM; +- } +- dev->addr_in = sg_dma_address(&dev->sg_tmp); ++static const struct rk_variant rk3399_variant = { ++ .num_clks = 3, ++}; ++ ++static int rk_crypto_get_clks(struct rk_crypto_info *dev) ++{ ++ int i, j, err; ++ unsigned long cr; + +- if (sg_dst) { +- if (!dma_map_sg(dev->dev, &dev->sg_tmp, 1, +- DMA_FROM_DEVICE)) { +- dev_err(dev->dev, +- "[%s:%d] dma_map_sg(sg_tmp) error\n", +- __func__, __LINE__); +- dma_unmap_sg(dev->dev, &dev->sg_tmp, 1, +- DMA_TO_DEVICE); +- return -ENOMEM; ++ dev->num_clks = devm_clk_bulk_get_all(dev->dev, &dev->clks); ++ if (dev->num_clks < dev->variant->num_clks) { ++ dev_err(dev->dev, "Missing clocks, got %d instead of %d\n", ++ dev->num_clks, dev->variant->num_clks); ++ return -EINVAL; ++ } ++ ++ for (i = 0; i < dev->num_clks; i++) { ++ cr = clk_get_rate(dev->clks[i].clk); ++ for (j = 0; j < ARRAY_SIZE(dev->variant->rkclks); j++) { ++ if (dev->variant->rkclks[j].max == 0) ++ continue; ++ if (strcmp(dev->variant->rkclks[j].name, dev->clks[i].id)) ++ continue; ++ if (cr > dev->variant->rkclks[j].max) { ++ err = clk_set_rate(dev->clks[i].clk, ++ dev->variant->rkclks[j].max); ++ if (err) ++ dev_err(dev->dev, "Fail downclocking %s from %lu to %lu\n", ++ dev->variant->rkclks[j].name, cr, ++ dev->variant->rkclks[j].max); ++ else ++ dev_info(dev->dev, "Downclocking %s from %lu to %lu\n", ++ dev->variant->rkclks[j].name, cr, ++ dev->variant->rkclks[j].max); + } +- dev->addr_out = sg_dma_address(&dev->sg_tmp); + } + } +- dev->count = count; + return 0; } - static void rk_cra_hash_exit(struct crypto_tfm *tfm) -@@ -309,7 +309,6 @@ static void rk_cra_hash_exit(struct crypto_tfm *tfm) - struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm); +-static void rk_unload_data(struct rk_crypto_info *dev) ++static int rk_crypto_enable_clk(struct rk_crypto_info *dev) + { +- struct scatterlist *sg_in, *sg_out; ++ int err; - free_page((unsigned long)tctx->dev->addr_vir); -- return tctx->dev->disable_clk(tctx->dev); +- sg_in = dev->aligned ? dev->sg_src : &dev->sg_tmp; +- dma_unmap_sg(dev->dev, sg_in, 1, DMA_TO_DEVICE); ++ err = clk_bulk_prepare_enable(dev->num_clks, dev->clks); ++ if (err) ++ dev_err(dev->dev, "Could not enable clock clks\n"); + +- if (dev->sg_dst) { +- sg_out = dev->aligned ? dev->sg_dst : &dev->sg_tmp; +- dma_unmap_sg(dev->dev, sg_out, 1, DMA_FROM_DEVICE); +- } ++ return err; } - struct rk_crypto_tmp rk_ahash_sha1 = { -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index 5bbf0d2722e1..8c44a19eab75 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -388,8 +388,10 @@ static int rk_ablk_init_tfm(struct crypto_skcipher *tfm) - ctx->dev->update = rk_ablk_rx; - ctx->dev->complete = rk_crypto_complete; - ctx->dev->addr_vir = (char *)__get_free_page(GFP_KERNEL); -+ if (!ctx->dev->addr_vir) -+ return -ENOMEM; +-static irqreturn_t rk_crypto_irq_handle(int irq, void *dev_id) ++static void rk_crypto_disable_clk(struct rk_crypto_info *dev) + { +- struct rk_crypto_info *dev = platform_get_drvdata(dev_id); +- u32 interrupt_status; ++ clk_bulk_disable_unprepare(dev->num_clks, dev->clks); ++} -- return ctx->dev->addr_vir ? ctx->dev->enable_clk(ctx->dev) : -ENOMEM; +- spin_lock(&dev->lock); +- interrupt_status = CRYPTO_READ(dev, RK_CRYPTO_INTSTS); +- CRYPTO_WRITE(dev, RK_CRYPTO_INTSTS, interrupt_status); ++/* ++ * Power management strategy: The device is suspended until a request ++ * is handled. For avoiding suspend/resume yoyo, the autosuspend is set to 2s. ++ */ ++static int rk_crypto_pm_suspend(struct device *dev) ++{ ++ struct rk_crypto_info *rkdev = dev_get_drvdata(dev); + +- if (interrupt_status & 0x0a) { +- dev_warn(dev->dev, "DMA Error\n"); +- dev->err = -EFAULT; +- } +- tasklet_schedule(&dev->done_task); ++ rk_crypto_disable_clk(rkdev); ++ reset_control_assert(rkdev->rst); + +- spin_unlock(&dev->lock); +- return IRQ_HANDLED; + return 0; } - static void rk_ablk_exit_tfm(struct crypto_skcipher *tfm) -@@ -397,7 +399,6 @@ static void rk_ablk_exit_tfm(struct crypto_skcipher *tfm) - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +-static int rk_crypto_enqueue(struct rk_crypto_info *dev, +- struct crypto_async_request *async_req) ++static int rk_crypto_pm_resume(struct device *dev) + { +- unsigned long flags; ++ struct rk_crypto_info *rkdev = dev_get_drvdata(dev); + int ret; - free_page((unsigned long)ctx->dev->addr_vir); -- ctx->dev->disable_clk(ctx->dev); +- spin_lock_irqsave(&dev->lock, flags); +- ret = crypto_enqueue_request(&dev->queue, async_req); +- if (dev->busy) { +- spin_unlock_irqrestore(&dev->lock, flags); ++ ret = rk_crypto_enable_clk(rkdev); ++ if (ret) + return ret; +- } +- dev->busy = true; +- spin_unlock_irqrestore(&dev->lock, flags); +- tasklet_schedule(&dev->queue_task); + +- return ret; +-} ++ reset_control_deassert(rkdev->rst); ++ return 0; + +-static void rk_crypto_queue_task_cb(unsigned long data) +-{ +- struct rk_crypto_info *dev = (struct rk_crypto_info *)data; +- struct crypto_async_request *async_req, *backlog; +- unsigned long flags; +- int err = 0; ++} + +- dev->err = 0; +- spin_lock_irqsave(&dev->lock, flags); +- backlog = crypto_get_backlog(&dev->queue); +- async_req = crypto_dequeue_request(&dev->queue); ++static const struct dev_pm_ops rk_crypto_pm_ops = { ++ SET_RUNTIME_PM_OPS(rk_crypto_pm_suspend, rk_crypto_pm_resume, NULL) ++}; + +- if (!async_req) { +- dev->busy = false; +- spin_unlock_irqrestore(&dev->lock, flags); +- return; +- } +- spin_unlock_irqrestore(&dev->lock, flags); ++static int rk_crypto_pm_init(struct rk_crypto_info *rkdev) ++{ ++ int err; + +- if (backlog) { +- backlog->complete(backlog, -EINPROGRESS); +- backlog = NULL; +- } ++ pm_runtime_use_autosuspend(rkdev->dev); ++ pm_runtime_set_autosuspend_delay(rkdev->dev, 2000); + +- dev->async_req = async_req; +- err = dev->start(dev); ++ err = pm_runtime_set_suspended(rkdev->dev); + if (err) +- dev->complete(dev->async_req, err); ++ return err; ++ pm_runtime_enable(rkdev->dev); ++ return err; } - struct rk_crypto_tmp rk_ecb_aes_alg = { - -From patchwork Wed Jul 6 09:03:43 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907931 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 9DBC8C433EF - for ; - Wed, 6 Jul 2022 10:24:55 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=VilG8HaWZz6qZ+bBjWnnY8cL2U5db5iyQBiF732g6Zg=; b=rj1lswLs38a0MQ - XDr8omTqvbITyBfPMBc3kAm4Z/bU9tfcPLwvIB7Ynt3o5qvNDPJZ2CyBlLwVDkM7od/Tf0VJNZ/DG - gZojUIpo7sJSa84jJpWNXCa14pSsn5DNCH4xueOvmhBU3/9n3Qtd5q9a3QaEbqBgzRf/lOEnskfgn - ija8ujrjXI/BVV5yRO1vtrjoHGpGzgjlA0RiT2qY6F10gjoyCA1cTPXS4KQBo3ei5oq7TyE3BVjN1 - l9bVHjZb5BavpTcrIZPHv9+OTK8YJANGSBb3pORbebFD/bnP4JmhqWecWZF15NevgZh2qKYYEim6E - 1SX5r5hcz/5+6/tv/toA==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92D4-008R01-Rr; Wed, 06 Jul 2022 10:24:42 +0000 -Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xc-007blt-RP - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:44 +0000 -Received: by mail-wr1-x42c.google.com with SMTP id v16so9614127wrd.13 - for ; - Wed, 06 Jul 2022 02:04:38 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=e93jdwU7lOD2x9pMhJTBQN+yJo5I1w/iWBnUD+AsvRI=; - b=qYnjOSsve+CU60SZAGBBlF7DQsf40B4ppATy+M4RqiYsYCYGKKCqLRBjoS63bwkV7y - UoyVME2BouYSVlzOVHR6OxKaX2DFxVDM9B9YIM7cfyB5gyZFOlQs8mYBZWEGlfHHsP2W - X62q5fLEGO+E3EPkCFO9+yKEZCts36MY8GKJVxDvHnRxL9/yoNWSNyos37133Ntfdp58 - PBgsRy7ZvTDQwm47ks9TFgn1xoxX/K4tDresapBXPykl/Vcpn1a/l6OMpl2Pzvn1IN68 - PZvbv9fdH1jJvCr0lwZ+xqiAiH2Rfnzik628v8RTHB6oNElHz0aPV2wEA8WKUCWrDepD - mzXg== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=e93jdwU7lOD2x9pMhJTBQN+yJo5I1w/iWBnUD+AsvRI=; - b=GDRlT3eYghPVWQii0mnd2mxtYFob7/WAQ/BPajZfBY+rZ0PhbeFeykjnYIFk2eYf6e - T7INL7bvo4Zu+nEHxOU5LpIhOfhlGLD30/686r56gmYChUgIkqKyESkob6G7KX+z3Ry0 - lWqE6pxpW37jlzkNNQ2SuzVGV7n4heEeb0pEHdNQklYni2PWfcV5PtGPUCCB5OXR6cHB - P+xIZPgmTLPmg3SSKzdVp1Fdv5dm6DNqprp5e6ZDpChfUTb3oEyrSzIismgxmO1JxH5V - D2nIXjWZaB5JBG4Oa31BWBZAfHSDxDb2i5lTL/nV9ZIzqlwONO64kOIsRmUBcVdRrigb - 5SWQ== -X-Gm-Message-State: AJIora/xbRMOGw6O0p4E4IdfPxpnDcZn0Bqixp/1+NgJyyVq11/hJGwA - E4P0XmJh0aciV7O5XpVmMvanyw== -X-Google-Smtp-Source: - AGRyM1sJ/Eew7H8iS7hX0nzquUCXkYxooD06C+J/SXSVN+r6E2DP9OY9XPMY7TacADQllOgs5bFVTw== -X-Received: by 2002:a5d:6e8d:0:b0:21d:7223:1e1b with SMTP id - k13-20020a5d6e8d000000b0021d72231e1bmr7734511wrz.713.1657098277195; - Wed, 06 Jul 2022 02:04:37 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.36 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:36 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 04/33] crypto: rockchip: fix privete/private typo -Date: Wed, 6 Jul 2022 09:03:43 +0000 -Message-Id: <20220706090412.806101-5-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020440_985300_D79065AD -X-CRM114-Status: GOOD ( 10.35 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -This fix a simple typo on private word. - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h -index 2fa7131e4060..656d6795d400 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.h -+++ b/drivers/crypto/rockchip/rk3288_crypto.h -@@ -235,7 +235,7 @@ struct rk_ahash_ctx { - struct crypto_ahash *fallback_tfm; - }; - --/* the privete variable of hash for fallback */ -+/* the private variable of hash for fallback */ - struct rk_ahash_rctx { - struct ahash_request fallback_req; - u32 mode; - -From patchwork Wed Jul 6 09:03:44 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907932 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 6405DC433EF - for ; - Wed, 6 Jul 2022 10:27:18 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=hFqtftRq08Qblgzp27XsBOQ5KJCGpNnIweiup9P5CqU=; b=fU7hZV19MF9d72 - 0sseqKGf+7OZ/Rz/w44LsvV2vCiQvM7H6MnkFkiYvqVcDeST0ddpZPq2dANAtRxJWjml/hUtJLJV/ - q9x+KYRydCiDGEdHCK2jwu23mWmn1wizuaGHPei9O1PHKZdciN3ViYsLu1QCF7YoJEd06wStEOOBE - bSSQnU8cjAMbvklnv4ZFGd/95GmBclBJl89H/chC1wZu8ALxz3szc2c8hB7pTjfTp8VnLfPAv1ib+ - SoMfHzWW+aD6sKp/JIrIHHYA71sRmmAE/+3w//BFUU1a2sb3zgdQMS9T5QL6e4Lx2dNf6bgzESqhL - L7u5pyPzZw9pQfW3WxdQ==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92FP-008TLJ-Ku; Wed, 06 Jul 2022 10:27:07 +0000 -Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xe-007bmq-5E - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:48 +0000 -Received: by mail-wm1-x336.google.com with SMTP id - c131-20020a1c3589000000b003a19b2bce36so5596501wma.4 - for ; - Wed, 06 Jul 2022 02:04:39 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=oouPZY4jXMX4kuosliYv2WbNP1uk5Gy/Lp8NUrzXszo=; - b=o9Zd1oMgpeujPxRxECsSBIU98M7pRiOSkmwc2f/BKuZrS4V4Vn+gHf82xKynL2wphy - 851DCqVstrq5aO3K7WZ9YJYWnPTi4sk3sxejKzIBg96iNxTo/cfce1HxvuvF+lzBPsVy - 4UdsPd6pKHydCHIw3lH6N/fQMc3TizwOjv3hWHHGDNTqfIRz31ZVDvsgm4EciVF+ffiM - woS/A4iuKIehhCmY92I8urvucn8aqw66zVCWED8hBaIkxhuaKFPb25f7sU7jpn49N9J6 - lTYIJoRbt/lZTjSh5rQTE/4+dwCbW+Q8qOef3I/+bvHvwvnC2LmN1c0TtnShflOYFE8n - 5gAQ== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=oouPZY4jXMX4kuosliYv2WbNP1uk5Gy/Lp8NUrzXszo=; - b=N+sqo5OTmgPQj3pxbCihkj6CFdRI8/3Ki0Gj8l9Vwp/1P2fI0cqHJsNAnD3xzJN+/K - 2BYsvvhlLe6kHYZUg1PT2ibiyj8AxTtZzeR5e3BYigLsLrC8WXhGjblgB8UEfWwZ5vue - hCpO3MfI1uT6UtclDnsxtYBfIA0qzHjV1Bvv7AGlgNbJ7GdhgqK79fRFXq1C5h43bOwQ - a+he/wAivSKrT9f743yDojnmQd/EkUYYTkY7eRktwrI1AFKLiIhG/N3L2tdrsMv9FzTd - Yv7LjE60b4If02qmFds62l2Bg+CY2Fna2s0PcADPpJKh/vzyVVoqWs81sMAaqDlIAiK/ - T7zA== -X-Gm-Message-State: AJIora9U5RaxjL2MaY+uldGRHMr+12mxmYwW4LZLjhVNxFaYdZlOCzBc - Q/6fDLpQG5YXhHrk4t2b5cdkdA== -X-Google-Smtp-Source: - AGRyM1vSZUxBFPPKHTsniWzOKrNZECsFtl45NKDFHHLFJwfDyFnF0GYrYMuZJzYINl1CwrEuxcUKng== -X-Received: by 2002:a05:600c:154a:b0:3a1:70dd:9a12 with SMTP id - f10-20020a05600c154a00b003a170dd9a12mr40806492wmg.70.1657098278220; - Wed, 06 Jul 2022 02:04:38 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.37 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:37 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 05/33] crypto: rockchip: do not store mode globally -Date: Wed, 6 Jul 2022 09:03:44 +0000 -Message-Id: <20220706090412.806101-6-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020442_266221_9DCBFC59 -X-CRM114-Status: GOOD ( 16.95 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -Storing the mode globally does not work if 2 requests are handled in the -same time. -We should store it in a request context. - -Fixes: ce0183cb6464b ("crypto: rockchip - switch to skcipher API") -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.h | 5 +- - .../crypto/rockchip/rk3288_crypto_skcipher.c | 58 ++++++++++++------- - 2 files changed, 41 insertions(+), 22 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h -index 656d6795d400..c919d9a43a08 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.h -+++ b/drivers/crypto/rockchip/rk3288_crypto.h -@@ -245,10 +245,13 @@ struct rk_ahash_rctx { - struct rk_cipher_ctx { - struct rk_crypto_info *dev; - unsigned int keylen; -- u32 mode; - u8 iv[AES_BLOCK_SIZE]; - }; - -+struct rk_cipher_rctx { -+ u32 mode; -+}; +-static void rk_crypto_done_task_cb(unsigned long data) ++static void rk_crypto_pm_exit(struct rk_crypto_info *rkdev) ++{ ++ pm_runtime_disable(rkdev->dev); ++} + - enum alg_type { - ALG_TYPE_HASH, - ALG_TYPE_CIPHER, -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index 8c44a19eab75..bbd0bf52bf07 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -76,9 +76,10 @@ static int rk_aes_ecb_encrypt(struct skcipher_request *req) ++static irqreturn_t rk_crypto_irq_handle(int irq, void *dev_id) { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_crypto_info *dev = ctx->dev; - -- ctx->mode = RK_CRYPTO_AES_ECB_MODE; -+ rctx->mode = RK_CRYPTO_AES_ECB_MODE; - return rk_handle_req(dev, req); - } +- struct rk_crypto_info *dev = (struct rk_crypto_info *)data; ++ struct rk_crypto_info *dev = platform_get_drvdata(dev_id); ++ u32 interrupt_status; ++ ++ interrupt_status = CRYPTO_READ(dev, RK_CRYPTO_INTSTS); ++ CRYPTO_WRITE(dev, RK_CRYPTO_INTSTS, interrupt_status); -@@ -86,9 +87,10 @@ static int rk_aes_ecb_decrypt(struct skcipher_request *req) - { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_crypto_info *dev = ctx->dev; +- if (dev->err) { +- dev->complete(dev->async_req, dev->err); +- return; ++ dev->status = 1; ++ if (interrupt_status & 0x0a) { ++ dev_warn(dev->dev, "DMA Error\n"); ++ dev->status = 0; + } ++ complete(&dev->complete); -- ctx->mode = RK_CRYPTO_AES_ECB_MODE | RK_CRYPTO_DEC; -+ rctx->mode = RK_CRYPTO_AES_ECB_MODE | RK_CRYPTO_DEC; - return rk_handle_req(dev, req); +- dev->err = dev->update(dev); +- if (dev->err) +- dev->complete(dev->async_req, dev->err); ++ return IRQ_HANDLED; } -@@ -96,9 +98,10 @@ static int rk_aes_cbc_encrypt(struct skcipher_request *req) + static struct rk_crypto_tmp *rk_cipher_algs[] = { +@@ -257,6 +184,62 @@ static struct rk_crypto_tmp *rk_cipher_a + &rk_ahash_md5, + }; + ++#ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG ++static int rk_crypto_debugfs_show(struct seq_file *seq, void *v) ++{ ++ struct rk_crypto_info *dd; ++ unsigned int i; ++ ++ spin_lock(&rocklist.lock); ++ list_for_each_entry(dd, &rocklist.dev_list, list) { ++ seq_printf(seq, "%s %s requests: %lu\n", ++ dev_driver_string(dd->dev), dev_name(dd->dev), ++ dd->nreq); ++ } ++ spin_unlock(&rocklist.lock); ++ ++ for (i = 0; i < ARRAY_SIZE(rk_cipher_algs); i++) { ++ if (!rk_cipher_algs[i]->dev) ++ continue; ++ switch (rk_cipher_algs[i]->type) { ++ case CRYPTO_ALG_TYPE_SKCIPHER: ++ seq_printf(seq, "%s %s reqs=%lu fallback=%lu\n", ++ rk_cipher_algs[i]->alg.skcipher.base.cra_driver_name, ++ rk_cipher_algs[i]->alg.skcipher.base.cra_name, ++ rk_cipher_algs[i]->stat_req, rk_cipher_algs[i]->stat_fb); ++ seq_printf(seq, "\tfallback due to length: %lu\n", ++ rk_cipher_algs[i]->stat_fb_len); ++ seq_printf(seq, "\tfallback due to alignment: %lu\n", ++ rk_cipher_algs[i]->stat_fb_align); ++ seq_printf(seq, "\tfallback due to SGs: %lu\n", ++ rk_cipher_algs[i]->stat_fb_sgdiff); ++ break; ++ case CRYPTO_ALG_TYPE_AHASH: ++ seq_printf(seq, "%s %s reqs=%lu fallback=%lu\n", ++ rk_cipher_algs[i]->alg.hash.halg.base.cra_driver_name, ++ rk_cipher_algs[i]->alg.hash.halg.base.cra_name, ++ rk_cipher_algs[i]->stat_req, rk_cipher_algs[i]->stat_fb); ++ break; ++ } ++ } ++ return 0; ++} ++ ++DEFINE_SHOW_ATTRIBUTE(rk_crypto_debugfs); ++#endif ++ ++static void register_debugfs(struct rk_crypto_info *crypto_info) ++{ ++#ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG ++ /* Ignore error of debugfs */ ++ rocklist.dbgfs_dir = debugfs_create_dir("rk3288_crypto", NULL); ++ rocklist.dbgfs_stats = debugfs_create_file("stats", 0444, ++ rocklist.dbgfs_dir, ++ &rocklist, ++ &rk_crypto_debugfs_fops); ++#endif ++} ++ + static int rk_crypto_register(struct rk_crypto_info *crypto_info) { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_crypto_info *dev = ctx->dev; + unsigned int i, k; +@@ -264,12 +247,22 @@ static int rk_crypto_register(struct rk_ -- ctx->mode = RK_CRYPTO_AES_CBC_MODE; -+ rctx->mode = RK_CRYPTO_AES_CBC_MODE; - return rk_handle_req(dev, req); - } + for (i = 0; i < ARRAY_SIZE(rk_cipher_algs); i++) { + rk_cipher_algs[i]->dev = crypto_info; +- if (rk_cipher_algs[i]->type == ALG_TYPE_CIPHER) +- err = crypto_register_skcipher( +- &rk_cipher_algs[i]->alg.skcipher); +- else +- err = crypto_register_ahash( +- &rk_cipher_algs[i]->alg.hash); ++ switch (rk_cipher_algs[i]->type) { ++ case CRYPTO_ALG_TYPE_SKCIPHER: ++ dev_info(crypto_info->dev, "Register %s as %s\n", ++ rk_cipher_algs[i]->alg.skcipher.base.cra_name, ++ rk_cipher_algs[i]->alg.skcipher.base.cra_driver_name); ++ err = crypto_register_skcipher(&rk_cipher_algs[i]->alg.skcipher); ++ break; ++ case CRYPTO_ALG_TYPE_AHASH: ++ dev_info(crypto_info->dev, "Register %s as %s\n", ++ rk_cipher_algs[i]->alg.hash.halg.base.cra_name, ++ rk_cipher_algs[i]->alg.hash.halg.base.cra_driver_name); ++ err = crypto_register_ahash(&rk_cipher_algs[i]->alg.hash); ++ break; ++ default: ++ dev_err(crypto_info->dev, "unknown algorithm\n"); ++ } + if (err) + goto err_cipher_algs; + } +@@ -277,7 +270,7 @@ static int rk_crypto_register(struct rk_ -@@ -106,9 +109,10 @@ static int rk_aes_cbc_decrypt(struct skcipher_request *req) - { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_crypto_info *dev = ctx->dev; + err_cipher_algs: + for (k = 0; k < i; k++) { +- if (rk_cipher_algs[i]->type == ALG_TYPE_CIPHER) ++ if (rk_cipher_algs[i]->type == CRYPTO_ALG_TYPE_SKCIPHER) + crypto_unregister_skcipher(&rk_cipher_algs[k]->alg.skcipher); + else + crypto_unregister_ahash(&rk_cipher_algs[i]->alg.hash); +@@ -290,22 +283,23 @@ static void rk_crypto_unregister(void) + unsigned int i; -- ctx->mode = RK_CRYPTO_AES_CBC_MODE | RK_CRYPTO_DEC; -+ rctx->mode = RK_CRYPTO_AES_CBC_MODE | RK_CRYPTO_DEC; - return rk_handle_req(dev, req); + for (i = 0; i < ARRAY_SIZE(rk_cipher_algs); i++) { +- if (rk_cipher_algs[i]->type == ALG_TYPE_CIPHER) ++ if (rk_cipher_algs[i]->type == CRYPTO_ALG_TYPE_SKCIPHER) + crypto_unregister_skcipher(&rk_cipher_algs[i]->alg.skcipher); + else + crypto_unregister_ahash(&rk_cipher_algs[i]->alg.hash); + } } -@@ -116,9 +120,10 @@ static int rk_des_ecb_encrypt(struct skcipher_request *req) +-static void rk_crypto_action(void *data) +-{ +- struct rk_crypto_info *crypto_info = data; +- +- reset_control_assert(crypto_info->rst); +-} +- + static const struct of_device_id crypto_of_id_table[] = { +- { .compatible = "rockchip,rk3288-crypto" }, ++ { .compatible = "rockchip,rk3288-crypto", ++ .data = &rk3288_variant, ++ }, ++ { .compatible = "rockchip,rk3328-crypto", ++ .data = &rk3328_variant, ++ }, ++ { .compatible = "rockchip,rk3399-crypto", ++ .data = &rk3399_variant, ++ }, + {} + }; + MODULE_DEVICE_TABLE(of, crypto_of_id_table); +@@ -313,7 +307,7 @@ MODULE_DEVICE_TABLE(of, crypto_of_id_tab + static int rk_crypto_probe(struct platform_device *pdev) { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_crypto_info *dev = ctx->dev; + struct device *dev = &pdev->dev; +- struct rk_crypto_info *crypto_info; ++ struct rk_crypto_info *crypto_info, *first; + int err = 0; -- ctx->mode = 0; -+ rctx->mode = 0; - return rk_handle_req(dev, req); - } + crypto_info = devm_kzalloc(&pdev->dev, +@@ -323,7 +317,16 @@ static int rk_crypto_probe(struct platfo + goto err_crypto; + } -@@ -126,9 +131,10 @@ static int rk_des_ecb_decrypt(struct skcipher_request *req) - { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_crypto_info *dev = ctx->dev; +- crypto_info->rst = devm_reset_control_get(dev, "crypto-rst"); ++ crypto_info->dev = &pdev->dev; ++ platform_set_drvdata(pdev, crypto_info); ++ ++ crypto_info->variant = of_device_get_match_data(&pdev->dev); ++ if (!crypto_info->variant) { ++ dev_err(&pdev->dev, "Missing variant\n"); ++ return -EINVAL; ++ } ++ ++ crypto_info->rst = devm_reset_control_array_get_exclusive(dev); + if (IS_ERR(crypto_info->rst)) { + err = PTR_ERR(crypto_info->rst); + goto err_crypto; +@@ -333,46 +336,19 @@ static int rk_crypto_probe(struct platfo + usleep_range(10, 20); + reset_control_deassert(crypto_info->rst); -- ctx->mode = RK_CRYPTO_DEC; -+ rctx->mode = RK_CRYPTO_DEC; - return rk_handle_req(dev, req); - } +- err = devm_add_action_or_reset(dev, rk_crypto_action, crypto_info); +- if (err) +- goto err_crypto; +- +- spin_lock_init(&crypto_info->lock); +- + crypto_info->reg = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(crypto_info->reg)) { + err = PTR_ERR(crypto_info->reg); + goto err_crypto; + } -@@ -136,9 +142,10 @@ static int rk_des_cbc_encrypt(struct skcipher_request *req) - { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_crypto_info *dev = ctx->dev; +- crypto_info->aclk = devm_clk_get(&pdev->dev, "aclk"); +- if (IS_ERR(crypto_info->aclk)) { +- err = PTR_ERR(crypto_info->aclk); +- goto err_crypto; +- } +- +- crypto_info->hclk = devm_clk_get(&pdev->dev, "hclk"); +- if (IS_ERR(crypto_info->hclk)) { +- err = PTR_ERR(crypto_info->hclk); +- goto err_crypto; +- } +- +- crypto_info->sclk = devm_clk_get(&pdev->dev, "sclk"); +- if (IS_ERR(crypto_info->sclk)) { +- err = PTR_ERR(crypto_info->sclk); +- goto err_crypto; +- } +- +- crypto_info->dmaclk = devm_clk_get(&pdev->dev, "apb_pclk"); +- if (IS_ERR(crypto_info->dmaclk)) { +- err = PTR_ERR(crypto_info->dmaclk); ++ err = rk_crypto_get_clks(crypto_info); ++ if (err) + goto err_crypto; +- } -- ctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC; -+ rctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC; - return rk_handle_req(dev, req); - } + crypto_info->irq = platform_get_irq(pdev, 0); + if (crypto_info->irq < 0) { +- dev_warn(crypto_info->dev, +- "control Interrupt is not available.\n"); ++ dev_err(&pdev->dev, "control Interrupt is not available.\n"); + err = crypto_info->irq; + goto err_crypto; + } +@@ -382,49 +358,64 @@ static int rk_crypto_probe(struct platfo + "rk-crypto", pdev); -@@ -146,9 +153,10 @@ static int rk_des_cbc_decrypt(struct skcipher_request *req) - { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_crypto_info *dev = ctx->dev; + if (err) { +- dev_err(crypto_info->dev, "irq request failed.\n"); ++ dev_err(&pdev->dev, "irq request failed.\n"); + goto err_crypto; + } -- ctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC | RK_CRYPTO_DEC; -+ rctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC | RK_CRYPTO_DEC; - return rk_handle_req(dev, req); - } +- crypto_info->dev = &pdev->dev; +- platform_set_drvdata(pdev, crypto_info); ++ crypto_info->engine = crypto_engine_alloc_init(&pdev->dev, true); ++ crypto_engine_start(crypto_info->engine); ++ init_completion(&crypto_info->complete); -@@ -156,9 +164,10 @@ static int rk_des3_ede_ecb_encrypt(struct skcipher_request *req) - { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_crypto_info *dev = ctx->dev; +- tasklet_init(&crypto_info->queue_task, +- rk_crypto_queue_task_cb, (unsigned long)crypto_info); +- tasklet_init(&crypto_info->done_task, +- rk_crypto_done_task_cb, (unsigned long)crypto_info); +- crypto_init_queue(&crypto_info->queue, 50); +- +- crypto_info->enable_clk = rk_crypto_enable_clk; +- crypto_info->disable_clk = rk_crypto_disable_clk; +- crypto_info->load_data = rk_load_data; +- crypto_info->unload_data = rk_unload_data; +- crypto_info->enqueue = rk_crypto_enqueue; +- crypto_info->busy = false; ++ err = rk_crypto_pm_init(crypto_info); ++ if (err) ++ goto err_pm; -- ctx->mode = RK_CRYPTO_TDES_SELECT; -+ rctx->mode = RK_CRYPTO_TDES_SELECT; - return rk_handle_req(dev, req); - } +- err = rk_crypto_register(crypto_info); +- if (err) { +- dev_err(dev, "err in register alg"); +- goto err_register_alg; ++ spin_lock(&rocklist.lock); ++ first = list_first_entry_or_null(&rocklist.dev_list, ++ struct rk_crypto_info, list); ++ list_add_tail(&crypto_info->list, &rocklist.dev_list); ++ spin_unlock(&rocklist.lock); ++ ++ if (!first) { ++ err = rk_crypto_register(crypto_info); ++ if (err) { ++ dev_err(dev, "Fail to register crypto algorithms"); ++ goto err_register_alg; ++ } ++ ++ register_debugfs(crypto_info); + } -@@ -166,9 +175,10 @@ static int rk_des3_ede_ecb_decrypt(struct skcipher_request *req) - { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_crypto_info *dev = ctx->dev; +- dev_info(dev, "Crypto Accelerator successfully registered\n"); + return 0; -- ctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_DEC; -+ rctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_DEC; - return rk_handle_req(dev, req); + err_register_alg: +- tasklet_kill(&crypto_info->queue_task); +- tasklet_kill(&crypto_info->done_task); ++ rk_crypto_pm_exit(crypto_info); ++err_pm: ++ crypto_engine_exit(crypto_info->engine); + err_crypto: ++ dev_err(dev, "Crypto Accelerator not successfully registered\n"); + return err; } -@@ -176,9 +186,10 @@ static int rk_des3_ede_cbc_encrypt(struct skcipher_request *req) + static int rk_crypto_remove(struct platform_device *pdev) { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_crypto_info *dev = ctx->dev; + struct rk_crypto_info *crypto_tmp = platform_get_drvdata(pdev); ++ struct rk_crypto_info *first; -- ctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC; -+ rctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC; - return rk_handle_req(dev, req); +- rk_crypto_unregister(); +- tasklet_kill(&crypto_tmp->done_task); +- tasklet_kill(&crypto_tmp->queue_task); ++ spin_lock_bh(&rocklist.lock); ++ list_del(&crypto_tmp->list); ++ first = list_first_entry_or_null(&rocklist.dev_list, ++ struct rk_crypto_info, list); ++ spin_unlock_bh(&rocklist.lock); ++ ++ if (!first) { ++#ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG ++ debugfs_remove_recursive(rocklist.dbgfs_dir); ++#endif ++ rk_crypto_unregister(); ++ } ++ rk_crypto_pm_exit(crypto_tmp); ++ crypto_engine_exit(crypto_tmp->engine); + return 0; } -@@ -186,9 +197,10 @@ static int rk_des3_ede_cbc_decrypt(struct skcipher_request *req) - { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_crypto_info *dev = ctx->dev; - -- ctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC | -+ rctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC | - RK_CRYPTO_DEC; - return rk_handle_req(dev, req); - } -@@ -199,6 +211,7 @@ static void rk_ablk_hw_init(struct rk_crypto_info *dev) - skcipher_request_cast(dev->async_req); - struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(req); - struct crypto_tfm *tfm = crypto_skcipher_tfm(cipher); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(cipher); - u32 ivsize, block, conf_reg = 0; - -@@ -206,22 +219,22 @@ static void rk_ablk_hw_init(struct rk_crypto_info *dev) - ivsize = crypto_skcipher_ivsize(cipher); - - if (block == DES_BLOCK_SIZE) { -- ctx->mode |= RK_CRYPTO_TDES_FIFO_MODE | -+ rctx->mode |= RK_CRYPTO_TDES_FIFO_MODE | - RK_CRYPTO_TDES_BYTESWAP_KEY | - RK_CRYPTO_TDES_BYTESWAP_IV; -- CRYPTO_WRITE(dev, RK_CRYPTO_TDES_CTRL, ctx->mode); -+ CRYPTO_WRITE(dev, RK_CRYPTO_TDES_CTRL, rctx->mode); - memcpy_toio(dev->reg + RK_CRYPTO_TDES_IV_0, req->iv, ivsize); - conf_reg = RK_CRYPTO_DESSEL; - } else { -- ctx->mode |= RK_CRYPTO_AES_FIFO_MODE | -+ rctx->mode |= RK_CRYPTO_AES_FIFO_MODE | - RK_CRYPTO_AES_KEY_CHANGE | - RK_CRYPTO_AES_BYTESWAP_KEY | - RK_CRYPTO_AES_BYTESWAP_IV; - if (ctx->keylen == AES_KEYSIZE_192) -- ctx->mode |= RK_CRYPTO_AES_192BIT_key; -+ rctx->mode |= RK_CRYPTO_AES_192BIT_key; - else if (ctx->keylen == AES_KEYSIZE_256) -- ctx->mode |= RK_CRYPTO_AES_256BIT_key; -- CRYPTO_WRITE(dev, RK_CRYPTO_AES_CTRL, ctx->mode); -+ rctx->mode |= RK_CRYPTO_AES_256BIT_key; -+ CRYPTO_WRITE(dev, RK_CRYPTO_AES_CTRL, rctx->mode); - memcpy_toio(dev->reg + RK_CRYPTO_AES_IV_0, req->iv, ivsize); - } - conf_reg |= RK_CRYPTO_BYTESWAP_BTFIFO | -@@ -246,6 +259,7 @@ static int rk_set_data_start(struct rk_crypto_info *dev) - struct skcipher_request *req = - skcipher_request_cast(dev->async_req); - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - u32 ivsize = crypto_skcipher_ivsize(tfm); - u8 *src_last_blk = page_address(sg_page(dev->sg_src)) + -@@ -254,7 +268,7 @@ static int rk_set_data_start(struct rk_crypto_info *dev) - /* Store the iv that need to be updated in chain mode. - * And update the IV buffer to contain the next IV for decryption mode. - */ -- if (ctx->mode & RK_CRYPTO_DEC) { -+ if (rctx->mode & RK_CRYPTO_DEC) { - memcpy(ctx->iv, src_last_blk, ivsize); - sg_pcopy_to_buffer(dev->first, dev->src_nents, req->iv, - ivsize, dev->total - ivsize); -@@ -294,11 +308,12 @@ static void rk_iv_copyback(struct rk_crypto_info *dev) - struct skcipher_request *req = - skcipher_request_cast(dev->async_req); - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - u32 ivsize = crypto_skcipher_ivsize(tfm); - - /* Update the IV buffer to contain the next IV for encryption mode. */ -- if (!(ctx->mode & RK_CRYPTO_DEC)) { -+ if (!(rctx->mode & RK_CRYPTO_DEC)) { - if (dev->aligned) { - memcpy(req->iv, sg_virt(dev->sg_dst) + - dev->sg_dst->length - ivsize, ivsize); -@@ -314,11 +329,12 @@ static void rk_update_iv(struct rk_crypto_info *dev) - struct skcipher_request *req = - skcipher_request_cast(dev->async_req); - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - u32 ivsize = crypto_skcipher_ivsize(tfm); - u8 *new_iv = NULL; - -- if (ctx->mode & RK_CRYPTO_DEC) { -+ if (rctx->mode & RK_CRYPTO_DEC) { - new_iv = ctx->iv; - } else { - new_iv = page_address(sg_page(dev->sg_dst)) + - -From patchwork Wed Jul 6 09:03:45 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907939 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 33449C43334 - for ; - Wed, 6 Jul 2022 10:29:37 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=vPqJpmBU4tPwQUb47oezLb8ncT7cBKWFEhSpl0IIqDQ=; b=UeLWz+/2mWcTWv - 5CZe3hQ/92EsN3fV8AlrOwvgdwzVVaF+jCwZT41b5otMmgmYynVZtoQs4TiM2XN+uIsl9Sxb0x6y+ - ySFZZ31//02+Z7johCQn9sIHuUE1J1yfu+C8jNW+AZ5H7aIR2zBVmtRhYaanqcl5TcCaUgaxNpYKp - mPLxNXUaPR0U4x5gHenoJA8TVErevzQnwUOtnfFrqBWfSkSUr4YSNP9xVYl0u9vvmwMF5YMNfFFFV - vaxpo6uFgu6QGNb3sAc3jM7++KQ3qUr9ho0xLGrsggFXRw863QC/e/HML4qE4MVoQ371zhcGqPan+ - FeIdga8nFoU/Y9yPfe9A==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92Hb-008Vkl-J5; Wed, 06 Jul 2022 10:29:23 +0000 -Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xf-007bnK-OG - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:48 +0000 -Received: by mail-wm1-x32c.google.com with SMTP id n185so8422010wmn.4 - for ; - Wed, 06 Jul 2022 02:04:40 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=ME8Y4kRTkIs//WGHXoSnEtu/nBMpdqDM8UB8oWi8MOY=; - b=UdRN60DQUVaZIRf8L2zvMiUKDe/LvTFpB/KOxFMLKCW/gdP6TRQbojcMSbN9UFrDmf - 6wScDi4yZ/uTnD3oyPyTPclKoMWIoAsY+wFzcoQ3OYqVrLS4siENLAg2sVHaMdu/vvTb - MKzu7n7g5DWTvCrHdz5zCEBSwFMtDY/4sru099AfRrks3KtMuLDXhEA3x0tFSKquPaP7 - Giu5HfCzCfk49A4XQUtEc4Ls+FyyoYJKo48fZVZchfng/gH2m8yhZlCh4zbLUb7qR7fz - Mpo/3m1iZ4h+Cv6K9QsLl2KsmBth769Co+BI2SEHk529xFQB9F6Kn5kEPG3YgwBo6a3q - kHFA== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=ME8Y4kRTkIs//WGHXoSnEtu/nBMpdqDM8UB8oWi8MOY=; - b=7UmuERP7eBJs8wgd8odRZOXTZndO8NhWNmWTz6iSJW4H1Xf7nb7iDqEEfDNMK2MeLU - kv/MmJ/48bAXnJprDiMQekwr1ZJIcKMhymRHVqcgpFWAbA4d/vbMJPvqNdpXmqDRhWDo - o1eQ2LFlmnayyF46mMdKOWxRNUQIUR0iZIgi3Dob3cGop5rG0HVNAvg68Tr7KPLmhfMa - mKUJJ2tfJa4ZiM9+J1vLQfFuAh0VcmjT48daKqu+6nMD14x0uJJTiWs2ckJsBsZ1RQie - AAMyzNDAs+nVheJSrf/U1RVEIAeRaDsHPPzRofaE1tqwQl57Zx39gBxZHe/iCVgJzf6h - mSVA== -X-Gm-Message-State: AJIora9CurhzuYjuDBGEdvNpdJsDhAjkNIxngcKfSGllY9Sxts5NPQXf - Rc3ECC9wHMvbHRRvjXN3KQ8nfg== -X-Google-Smtp-Source: - AGRyM1s9DaSBt6vuHk4EgmNeMLDT2eSsveDx7wd120eJUB9Y5vufORk/vGm7z7AawTId3YsmeddpYg== -X-Received: by 2002:a05:600c:4183:b0:3a0:4694:a862 with SMTP id - p3-20020a05600c418300b003a04694a862mr44324738wmh.150.1657098279242; - Wed, 06 Jul 2022 02:04:39 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.38 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:38 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 06/33] crypto: rockchip: add fallback for cipher -Date: Wed, 6 Jul 2022 09:03:45 +0000 -Message-Id: <20220706090412.806101-7-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020443_860462_27205C9D -X-CRM114-Status: GOOD ( 17.85 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -The hardware does not handle 0 size length request, let's add a -fallback. -Furthermore fallback will be used for all unaligned case the hardware -cannot handle. - -Fixes: ce0183cb6464b ("crypto: rockchip - switch to skcipher API") -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/Kconfig | 4 + - drivers/crypto/rockchip/rk3288_crypto.h | 2 + - .../crypto/rockchip/rk3288_crypto_skcipher.c | 97 ++++++++++++++++--- - 3 files changed, 90 insertions(+), 13 deletions(-) - -diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig -index ee99c02c84e8..c293f801806c 100644 ---- a/drivers/crypto/Kconfig -+++ b/drivers/crypto/Kconfig -@@ -784,6 +784,10 @@ config CRYPTO_DEV_IMGTEC_HASH - config CRYPTO_DEV_ROCKCHIP - tristate "Rockchip's Cryptographic Engine driver" - depends on OF && ARCH_ROCKCHIP -+ depends on PM -+ select CRYPTO_ECB -+ select CRYPTO_CBC -+ select CRYPTO_DES - select CRYPTO_AES - select CRYPTO_LIB_DES - select CRYPTO_MD5 -diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h -index c919d9a43a08..8b1e15d8ddc6 100644 +@@ -433,6 +424,7 @@ static struct platform_driver crypto_dri + .remove = rk_crypto_remove, + .driver = { + .name = "rk3288-crypto", ++ .pm = &rk_crypto_pm_ops, + .of_match_table = crypto_of_id_table, + }, + }; --- a/drivers/crypto/rockchip/rk3288_crypto.h +++ b/drivers/crypto/rockchip/rk3288_crypto.h -@@ -246,10 +246,12 @@ struct rk_cipher_ctx { - struct rk_crypto_info *dev; - unsigned int keylen; - u8 iv[AES_BLOCK_SIZE]; -+ struct crypto_skcipher *fallback_tfm; - }; - - struct rk_cipher_rctx { - u32 mode; -+ struct skcipher_request fallback_req; // keep at the end - }; - - enum alg_type { -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index bbd0bf52bf07..eac5bba66e25 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -13,6 +13,63 @@ +@@ -5,9 +5,13 @@ + #include + #include + #include ++#include + #include ++#include + #include ++#include + #include ++#include + #include + #include - #define RK_CRYPTO_DEC BIT(0) +@@ -184,85 +188,91 @@ + #define CRYPTO_WRITE(dev, offset, val) \ + writel_relaxed((val), ((dev)->reg + (offset))) -+static int rk_cipher_need_fallback(struct skcipher_request *req) -+{ -+ struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -+ unsigned int bs = crypto_skcipher_blocksize(tfm); -+ struct scatterlist *sgs, *sgd; -+ unsigned int stodo, dtodo, len; -+ -+ if (!req->cryptlen) -+ return true; -+ -+ len = req->cryptlen; -+ sgs = req->src; -+ sgd = req->dst; -+ while (sgs && sgd) { -+ if (!IS_ALIGNED(sgs->offset, sizeof(u32))) { -+ return true; -+ } -+ if (!IS_ALIGNED(sgd->offset, sizeof(u32))) { -+ return true; -+ } -+ stodo = min(len, sgs->length); -+ if (stodo % bs) { -+ return true; -+ } -+ dtodo = min(len, sgd->length); -+ if (dtodo % bs) { -+ return true; -+ } -+ if (stodo != dtodo) { -+ return true; -+ } -+ len -= stodo; -+ sgs = sg_next(sgs); -+ sgd = sg_next(sgd); -+ } -+ return false; -+} ++#define RK_MAX_CLKS 4 + -+static int rk_cipher_fallback(struct skcipher_request *areq) -+{ -+ struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); -+ struct rk_cipher_ctx *op = crypto_skcipher_ctx(tfm); -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(areq); -+ int err; ++/* ++ * struct rockchip_ip - struct for managing a list of RK crypto instance ++ * @dev_list: Used for doing a list of rk_crypto_info ++ * @lock: Control access to dev_list ++ * @dbgfs_dir: Debugfs dentry for statistic directory ++ * @dbgfs_stats: Debugfs dentry for statistic counters ++ */ ++struct rockchip_ip { ++ struct list_head dev_list; ++ spinlock_t lock; /* Control access to dev_list */ ++ struct dentry *dbgfs_dir; ++ struct dentry *dbgfs_stats; ++}; + -+ skcipher_request_set_tfm(&rctx->fallback_req, op->fallback_tfm); -+ skcipher_request_set_callback(&rctx->fallback_req, areq->base.flags, -+ areq->base.complete, areq->base.data); -+ skcipher_request_set_crypt(&rctx->fallback_req, areq->src, areq->dst, -+ areq->cryptlen, areq->iv); -+ if (rctx->mode & RK_CRYPTO_DEC) -+ err = crypto_skcipher_decrypt(&rctx->fallback_req); -+ else -+ err = crypto_skcipher_encrypt(&rctx->fallback_req); -+ return err; -+} ++struct rk_clks { ++ const char *name; ++ unsigned long max; ++}; + - static void rk_crypto_complete(struct crypto_async_request *base, int err) - { - if (base->complete) -@@ -22,10 +79,10 @@ static void rk_crypto_complete(struct crypto_async_request *base, int err) - static int rk_handle_req(struct rk_crypto_info *dev, - struct skcipher_request *req) - { -- if (!IS_ALIGNED(req->cryptlen, dev->align_size)) -- return -EINVAL; -- else -- return dev->enqueue(dev, &req->base); -+ if (rk_cipher_need_fallback(req)) -+ return rk_cipher_fallback(req); ++struct rk_variant { ++ int num_clks; ++ struct rk_clks rkclks[RK_MAX_CLKS]; ++}; + -+ return dev->enqueue(dev, &req->base); - } + struct rk_crypto_info { ++ struct list_head list; + struct device *dev; +- struct clk *aclk; +- struct clk *hclk; +- struct clk *sclk; +- struct clk *dmaclk; ++ struct clk_bulk_data *clks; ++ int num_clks; + struct reset_control *rst; + void __iomem *reg; + int irq; +- struct crypto_queue queue; +- struct tasklet_struct queue_task; +- struct tasklet_struct done_task; +- struct crypto_async_request *async_req; +- int err; +- /* device lock */ +- spinlock_t lock; +- +- /* the public variable */ +- struct scatterlist *sg_src; +- struct scatterlist *sg_dst; +- struct scatterlist sg_tmp; +- struct scatterlist *first; +- unsigned int left_bytes; +- void *addr_vir; +- int aligned; +- int align_size; +- size_t src_nents; +- size_t dst_nents; +- unsigned int total; +- unsigned int count; +- dma_addr_t addr_in; +- dma_addr_t addr_out; +- bool busy; +- int (*start)(struct rk_crypto_info *dev); +- int (*update)(struct rk_crypto_info *dev); +- void (*complete)(struct crypto_async_request *base, int err); +- int (*enable_clk)(struct rk_crypto_info *dev); +- void (*disable_clk)(struct rk_crypto_info *dev); +- int (*load_data)(struct rk_crypto_info *dev, +- struct scatterlist *sg_src, +- struct scatterlist *sg_dst); +- void (*unload_data)(struct rk_crypto_info *dev); +- int (*enqueue)(struct rk_crypto_info *dev, +- struct crypto_async_request *async_req); ++ const struct rk_variant *variant; ++ unsigned long nreq; ++ struct crypto_engine *engine; ++ struct completion complete; ++ int status; + }; - static int rk_aes_setkey(struct crypto_skcipher *cipher, -@@ -39,7 +96,8 @@ static int rk_aes_setkey(struct crypto_skcipher *cipher, - return -EINVAL; - ctx->keylen = keylen; - memcpy_toio(ctx->dev->reg + RK_CRYPTO_AES_KEY_0, key, keylen); -- return 0; -+ -+ return crypto_skcipher_setkey(ctx->fallback_tfm, key, keylen); - } + /* the private variable of hash */ + struct rk_ahash_ctx { +- struct rk_crypto_info *dev; ++ struct crypto_engine_ctx enginectx; + /* for fallback */ + struct crypto_ahash *fallback_tfm; + }; - static int rk_des_setkey(struct crypto_skcipher *cipher, -@@ -54,7 +112,8 @@ static int rk_des_setkey(struct crypto_skcipher *cipher, +-/* the privete variable of hash for fallback */ ++/* the private variable of hash for fallback */ + struct rk_ahash_rctx { ++ struct rk_crypto_info *dev; + struct ahash_request fallback_req; + u32 mode; ++ int nrsg; + }; - ctx->keylen = keylen; - memcpy_toio(ctx->dev->reg + RK_CRYPTO_TDES_KEY1_0, key, keylen); -- return 0; -+ -+ return crypto_skcipher_setkey(ctx->fallback_tfm, key, keylen); - } + /* the private variable of cipher */ + struct rk_cipher_ctx { +- struct rk_crypto_info *dev; ++ struct crypto_engine_ctx enginectx; + unsigned int keylen; +- u32 mode; ++ u8 key[AES_MAX_KEY_SIZE]; + u8 iv[AES_BLOCK_SIZE]; ++ struct crypto_skcipher *fallback_tfm; + }; - static int rk_tdes_setkey(struct crypto_skcipher *cipher, -@@ -69,7 +128,7 @@ static int rk_tdes_setkey(struct crypto_skcipher *cipher, +-enum alg_type { +- ALG_TYPE_HASH, +- ALG_TYPE_CIPHER, ++struct rk_cipher_rctx { ++ struct rk_crypto_info *dev; ++ u8 backup_iv[AES_BLOCK_SIZE]; ++ u32 mode; ++ struct skcipher_request fallback_req; // keep at the end + }; - ctx->keylen = keylen; - memcpy_toio(ctx->dev->reg + RK_CRYPTO_TDES_KEY1_0, key, keylen); -- return 0; -+ return crypto_skcipher_setkey(ctx->fallback_tfm, key, keylen); - } + struct rk_crypto_tmp { +- struct rk_crypto_info *dev; ++ u32 type; ++ struct rk_crypto_info *dev; + union { + struct skcipher_alg skcipher; + struct ahash_alg hash; + } alg; +- enum alg_type type; ++ unsigned long stat_req; ++ unsigned long stat_fb; ++ unsigned long stat_fb_len; ++ unsigned long stat_fb_sglen; ++ unsigned long stat_fb_align; ++ unsigned long stat_fb_sgdiff; + }; - static int rk_aes_ecb_encrypt(struct skcipher_request *req) -@@ -394,6 +453,7 @@ static int rk_ablk_init_tfm(struct crypto_skcipher *tfm) - { - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct skcipher_alg *alg = crypto_skcipher_alg(tfm); -+ const char *name = crypto_tfm_alg_name(&tfm->base); - struct rk_crypto_tmp *algt; + extern struct rk_crypto_tmp rk_ecb_aes_alg; +@@ -276,4 +286,5 @@ extern struct rk_crypto_tmp rk_ahash_sha + extern struct rk_crypto_tmp rk_ahash_sha256; + extern struct rk_crypto_tmp rk_ahash_md5; - algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); -@@ -407,6 +467,16 @@ static int rk_ablk_init_tfm(struct crypto_skcipher *tfm) - if (!ctx->dev->addr_vir) - return -ENOMEM; ++struct rk_crypto_info *get_rk_crypto(void); + #endif +--- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c ++++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c +@@ -9,6 +9,8 @@ + * Some ideas are from marvell/cesa.c and s5p-sss.c driver. + */ + #include ++#include ++#include + #include "rk3288_crypto.h" -+ ctx->fallback_tfm = crypto_alloc_skcipher(name, 0, CRYPTO_ALG_NEED_FALLBACK); -+ if (IS_ERR(ctx->fallback_tfm)) { -+ dev_err(ctx->dev->dev, "ERROR: Cannot allocate fallback for %s %ld\n", -+ name, PTR_ERR(ctx->fallback_tfm)); -+ return PTR_ERR(ctx->fallback_tfm); + /* +@@ -16,6 +18,44 @@ + * so we put the fixed hash out when met zero message. + */ + ++static bool rk_ahash_need_fallback(struct ahash_request *req) ++{ ++ struct scatterlist *sg; ++ ++ sg = req->src; ++ while (sg) { ++ if (!IS_ALIGNED(sg->offset, sizeof(u32))) { ++ return true; ++ } ++ if (sg->length % 4) { ++ return true; ++ } ++ sg = sg_next(sg); + } ++ return false; ++} + -+ tfm->reqsize = sizeof(struct rk_cipher_rctx) + -+ crypto_skcipher_reqsize(ctx->fallback_tfm); ++static int rk_ahash_digest_fb(struct ahash_request *areq) ++{ ++ struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); ++ struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); ++ struct rk_ahash_ctx *tfmctx = crypto_ahash_ctx(tfm); ++ struct ahash_alg *alg = __crypto_ahash_alg(tfm->base.__crt_alg); ++ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash); ++ ++ algt->stat_fb++; ++ ++ ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm); ++ rctx->fallback_req.base.flags = areq->base.flags & ++ CRYPTO_TFM_REQ_MAY_SLEEP; ++ ++ rctx->fallback_req.nbytes = areq->nbytes; ++ rctx->fallback_req.src = areq->src; ++ rctx->fallback_req.result = areq->result; ++ ++ return crypto_ahash_digest(&rctx->fallback_req); ++} + + static int zero_message_process(struct ahash_request *req) + { + struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); +@@ -38,15 +78,9 @@ static int zero_message_process(struct a return 0; } -@@ -415,6 +485,7 @@ static void rk_ablk_exit_tfm(struct crypto_skcipher *tfm) - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +-static void rk_ahash_crypto_complete(struct crypto_async_request *base, int err) +-{ +- if (base->complete) +- base->complete(base, err); +-} +- +-static void rk_ahash_reg_init(struct rk_crypto_info *dev) ++static void rk_ahash_reg_init(struct ahash_request *req, ++ struct rk_crypto_info *dev) + { +- struct ahash_request *req = ahash_request_cast(dev->async_req); + struct rk_ahash_rctx *rctx = ahash_request_ctx(req); + int reg_status; - free_page((unsigned long)ctx->dev->addr_vir); -+ crypto_free_skcipher(ctx->fallback_tfm); +@@ -74,7 +108,7 @@ static void rk_ahash_reg_init(struct rk_ + RK_CRYPTO_BYTESWAP_BRFIFO | + RK_CRYPTO_BYTESWAP_BTFIFO); + +- CRYPTO_WRITE(dev, RK_CRYPTO_HASH_MSG_LEN, dev->total); ++ CRYPTO_WRITE(dev, RK_CRYPTO_HASH_MSG_LEN, req->nbytes); } - struct rk_crypto_tmp rk_ecb_aes_alg = { -@@ -423,7 +494,7 @@ struct rk_crypto_tmp rk_ecb_aes_alg = { - .base.cra_name = "ecb(aes)", - .base.cra_driver_name = "ecb-aes-rk", - .base.cra_priority = 300, -- .base.cra_flags = CRYPTO_ALG_ASYNC, -+ .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, - .base.cra_blocksize = AES_BLOCK_SIZE, - .base.cra_ctxsize = sizeof(struct rk_cipher_ctx), - .base.cra_alignmask = 0x0f, -@@ -445,7 +516,7 @@ struct rk_crypto_tmp rk_cbc_aes_alg = { - .base.cra_name = "cbc(aes)", - .base.cra_driver_name = "cbc-aes-rk", - .base.cra_priority = 300, -- .base.cra_flags = CRYPTO_ALG_ASYNC, -+ .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, - .base.cra_blocksize = AES_BLOCK_SIZE, - .base.cra_ctxsize = sizeof(struct rk_cipher_ctx), - .base.cra_alignmask = 0x0f, -@@ -468,7 +539,7 @@ struct rk_crypto_tmp rk_ecb_des_alg = { - .base.cra_name = "ecb(des)", - .base.cra_driver_name = "ecb-des-rk", - .base.cra_priority = 300, -- .base.cra_flags = CRYPTO_ALG_ASYNC, -+ .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, - .base.cra_blocksize = DES_BLOCK_SIZE, - .base.cra_ctxsize = sizeof(struct rk_cipher_ctx), - .base.cra_alignmask = 0x07, -@@ -490,7 +561,7 @@ struct rk_crypto_tmp rk_cbc_des_alg = { - .base.cra_name = "cbc(des)", - .base.cra_driver_name = "cbc-des-rk", - .base.cra_priority = 300, -- .base.cra_flags = CRYPTO_ALG_ASYNC, -+ .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, - .base.cra_blocksize = DES_BLOCK_SIZE, - .base.cra_ctxsize = sizeof(struct rk_cipher_ctx), - .base.cra_alignmask = 0x07, -@@ -513,7 +584,7 @@ struct rk_crypto_tmp rk_ecb_des3_ede_alg = { - .base.cra_name = "ecb(des3_ede)", - .base.cra_driver_name = "ecb-des3-ede-rk", - .base.cra_priority = 300, -- .base.cra_flags = CRYPTO_ALG_ASYNC, -+ .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, - .base.cra_blocksize = DES_BLOCK_SIZE, - .base.cra_ctxsize = sizeof(struct rk_cipher_ctx), - .base.cra_alignmask = 0x07, -@@ -535,7 +606,7 @@ struct rk_crypto_tmp rk_cbc_des3_ede_alg = { - .base.cra_name = "cbc(des3_ede)", - .base.cra_driver_name = "cbc-des3-ede-rk", - .base.cra_priority = 300, -- .base.cra_flags = CRYPTO_ALG_ASYNC, -+ .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, - .base.cra_blocksize = DES_BLOCK_SIZE, - .base.cra_ctxsize = sizeof(struct rk_cipher_ctx), - .base.cra_alignmask = 0x07, - -From patchwork Wed Jul 6 09:03:46 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907941 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 11A74CCA473 - for ; - Wed, 6 Jul 2022 10:29:44 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=dFqBfnnUAvugOM6BMG+kJAPC6qQX1BZHTww5KGSm69c=; b=AAiPDVLcgFEU5o - /J9x4TjquZycEIBAps7cooWe6Mk+YLkYJO9zyI4EWX/1YhmhEb/0EobfdnkFx+WHlrJi2IC9ZMlXo - 06D9lNmWRXcl3IEsj7dA7TkOoxEidXN4jkhCRx5mRfxu5ZrJh4hx55i2JrlzJQ1hQGmeroXNTWISf - rfdjXk6ee1ddb4vfcwGP1zNm2A9nCFAvwurU8BUevg5zJX72sjGA8xxHW0EDMCd2LdjzKWyeMVMEi - 1DHe51u0a2wAF28m8xGt0Z5dQR1UZJ6xr73pTQTsNgqLSrXMIHHMDt6YSl0e53QCQTz5m7Kk3SHdV - 0l+wzPLeVJSMG5CXay2A==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92Hh-008Vr7-Rh; Wed, 06 Jul 2022 10:29:29 +0000 -Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xi-007bo8-A1 - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:50 +0000 -Received: by mail-wm1-x331.google.com with SMTP id f190so8422369wma.5 - for ; - Wed, 06 Jul 2022 02:04:41 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=Lb5wXjXl71KLOn69lH3EgInZyalgQlnigOqDmtk2Tt0=; - b=zzT8S8RHrwSOYDYb4nSxX1Vj2+7cZjylmxpA5nZxp11NT/r63jTYcVVHZVl1lod/vB - s4xJiX61UpU/2yD2nDSoAXIUQOjT25go1QRplexRcmJizflXuNntueAVYZ4v4ZLopP8/ - gL6ba9Slb3Y8RCW5lRpR8O/XRgUTDBfYs8WszlEED2WevNhp5huie9+dYgrB0wxuN+Bt - iaN0wmPl8OrU95zsa3j5H2CK/L2eZYGG0cPCFukjkmOKO5VREcFxavuSxGROA/kv+GHZ - kEbvvxkjoCQ+tNJ+fYZc2xx2gOoSiQyhMMtENoQzsznYrFRR1EAxEVMH9i+YrweM2h9E - Xbhw== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=Lb5wXjXl71KLOn69lH3EgInZyalgQlnigOqDmtk2Tt0=; - b=vJgGoY+nMSKu8I9EH/22Q7C7ZWkz7nM3Jrn01SOG5bRGHb8H2vISSB2e129xfUqxeT - p+Mc7xuZ4BEq0Hz57W93WxJJ1/MNWphcuuS6wzrf+gDrQCOHr31scJF5p7X9sRZkavzB - ahkJkDYe5qt8p3q6QffF8Drnx22nKk9Uy8frFxOvc6GMPb2arrz8Z9+eD4+RMGhMMMAs - aSqdL6fMymsrYvFowLWrjwFNsJv6sssS9mHcgMVVg3105yab29oJw5MZ+NU16Pnb1xr1 - QWpihxT3HK6H4HImqXvC0143hxrr5rCs1L6wPzYFtOy85MF0T61SPG3fvHaZxcXgh/L/ - 63AA== -X-Gm-Message-State: AJIora+T4eu0CGjtBBXtIeYy7/Mx99i2VcrN+DK5PGQNDM8kLKe0roQ3 - RmkSbtY6YwAqa2MOePPHPhUlaA== -X-Google-Smtp-Source: - AGRyM1tU/eQs9y3rllPt7O3uf71DaGtNf9lf86F+8T4gDenqt/KrF5cKS5X1r9zX5d+0CXqvHL2xqA== -X-Received: by 2002:a7b:cb93:0:b0:3a0:4d00:2517 with SMTP id - m19-20020a7bcb93000000b003a04d002517mr41934646wmi.117.1657098280280; - Wed, 06 Jul 2022 02:04:40 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.39 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:39 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 07/33] crypto: rockchip: add fallback for ahash -Date: Wed, 6 Jul 2022 09:03:46 +0000 -Message-Id: <20220706090412.806101-8-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020446_390573_809BF203 -X-CRM114-Status: GOOD ( 12.08 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -Adds a fallback for all case hardware cannot handle. - -Fixes: ce0183cb6464b ("crypto: rockchip - switch to skcipher API") -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto_ahash.c | 38 +++++++++++++++++++ - 1 file changed, 38 insertions(+) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -index 49017d1fb510..16009bb0bf16 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -@@ -16,6 +16,40 @@ - * so we put the fixed hash out when met zero message. - */ + static int rk_ahash_init(struct ahash_request *req) +@@ -164,51 +198,80 @@ static int rk_ahash_export(struct ahash_ -+static bool rk_ahash_need_fallback(struct ahash_request *req) -+{ -+ struct scatterlist *sg; + static int rk_ahash_digest(struct ahash_request *req) + { +- struct rk_ahash_ctx *tctx = crypto_tfm_ctx(req->base.tfm); +- struct rk_crypto_info *dev = tctx->dev; ++ struct rk_ahash_rctx *rctx = ahash_request_ctx(req); ++ struct rk_crypto_info *dev; ++ struct crypto_engine *engine; + -+ sg = req->src; -+ while (sg) { -+ if (!IS_ALIGNED(sg->offset, sizeof(u32))) { -+ return true; -+ } -+ if (sg->length % 4) { -+ return true; -+ } -+ sg = sg_next(sg); -+ } -+ return false; -+} ++ if (rk_ahash_need_fallback(req)) ++ return rk_ahash_digest_fb(req); + + if (!req->nbytes) + return zero_message_process(req); +- else +- return dev->enqueue(dev, &req->base); + -+static int rk_ahash_digest_fb(struct ahash_request *areq) ++ dev = get_rk_crypto(); ++ ++ rctx->dev = dev; ++ engine = dev->engine; ++ ++ return crypto_transfer_hash_request_to_engine(engine, req); + } + +-static void crypto_ahash_dma_start(struct rk_crypto_info *dev) ++static void crypto_ahash_dma_start(struct rk_crypto_info *dev, struct scatterlist *sg) + { +- CRYPTO_WRITE(dev, RK_CRYPTO_HRDMAS, dev->addr_in); +- CRYPTO_WRITE(dev, RK_CRYPTO_HRDMAL, (dev->count + 3) / 4); ++ CRYPTO_WRITE(dev, RK_CRYPTO_HRDMAS, sg_dma_address(sg)); ++ CRYPTO_WRITE(dev, RK_CRYPTO_HRDMAL, sg_dma_len(sg) / 4); + CRYPTO_WRITE(dev, RK_CRYPTO_CTRL, RK_CRYPTO_HASH_START | + (RK_CRYPTO_HASH_START << 16)); + } + +-static int rk_ahash_set_data_start(struct rk_crypto_info *dev) ++static int rk_hash_prepare(struct crypto_engine *engine, void *breq) +{ ++ struct ahash_request *areq = container_of(breq, struct ahash_request, base); + struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); -+ struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); -+ struct rk_ahash_ctx *tfmctx = crypto_ahash_ctx(tfm); ++ struct rk_crypto_info *rkc = rctx->dev; ++ int ret; + -+ ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm); -+ rctx->fallback_req.base.flags = areq->base.flags & -+ CRYPTO_TFM_REQ_MAY_SLEEP; ++ ret = dma_map_sg(rkc->dev, areq->src, sg_nents(areq->src), DMA_TO_DEVICE); ++ if (ret <= 0) ++ return -EINVAL; + -+ rctx->fallback_req.nbytes = areq->nbytes; -+ rctx->fallback_req.src = areq->src; -+ rctx->fallback_req.result = areq->result; ++ rctx->nrsg = ret; + -+ return crypto_ahash_digest(&rctx->fallback_req); ++ return 0; +} + - static int zero_message_process(struct ahash_request *req) ++static int rk_hash_unprepare(struct crypto_engine *engine, void *breq) ++{ ++ struct ahash_request *areq = container_of(breq, struct ahash_request, base); ++ struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); ++ struct rk_crypto_info *rkc = rctx->dev; ++ ++ dma_unmap_sg(rkc->dev, areq->src, rctx->nrsg, DMA_TO_DEVICE); ++ return 0; ++} ++ ++static int rk_hash_run(struct crypto_engine *engine, void *breq) { - struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); -@@ -167,6 +201,9 @@ static int rk_ahash_digest(struct ahash_request *req) - struct rk_ahash_ctx *tctx = crypto_tfm_ctx(req->base.tfm); - struct rk_crypto_info *dev = tctx->dev; +- int err; ++ struct ahash_request *areq = container_of(breq, struct ahash_request, base); ++ struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); ++ struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); ++ struct ahash_alg *alg = __crypto_ahash_alg(tfm->base.__crt_alg); ++ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash); ++ struct scatterlist *sg = areq->src; ++ struct rk_crypto_info *rkc = rctx->dev; ++ int err = 0; ++ int i; ++ u32 v; ++ ++ err = pm_runtime_resume_and_get(rkc->dev); ++ if (err) ++ return err; -+ if (rk_ahash_need_fallback(req)) -+ return rk_ahash_digest_fb(req); +- err = dev->load_data(dev, dev->sg_src, NULL); +- if (!err) +- crypto_ahash_dma_start(dev); +- return err; +-} +- +-static int rk_ahash_start(struct rk_crypto_info *dev) +-{ +- struct ahash_request *req = ahash_request_cast(dev->async_req); +- struct crypto_ahash *tfm; +- struct rk_ahash_rctx *rctx; +- +- dev->total = req->nbytes; +- dev->left_bytes = req->nbytes; +- dev->aligned = 0; +- dev->align_size = 4; +- dev->sg_dst = NULL; +- dev->sg_src = req->src; +- dev->first = req->src; +- dev->src_nents = sg_nents(req->src); +- rctx = ahash_request_ctx(req); + rctx->mode = 0; + +- tfm = crypto_ahash_reqtfm(req); ++ algt->stat_req++; ++ rkc->nreq++; + - if (!req->nbytes) - return zero_message_process(req); - else -@@ -309,6 +346,7 @@ static void rk_cra_hash_exit(struct crypto_tfm *tfm) - struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm); + switch (crypto_ahash_digestsize(tfm)) { + case SHA1_DIGEST_SIZE: + rctx->mode = RK_CRYPTO_HASH_SHA1; +@@ -220,100 +283,88 @@ static int rk_ahash_start(struct rk_cryp + rctx->mode = RK_CRYPTO_HASH_MD5; + break; + default: +- return -EINVAL; ++ err = -EINVAL; ++ goto theend; + } - free_page((unsigned long)tctx->dev->addr_vir); -+ crypto_free_ahash(tctx->fallback_tfm); - } +- rk_ahash_reg_init(dev); +- return rk_ahash_set_data_start(dev); +-} +- +-static int rk_ahash_crypto_rx(struct rk_crypto_info *dev) +-{ +- int err = 0; +- struct ahash_request *req = ahash_request_cast(dev->async_req); +- struct crypto_ahash *tfm; ++ rk_ahash_reg_init(areq, rkc); - struct rk_crypto_tmp rk_ahash_sha1 = { - -From patchwork Wed Jul 6 09:03:47 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907940 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id AE32EC43334 - for ; - Wed, 6 Jul 2022 10:29:42 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=WAPXXihdVJ+21V4ph0jCloTOLOp7bS1fGX26qrL/Faw=; b=d3kIgjc71w5BnW - PDzA4j7onBDOD7xX3I3hIln6eY7P23bTaOrEESD8nlHtTfq5y62nkpdAKhDMkvbo8sQeOeR4fOjRI - B/M0NYe00+BTIQ30zvg7avGdY8pOFxZjuqxVCtV6mIPdiFFubYXegKPnq3F5yv8mWlSbZz1qA9tqy - dvTJ17Ivr8BK/HQMHneiTh1sTBdQqOrF2Rebmz8P5rW+Bv8OvooyF1doiUbPfcA24O7tHXQY6aH/J - 4Yw6ig+bijJeEQNR6VK5eaM4Ny49teabxeF2mNPduYHbBUcIrVCBppjjY7MykyGAWb/VYxBYGrc1G - tF/huC+pdZPgvyTOf/5Q==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92Hf-008Vo7-8g; Wed, 06 Jul 2022 10:29:27 +0000 -Received: from mail-wm1-f52.google.com ([209.85.128.52]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xh-007bqT-Bi - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:50 +0000 -Received: by mail-wm1-f52.google.com with SMTP id - o19-20020a05600c4fd300b003a0489f414cso8585561wmq.4 - for ; - Wed, 06 Jul 2022 02:04:42 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=LTH5XZUoNfw5j5g91Ov715oBhaysSZASayzIPMZPNtU=; - b=HiNN4arNTOOhs9pH0zETW9PEf0t4cBav8j8OlYVHAkOsQl7tfFPo4HqmbDEznAxXuc - XDYhqFpKVz9hwoGM4w86coynCJ7UoUckfkKJBRRjAOGju1YG7IVeDGxExQwYgwd80cJ2 - r4nu6M578mf12ieQMSs4EMY5Yu2A9gDXkfN6gaXXJjo48uva1gP6ha9DsfZSyj7geqdE - YTfNVG/d+2CVhTEN87kAPYq2Z3nUvFjIvhaQrmf4MYFfZkKslFdh0DUjijuSJyRmIF/V - fCYfWlM7SxVSPCjO1XNdM2rmW2gYAqVPhpIWiS+dzs9N1rRYcjCqT0K08GAGQwnruT0L - Edqw== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=LTH5XZUoNfw5j5g91Ov715oBhaysSZASayzIPMZPNtU=; - b=eqXY/Pexf5uMK/+BuB2vRqO84cYdzIXIVIFjsm+b6dYEHN+YYLqDOSPGF8o+ub5E+O - AhKsmNoLLJ9gZzEneN9ZrS2nk9E7GmpAg1OkvJHfD9eScu+BQD5/4QlzbPQAM/fkm3VW - b3TTd7MnFgcXHkYmteOUJxwHWRmwunEEqj+8Iydd0PUneftnIz68Uv0PGsDvpOroh4NX - rHe0pEFoTbDxMQon+AFf0e9qU3mJPnRAu3t86JIektl37szCqVy9BTEcv40cdf2Wruak - YJKVMDthiKUt8OUoB5Qkq5fCdDmhV4RIMUkzIsaLsXldvnS44aYUVQ7vXZLJrZDrywYx - eQGw== -X-Gm-Message-State: AJIora/cZvIbzGmviwaIsNV37VgljKFRcW0o1wsWRZIf+CbEziwnTtD0 - xyco1d4HU1nLZ24ODj6rQrrXiQ== -X-Google-Smtp-Source: - AGRyM1uHE6/MeU6YpNoLPiBOabEERMQmrU6BOfw2kwAOJC4VQQyqVrWzr04d+4njyc87jmfrGDxHMw== -X-Received: by 2002:a05:600c:500a:b0:3a1:8c53:9bd5 with SMTP id - n10-20020a05600c500a00b003a18c539bd5mr29826612wmr.82.1657098281303; - Wed, 06 Jul 2022 02:04:41 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.40 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:40 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 08/33] crypto: rockchip: better handle cipher key -Date: Wed, 6 Jul 2022 09:03:47 +0000 -Message-Id: <20220706090412.806101-9-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020445_484808_FB87EEB6 -X-CRM114-Status: GOOD ( 13.23 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -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") -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - 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..540b81a14b9b 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; -+ u8 key[AES_MAX_KEY_SIZE]; - u8 iv[AES_BLOCK_SIZE]; - struct crypto_skcipher *fallback_tfm; - }; -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index eac5bba66e25..1ef94f8db2c5 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -95,7 +95,7 @@ static int rk_aes_setkey(struct crypto_skcipher *cipher, - keylen != AES_KEYSIZE_256) - return -EINVAL; - ctx->keylen = keylen; -- memcpy_toio(ctx->dev->reg + RK_CRYPTO_AES_KEY_0, key, keylen); -+ memcpy(ctx->key, key, keylen); +- dev->unload_data(dev); +- if (dev->left_bytes) { +- if (dev->aligned) { +- if (sg_is_last(dev->sg_src)) { +- dev_warn(dev->dev, "[%s:%d], Lack of data\n", +- __func__, __LINE__); +- err = -ENOMEM; +- goto out_rx; +- } +- dev->sg_src = sg_next(dev->sg_src); ++ while (sg) { ++ reinit_completion(&rkc->complete); ++ rkc->status = 0; ++ crypto_ahash_dma_start(rkc, sg); ++ wait_for_completion_interruptible_timeout(&rkc->complete, ++ msecs_to_jiffies(2000)); ++ if (!rkc->status) { ++ dev_err(rkc->dev, "DMA timeout\n"); ++ err = -EFAULT; ++ goto theend; + } +- err = rk_ahash_set_data_start(dev); +- } else { +- /* +- * it will take some time to process date after last dma +- * transmission. +- * +- * waiting time is relative with the last date len, +- * so cannot set a fixed time here. +- * 10us makes system not call here frequently wasting +- * efficiency, and make it response quickly when dma +- * complete. +- */ +- while (!CRYPTO_READ(dev, RK_CRYPTO_HASH_STS)) +- udelay(10); +- +- tfm = crypto_ahash_reqtfm(req); +- memcpy_fromio(req->result, dev->reg + RK_CRYPTO_HASH_DOUT_0, +- crypto_ahash_digestsize(tfm)); +- dev->complete(dev->async_req, 0); +- tasklet_schedule(&dev->queue_task); ++ sg = sg_next(sg); ++ } ++ ++ /* ++ * it will take some time to process date after last dma ++ * transmission. ++ * ++ * waiting time is relative with the last date len, ++ * so cannot set a fixed time here. ++ * 10us makes system not call here frequently wasting ++ * efficiency, and make it response quickly when dma ++ * complete. ++ */ ++ readl_poll_timeout(rkc->reg + RK_CRYPTO_HASH_STS, v, v == 0, 10, 1000); ++ ++ for (i = 0; i < crypto_ahash_digestsize(tfm) / 4; i++) { ++ v = readl(rkc->reg + RK_CRYPTO_HASH_DOUT_0 + i * 4); ++ put_unaligned_le32(v, areq->result + i * 4); + } - return crypto_skcipher_setkey(ctx->fallback_tfm, key, keylen); +-out_rx: +- return err; ++theend: ++ pm_runtime_put_autosuspend(rkc->dev); ++ ++ local_bh_disable(); ++ crypto_finalize_hash_request(engine, breq, err); ++ local_bh_enable(); ++ ++ return 0; } -@@ -111,7 +111,7 @@ static int rk_des_setkey(struct crypto_skcipher *cipher, - return err; - ctx->keylen = keylen; -- memcpy_toio(ctx->dev->reg + RK_CRYPTO_TDES_KEY1_0, key, keylen); -+ memcpy(ctx->key, key, keylen); + static int rk_cra_hash_init(struct crypto_tfm *tfm) + { + struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm); +- struct rk_crypto_tmp *algt; +- struct ahash_alg *alg = __crypto_ahash_alg(tfm->__crt_alg); +- + const char *alg_name = crypto_tfm_alg_name(tfm); +- +- algt = container_of(alg, struct rk_crypto_tmp, alg.hash); +- +- tctx->dev = algt->dev; +- tctx->dev->addr_vir = (void *)__get_free_page(GFP_KERNEL); +- if (!tctx->dev->addr_vir) { +- dev_err(tctx->dev->dev, "failed to kmalloc for addr_vir\n"); +- return -ENOMEM; +- } +- tctx->dev->start = rk_ahash_start; +- tctx->dev->update = rk_ahash_crypto_rx; +- tctx->dev->complete = rk_ahash_crypto_complete; ++ struct ahash_alg *alg = __crypto_ahash_alg(tfm->__crt_alg); ++ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash); - return crypto_skcipher_setkey(ctx->fallback_tfm, key, keylen); - } -@@ -127,7 +127,8 @@ static int rk_tdes_setkey(struct crypto_skcipher *cipher, - return err; + /* for fallback */ + tctx->fallback_tfm = crypto_alloc_ahash(alg_name, 0, +- CRYPTO_ALG_NEED_FALLBACK); ++ CRYPTO_ALG_NEED_FALLBACK); + if (IS_ERR(tctx->fallback_tfm)) { +- dev_err(tctx->dev->dev, "Could not load fallback driver.\n"); ++ dev_err(algt->dev->dev, "Could not load fallback driver.\n"); + return PTR_ERR(tctx->fallback_tfm); + } ++ + crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm), + sizeof(struct rk_ahash_rctx) + + crypto_ahash_reqsize(tctx->fallback_tfm)); - ctx->keylen = keylen; -- memcpy_toio(ctx->dev->reg + RK_CRYPTO_TDES_KEY1_0, key, keylen); -+ memcpy(ctx->key, key, keylen); +- return tctx->dev->enable_clk(tctx->dev); ++ tctx->enginectx.op.do_one_request = rk_hash_run; ++ tctx->enginectx.op.prepare_request = rk_hash_prepare; ++ tctx->enginectx.op.unprepare_request = rk_hash_unprepare; + - return crypto_skcipher_setkey(ctx->fallback_tfm, key, keylen); ++ return 0; } -@@ -283,6 +284,7 @@ static void rk_ablk_hw_init(struct rk_crypto_info *dev) - RK_CRYPTO_TDES_BYTESWAP_IV; - CRYPTO_WRITE(dev, RK_CRYPTO_TDES_CTRL, rctx->mode); - memcpy_toio(dev->reg + RK_CRYPTO_TDES_IV_0, req->iv, ivsize); -+ memcpy_toio(ctx->dev->reg + RK_CRYPTO_TDES_KEY1_0, ctx->key, ctx->keylen); - conf_reg = RK_CRYPTO_DESSEL; - } else { - rctx->mode |= RK_CRYPTO_AES_FIFO_MODE | -@@ -295,6 +297,7 @@ static void rk_ablk_hw_init(struct rk_crypto_info *dev) - rctx->mode |= RK_CRYPTO_AES_256BIT_key; - CRYPTO_WRITE(dev, RK_CRYPTO_AES_CTRL, rctx->mode); - memcpy_toio(dev->reg + RK_CRYPTO_AES_IV_0, req->iv, ivsize); -+ memcpy_toio(ctx->dev->reg + RK_CRYPTO_AES_KEY_0, ctx->key, ctx->keylen); - } - conf_reg |= RK_CRYPTO_BYTESWAP_BTFIFO | - RK_CRYPTO_BYTESWAP_BRFIFO; -@@ -484,6 +487,7 @@ static void rk_ablk_exit_tfm(struct crypto_skcipher *tfm) + static void rk_cra_hash_exit(struct crypto_tfm *tfm) { - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); + struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm); -+ memzero_explicit(ctx->key, ctx->keylen); - free_page((unsigned long)ctx->dev->addr_vir); - crypto_free_skcipher(ctx->fallback_tfm); +- free_page((unsigned long)tctx->dev->addr_vir); +- return tctx->dev->disable_clk(tctx->dev); ++ crypto_free_ahash(tctx->fallback_tfm); } - -From patchwork Wed Jul 6 09:03:48 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907852 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 2C494C43334 - for ; - Wed, 6 Jul 2022 09:58:26 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=Vx5f6qfrl3Le9X/yqk2QEnlc7MpmIFMAGZJ98NZ5vt4=; b=U0ySUGmxXxY9+u - S87I4nFBmS3IcMUEpbYu8LhU8iWZ60rQe+9NrVrFp5ced6S+/zppEm81jY2sMtGEvlNL2Za6wjdMv - GxHA7XOwTxCSS1wmyBr88MaUKByhIE9+iygiI0QlqYMALfJ5rEWct8G2X2u6hNzCZhNjWp04x47Al - XWmtVUdMPQAkq+m4/klDz0G21qxFBfO8vjd75tOvUI8M8HnSNmAdEkkh3zc6CB1iFgNU0Ub64IJmi - 1urslhgxjbMkKlAlNn7LJiWRFS6WjiuKj0yLyNhZzfZAeyceDwMN8vJLGrILW3u5z83zpY2BsGeZP - J/kl3sjek82mf5Xf5dIw==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91nQ-0082Tq-LM; Wed, 06 Jul 2022 09:58:12 +0000 -Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91V2-007qIs-W3 - for linux-rockchip@bombadil.infradead.org; Wed, 06 Jul 2022 09:39:13 +0000 -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version - :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: - Content-Type:Content-ID:Content-Description; - bh=WjVYDZUAlIRp4eDHOXKi9ug5c8rK8IrdaxVWhXjYQvc=; b=geLGy32UwZ3AVJzSX8khXAgNWe - 7lFWasVhiGlgVJnBBKG3klUdk28xMeoK+a5feyme3OxguzW62+m/HrAjXHDEqT7priIDHgW2gA2NQ - 4bVGwjOiT2EiS5/GVwYrFIdmQ8gifxIHAFMMaCIleAu9lqFYpCj7RZggCIik9SIIYunJ93+bmJG31 - JPVcYn2S3Ul5/jAVa8Gorx5QyG+V8K+2hKF3WPP3MXEQSCjcD8E9X8R/0sYrryTBW4Hf44Q2KZhY2 - Hbz9w53xxU8z39V3Ab+80zacFn0qvatyHF7rngQYl+C9qIR1OayG0RrJoqgUkDsw9n1na0+qcwSU7 - 2I7AzfQA==; -Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) - by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xh-000NGr-2h - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:47 +0000 -Received: by mail-wm1-x332.google.com with SMTP id m184so8445354wme.1 - for ; - Wed, 06 Jul 2022 02:04:43 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=WjVYDZUAlIRp4eDHOXKi9ug5c8rK8IrdaxVWhXjYQvc=; - b=YK3uTd1jyk5Ryj1LHgw+tO9Th1BpgqLq2u+4AV5HOdm8B/qIZSrARkxwu/ULVwNe1r - 5BfC8a2NbS1hFGmshF+/DNkrgFt9EanYeGTcR5z1Yu2Uik8LqAElizSwISYsxUQRt+KW - 02jJvE3esEbb4tAMvq1EoCmjkyEFGFi8vSa8U+TsTJXdNd9EFpDCUA8koaC3t4vWpIvY - iW3JlRVSCXIr00ejP82AIb459vsjsBtyTEV1+4YBZlfZtWCAOMvq9sMGAocpdiQxfl81 - Ng58mFeoBLezJRKIReTyTlMv+XsDdwd4nyyRdNUy4C/vH0Am2uAqoaJSnZ/uCkAezMug - LJJg== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=WjVYDZUAlIRp4eDHOXKi9ug5c8rK8IrdaxVWhXjYQvc=; - b=iYfDgk8yHEkO8UN2Yu7F5bs9vbkkQbOmWOM8xY4407zE7zzlYMcq3g6QBK978Apm7K - AOpDZXA7p7pngoJ3LSgCVHWFI6Ke4jFjkcYLNWb972Skx8i0pYofj9ddWfxwmqDnKVlR - YxovOdGVfb9F9ZptUIgIeKJNm0pRKzkQgErUSQH2FlMzyLsfqVDJGXlHpZdKyIAFQpLH - 4x/MkGDnPR5bzLjZX3UPcKv3LCoKMdQ/x75jpLj/EguWuqRIlTn1HIZlYj67pkSCUxag - iv36ZrcxMBiJoCOZv2sy3z4zKk6//kPtkgRBQ4wB8MfVXHkAYBfKHRii22RmpoAjmR0K - pFtg== -X-Gm-Message-State: AJIora+gV4LyzC9GvmFgqLUfquc3UMpaL3moi7BTg+D12CS9kplawRJb - 06SaZbQY8WCoSe3GaK8XE0hkBg== -X-Google-Smtp-Source: - AGRyM1u/xCsOAJu3XL7RgknwRQsilbgtiT/gy+smBNh61KM4oCsNdGWVZNKrvNkQTb0KXMaE8r11cA== -X-Received: by 2002:a1c:720f:0:b0:3a0:2ac9:5231 with SMTP id - n15-20020a1c720f000000b003a02ac95231mr41271300wmc.39.1657098282315; - Wed, 06 Jul 2022 02:04:42 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.41 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:41 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 09/33] crypto: rockchip: remove non-aligned handling -Date: Wed, 6 Jul 2022 09:03:48 +0000 -Message-Id: <20220706090412.806101-10-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_100445_893037_68F1FA19 -X-CRM114-Status: GOOD ( 17.50 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -Now driver have fallback for un-aligned cases, remove all code handling -those cases. - -Fixes: ce0183cb6464b ("crypto: rockchip - switch to skcipher API") -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.c | 69 +++++-------------- - drivers/crypto/rockchip/rk3288_crypto.h | 4 -- - drivers/crypto/rockchip/rk3288_crypto_ahash.c | 22 ++---- - .../crypto/rockchip/rk3288_crypto_skcipher.c | 39 +++-------- - 4 files changed, 31 insertions(+), 103 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index 4cff49b82983..b3db096e2ec2 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.c -+++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -88,63 +88,26 @@ static int rk_load_data(struct rk_crypto_info *dev, - { - unsigned int count; - -- dev->aligned = dev->aligned ? -- check_alignment(sg_src, sg_dst, dev->align_size) : -- dev->aligned; -- if (dev->aligned) { -- count = min(dev->left_bytes, sg_src->length); -- dev->left_bytes -= count; -- -- if (!dma_map_sg(dev->dev, sg_src, 1, DMA_TO_DEVICE)) { -- dev_err(dev->dev, "[%s:%d] dma_map_sg(src) error\n", -+ count = min(dev->left_bytes, sg_src->length); -+ dev->left_bytes -= count; -+ -+ if (!dma_map_sg(dev->dev, sg_src, 1, DMA_TO_DEVICE)) { -+ dev_err(dev->dev, "[%s:%d] dma_map_sg(src) error\n", - __func__, __LINE__); -- return -EINVAL; -- } -- dev->addr_in = sg_dma_address(sg_src); -+ return -EINVAL; -+ } -+ dev->addr_in = sg_dma_address(sg_src); -- if (sg_dst) { -- if (!dma_map_sg(dev->dev, sg_dst, 1, DMA_FROM_DEVICE)) { -- dev_err(dev->dev, -+ if (sg_dst) { -+ if (!dma_map_sg(dev->dev, sg_dst, 1, DMA_FROM_DEVICE)) { -+ dev_err(dev->dev, - "[%s:%d] dma_map_sg(dst) error\n", - __func__, __LINE__); -- dma_unmap_sg(dev->dev, sg_src, 1, -- DMA_TO_DEVICE); -- return -EINVAL; -- } -- dev->addr_out = sg_dma_address(sg_dst); -- } -- } else { -- count = (dev->left_bytes > PAGE_SIZE) ? -- PAGE_SIZE : dev->left_bytes; -- -- if (!sg_pcopy_to_buffer(dev->first, dev->src_nents, -- dev->addr_vir, count, -- dev->total - dev->left_bytes)) { -- dev_err(dev->dev, "[%s:%d] pcopy err\n", -- __func__, __LINE__); -+ dma_unmap_sg(dev->dev, sg_src, 1, -+ DMA_TO_DEVICE); - return -EINVAL; - } -- dev->left_bytes -= count; -- sg_init_one(&dev->sg_tmp, dev->addr_vir, count); -- if (!dma_map_sg(dev->dev, &dev->sg_tmp, 1, DMA_TO_DEVICE)) { -- dev_err(dev->dev, "[%s:%d] dma_map_sg(sg_tmp) error\n", -- __func__, __LINE__); -- return -ENOMEM; -- } -- dev->addr_in = sg_dma_address(&dev->sg_tmp); -- -- if (sg_dst) { -- if (!dma_map_sg(dev->dev, &dev->sg_tmp, 1, -- DMA_FROM_DEVICE)) { -- dev_err(dev->dev, -- "[%s:%d] dma_map_sg(sg_tmp) error\n", -- __func__, __LINE__); -- dma_unmap_sg(dev->dev, &dev->sg_tmp, 1, -- DMA_TO_DEVICE); -- return -ENOMEM; -- } -- dev->addr_out = sg_dma_address(&dev->sg_tmp); -- } -+ dev->addr_out = sg_dma_address(sg_dst); + struct rk_crypto_tmp rk_ahash_sha1 = { +- .type = ALG_TYPE_HASH, ++ .type = CRYPTO_ALG_TYPE_AHASH, + .alg.hash = { + .init = rk_ahash_init, + .update = rk_ahash_update, +@@ -337,13 +388,13 @@ struct rk_crypto_tmp rk_ahash_sha1 = { + .cra_init = rk_cra_hash_init, + .cra_exit = rk_cra_hash_exit, + .cra_module = THIS_MODULE, +- } +- } ++ } ++ } } - dev->count = count; - return 0; -@@ -154,11 +117,11 @@ static void rk_unload_data(struct rk_crypto_info *dev) - { - struct scatterlist *sg_in, *sg_out; - -- sg_in = dev->aligned ? dev->sg_src : &dev->sg_tmp; -+ sg_in = dev->sg_src; - dma_unmap_sg(dev->dev, sg_in, 1, DMA_TO_DEVICE); + }; - if (dev->sg_dst) { -- sg_out = dev->aligned ? dev->sg_dst : &dev->sg_tmp; -+ sg_out = dev->sg_dst; - dma_unmap_sg(dev->dev, sg_out, 1, DMA_FROM_DEVICE); + struct rk_crypto_tmp rk_ahash_sha256 = { +- .type = ALG_TYPE_HASH, ++ .type = CRYPTO_ALG_TYPE_AHASH, + .alg.hash = { + .init = rk_ahash_init, + .update = rk_ahash_update, +@@ -367,13 +418,13 @@ struct rk_crypto_tmp rk_ahash_sha256 = { + .cra_init = rk_cra_hash_init, + .cra_exit = rk_cra_hash_exit, + .cra_module = THIS_MODULE, +- } +- } ++ } ++ } } - } -diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h -index 540b81a14b9b..a7de5738f6dc 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.h -+++ b/drivers/crypto/rockchip/rk3288_crypto.h -@@ -204,12 +204,8 @@ struct rk_crypto_info { - /* the public variable */ - struct scatterlist *sg_src; - struct scatterlist *sg_dst; -- struct scatterlist sg_tmp; - struct scatterlist *first; - unsigned int left_bytes; -- void *addr_vir; -- int aligned; -- int align_size; - size_t src_nents; - size_t dst_nents; - unsigned int total; -diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -index 16009bb0bf16..c762e462eb57 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -@@ -236,8 +236,6 @@ static int rk_ahash_start(struct rk_crypto_info *dev) - - dev->total = req->nbytes; - dev->left_bytes = req->nbytes; -- dev->aligned = 0; -- dev->align_size = 4; - dev->sg_dst = NULL; - dev->sg_src = req->src; - dev->first = req->src; -@@ -272,15 +270,13 @@ static int rk_ahash_crypto_rx(struct rk_crypto_info *dev) - - dev->unload_data(dev); - if (dev->left_bytes) { -- if (dev->aligned) { -- if (sg_is_last(dev->sg_src)) { -- dev_warn(dev->dev, "[%s:%d], Lack of data\n", -- __func__, __LINE__); -- err = -ENOMEM; -- goto out_rx; -- } -- dev->sg_src = sg_next(dev->sg_src); -+ if (sg_is_last(dev->sg_src)) { -+ dev_warn(dev->dev, "[%s:%d], Lack of data\n", -+ __func__, __LINE__); -+ err = -ENOMEM; -+ goto out_rx; - } -+ dev->sg_src = sg_next(dev->sg_src); - err = rk_ahash_set_data_start(dev); - } else { - /* -@@ -318,11 +314,6 @@ static int rk_cra_hash_init(struct crypto_tfm *tfm) - algt = container_of(alg, struct rk_crypto_tmp, alg.hash); - - tctx->dev = algt->dev; -- tctx->dev->addr_vir = (void *)__get_free_page(GFP_KERNEL); -- if (!tctx->dev->addr_vir) { -- dev_err(tctx->dev->dev, "failed to kmalloc for addr_vir\n"); -- return -ENOMEM; -- } - tctx->dev->start = rk_ahash_start; - tctx->dev->update = rk_ahash_crypto_rx; - tctx->dev->complete = rk_ahash_crypto_complete; -@@ -345,7 +336,6 @@ static void rk_cra_hash_exit(struct crypto_tfm *tfm) - { - struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm); - -- free_page((unsigned long)tctx->dev->addr_vir); - crypto_free_ahash(tctx->fallback_tfm); - } + }; -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index 1ef94f8db2c5..d067b7f09165 100644 + struct rk_crypto_tmp rk_ahash_md5 = { +- .type = ALG_TYPE_HASH, ++ .type = CRYPTO_ALG_TYPE_AHASH, + .alg.hash = { + .init = rk_ahash_init, + .update = rk_ahash_update, +@@ -397,7 +448,7 @@ struct rk_crypto_tmp rk_ahash_md5 = { + .cra_init = rk_cra_hash_init, + .cra_exit = rk_cra_hash_exit, + .cra_module = THIS_MODULE, +- } + } ++ } + } + }; --- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c +++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -356,7 +356,6 @@ static int rk_ablk_start(struct rk_crypto_info *dev) - dev->src_nents = sg_nents(req->src); - dev->sg_dst = req->dst; - dev->dst_nents = sg_nents(req->dst); -- dev->aligned = 1; - - spin_lock_irqsave(&dev->lock, flags); - rk_ablk_hw_init(dev); -@@ -376,13 +375,9 @@ static void rk_iv_copyback(struct rk_crypto_info *dev) - - /* Update the IV buffer to contain the next IV for encryption mode. */ - if (!(rctx->mode & RK_CRYPTO_DEC)) { -- if (dev->aligned) { -- memcpy(req->iv, sg_virt(dev->sg_dst) + -- dev->sg_dst->length - ivsize, ivsize); -- } else { -- memcpy(req->iv, dev->addr_vir + -- dev->count - ivsize, ivsize); -- } -+ memcpy(req->iv, -+ sg_virt(dev->sg_dst) + dev->sg_dst->length - ivsize, -+ ivsize); - } - } - -@@ -420,27 +415,16 @@ static int rk_ablk_rx(struct rk_crypto_info *dev) - skcipher_request_cast(dev->async_req); - - dev->unload_data(dev); -- if (!dev->aligned) { -- if (!sg_pcopy_from_buffer(req->dst, dev->dst_nents, -- dev->addr_vir, dev->count, -- dev->total - dev->left_bytes - -- dev->count)) { -- err = -EINVAL; -- goto out_rx; -- } -- } - if (dev->left_bytes) { - rk_update_iv(dev); -- if (dev->aligned) { -- if (sg_is_last(dev->sg_src)) { -- dev_err(dev->dev, "[%s:%d] Lack of data\n", -+ if (sg_is_last(dev->sg_src)) { -+ dev_err(dev->dev, "[%s:%d] Lack of data\n", - __func__, __LINE__); -- err = -ENOMEM; -- goto out_rx; -- } -- dev->sg_src = sg_next(dev->sg_src); -- dev->sg_dst = sg_next(dev->sg_dst); -+ err = -ENOMEM; -+ goto out_rx; - } -+ dev->sg_src = sg_next(dev->sg_src); -+ dev->sg_dst = sg_next(dev->sg_dst); - err = rk_set_data_start(dev); - } else { - rk_iv_copyback(dev); -@@ -462,13 +446,9 @@ static int rk_ablk_init_tfm(struct crypto_skcipher *tfm) - algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); - - ctx->dev = algt->dev; -- ctx->dev->align_size = crypto_tfm_alg_alignmask(crypto_skcipher_tfm(tfm)) + 1; - ctx->dev->start = rk_ablk_start; - ctx->dev->update = rk_ablk_rx; - ctx->dev->complete = rk_crypto_complete; -- ctx->dev->addr_vir = (char *)__get_free_page(GFP_KERNEL); -- if (!ctx->dev->addr_vir) -- return -ENOMEM; - - ctx->fallback_tfm = crypto_alloc_skcipher(name, 0, CRYPTO_ALG_NEED_FALLBACK); - if (IS_ERR(ctx->fallback_tfm)) { -@@ -488,7 +468,6 @@ static void rk_ablk_exit_tfm(struct crypto_skcipher *tfm) - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +@@ -9,23 +9,94 @@ + * Some ideas are from marvell-cesa.c and s5p-sss.c driver. + */ + #include ++#include + #include "rk3288_crypto.h" - memzero_explicit(ctx->key, ctx->keylen); -- free_page((unsigned long)ctx->dev->addr_vir); - crypto_free_skcipher(ctx->fallback_tfm); - } + #define RK_CRYPTO_DEC BIT(0) - -From patchwork Wed Jul 6 09:03:49 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907850 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 5D039C433EF - for ; - Wed, 6 Jul 2022 09:58:22 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=SqegSzy6wm1TWYDHuwKS5jiUt/HHgNoqtn5Uw8uqiAg=; b=HMgEXrpZffkD5/ - AuaWL6Tovdt8c6r5DSIJS9Cpddlhw1FiqdwHHKQcuGslFY72MVQx9Mn3BJpme9dgVza/8Hj+eCzCC - DWcXj/Iyi2oNH4jt+12Qvp1UytA0jqjSVn3rKR9VFiOHb4PBeeUbk6yNtI2YYbfJOtD59ax+eyia2 - lIXvbKvJ24fwTi1DChI3oEnHo8dJT7T19QKQJIBuqkpMgKEIirc+BguHae6A3T1qrs9CaU9R2sv8j - ziFRMi6KjNwRZaHVCKifB/6xGNkG5BlvL5dqmpFBhqaEKqpPX6vlDCjuxhybDSeTQXLSIpdd7uiYD - tceYP9m5ee41GC3gu1kg==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91nO-0082RW-Td; Wed, 06 Jul 2022 09:58:10 +0000 -Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91Uz-007qGf-7F - for linux-rockchip@bombadil.infradead.org; Wed, 06 Jul 2022 09:39:09 +0000 -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version - :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: - Content-Type:Content-ID:Content-Description; - bh=vvLoc7JgLxlDmegtH87NunTN8x9IQJmltG64X4dvE5o=; b=iZcK4GhBfIza9DbEA2wWKPKMXd - vfHWsP4YXUVoRFsmsCgC7Y+nPsaHQ/RZPcH85HbDRiFaAN9P+1RS6wOlST20T4A1Mhu5Xf3k4Ms6X - 9rXUNSB6Tcgw4c0gCPn9v7zIPRJfaYoj1TGWJIZUZNPEwX12wASgGyRjKiONkXZJfpC6WgpLvOP3o - PKmV4pFQf0a5Yk7+YurkEu/6PvJiNK2/jUdMh+VPDozy0LcobeS4uT+60/znbo1UQwRf8jThVtP7B - AZgH/WSM4QFDvyOhZ/k62lSDov4f1LJ6YoVp3yFvIjdwQ7x+fEBuoSgQMHsQrDwR5NVCM7NfqJk2X - ajpnt9hg==; -Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) - by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xh-000NGt-7Z - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:50 +0000 -Received: by mail-wm1-x32b.google.com with SMTP id m184so8445393wme.1 - for ; - Wed, 06 Jul 2022 02:04:44 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=vvLoc7JgLxlDmegtH87NunTN8x9IQJmltG64X4dvE5o=; - b=Q+lAd6oUdrfJwaNMmsiICDGS0PGNoBKd4H0e8lxYF2NS6o9KUpfChmyNK1iaGbNP3+ - 6Jg13BCIfgfCPTEPhvmom60lYZW6IS0ozJN6K3tWAk5xwALZLWcMAi99ta/0bi0YvAuU - 7WG2Qu+pwzSU9+Ja0+NoQ7YQyHJxZE7NFAwDdyO2K31ZzodlJCNMdXYRjKrzRQiS6dD5 - z3s/m2Z7nfyxHlfVOUguk6qtJJteT80b60uNgOzk3MfiTnelhGLaS8foILxa83TGddOM - yv8Nws+wlKnD26efG/aAZKctPItmti94i5dksG7/8MN/EhWPeA00bstbONA6pxOaTs6T - 3Exg== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=vvLoc7JgLxlDmegtH87NunTN8x9IQJmltG64X4dvE5o=; - b=mBJgAHD+W8iIN3EEn1menA1F+bkvc2glg1V6pOkB+CIlnYajGDtghI6z14EF/HOOlY - 6DfV8AKXGtfFGbPDhVan9jC1kLZyQxeCgYm9dekJyNgS/L6AUY3Wqd5sFPXfmZNe0TnP - fcafwmLjOqOL4OTGg3DwfJGnh/5pGlUAF+A2qXy2mIBn/dHKRUnYsakE9CRNPqAHeGBz - UbN6+6eVmdwl/qQOkgCUhL02mb/5jKDXti9JjHr5fPV/Lg6+gqz4sFRIJ9PBSHbfKxWU - uLtuJhhQurYKa6UYBtYFG+P3M5/SeSIjt4FlzG+e3jtKN+f6XDEBLNfVMGr0fG9JnAhC - QfPQ== -X-Gm-Message-State: AJIora+xZJvs/pJ/Dal80RFWSeqkD2MTawGH7jcMLnlDPAGAQbH+J5NC - 7Oe40z+XFC1GN6zNYdczNH90oA== -X-Google-Smtp-Source: - AGRyM1t1epReE0Yy1wIuj/nlbSeyDzx7u/cCWGEgvBpAN3S8CThksCp8SvCPMWoRQmMrvipqry4zuQ== -X-Received: by 2002:a05:600c:3d8f:b0:3a1:8c7f:1908 with SMTP id - bi15-20020a05600c3d8f00b003a18c7f1908mr29307442wmb.201.1657098283444; - Wed, 06 Jul 2022 02:04:43 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.42 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:42 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 10/33] crypto: rockchip: rework by using crypto_engine -Date: Wed, 6 Jul 2022 09:03:49 +0000 -Message-Id: <20220706090412.806101-11-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_100446_537594_2DC5714C -X-CRM114-Status: GOOD ( 22.68 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -Instead of doing manual queue management, let's use the crypto/engine -for that. -In the same time, rework the requests handling to be easier to -understand (and fix all bugs related to them). - -Fixes: ce0183cb6464b ("crypto: rockchip - switch to skcipher API") -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/Kconfig | 1 + - drivers/crypto/rockchip/rk3288_crypto.c | 152 +---------- - drivers/crypto/rockchip/rk3288_crypto.h | 39 +-- - drivers/crypto/rockchip/rk3288_crypto_ahash.c | 144 +++++----- - .../crypto/rockchip/rk3288_crypto_skcipher.c | 250 +++++++++--------- - 5 files changed, 221 insertions(+), 365 deletions(-) - -diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig -index c293f801806c..df4f0a2de098 100644 ---- a/drivers/crypto/Kconfig -+++ b/drivers/crypto/Kconfig -@@ -789,6 +789,7 @@ config CRYPTO_DEV_ROCKCHIP - select CRYPTO_CBC - select CRYPTO_DES - select CRYPTO_AES -+ select CRYPTO_ENGINE - select CRYPTO_LIB_DES - select CRYPTO_MD5 - select CRYPTO_SHA1 -diff --git a/drivers/crypto/rockchip/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index b3db096e2ec2..1afb65eee6c9 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.c -+++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -65,149 +65,24 @@ static void rk_crypto_disable_clk(struct rk_crypto_info *dev) - clk_disable_unprepare(dev->sclk); - } - --static int check_alignment(struct scatterlist *sg_src, -- struct scatterlist *sg_dst, -- int align_mask) --{ -- int in, out, align; -- -- in = IS_ALIGNED((uint32_t)sg_src->offset, 4) && -- IS_ALIGNED((uint32_t)sg_src->length, align_mask); -- if (!sg_dst) -- return in; -- out = IS_ALIGNED((uint32_t)sg_dst->offset, 4) && -- IS_ALIGNED((uint32_t)sg_dst->length, align_mask); -- align = in && out; -- -- return (align && (sg_src->length == sg_dst->length)); --} -- --static int rk_load_data(struct rk_crypto_info *dev, -- struct scatterlist *sg_src, -- struct scatterlist *sg_dst) --{ -- unsigned int count; -- -- count = min(dev->left_bytes, sg_src->length); -- dev->left_bytes -= count; -- -- if (!dma_map_sg(dev->dev, sg_src, 1, DMA_TO_DEVICE)) { -- dev_err(dev->dev, "[%s:%d] dma_map_sg(src) error\n", -- __func__, __LINE__); -- return -EINVAL; -- } -- dev->addr_in = sg_dma_address(sg_src); -- -- if (sg_dst) { -- if (!dma_map_sg(dev->dev, sg_dst, 1, DMA_FROM_DEVICE)) { -- dev_err(dev->dev, -- "[%s:%d] dma_map_sg(dst) error\n", -- __func__, __LINE__); -- dma_unmap_sg(dev->dev, sg_src, 1, -- DMA_TO_DEVICE); -- return -EINVAL; -- } -- dev->addr_out = sg_dma_address(sg_dst); -- } -- dev->count = count; -- return 0; --} -- --static void rk_unload_data(struct rk_crypto_info *dev) --{ -- struct scatterlist *sg_in, *sg_out; -- -- sg_in = dev->sg_src; -- dma_unmap_sg(dev->dev, sg_in, 1, DMA_TO_DEVICE); -- -- if (dev->sg_dst) { -- sg_out = dev->sg_dst; -- dma_unmap_sg(dev->dev, sg_out, 1, DMA_FROM_DEVICE); -- } --} -- - static irqreturn_t rk_crypto_irq_handle(int irq, void *dev_id) - { - struct rk_crypto_info *dev = platform_get_drvdata(dev_id); - u32 interrupt_status; - -- spin_lock(&dev->lock); - interrupt_status = CRYPTO_READ(dev, RK_CRYPTO_INTSTS); - CRYPTO_WRITE(dev, RK_CRYPTO_INTSTS, interrupt_status); - -+ dev->status = 1; - if (interrupt_status & 0x0a) { - dev_warn(dev->dev, "DMA Error\n"); -- dev->err = -EFAULT; -+ dev->status = 0; - } -- tasklet_schedule(&dev->done_task); -+ complete(&dev->complete); - -- spin_unlock(&dev->lock); - return IRQ_HANDLED; - } - --static int rk_crypto_enqueue(struct rk_crypto_info *dev, -- struct crypto_async_request *async_req) --{ -- unsigned long flags; -- int ret; -- -- spin_lock_irqsave(&dev->lock, flags); -- ret = crypto_enqueue_request(&dev->queue, async_req); -- if (dev->busy) { -- spin_unlock_irqrestore(&dev->lock, flags); -- return ret; -- } -- dev->busy = true; -- spin_unlock_irqrestore(&dev->lock, flags); -- tasklet_schedule(&dev->queue_task); -- -- return ret; --} -- --static void rk_crypto_queue_task_cb(unsigned long data) --{ -- struct rk_crypto_info *dev = (struct rk_crypto_info *)data; -- struct crypto_async_request *async_req, *backlog; -- unsigned long flags; -- int err = 0; -- -- dev->err = 0; -- spin_lock_irqsave(&dev->lock, flags); -- backlog = crypto_get_backlog(&dev->queue); -- async_req = crypto_dequeue_request(&dev->queue); -- -- if (!async_req) { -- dev->busy = false; -- spin_unlock_irqrestore(&dev->lock, flags); -- return; -- } -- spin_unlock_irqrestore(&dev->lock, flags); -- -- if (backlog) { -- backlog->complete(backlog, -EINPROGRESS); -- backlog = NULL; -- } -- -- dev->async_req = async_req; -- err = dev->start(dev); -- if (err) -- dev->complete(dev->async_req, err); --} -- --static void rk_crypto_done_task_cb(unsigned long data) --{ -- struct rk_crypto_info *dev = (struct rk_crypto_info *)data; -- -- if (dev->err) { -- dev->complete(dev->async_req, dev->err); -- return; -- } -- -- dev->err = dev->update(dev); -- if (dev->err) -- dev->complete(dev->async_req, dev->err); --} -- - static struct rk_crypto_tmp *rk_cipher_algs[] = { - &rk_ecb_aes_alg, - &rk_cbc_aes_alg, -@@ -300,8 +175,6 @@ static int rk_crypto_probe(struct platform_device *pdev) - if (err) - goto err_crypto; - -- spin_lock_init(&crypto_info->lock); -- - crypto_info->reg = devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(crypto_info->reg)) { - err = PTR_ERR(crypto_info->reg); -@@ -351,17 +224,11 @@ static int rk_crypto_probe(struct platform_device *pdev) - crypto_info->dev = &pdev->dev; - platform_set_drvdata(pdev, crypto_info); - -- tasklet_init(&crypto_info->queue_task, -- rk_crypto_queue_task_cb, (unsigned long)crypto_info); -- tasklet_init(&crypto_info->done_task, -- rk_crypto_done_task_cb, (unsigned long)crypto_info); -- crypto_init_queue(&crypto_info->queue, 50); -+ crypto_info->engine = crypto_engine_alloc_init(&pdev->dev, true); -+ crypto_engine_start(crypto_info->engine); -+ init_completion(&crypto_info->complete); - - rk_crypto_enable_clk(crypto_info); -- crypto_info->load_data = rk_load_data; -- crypto_info->unload_data = rk_unload_data; -- crypto_info->enqueue = rk_crypto_enqueue; -- crypto_info->busy = false; - - err = rk_crypto_register(crypto_info); - if (err) { -@@ -373,9 +240,9 @@ static int rk_crypto_probe(struct platform_device *pdev) - return 0; - - err_register_alg: -- tasklet_kill(&crypto_info->queue_task); -- tasklet_kill(&crypto_info->done_task); -+ crypto_engine_exit(crypto_info->engine); - err_crypto: -+ dev_err(dev, "Crypto Accelerator not successfully registered\n"); - return err; - } - -@@ -385,8 +252,7 @@ static int rk_crypto_remove(struct platform_device *pdev) - - rk_crypto_unregister(); - rk_crypto_disable_clk(crypto_tmp); -- tasklet_kill(&crypto_tmp->done_task); -- tasklet_kill(&crypto_tmp->queue_task); -+ crypto_engine_exit(crypto_tmp->engine); - return 0; - } - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h -index a7de5738f6dc..65ed645e0168 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.h -+++ b/drivers/crypto/rockchip/rk3288_crypto.h -@@ -5,9 +5,11 @@ - #include - #include - #include -+#include - #include - #include - #include -+#include - #include - #include - -@@ -193,39 +195,15 @@ struct rk_crypto_info { - struct reset_control *rst; - void __iomem *reg; - int irq; -- struct crypto_queue queue; -- struct tasklet_struct queue_task; -- struct tasklet_struct done_task; -- struct crypto_async_request *async_req; -- int err; -- /* device lock */ -- spinlock_t lock; -- -- /* the public variable */ -- struct scatterlist *sg_src; -- struct scatterlist *sg_dst; -- struct scatterlist *first; -- unsigned int left_bytes; -- size_t src_nents; -- size_t dst_nents; -- unsigned int total; -- unsigned int count; -- dma_addr_t addr_in; -- dma_addr_t addr_out; -- bool busy; -- int (*start)(struct rk_crypto_info *dev); -- int (*update)(struct rk_crypto_info *dev); -- void (*complete)(struct crypto_async_request *base, int err); -- int (*load_data)(struct rk_crypto_info *dev, -- struct scatterlist *sg_src, -- struct scatterlist *sg_dst); -- void (*unload_data)(struct rk_crypto_info *dev); -- int (*enqueue)(struct rk_crypto_info *dev, -- struct crypto_async_request *async_req); -+ -+ struct crypto_engine *engine; -+ struct completion complete; -+ int status; - }; - - /* the private variable of hash */ - struct rk_ahash_ctx { -+ struct crypto_engine_ctx enginectx; - struct rk_crypto_info *dev; - /* for fallback */ - struct crypto_ahash *fallback_tfm; -@@ -235,10 +213,12 @@ struct rk_ahash_ctx { - struct rk_ahash_rctx { - struct ahash_request fallback_req; - u32 mode; -+ int nrsg; - }; - - /* the private variable of cipher */ - struct rk_cipher_ctx { -+ struct crypto_engine_ctx enginectx; - struct rk_crypto_info *dev; - unsigned int keylen; - u8 key[AES_MAX_KEY_SIZE]; -@@ -247,6 +227,7 @@ struct rk_cipher_ctx { - }; - - struct rk_cipher_rctx { -+ u8 backup_iv[AES_BLOCK_SIZE]; - u32 mode; - struct skcipher_request fallback_req; // keep at the end - }; -diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -index c762e462eb57..edd40e16a3f0 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -@@ -9,6 +9,7 @@ - * Some ideas are from marvell/cesa.c and s5p-sss.c driver. - */ - #include -+#include - #include "rk3288_crypto.h" - - /* -@@ -72,16 +73,12 @@ static int zero_message_process(struct ahash_request *req) - return 0; - } - --static void rk_ahash_crypto_complete(struct crypto_async_request *base, int err) -+static void rk_ahash_reg_init(struct ahash_request *req) - { -- if (base->complete) -- base->complete(base, err); --} -- --static void rk_ahash_reg_init(struct rk_crypto_info *dev) --{ -- struct ahash_request *req = ahash_request_cast(dev->async_req); - struct rk_ahash_rctx *rctx = ahash_request_ctx(req); -+ struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); -+ struct rk_ahash_ctx *tctx = crypto_ahash_ctx(tfm); -+ struct rk_crypto_info *dev = tctx->dev; - int reg_status; - - reg_status = CRYPTO_READ(dev, RK_CRYPTO_CTRL) | -@@ -108,7 +105,7 @@ static void rk_ahash_reg_init(struct rk_crypto_info *dev) - RK_CRYPTO_BYTESWAP_BRFIFO | - RK_CRYPTO_BYTESWAP_BTFIFO); - -- CRYPTO_WRITE(dev, RK_CRYPTO_HASH_MSG_LEN, dev->total); -+ CRYPTO_WRITE(dev, RK_CRYPTO_HASH_MSG_LEN, req->nbytes); - } - - static int rk_ahash_init(struct ahash_request *req) -@@ -206,44 +203,59 @@ static int rk_ahash_digest(struct ahash_request *req) - - if (!req->nbytes) - return zero_message_process(req); -- else -- return dev->enqueue(dev, &req->base); -+ -+ return crypto_transfer_hash_request_to_engine(dev->engine, req); - } - --static void crypto_ahash_dma_start(struct rk_crypto_info *dev) -+static void crypto_ahash_dma_start(struct rk_crypto_info *dev, struct scatterlist *sg) - { -- CRYPTO_WRITE(dev, RK_CRYPTO_HRDMAS, dev->addr_in); -- CRYPTO_WRITE(dev, RK_CRYPTO_HRDMAL, (dev->count + 3) / 4); -+ CRYPTO_WRITE(dev, RK_CRYPTO_HRDMAS, sg_dma_address(sg)); -+ CRYPTO_WRITE(dev, RK_CRYPTO_HRDMAL, sg_dma_len(sg) / 4); - CRYPTO_WRITE(dev, RK_CRYPTO_CTRL, RK_CRYPTO_HASH_START | - (RK_CRYPTO_HASH_START << 16)); - } - --static int rk_ahash_set_data_start(struct rk_crypto_info *dev) -+static int rk_hash_prepare(struct crypto_engine *engine, void *breq) -+{ -+ struct ahash_request *areq = container_of(breq, struct ahash_request, base); -+ struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); -+ struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); -+ struct rk_ahash_ctx *tctx = crypto_ahash_ctx(tfm); -+ int ret; -+ -+ ret = dma_map_sg(tctx->dev->dev, areq->src, sg_nents(areq->src), DMA_TO_DEVICE); -+ if (ret <= 0) -+ return -EINVAL; -+ -+ rctx->nrsg = ret; -+ -+ return 0; -+} -+ -+static int rk_hash_unprepare(struct crypto_engine *engine, void *breq) - { -- int err; -+ struct ahash_request *areq = container_of(breq, struct ahash_request, base); -+ struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); -+ struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); -+ struct rk_ahash_ctx *tctx = crypto_ahash_ctx(tfm); - -- err = dev->load_data(dev, dev->sg_src, NULL); -- if (!err) -- crypto_ahash_dma_start(dev); -- return err; -+ dma_unmap_sg(tctx->dev->dev, areq->src, rctx->nrsg, DMA_TO_DEVICE); -+ return 0; - } - --static int rk_ahash_start(struct rk_crypto_info *dev) -+static int rk_hash_run(struct crypto_engine *engine, void *breq) - { -- struct ahash_request *req = ahash_request_cast(dev->async_req); -- struct crypto_ahash *tfm; -- struct rk_ahash_rctx *rctx; -- -- dev->total = req->nbytes; -- dev->left_bytes = req->nbytes; -- dev->sg_dst = NULL; -- dev->sg_src = req->src; -- dev->first = req->src; -- dev->src_nents = sg_nents(req->src); -- rctx = ahash_request_ctx(req); -+ struct ahash_request *areq = container_of(breq, struct ahash_request, base); -+ struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); -+ struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); -+ struct rk_ahash_ctx *tctx = crypto_ahash_ctx(tfm); -+ struct scatterlist *sg = areq->src; -+ int err = 0; -+ int i; -+ u32 v; -+ - rctx->mode = 0; - -- tfm = crypto_ahash_reqtfm(req); - switch (crypto_ahash_digestsize(tfm)) { - case SHA1_DIGEST_SIZE: - rctx->mode = RK_CRYPTO_HASH_SHA1; -@@ -255,30 +267,26 @@ static int rk_ahash_start(struct rk_crypto_info *dev) - rctx->mode = RK_CRYPTO_HASH_MD5; - break; - default: -- return -EINVAL; -+ err = -EINVAL; -+ goto theend; - } - -- rk_ahash_reg_init(dev); -- return rk_ahash_set_data_start(dev); --} -+ rk_ahash_reg_init(areq); - --static int rk_ahash_crypto_rx(struct rk_crypto_info *dev) --{ -- int err = 0; -- struct ahash_request *req = ahash_request_cast(dev->async_req); -- struct crypto_ahash *tfm; -- -- dev->unload_data(dev); -- if (dev->left_bytes) { -- if (sg_is_last(dev->sg_src)) { -- dev_warn(dev->dev, "[%s:%d], Lack of data\n", -- __func__, __LINE__); -- err = -ENOMEM; -- goto out_rx; -+ while (sg) { -+ reinit_completion(&tctx->dev->complete); -+ tctx->dev->status = 0; -+ crypto_ahash_dma_start(tctx->dev, sg); -+ wait_for_completion_interruptible_timeout(&tctx->dev->complete, -+ msecs_to_jiffies(2000)); -+ if (!tctx->dev->status) { -+ dev_err(tctx->dev->dev, "DMA timeout\n"); -+ err = -EFAULT; -+ goto theend; - } -- dev->sg_src = sg_next(dev->sg_src); -- err = rk_ahash_set_data_start(dev); -- } else { -+ sg = sg_next(sg); -+ } -+ - /* - * it will take some time to process date after last dma - * transmission. -@@ -289,18 +297,20 @@ static int rk_ahash_crypto_rx(struct rk_crypto_info *dev) - * efficiency, and make it response quickly when dma - * complete. - */ -- while (!CRYPTO_READ(dev, RK_CRYPTO_HASH_STS)) -- udelay(10); -- -- tfm = crypto_ahash_reqtfm(req); -- memcpy_fromio(req->result, dev->reg + RK_CRYPTO_HASH_DOUT_0, -- crypto_ahash_digestsize(tfm)); -- dev->complete(dev->async_req, 0); -- tasklet_schedule(&dev->queue_task); -+ while (!CRYPTO_READ(tctx->dev, RK_CRYPTO_HASH_STS)) -+ udelay(10); -+ -+ for (i = 0; i < crypto_ahash_digestsize(tfm) / 4; i++) { -+ v = readl(tctx->dev->reg + RK_CRYPTO_HASH_DOUT_0 + i * 4); -+ put_unaligned_le32(v, areq->result + i * 4); - } - --out_rx: -- return err; -+theend: -+ local_bh_disable(); -+ crypto_finalize_hash_request(engine, breq, err); -+ local_bh_enable(); -+ -+ return 0; - } - - static int rk_cra_hash_init(struct crypto_tfm *tfm) -@@ -314,9 +324,6 @@ static int rk_cra_hash_init(struct crypto_tfm *tfm) - algt = container_of(alg, struct rk_crypto_tmp, alg.hash); - - tctx->dev = algt->dev; -- tctx->dev->start = rk_ahash_start; -- tctx->dev->update = rk_ahash_crypto_rx; -- tctx->dev->complete = rk_ahash_crypto_complete; - - /* for fallback */ - tctx->fallback_tfm = crypto_alloc_ahash(alg_name, 0, -@@ -325,10 +332,15 @@ static int rk_cra_hash_init(struct crypto_tfm *tfm) - dev_err(tctx->dev->dev, "Could not load fallback driver.\n"); - return PTR_ERR(tctx->fallback_tfm); - } -+ - crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm), - sizeof(struct rk_ahash_rctx) + - crypto_ahash_reqsize(tctx->fallback_tfm)); - -+ tctx->enginectx.op.do_one_request = rk_hash_run; -+ tctx->enginectx.op.prepare_request = rk_hash_prepare; -+ tctx->enginectx.op.unprepare_request = rk_hash_unprepare; -+ - return 0; - } - -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index d067b7f09165..67a7e05d5ae3 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -9,6 +9,7 @@ - * Some ideas are from marvell-cesa.c and s5p-sss.c driver. - */ - #include -+#include - #include "rk3288_crypto.h" - - #define RK_CRYPTO_DEC BIT(0) -@@ -70,19 +71,15 @@ static int rk_cipher_fallback(struct skcipher_request *areq) - return err; - } - --static void rk_crypto_complete(struct crypto_async_request *base, int err) --{ -- if (base->complete) -- base->complete(base, err); --} -- - static int rk_handle_req(struct rk_crypto_info *dev, - struct skcipher_request *req) - { -+ struct crypto_engine *engine = dev->engine; -+ - if (rk_cipher_need_fallback(req)) - return rk_cipher_fallback(req); - -- return dev->enqueue(dev, &req->base); -+ return crypto_transfer_skcipher_request_to_engine(engine, req); - } - - static int rk_aes_setkey(struct crypto_skcipher *cipher, -@@ -265,25 +262,21 @@ static int rk_des3_ede_cbc_decrypt(struct skcipher_request *req) - return rk_handle_req(dev, req); - } - --static void rk_ablk_hw_init(struct rk_crypto_info *dev) -+static void rk_ablk_hw_init(struct rk_crypto_info *dev, struct skcipher_request *req) - { -- struct skcipher_request *req = -- skcipher_request_cast(dev->async_req); - struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(req); - struct crypto_tfm *tfm = crypto_skcipher_tfm(cipher); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(cipher); -- u32 ivsize, block, conf_reg = 0; -+ u32 block, conf_reg = 0; - - block = crypto_tfm_alg_blocksize(tfm); -- ivsize = crypto_skcipher_ivsize(cipher); - - if (block == DES_BLOCK_SIZE) { - rctx->mode |= RK_CRYPTO_TDES_FIFO_MODE | - RK_CRYPTO_TDES_BYTESWAP_KEY | - RK_CRYPTO_TDES_BYTESWAP_IV; - CRYPTO_WRITE(dev, RK_CRYPTO_TDES_CTRL, rctx->mode); -- memcpy_toio(dev->reg + RK_CRYPTO_TDES_IV_0, req->iv, ivsize); - memcpy_toio(ctx->dev->reg + RK_CRYPTO_TDES_KEY1_0, ctx->key, ctx->keylen); - conf_reg = RK_CRYPTO_DESSEL; - } else { -@@ -296,7 +289,6 @@ static void rk_ablk_hw_init(struct rk_crypto_info *dev) - else if (ctx->keylen == AES_KEYSIZE_256) - rctx->mode |= RK_CRYPTO_AES_256BIT_key; - CRYPTO_WRITE(dev, RK_CRYPTO_AES_CTRL, rctx->mode); -- memcpy_toio(dev->reg + RK_CRYPTO_AES_IV_0, req->iv, ivsize); - memcpy_toio(ctx->dev->reg + RK_CRYPTO_AES_KEY_0, ctx->key, ctx->keylen); - } - conf_reg |= RK_CRYPTO_BYTESWAP_BTFIFO | -@@ -306,133 +298,138 @@ static void rk_ablk_hw_init(struct rk_crypto_info *dev) - RK_CRYPTO_BCDMA_ERR_ENA | RK_CRYPTO_BCDMA_DONE_ENA); - } - --static void crypto_dma_start(struct rk_crypto_info *dev) -+static void crypto_dma_start(struct rk_crypto_info *dev, -+ struct scatterlist *sgs, -+ struct scatterlist *sgd, unsigned int todo) - { -- CRYPTO_WRITE(dev, RK_CRYPTO_BRDMAS, dev->addr_in); -- CRYPTO_WRITE(dev, RK_CRYPTO_BRDMAL, dev->count / 4); -- CRYPTO_WRITE(dev, RK_CRYPTO_BTDMAS, dev->addr_out); -+ CRYPTO_WRITE(dev, RK_CRYPTO_BRDMAS, sg_dma_address(sgs)); -+ CRYPTO_WRITE(dev, RK_CRYPTO_BRDMAL, todo); -+ CRYPTO_WRITE(dev, RK_CRYPTO_BTDMAS, sg_dma_address(sgd)); - CRYPTO_WRITE(dev, RK_CRYPTO_CTRL, RK_CRYPTO_BLOCK_START | - _SBF(RK_CRYPTO_BLOCK_START, 16)); - } - --static int rk_set_data_start(struct rk_crypto_info *dev) -+static int rk_cipher_run(struct crypto_engine *engine, void *async_req) - { -- int err; -- struct skcipher_request *req = -- skcipher_request_cast(dev->async_req); -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -+ struct skcipher_request *areq = container_of(async_req, struct skcipher_request, base); -+ struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -- u32 ivsize = crypto_skcipher_ivsize(tfm); -- u8 *src_last_blk = page_address(sg_page(dev->sg_src)) + -- dev->sg_src->offset + dev->sg_src->length - ivsize; -- -- /* Store the iv that need to be updated in chain mode. -- * And update the IV buffer to contain the next IV for decryption mode. -- */ -- if (rctx->mode & RK_CRYPTO_DEC) { -- memcpy(ctx->iv, src_last_blk, ivsize); -- sg_pcopy_to_buffer(dev->first, dev->src_nents, req->iv, -- ivsize, dev->total - ivsize); -- } -- -- err = dev->load_data(dev, dev->sg_src, dev->sg_dst); -- if (!err) -- crypto_dma_start(dev); -- return err; --} -- --static int rk_ablk_start(struct rk_crypto_info *dev) --{ -- struct skcipher_request *req = -- skcipher_request_cast(dev->async_req); -- unsigned long flags; -+ struct rk_cipher_rctx *rctx = skcipher_request_ctx(areq); -+ struct scatterlist *sgs, *sgd; - int err = 0; -+ int ivsize = crypto_skcipher_ivsize(tfm); -+ int offset; -+ u8 iv[AES_BLOCK_SIZE]; -+ u8 biv[AES_BLOCK_SIZE]; -+ u8 *ivtouse = areq->iv; -+ unsigned int len = areq->cryptlen; -+ unsigned int todo; -+ -+ ivsize = crypto_skcipher_ivsize(tfm); -+ if (areq->iv && crypto_skcipher_ivsize(tfm) > 0) { -+ if (rctx->mode & RK_CRYPTO_DEC) { -+ offset = areq->cryptlen - ivsize; -+ scatterwalk_map_and_copy(rctx->backup_iv, areq->src, -+ offset, ivsize, 0); -+ } -+ } - -- dev->left_bytes = req->cryptlen; -- dev->total = req->cryptlen; -- dev->sg_src = req->src; -- dev->first = req->src; -- dev->src_nents = sg_nents(req->src); -- dev->sg_dst = req->dst; -- dev->dst_nents = sg_nents(req->dst); -- -- spin_lock_irqsave(&dev->lock, flags); -- rk_ablk_hw_init(dev); -- err = rk_set_data_start(dev); -- spin_unlock_irqrestore(&dev->lock, flags); -- return err; --} -- --static void rk_iv_copyback(struct rk_crypto_info *dev) --{ -- struct skcipher_request *req = -- skcipher_request_cast(dev->async_req); -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -- u32 ivsize = crypto_skcipher_ivsize(tfm); -+ sgs = areq->src; -+ sgd = areq->dst; - -- /* Update the IV buffer to contain the next IV for encryption mode. */ -- if (!(rctx->mode & RK_CRYPTO_DEC)) { -- memcpy(req->iv, -- sg_virt(dev->sg_dst) + dev->sg_dst->length - ivsize, -- ivsize); -+ while (sgs && sgd && len) { -+ if (!sgs->length) { -+ sgs = sg_next(sgs); -+ sgd = sg_next(sgd); -+ continue; -+ } -+ if (rctx->mode & RK_CRYPTO_DEC) { -+ /* we backup last block of source to be used as IV at next step */ -+ offset = sgs->length - ivsize; -+ scatterwalk_map_and_copy(biv, sgs, offset, ivsize, 0); -+ } -+ if (sgs == sgd) { -+ err = dma_map_sg(ctx->dev->dev, sgs, 1, DMA_BIDIRECTIONAL); -+ if (err <= 0) { -+ err = -EINVAL; -+ goto theend_iv; -+ } -+ } else { -+ err = dma_map_sg(ctx->dev->dev, sgs, 1, DMA_TO_DEVICE); -+ if (err <= 0) { -+ err = -EINVAL; -+ goto theend_iv; -+ } -+ err = dma_map_sg(ctx->dev->dev, sgd, 1, DMA_FROM_DEVICE); -+ if (err <= 0) { -+ err = -EINVAL; -+ goto theend_sgs; -+ } -+ } -+ err = 0; -+ rk_ablk_hw_init(ctx->dev, areq); -+ if (ivsize) { -+ if (ivsize == DES_BLOCK_SIZE) -+ memcpy_toio(ctx->dev->reg + RK_CRYPTO_TDES_IV_0, ivtouse, ivsize); -+ else -+ memcpy_toio(ctx->dev->reg + RK_CRYPTO_AES_IV_0, ivtouse, ivsize); -+ } -+ reinit_completion(&ctx->dev->complete); -+ ctx->dev->status = 0; -+ -+ todo = min(sg_dma_len(sgs), len); -+ len -= todo; -+ crypto_dma_start(ctx->dev, sgs, sgd, todo / 4); -+ wait_for_completion_interruptible_timeout(&ctx->dev->complete, -+ msecs_to_jiffies(2000)); -+ if (!ctx->dev->status) { -+ dev_err(ctx->dev->dev, "DMA timeout\n"); -+ err = -EFAULT; -+ goto theend; -+ } -+ if (sgs == sgd) { -+ dma_unmap_sg(ctx->dev->dev, sgs, 1, DMA_BIDIRECTIONAL); -+ } else { -+ dma_unmap_sg(ctx->dev->dev, sgs, 1, DMA_TO_DEVICE); -+ dma_unmap_sg(ctx->dev->dev, sgd, 1, DMA_FROM_DEVICE); -+ } -+ if (rctx->mode & RK_CRYPTO_DEC) { -+ memcpy(iv, biv, ivsize); -+ ivtouse = iv; -+ } else { -+ offset = sgd->length - ivsize; -+ scatterwalk_map_and_copy(iv, sgd, offset, ivsize, 0); -+ ivtouse = iv; -+ } -+ sgs = sg_next(sgs); -+ sgd = sg_next(sgd); - } --} -- --static void rk_update_iv(struct rk_crypto_info *dev) --{ -- struct skcipher_request *req = -- skcipher_request_cast(dev->async_req); -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -- u32 ivsize = crypto_skcipher_ivsize(tfm); -- u8 *new_iv = NULL; - -- if (rctx->mode & RK_CRYPTO_DEC) { -- new_iv = ctx->iv; -- } else { -- new_iv = page_address(sg_page(dev->sg_dst)) + -- dev->sg_dst->offset + dev->sg_dst->length - ivsize; -+ if (areq->iv && ivsize > 0) { -+ offset = areq->cryptlen - ivsize; -+ if (rctx->mode & RK_CRYPTO_DEC) { -+ memcpy(areq->iv, rctx->backup_iv, ivsize); -+ memzero_explicit(rctx->backup_iv, ivsize); -+ } else { -+ scatterwalk_map_and_copy(areq->iv, areq->dst, offset, -+ ivsize, 0); -+ } - } - -- if (ivsize == DES_BLOCK_SIZE) -- memcpy_toio(dev->reg + RK_CRYPTO_TDES_IV_0, new_iv, ivsize); -- else if (ivsize == AES_BLOCK_SIZE) -- memcpy_toio(dev->reg + RK_CRYPTO_AES_IV_0, new_iv, ivsize); --} -+theend: -+ local_bh_disable(); -+ crypto_finalize_skcipher_request(engine, areq, err); -+ local_bh_enable(); -+ return 0; - --/* return: -- * true some err was occurred -- * fault no err, continue -- */ --static int rk_ablk_rx(struct rk_crypto_info *dev) --{ -- int err = 0; -- struct skcipher_request *req = -- skcipher_request_cast(dev->async_req); -- -- dev->unload_data(dev); -- if (dev->left_bytes) { -- rk_update_iv(dev); -- if (sg_is_last(dev->sg_src)) { -- dev_err(dev->dev, "[%s:%d] Lack of data\n", -- __func__, __LINE__); -- err = -ENOMEM; -- goto out_rx; -- } -- dev->sg_src = sg_next(dev->sg_src); -- dev->sg_dst = sg_next(dev->sg_dst); -- err = rk_set_data_start(dev); -+theend_sgs: -+ if (sgs == sgd) { -+ dma_unmap_sg(ctx->dev->dev, sgs, 1, DMA_BIDIRECTIONAL); - } else { -- rk_iv_copyback(dev); -- /* here show the calculation is over without any err */ -- dev->complete(dev->async_req, 0); -- tasklet_schedule(&dev->queue_task); -+ dma_unmap_sg(ctx->dev->dev, sgs, 1, DMA_TO_DEVICE); -+ dma_unmap_sg(ctx->dev->dev, sgd, 1, DMA_FROM_DEVICE); - } --out_rx: -+theend_iv: - return err; - } - -@@ -446,9 +443,6 @@ static int rk_ablk_init_tfm(struct crypto_skcipher *tfm) - algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); - - ctx->dev = algt->dev; -- ctx->dev->start = rk_ablk_start; -- ctx->dev->update = rk_ablk_rx; -- ctx->dev->complete = rk_crypto_complete; - - ctx->fallback_tfm = crypto_alloc_skcipher(name, 0, CRYPTO_ALG_NEED_FALLBACK); - if (IS_ERR(ctx->fallback_tfm)) { -@@ -460,6 +454,8 @@ static int rk_ablk_init_tfm(struct crypto_skcipher *tfm) - tfm->reqsize = sizeof(struct rk_cipher_rctx) + - crypto_skcipher_reqsize(ctx->fallback_tfm); - -+ ctx->enginectx.op.do_one_request = rk_cipher_run; -+ - return 0; - } - - -From patchwork Wed Jul 6 09:03:50 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907851 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 62682CCA473 - for ; - Wed, 6 Jul 2022 09:58:23 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=0bul191y5Jj4ONLFkwiR2QDNCCkvMXgoXLV6wkEQ5tA=; b=U10/kABVWIUWzZ - 7V9j56vQerhueAvT4AP6zIa8E7ef2VdWyddBkwoRBTN8Uyg3+85MG/ZqZ1bwYyMOYgWQCjhjnOQkm - OI0iJPAQ1yVfShUfJSrDrJ4XGkK3/dnDHQwYQLWBNH2eN8wYJz966wdcUB3kJnXznM3cqUPcdpUFZ - XoPp9Do/0yk5gEGtDvMMiFcsR77jiIw3jkmGxpDHytLyNZNNqcxJoBYkd8/ze5Mk6m4WA9WeEqOin - l8weBMy9x3g5uJyiW8FRaoY/LFUOo/hNrWJilkMnOJMLQHpusoV6uW0+0/ktoqfhAnLVzXkRxUZqN - h3RGGhIfpGVRWWjaMMeA==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91nM-0082Pw-Ib; Wed, 06 Jul 2022 09:58:08 +0000 -Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91Uz-007qGk-8Q - for linux-rockchip@bombadil.infradead.org; Wed, 06 Jul 2022 09:39:09 +0000 -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version - :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: - Content-Type:Content-ID:Content-Description; - bh=8+zNu8By2wCTRIvE0cQTAVxjDoLu9Skp/kq6mTlEw+Q=; b=dGK08eLX1d1XArr5Y83fNk4bkj - BGdfUkkzd9YpZWCLnIdYxxBdYFX6Ipgw4iWeSsEhePvmT46M+y38bBJ7gdSqnUjqF7lYl9ls8mdam - in6i1dkqtFa6RbBVqQ/24Tk3YEoBHSakNVkwjB4CoAbQJ8M8cKnbnGl9B+hVXCJ7Y+MHaNaEO/I65 - G6NtbvwMEijAldAfcod4kj7tVCjW1KvJUtKvfMx3mpO9a2+k/QUVh6CwhiXXo1uEhWQ3ycLCOuvom - 0f7Rs5RSBpBBwuobcbmuj6XVjC3nfCpnyvwX9tnF5XwUeP9QaVEw8fRV+8dWYUDgPhBJ9A78FYUTY - RMJzYXOA==; -Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) - by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xh-000NHB-Kd - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:49 +0000 -Received: by mail-wm1-x331.google.com with SMTP id - v67-20020a1cac46000000b003a1888b9d36so8748288wme.0 - for ; - Wed, 06 Jul 2022 02:04:45 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=8+zNu8By2wCTRIvE0cQTAVxjDoLu9Skp/kq6mTlEw+Q=; - b=QXU/Hy8SZIBn2OhVktLcqFRlwVUkvFh4s6/l1mnut+jLyRghE+1nXvbLGrbXKd7zji - eTKE0TXMrFfpaadXrTsCQ9IsUwIsG7Bn8ciCk5Te4B5s2bdTrT6W06DCeBur9O+E647q - qQGvAUK92GPuGgcEUwY9MjYkktOnHwKIL5eyRqzamRqB9o4o+L5qAQeFazVFWpAyJgKf - LvEeOsX25Fmi1HnmJTwJ00Y9062gCkYKT/K2fg4q9OIH1uBPFGBHziPrKkT9rAS2cvh4 - O+apdFK41Pm7SdK94fjL4uDKsA8NuQp2fTehiOOuKxr2g3IxXA7EWrsDDLOeWy830MZS - s51w== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=8+zNu8By2wCTRIvE0cQTAVxjDoLu9Skp/kq6mTlEw+Q=; - b=IBfS78gbuFD6UCuY18+gAxtzItLL/0BIwypSj6d41FqwBYvkAqgibQr67SfAntRuyf - U8TNOEAo8vjls3oqVXwtA3aM/X15OOxYSTagC6BDlR9wI3EwUkE5AEqs7bCCw24JyUFx - RtgMog8LRH0im5ed4OZhhrxkB6GDMrqb/yarmCLwlZjHoMuWKJbtm1aVonENDrlw0ktK - MVO6DMLk9lFowtdpsxMKfoPVTdoK7GQZwAUnH7vs0G95S5gDCdpA9JRyejSawTjzWO8m - KtupaTTaiJwQBxri4h78W8ozMayljPka4P31SQTDs2Bk+Qj+dBjaUGebdrJ4zq+C3oqU - xIzQ== -X-Gm-Message-State: AJIora8OZgEXwbVOjXLHlyIsh0Hf8myv+QOaHrrzGCUM3Y0pHGfdgzaK - gzHc/MRTTeAhw+ew/5jVQOs/yg== -X-Google-Smtp-Source: - AGRyM1vLphvBpXT/k/qIrhyevrjHvkoNvpi/aV2VW0NZgZYRyzaJk+WW7LSexXBz5CeOtFKmJA0LaQ== -X-Received: by 2002:a7b:c31a:0:b0:39c:4783:385e with SMTP id - k26-20020a7bc31a000000b0039c4783385emr42156922wmj.185.1657098284513; - Wed, 06 Jul 2022 02:04:44 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.43 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:44 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 11/33] crypto: rockchip: rewrite type -Date: Wed, 6 Jul 2022 09:03:50 +0000 -Message-Id: <20220706090412.806101-12-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_100446_532724_EC696E01 -X-CRM114-Status: GOOD ( 14.91 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -Instead of using a custom type for classify algorithms, let's just use -already defined ones. -And let's made a bit more verbose about what is registered. - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.c | 26 +++++++++++++------ - drivers/crypto/rockchip/rk3288_crypto.h | 7 +---- - drivers/crypto/rockchip/rk3288_crypto_ahash.c | 6 ++--- - .../crypto/rockchip/rk3288_crypto_skcipher.c | 12 ++++----- - 4 files changed, 28 insertions(+), 23 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index 1afb65eee6c9..8f9664acc78d 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.c -+++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -102,12 +102,22 @@ static int rk_crypto_register(struct rk_crypto_info *crypto_info) - - for (i = 0; i < ARRAY_SIZE(rk_cipher_algs); i++) { - rk_cipher_algs[i]->dev = crypto_info; -- if (rk_cipher_algs[i]->type == ALG_TYPE_CIPHER) -- err = crypto_register_skcipher( -- &rk_cipher_algs[i]->alg.skcipher); -- else -- err = crypto_register_ahash( -- &rk_cipher_algs[i]->alg.hash); -+ switch (rk_cipher_algs[i]->type) { -+ case CRYPTO_ALG_TYPE_SKCIPHER: -+ dev_info(crypto_info->dev, "Register %s as %s\n", -+ rk_cipher_algs[i]->alg.skcipher.base.cra_name, -+ rk_cipher_algs[i]->alg.skcipher.base.cra_driver_name); -+ err = crypto_register_skcipher(&rk_cipher_algs[i]->alg.skcipher); -+ break; -+ case CRYPTO_ALG_TYPE_AHASH: -+ dev_info(crypto_info->dev, "Register %s as %s\n", -+ rk_cipher_algs[i]->alg.hash.halg.base.cra_name, -+ rk_cipher_algs[i]->alg.hash.halg.base.cra_driver_name); -+ err = crypto_register_ahash(&rk_cipher_algs[i]->alg.hash); -+ break; -+ default: -+ dev_err(crypto_info->dev, "unknown algorithm\n"); -+ } - if (err) - goto err_cipher_algs; - } -@@ -115,7 +125,7 @@ static int rk_crypto_register(struct rk_crypto_info *crypto_info) - - err_cipher_algs: - for (k = 0; k < i; k++) { -- if (rk_cipher_algs[i]->type == ALG_TYPE_CIPHER) -+ if (rk_cipher_algs[i]->type == CRYPTO_ALG_TYPE_SKCIPHER) - crypto_unregister_skcipher(&rk_cipher_algs[k]->alg.skcipher); - else - crypto_unregister_ahash(&rk_cipher_algs[i]->alg.hash); -@@ -128,7 +138,7 @@ static void rk_crypto_unregister(void) - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(rk_cipher_algs); i++) { -- if (rk_cipher_algs[i]->type == ALG_TYPE_CIPHER) -+ if (rk_cipher_algs[i]->type == CRYPTO_ALG_TYPE_SKCIPHER) - crypto_unregister_skcipher(&rk_cipher_algs[i]->alg.skcipher); - else - crypto_unregister_ahash(&rk_cipher_algs[i]->alg.hash); -diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h -index 65ed645e0168..d924ea17402a 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.h -+++ b/drivers/crypto/rockchip/rk3288_crypto.h -@@ -232,18 +232,13 @@ struct rk_cipher_rctx { - struct skcipher_request fallback_req; // keep at the end - }; - --enum alg_type { -- ALG_TYPE_HASH, -- ALG_TYPE_CIPHER, --}; -- - struct rk_crypto_tmp { -+ u32 type; - struct rk_crypto_info *dev; - union { - struct skcipher_alg skcipher; - struct ahash_alg hash; - } alg; -- enum alg_type type; - }; - - extern struct rk_crypto_tmp rk_ecb_aes_alg; -diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -index edd40e16a3f0..d08e2438d356 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -@@ -352,7 +352,7 @@ static void rk_cra_hash_exit(struct crypto_tfm *tfm) - } - - struct rk_crypto_tmp rk_ahash_sha1 = { -- .type = ALG_TYPE_HASH, -+ .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .init = rk_ahash_init, - .update = rk_ahash_update, -@@ -382,7 +382,7 @@ struct rk_crypto_tmp rk_ahash_sha1 = { - }; - - struct rk_crypto_tmp rk_ahash_sha256 = { -- .type = ALG_TYPE_HASH, -+ .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .init = rk_ahash_init, - .update = rk_ahash_update, -@@ -412,7 +412,7 @@ struct rk_crypto_tmp rk_ahash_sha256 = { - }; - - struct rk_crypto_tmp rk_ahash_md5 = { -- .type = ALG_TYPE_HASH, -+ .type = CRYPTO_ALG_TYPE_AHASH, - .alg.hash = { - .init = rk_ahash_init, - .update = rk_ahash_update, -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index 67a7e05d5ae3..1ed297f5d809 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -468,7 +468,7 @@ static void rk_ablk_exit_tfm(struct crypto_skcipher *tfm) - } - - struct rk_crypto_tmp rk_ecb_aes_alg = { -- .type = ALG_TYPE_CIPHER, -+ .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "ecb(aes)", - .base.cra_driver_name = "ecb-aes-rk", -@@ -490,7 +490,7 @@ struct rk_crypto_tmp rk_ecb_aes_alg = { - }; - - struct rk_crypto_tmp rk_cbc_aes_alg = { -- .type = ALG_TYPE_CIPHER, -+ .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "cbc(aes)", - .base.cra_driver_name = "cbc-aes-rk", -@@ -513,7 +513,7 @@ struct rk_crypto_tmp rk_cbc_aes_alg = { - }; - - struct rk_crypto_tmp rk_ecb_des_alg = { -- .type = ALG_TYPE_CIPHER, -+ .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "ecb(des)", - .base.cra_driver_name = "ecb-des-rk", -@@ -535,7 +535,7 @@ struct rk_crypto_tmp rk_ecb_des_alg = { - }; - - struct rk_crypto_tmp rk_cbc_des_alg = { -- .type = ALG_TYPE_CIPHER, -+ .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "cbc(des)", - .base.cra_driver_name = "cbc-des-rk", -@@ -558,7 +558,7 @@ struct rk_crypto_tmp rk_cbc_des_alg = { - }; - - struct rk_crypto_tmp rk_ecb_des3_ede_alg = { -- .type = ALG_TYPE_CIPHER, -+ .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "ecb(des3_ede)", - .base.cra_driver_name = "ecb-des3-ede-rk", -@@ -580,7 +580,7 @@ struct rk_crypto_tmp rk_ecb_des3_ede_alg = { - }; - - struct rk_crypto_tmp rk_cbc_des3_ede_alg = { -- .type = ALG_TYPE_CIPHER, -+ .type = CRYPTO_ALG_TYPE_SKCIPHER, - .alg.skcipher = { - .base.cra_name = "cbc(des3_ede)", - .base.cra_driver_name = "cbc-des3-ede-rk", - -From patchwork Wed Jul 6 09:03:51 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907839 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 78665C433EF - for ; - Wed, 6 Jul 2022 09:56:20 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=/szwbkmiNtWIoXaRXd6YMBE3ntJww2bA7aDQ9ivIfsc=; b=HzVr2vJ7weHOzF - es3mHijv4bFKD47nRj2PWXtBbPF6ZW3GEpe70bLhUbtLycahM2fvN/DjV9Wa3JKOn27KMRFVp/Chk - X4/mjqRGGbY8xbFbgibhUaOkdYxHTfnD8ELHrwvF0wQaleDMjWOSbIqKyJchNf/mJguQLCEChbPJZ - XXGefZ1uypkVTnPlJzXZKH9U9nnQyHtyHdDZkOwje+bi7Xf+eBUXZC0B+ZuE/1H3rbsGy0he5W9E9 - v4mNomHa7Sg4yIsVCWzFefOBiDesvaca4V6KA0NS/+geieyB4Hp1oor9CYu2x+ghSXELblBJnBvlZ - LzsU13rpP54jL+MMsz4Q==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91lP-0080nY-4p; Wed, 06 Jul 2022 09:56:07 +0000 -Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91Uy-007qGf-9Z - for linux-rockchip@bombadil.infradead.org; Wed, 06 Jul 2022 09:39:08 +0000 -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version - :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: - Content-Type:Content-ID:Content-Description; - bh=SY27zUOPhGpfGqShGZHh/LeCOu4fFuQvT5QyG/wyCDc=; b=jeG1GBlk+uWSGueGJS0rGp9WUd - QjwLGnLrdr7KrnCZndwag1RE9zKMLcdCUmcS5sY/OIqfvy4oizwJY5q6lu4tUjP4mgEwvOLlDgXj2 - 1E9g7XMArc49XvNygyepKdWTnxq5DKj5jtYpjyh6tPQ36eTy23WyEHpp6j0z2naMlxrNh1isIW2Oi - cmadbWO3pRUAo66IItN3zuM+fWqQ6ciFRYMX7JYorUOjuQ2aXVTCR/0O6H4P3lfm/1mbkerjtOtw+ - XXMkvOagK1KrS5cdwHoiS/JzOVXajhmZ86hal7eYf64xb7hybLsxn30K3nXF3gM0TGzXfQraf4NRu - vt1hX6pw==; -Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) - by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xk-000NHv-1E - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:52 +0000 -Received: by mail-wm1-x335.google.com with SMTP id - bi22-20020a05600c3d9600b003a04de22ab6so8611734wmb.1 - for ; - Wed, 06 Jul 2022 02:04:46 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=SY27zUOPhGpfGqShGZHh/LeCOu4fFuQvT5QyG/wyCDc=; - b=XjbxgxbJEhDTeVVtqKznNTUbO8lMrqZv9weFUMmWunXx912sPJRUb3SGsIpy/xnU3F - c6i4Sx3/TmCv/AD9fWJCYI77+O52JWqnfYamqcKYv0sonjiP9QtLDzVPwkQGoLpN+37W - Bk7eSR5y4ZF7gLtvYCBZecrtEGb1rSncKC9DMBNdVTvH4WUZR7X9MYAkyFnfcC87fcMh - Nwk+DueGSC1qER/Nvd7OqACbzobnIsLUxchHzz8qKdk/9v/G/aXVXOW1bIGhsTNAOATh - 5lBzrR9pLd5xbp+m0wBO8m4JmJhaPM3a+fkzVUs0+d9ZBbeG7Vo4khO4xh87IZ1CqQG+ - l2mQ== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=SY27zUOPhGpfGqShGZHh/LeCOu4fFuQvT5QyG/wyCDc=; - b=hnPFuBoNdE3NQpmu7HK2XlRFPZx1iEE7YwvXgaQPq1Iql9k2pYr59H9ZOlEzU1f8zV - 5yfLUeya00sDplHCyNPkzb8+gSB0I1FEm+0oukhhVskbrAGMdZpHFyE/JweFYBfMZRMx - 3B1LM6F/D+kYpiG1RR85FNZFFWCe9cR5hVS9CLJc/h/FFfy6nxtIWJ3VKeaXjS5PoISO - rqDE5ytjehUWOZPY7YIePsqnJBUlwgWaE1Koh8+ypQhg/PqtGOLi9YUBUUu8jbfm31AD - qUoBxVnhm2sHfsC/fVFR8CitOycqlipCAmIIyXEzA7avvH2WtAQSr94zIWR+AQgKjCEC - d3Jw== -X-Gm-Message-State: AJIora98JSUw644nGr0Kj3BEizn0UTS+GzVFaN46YAhAQv9JkCkZhol4 - YL56D/KpphhemQXOsi67xkZUig== -X-Google-Smtp-Source: - AGRyM1udBfIKizGH5eGUAcz4VdU4gYzaO+ejM+zyiXdbdANDvA69tJ+B8/cxN3GOho73Ghpggd7E6g== -X-Received: by 2002:a05:600c:3788:b0:3a0:4279:5142 with SMTP id - o8-20020a05600c378800b003a042795142mr38247479wmr.21.1657098285508; - Wed, 06 Jul 2022 02:04:45 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.44 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:45 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 12/33] crypto: rockchip: add debugfs -Date: Wed, 6 Jul 2022 09:03:51 +0000 -Message-Id: <20220706090412.806101-13-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_100448_525840_916A79E9 -X-CRM114-Status: GOOD ( 19.09 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -This patch enable to access usage stats for each algorithm. - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/Kconfig | 10 ++++ - drivers/crypto/rockchip/rk3288_crypto.c | 47 +++++++++++++++++++ - drivers/crypto/rockchip/rk3288_crypto.h | 11 +++++ - drivers/crypto/rockchip/rk3288_crypto_ahash.c | 8 ++++ - .../crypto/rockchip/rk3288_crypto_skcipher.c | 15 ++++++ - 5 files changed, 91 insertions(+) - -diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig -index df4f0a2de098..2286df229c81 100644 ---- a/drivers/crypto/Kconfig -+++ b/drivers/crypto/Kconfig -@@ -801,6 +801,16 @@ config CRYPTO_DEV_ROCKCHIP - This driver interfaces with the hardware crypto accelerator. - Supporting cbc/ecb chainmode, and aes/des/des3_ede cipher mode. - -+config CRYPTO_DEV_ROCKCHIP_DEBUG -+ bool "Enable Rockchip crypto stats" -+ depends on CRYPTO_DEV_ROCKCHIP -+ depends on DEBUG_FS -+ help -+ Say y to enable Rockchip crypto debug stats. -+ This will create /sys/kernel/debug/rk3288_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/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index 8f9664acc78d..3e1b4f3b2422 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.c -+++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -95,6 +95,41 @@ static struct rk_crypto_tmp *rk_cipher_algs[] = { - &rk_ahash_md5, - }; - -+#ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG -+static int rk_crypto_debugfs_show(struct seq_file *seq, void *v) -+{ -+ unsigned int i; -+ -+ for (i = 0; i < ARRAY_SIZE(rk_cipher_algs); i++) { -+ if (!rk_cipher_algs[i]->dev) -+ continue; -+ switch (rk_cipher_algs[i]->type) { -+ case CRYPTO_ALG_TYPE_SKCIPHER: -+ seq_printf(seq, "%s %s reqs=%lu fallback=%lu\n", -+ rk_cipher_algs[i]->alg.skcipher.base.cra_driver_name, -+ rk_cipher_algs[i]->alg.skcipher.base.cra_name, -+ rk_cipher_algs[i]->stat_req, rk_cipher_algs[i]->stat_fb); -+ seq_printf(seq, "\tfallback due to length: %lu\n", -+ rk_cipher_algs[i]->stat_fb_len); -+ seq_printf(seq, "\tfallback due to alignment: %lu\n", -+ rk_cipher_algs[i]->stat_fb_align); -+ seq_printf(seq, "\tfallback due to SGs: %lu\n", -+ rk_cipher_algs[i]->stat_fb_sgdiff); -+ break; -+ case CRYPTO_ALG_TYPE_AHASH: -+ seq_printf(seq, "%s %s reqs=%lu fallback=%lu\n", -+ rk_cipher_algs[i]->alg.hash.halg.base.cra_driver_name, -+ rk_cipher_algs[i]->alg.hash.halg.base.cra_name, -+ rk_cipher_algs[i]->stat_req, rk_cipher_algs[i]->stat_fb); -+ break; -+ } -+ } -+ return 0; -+} -+ -+DEFINE_SHOW_ATTRIBUTE(rk_crypto_debugfs); -+#endif -+ - static int rk_crypto_register(struct rk_crypto_info *crypto_info) - { - unsigned int i, k; -@@ -246,6 +281,15 @@ static int rk_crypto_probe(struct platform_device *pdev) - goto err_register_alg; - } - -+#ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG -+ /* Ignore error of debugfs */ -+ crypto_info->dbgfs_dir = debugfs_create_dir("rk3288_crypto", NULL); -+ crypto_info->dbgfs_stats = debugfs_create_file("stats", 0444, -+ crypto_info->dbgfs_dir, -+ crypto_info, -+ &rk_crypto_debugfs_fops); -+#endif -+ - dev_info(dev, "Crypto Accelerator successfully registered\n"); - return 0; - -@@ -260,6 +304,9 @@ static int rk_crypto_remove(struct platform_device *pdev) - { - struct rk_crypto_info *crypto_tmp = platform_get_drvdata(pdev); - -+#ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG -+ debugfs_remove_recursive(crypto_tmp->dbgfs_dir); -+#endif - rk_crypto_unregister(); - rk_crypto_disable_clk(crypto_tmp); - crypto_engine_exit(crypto_tmp->engine); -diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h -index d924ea17402a..945a8184bbad 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.h -+++ b/drivers/crypto/rockchip/rk3288_crypto.h -@@ -7,6 +7,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -199,6 +200,10 @@ struct rk_crypto_info { - struct crypto_engine *engine; - struct completion complete; - int status; -+#ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG -+ struct dentry *dbgfs_dir; -+ struct dentry *dbgfs_stats; -+#endif - }; - - /* the private variable of hash */ -@@ -239,6 +244,12 @@ struct rk_crypto_tmp { - struct skcipher_alg skcipher; - struct ahash_alg hash; - } alg; -+ unsigned long stat_req; -+ unsigned long stat_fb; -+ unsigned long stat_fb_len; -+ unsigned long stat_fb_sglen; -+ unsigned long stat_fb_align; -+ unsigned long stat_fb_sgdiff; - }; - - extern struct rk_crypto_tmp rk_ecb_aes_alg; -diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -index d08e2438d356..8856c6226be6 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -@@ -39,6 +39,10 @@ static int rk_ahash_digest_fb(struct ahash_request *areq) - struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); - struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); - struct rk_ahash_ctx *tfmctx = crypto_ahash_ctx(tfm); -+ struct ahash_alg *alg = __crypto_ahash_alg(tfm->base.__crt_alg); -+ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash); -+ -+ algt->stat_fb++; - - ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm); - rctx->fallback_req.base.flags = areq->base.flags & -@@ -249,6 +253,8 @@ static int rk_hash_run(struct crypto_engine *engine, void *breq) - struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); - struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); - struct rk_ahash_ctx *tctx = crypto_ahash_ctx(tfm); -+ struct ahash_alg *alg = __crypto_ahash_alg(tfm->base.__crt_alg); -+ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash); - struct scatterlist *sg = areq->src; - int err = 0; - int i; -@@ -256,6 +262,8 @@ static int rk_hash_run(struct crypto_engine *engine, void *breq) - - rctx->mode = 0; - -+ algt->stat_req++; -+ - switch (crypto_ahash_digestsize(tfm)) { - case SHA1_DIGEST_SIZE: - rctx->mode = RK_CRYPTO_HASH_SHA1; -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index 1ed297f5d809..91b8a4c574da 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -18,6 +18,8 @@ static int rk_cipher_need_fallback(struct skcipher_request *req) - { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - unsigned int bs = crypto_skcipher_blocksize(tfm); -+ struct skcipher_alg *alg = crypto_skcipher_alg(tfm); -+ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); - struct scatterlist *sgs, *sgd; - unsigned int stodo, dtodo, len; - -@@ -29,20 +31,25 @@ static int rk_cipher_need_fallback(struct skcipher_request *req) - sgd = req->dst; - while (sgs && sgd) { - if (!IS_ALIGNED(sgs->offset, sizeof(u32))) { -+ algt->stat_fb_align++; - return true; - } - if (!IS_ALIGNED(sgd->offset, sizeof(u32))) { -+ algt->stat_fb_align++; - return true; - } - stodo = min(len, sgs->length); - if (stodo % bs) { -+ algt->stat_fb_len++; - return true; - } - dtodo = min(len, sgd->length); - if (dtodo % bs) { -+ algt->stat_fb_len++; - return true; - } - if (stodo != dtodo) { -+ algt->stat_fb_sgdiff++; - return true; - } - len -= stodo; -@@ -57,8 +64,12 @@ static int rk_cipher_fallback(struct skcipher_request *areq) - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); - struct rk_cipher_ctx *op = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(areq); -+ struct skcipher_alg *alg = crypto_skcipher_alg(tfm); -+ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); - int err; - -+ algt->stat_fb++; -+ - skcipher_request_set_tfm(&rctx->fallback_req, op->fallback_tfm); - skcipher_request_set_callback(&rctx->fallback_req, areq->base.flags, - areq->base.complete, areq->base.data); -@@ -324,6 +335,10 @@ static int rk_cipher_run(struct crypto_engine *engine, void *async_req) - u8 *ivtouse = areq->iv; - unsigned int len = areq->cryptlen; - unsigned int todo; -+ struct skcipher_alg *alg = crypto_skcipher_alg(tfm); -+ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); -+ -+ algt->stat_req++; - - ivsize = crypto_skcipher_ivsize(tfm); - if (areq->iv && crypto_skcipher_ivsize(tfm) > 0) { - -From patchwork Wed Jul 6 09:03:52 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907840 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id CBE6BC43334 - for ; - Wed, 6 Jul 2022 09:57:21 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=iYqeSwn0PMkywmWB963Ul/zlgHEpKX8jXtl82zhBAGQ=; b=ae4gek0TVuJvLh - la6TP3MfcsEtW5Ir8pIR6JaqrgTr+SnreUBiXlnpbHosqfkTX/5kSTZ3u6M9RWbJKHcHAM1pFRtSD - Gebs0H1D4Gr6xu0s0F4uvi3MawM/LW6x9Wp144iWj5saWnl26vhO7erBIOSikb/PquI35XHGjTBYI - YDr9wkMcLhpWf4BD/jclecYJPRV1Nuw7AdxUCNpXUw98/BQVyPXxN7+eqVlqRLvVBHmFA/iNE/HGN - J/SCTrL9Iy7Q2bThpOe2wJz4BL+VyhK2qClgoJbaRsCb4H9OBnROwNl/+tzM7JuMEdmm7Wle2sTCz - BWw/rvat2KfyHq+D5p/w==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91mS-0081cr-FU; Wed, 06 Jul 2022 09:57:12 +0000 -Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91Uy-007qIs-8M - for linux-rockchip@bombadil.infradead.org; Wed, 06 Jul 2022 09:39:08 +0000 -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version - :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: - Content-Type:Content-ID:Content-Description; - bh=k3IddiKdhwAn8qAKW9Ise9jrX8X5WN4qU+7hTXJ6Zgw=; b=Wuqq2ZsECgZxye3ZvBYOAmoGOj - FDQRznwrwIhYVGsXBIyKeIJvbkoX7e5zNYqqvsUK9pnzXcdwcEz/r8wEBuUKfMzmSP4NFH5SMzEtQ - uS7MtYukwvhKFn/s9ZCT5ATzcZT8CRFyzTVvjdl9L5NfFkeGwb/Mz93yxyqihhELrrL0eXDCNISrH - 49gotWWdkBSiHQsVEWq32WXGsw0rxsreEF0N+E8WkEu2saX1mBu2tWwh/IvGrhuKuxBd5yJhwqGe+ - SPM48I95EOmSFn8JmFU9YpkTATvFWkU9mzAmDC3wbfiVZxKYvk40GpBo+KLqyQhyqxCfFoutXgq7p - mIVDFLlg==; -Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) - by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xk-000NIb-1G - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:53 +0000 -Received: by mail-wm1-x335.google.com with SMTP id - g39-20020a05600c4ca700b003a03ac7d540so11170913wmp.3 - for ; - Wed, 06 Jul 2022 02:04:47 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=k3IddiKdhwAn8qAKW9Ise9jrX8X5WN4qU+7hTXJ6Zgw=; - b=7WjXF0GDN3xQ0v+bTFX4uu+yaqnM4EnQeUBwb7RwOzEs/j5dN72bx//ztFHVFy/4E8 - xSuCBWyjezvO3ycJmIWMK9bJGhp3izvzS2iI0FkT3RF+J3mQmDsQCrRqbZ5r/xoQge7z - qpfKJUjbsxtLF1eaovFYMynQlGHwU958LyS/+7x8jGjpifz7GaWmmtCD5cFe5m1ffwgF - pHQu+NxzNhpKhDU2ssO/SMkigYVPusNTedTH7ynIckXwAUZ13BiHErMm2hjZaw16a6p6 - C3RIEg2QO2qu00vzW0FoDSzLhfrUugFqAeT7Jqs5ErV7FdDjYFWZV5lwbJAsnw6d9CcP - l72g== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=k3IddiKdhwAn8qAKW9Ise9jrX8X5WN4qU+7hTXJ6Zgw=; - b=JOP+pZTntCStnTc5/kYk/nh3j4xLWw52t8I6x4pDeEb/icvi0+8UDOM3vZag3rD10i - qrfefPluptAbEavlZhOeQg0A7+pCmFTNP+BtpWXF8/UjdHOFOXsc706rfwmLYAnf/Y7E - Pks2u4vcpp3SRRZIOeunMqUqQUPHHQahtPu8Di3+5ZYhT2EOg1+fsMYDXafhRkiDuFOV - qlyyT/o4TXP7pPDSvjj8UZPZTk8T2GELQEciAs8Up0JPvTBkJxbl0B+056QgAOk+AY6t - /dh2nrZpTiqDCR7QMjb6O/cxHbz4aeITtHcwTrisM3OONXDK73VkG0IdRsvIQsu+5DFF - tQ+g== -X-Gm-Message-State: AJIora/gKlqVuVGfMCkYj9lA/SfZWi0S7gOGnLb8ZTLIalgYsRvkK+q2 - rweIeD+95R3in4p7Ul+2Wk3j6g== -X-Google-Smtp-Source: - AGRyM1vVHbQnK9eVYA/FZEipQU6Dk9G2Sv3HQTRjOv3M84zMVuw2s0ZmgNF9e6cuHsyrf+ErO6mnKA== -X-Received: by 2002:a05:600c:a18d:b0:3a0:2c9a:b3de with SMTP id - id13-20020a05600ca18d00b003a02c9ab3demr40211045wmb.147.1657098286534; - Wed, 06 Jul 2022 02:04:46 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.45 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:46 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 13/33] crypto: rockchip: introduce PM -Date: Wed, 6 Jul 2022 09:03:52 +0000 -Message-Id: <20220706090412.806101-14-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_100449_454176_07561F5C -X-CRM114-Status: GOOD ( 19.29 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -Add runtime PM support for rockchip crypto. - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.c | 51 ++++++++++++++++++- - drivers/crypto/rockchip/rk3288_crypto.h | 1 + - drivers/crypto/rockchip/rk3288_crypto_ahash.c | 10 ++++ - .../crypto/rockchip/rk3288_crypto_skcipher.c | 9 ++++ - 4 files changed, 69 insertions(+), 2 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index 3e1b4f3b2422..d9258b9e71b3 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.c -+++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -65,6 +65,48 @@ static void rk_crypto_disable_clk(struct rk_crypto_info *dev) - clk_disable_unprepare(dev->sclk); - } - -+/* -+ * Power management strategy: The device is suspended unless a TFM exists for -+ * one of the algorithms proposed by this driver. -+ */ -+static int rk_crypto_pm_suspend(struct device *dev) -+{ -+ struct rk_crypto_info *rkdev = dev_get_drvdata(dev); -+ -+ rk_crypto_disable_clk(rkdev); -+ return 0; -+} -+ -+static int rk_crypto_pm_resume(struct device *dev) -+{ -+ struct rk_crypto_info *rkdev = dev_get_drvdata(dev); -+ -+ return rk_crypto_enable_clk(rkdev); -+} -+ -+static const struct dev_pm_ops rk_crypto_pm_ops = { -+ SET_RUNTIME_PM_OPS(rk_crypto_pm_suspend, rk_crypto_pm_resume, NULL) -+}; -+ -+static int rk_crypto_pm_init(struct rk_crypto_info *rkdev) -+{ -+ int err; -+ -+ pm_runtime_use_autosuspend(rkdev->dev); -+ pm_runtime_set_autosuspend_delay(rkdev->dev, 2000); -+ -+ err = pm_runtime_set_suspended(rkdev->dev); -+ if (err) -+ return err; -+ pm_runtime_enable(rkdev->dev); -+ return err; -+} -+ -+static void rk_crypto_pm_exit(struct rk_crypto_info *rkdev) -+{ -+ pm_runtime_disable(rkdev->dev); -+} -+ - static irqreturn_t rk_crypto_irq_handle(int irq, void *dev_id) - { - struct rk_crypto_info *dev = platform_get_drvdata(dev_id); -@@ -273,7 +315,9 @@ static int rk_crypto_probe(struct platform_device *pdev) - crypto_engine_start(crypto_info->engine); - init_completion(&crypto_info->complete); - -- rk_crypto_enable_clk(crypto_info); -+ err = rk_crypto_pm_init(crypto_info); -+ if (err) -+ goto err_pm; - - err = rk_crypto_register(crypto_info); - if (err) { -@@ -294,6 +338,8 @@ static int rk_crypto_probe(struct platform_device *pdev) - return 0; - - err_register_alg: -+ rk_crypto_pm_exit(crypto_info); -+err_pm: - crypto_engine_exit(crypto_info->engine); - err_crypto: - dev_err(dev, "Crypto Accelerator not successfully registered\n"); -@@ -308,7 +354,7 @@ static int rk_crypto_remove(struct platform_device *pdev) - debugfs_remove_recursive(crypto_tmp->dbgfs_dir); - #endif - rk_crypto_unregister(); -- rk_crypto_disable_clk(crypto_tmp); -+ rk_crypto_pm_exit(crypto_tmp); - crypto_engine_exit(crypto_tmp->engine); - return 0; - } -@@ -318,6 +364,7 @@ static struct platform_driver crypto_driver = { - .remove = rk_crypto_remove, - .driver = { - .name = "rk3288-crypto", -+ .pm = &rk_crypto_pm_ops, - .of_match_table = crypto_of_id_table, - }, - }; -diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h -index 945a8184bbad..ddbb9246ce16 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.h -+++ b/drivers/crypto/rockchip/rk3288_crypto.h -@@ -9,6 +9,7 @@ - #include - #include - #include -+#include - #include - #include - #include -diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -index 8856c6226be6..137013bd4410 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -@@ -328,6 +328,7 @@ static int rk_cra_hash_init(struct crypto_tfm *tfm) - struct ahash_alg *alg = __crypto_ahash_alg(tfm->__crt_alg); - - const char *alg_name = crypto_tfm_alg_name(tfm); -+ int err; - - algt = container_of(alg, struct rk_crypto_tmp, alg.hash); - -@@ -349,7 +350,15 @@ static int rk_cra_hash_init(struct crypto_tfm *tfm) - tctx->enginectx.op.prepare_request = rk_hash_prepare; - tctx->enginectx.op.unprepare_request = rk_hash_unprepare; - -+ err = pm_runtime_resume_and_get(tctx->dev->dev); -+ if (err < 0) -+ goto error_pm; -+ - return 0; -+error_pm: -+ crypto_free_ahash(tctx->fallback_tfm); -+ -+ return err; - } - - static void rk_cra_hash_exit(struct crypto_tfm *tfm) -@@ -357,6 +366,7 @@ static void rk_cra_hash_exit(struct crypto_tfm *tfm) - struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm); - - crypto_free_ahash(tctx->fallback_tfm); -+ pm_runtime_put_autosuspend(tctx->dev->dev); - } - - struct rk_crypto_tmp rk_ahash_sha1 = { -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index 91b8a4c574da..3bdb304aa794 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -454,6 +454,7 @@ static int rk_ablk_init_tfm(struct crypto_skcipher *tfm) - struct skcipher_alg *alg = crypto_skcipher_alg(tfm); - const char *name = crypto_tfm_alg_name(&tfm->base); - struct rk_crypto_tmp *algt; -+ int err; - - algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); - -@@ -471,7 +472,14 @@ static int rk_ablk_init_tfm(struct crypto_skcipher *tfm) - - ctx->enginectx.op.do_one_request = rk_cipher_run; - -+ err = pm_runtime_resume_and_get(ctx->dev->dev); -+ if (err < 0) -+ goto error_pm; -+ - return 0; -+error_pm: -+ crypto_free_skcipher(ctx->fallback_tfm); -+ return err; - } - - static void rk_ablk_exit_tfm(struct crypto_skcipher *tfm) -@@ -480,6 +488,7 @@ static void rk_ablk_exit_tfm(struct crypto_skcipher *tfm) - - memzero_explicit(ctx->key, ctx->keylen); - crypto_free_skcipher(ctx->fallback_tfm); -+ pm_runtime_put_autosuspend(ctx->dev->dev); - } - - struct rk_crypto_tmp rk_ecb_aes_alg = { - -From patchwork Wed Jul 6 09:03:53 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907942 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 1E255CCA473 - for ; - Wed, 6 Jul 2022 10:29:46 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=voU5h/FuI3C+67r1jok2GsZFu4+IIKOgHse04Z2UrM0=; b=UmrK6q2n45papb - ucAcicx2R2bcIoguj/3J4qVQtFL/LNclC4U9GY4lwP/DQ/5O5duKlmZMuNhDaABtCjoTjmv1x/LtM - vz3B301u3MrLjCIKu0/oFlJbbYlmjeJhFIHxhiYLxkmUkfCfEO1Fjf7+x7q5lccY4z9X94D9pHntV - mQGHwiFi7AO6T+mgiRW6HLkcg6c8MXwRok1cOmz822X7fnpDnGU6KlrTvg32crW/5eucKIV9ufeOg - 5pl5FU2X/orIQtcFmAoUk5kFI+vnE1TNHibD/CXTs9hgiCFK66YohBD9oJX5AvwTEPz/b+sW84/VH - bz+CnQCl2eUxXZiYyGTA==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92Hi-008VsX-Rs; Wed, 06 Jul 2022 10:29:30 +0000 -Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xk-007bjT-Ds - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:50 +0000 -Received: by mail-wr1-x42e.google.com with SMTP id a5so6365318wrx.12 - for ; - Wed, 06 Jul 2022 02:04:48 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=5JnoAw4X1z7bCscIjsjfjSMoE54Bwt7ulA7ZsyJ5jyg=; - b=xr0FpK5cwnCb0WOaO6y8mE+TkKYS/kzREEXHsfMULEMhvECHCj/xpm3tcmXurmGbP4 - 67CBaXwsSyy+HadNjaLE5tn18Kzcs3ftlVqzg9UtTI5eBN1Cain3QkeuoXt5au1BDgvf - MAq3p1njGNYdEFTmPZHhMK0640KejDHqEL7UEnnf9NjwomqWvcL3ZuYANJ19p7Br1+ye - ao3UHr0Kfd3ChdaGisMDX89uwzJ7kvTjL10Wfyp/UliCxYV6AIxufOjfOkGgWk9+le/A - r7leP/Z9IP7eeTX0+oyNpWOKy68v5TIWjBRSpNKNpM0VQZidMvoyC0xuzttKj65VcJa2 - sPOQ== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=5JnoAw4X1z7bCscIjsjfjSMoE54Bwt7ulA7ZsyJ5jyg=; - b=LVSQjPxU/RAMmwNII/T2Z2riJ4rGiyTnNzX9ldLmBdXBF4UC+tUN1G8wVh+JbjRfK6 - Hztac8O3X7Y7r80vWpVZB6A/Tzn37wQfh40lndznc50laAwT11uIVa3I07nV9SQhdY+8 - MHpUd3xQTpjS1TCaf1sMxiodUjKzZWgSLq+9Kgw9qSfVoCkiKOk2YHQhneSTjQ8ec9cD - 2XWubGgjszWaWyCQSFRVrt60j2vvIkmBUCw/xyROT3NqYSxdf1vyTQFqlodHxNGohqBB - mdlcCPXVpikTowaMF/Ta1eV/2gv1+ic60JL1Z/YSDsa0pBKyqftsaDgfgK2fdc9baTHo - qhcg== -X-Gm-Message-State: AJIora9xIZBh+5truEwGLj70asnfb69WIur1duCpOqXOLE4dBd8vchOr - Kz7+zrZYoenG4GbXYGQao8jLwg== -X-Google-Smtp-Source: - AGRyM1sm1kYLskwNqIGQfOuVHXIP8ExmBLLxMmvsSYCpN0ZkgD54v+VH1c74YJg19nKmo4OTTKjbow== -X-Received: by 2002:a05:6000:69d:b0:21a:395e:572c with SMTP id - bo29-20020a056000069d00b0021a395e572cmr35341384wrb.559.1657098287952; - Wed, 06 Jul 2022 02:04:47 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.46 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:47 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 14/33] crypto: rockchip: handle reset also in PM -Date: Wed, 6 Jul 2022 09:03:53 +0000 -Message-Id: <20220706090412.806101-15-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020448_521285_A18D28EB -X-CRM114-Status: GOOD ( 14.27 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -reset could be handled by PM functions. -We keep the initial reset pulse to be sure the hw is a know device state -after probe. - -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.c | 22 ++++++++++------------ - 1 file changed, 10 insertions(+), 12 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index d9258b9e71b3..399829ef92e0 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.c -+++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -74,14 +74,23 @@ static int rk_crypto_pm_suspend(struct device *dev) - struct rk_crypto_info *rkdev = dev_get_drvdata(dev); - - rk_crypto_disable_clk(rkdev); -+ reset_control_assert(rkdev->rst); -+ - return 0; - } - - static int rk_crypto_pm_resume(struct device *dev) - { - struct rk_crypto_info *rkdev = dev_get_drvdata(dev); -+ int ret; -+ -+ ret = rk_crypto_enable_clk(rkdev); -+ if (ret) -+ return ret; -+ -+ reset_control_deassert(rkdev->rst); -+ return 0; - -- return rk_crypto_enable_clk(rkdev); - } - - static const struct dev_pm_ops rk_crypto_pm_ops = { -@@ -222,13 +231,6 @@ static void rk_crypto_unregister(void) - } - } - --static void rk_crypto_action(void *data) --{ -- struct rk_crypto_info *crypto_info = data; -- -- reset_control_assert(crypto_info->rst); --} -- - static const struct of_device_id crypto_of_id_table[] = { - { .compatible = "rockchip,rk3288-crypto" }, - {} -@@ -258,10 +260,6 @@ static int rk_crypto_probe(struct platform_device *pdev) - usleep_range(10, 20); - reset_control_deassert(crypto_info->rst); - -- err = devm_add_action_or_reset(dev, rk_crypto_action, crypto_info); -- if (err) -- goto err_crypto; -- - crypto_info->reg = devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(crypto_info->reg)) { - err = PTR_ERR(crypto_info->reg); - -From patchwork Wed Jul 6 09:03:54 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907828 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id C0C79C43334 - for ; - Wed, 6 Jul 2022 09:51:20 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=JjPLQ8ndJQMWudtiG2QquBS/NVK/fk4TyO+tnpdkAQ4=; b=l4SdRa2Q5AXW/2 - XcjqONoMaYPK4ICGmr4Ddeo4GgF5Iz1Ri8ZrETdC7VSbekokmEXdjYQEwFhIWQ86ij1BPCCgV/kij - FQX2kDESwwaMn9Q/qh6h226kR0eC6//yW3PcB6TQz8kHlke0nzFP8x9PlvpuK5JCj6+3Gf0OUfHBZ - 09QFXU/qBXJmxmXyvvhtog3PJkA+geeVOE2W/Ohj4GZyZUyM8PoA5VAvZo4Iu7StyVbFXwHbuF2gQ - ZmkR183xQsW+uB+RGSnwpLggwfcnhT0NgA/j0BW+cPf6KlCqPtAxkODEz+vE5JggV4X3KTnrzg5bG - gRgJV0OB9XbCEtkt4cCw==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91gZ-007wvQ-0o; Wed, 06 Jul 2022 09:51:07 +0000 -Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91Uv-007qGk-Pz - for linux-rockchip@bombadil.infradead.org; Wed, 06 Jul 2022 09:39:05 +0000 -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version - :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: - Content-Type:Content-ID:Content-Description; - bh=UGbdJwhNtYNfg6qIard96SGzNtmQLkXSB3qcyDfr1D0=; b=rAUqpOJIWP7ZgVDcolB69IZ88m - KIVbcRQAuA77G2PQw+H4wNVrNlxmrBYw0pVR7XOEXJf9Uq4vaVp9PxIxYdXwQJqOarJkR8+vfRz2k - 4KsaUn+WyQhzLStFhRWzVcFXd1BZU4Whz3k2mot0AgGJp/fTCv/u8b6aPHZwBOst2xhPYpWK8x7br - NJdE7010Y1bgKZP07Zs5eCb03xDfpluxErGJtaoOSZBBxZHFmn7k3AETV/859U0LYWA8R4D0FknsR - Rccv7hUlXhRYLKNLNOR3mtaxIie2a0zlwCdbzfd9okrANqttwLagvnMM3qJUvb22nLcH76qb8FEN9 - cTX8/kmQ==; -Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) - by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xm-000NJb-QU - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:05:15 +0000 -Received: by mail-wr1-x431.google.com with SMTP id cl1so21070459wrb.4 - for ; - Wed, 06 Jul 2022 02:04:50 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=UGbdJwhNtYNfg6qIard96SGzNtmQLkXSB3qcyDfr1D0=; - b=gm0KhrhBhAvk1tfsnOGMz6wra9Y+oeNBjeba+VWedHQ1UHOgbxpAe4LFPDlUaxPqrs - 8rY3aJf6geSq7/4QDfQac2ydBq8/0UOd9Dg1hB9jTv8DqsQLhGproaiZbYW+8TGZ/KTg - /kUyJsmfSig9d3Pw1cRz7WFr7bDZJ62YOonLu3BpwE7VrewVppQo4QTEaBl8Ee80XnvP - edD55QxtgY54jNehTdtmI3YMApuaxf5olBUlh6AJ4xfrveDlwFDYRXejtm89MgLaIj+Z - TpZmTqBzHpU2xbi5l56oBPcj/KhHrMO8hreMhRkxEV7Sx7/JUZC08F4UCHZWeuvUBr5h - EbzA== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=UGbdJwhNtYNfg6qIard96SGzNtmQLkXSB3qcyDfr1D0=; - b=d5m2KRr3hoDkK/DspijOyWdww7v0NiC+qaagqiILraucWmljt3A6rZfAo5DBIkRjK9 - hjd4M6MISLGFGzV3Ft+Tz0Shypvx/WvoopigayQasfke+bEJVEATfbbu7Irco+V3MX/m - wLqF9GIJec1/fqAWnqxWY7izt36xL4VvTqXDIG4ToZLIn+mKbNRNOLXqew/+gqFKxJdJ - vA1K+N1Ery14KiZH5zqF+2rRDf2x4rEsLW6+bYrSMd2KXAsaVfbKah93MoJzjj4CyVyZ - YgVNB1LkAzTLaAAS24RkUh0UBuo29hvZYTprEChjEK9dAwj7kLjLS3OG103hfJEOTOEC - ZOKA== -X-Gm-Message-State: AJIora9u0hoYPmR1KuUfS+E0tmPovxbvSQHDnwLIjaR6837pYu7Dm5hy - POFx8s9w918HFn6MYRa0sQ9t/Q== -X-Google-Smtp-Source: - AGRyM1sp1cGtTs7HtYrnntFH8WN9VXQNVfvKy2ZfLC7LeqIDohbIK8azWU+UPDvtgEh1Mr//Z+4FxQ== -X-Received: by 2002:adf:db12:0:b0:21b:970b:e882 with SMTP id - s18-20020adfdb12000000b0021b970be882mr37315917wri.6.1657098289008; - Wed, 06 Jul 2022 02:04:49 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.48 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:48 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 15/33] crypto: rockchip: use clk_bulk to simplify clock - management -Date: Wed, 6 Jul 2022 09:03:54 +0000 -Message-Id: <20220706090412.806101-16-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_100452_956876_B8F1F2A5 -X-CRM114-Status: GOOD ( 14.25 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -rk3328 does not have the same clock names than rk3288, instead of using a complex -clock management, let's use clk_bulk to simplify their handling. - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.c | 66 ++++--------------------- - drivers/crypto/rockchip/rk3288_crypto.h | 6 +-- - 2 files changed, 11 insertions(+), 61 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index 399829ef92e0..a635029ac71d 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.c -+++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -22,47 +22,16 @@ static int rk_crypto_enable_clk(struct rk_crypto_info *dev) - { - int err; - -- err = clk_prepare_enable(dev->sclk); -- if (err) { -- dev_err(dev->dev, "[%s:%d], Couldn't enable clock sclk\n", -- __func__, __LINE__); -- goto err_return; -- } -- err = clk_prepare_enable(dev->aclk); -- if (err) { -- dev_err(dev->dev, "[%s:%d], Couldn't enable clock aclk\n", -- __func__, __LINE__); -- goto err_aclk; -- } -- err = clk_prepare_enable(dev->hclk); -- if (err) { -- dev_err(dev->dev, "[%s:%d], Couldn't enable clock hclk\n", -- __func__, __LINE__); -- goto err_hclk; -- } -- err = clk_prepare_enable(dev->dmaclk); -- if (err) { -- dev_err(dev->dev, "[%s:%d], Couldn't enable clock dmaclk\n", -- __func__, __LINE__); -- goto err_dmaclk; -- } -- return err; --err_dmaclk: -- clk_disable_unprepare(dev->hclk); --err_hclk: -- clk_disable_unprepare(dev->aclk); --err_aclk: -- clk_disable_unprepare(dev->sclk); --err_return: -+ err = clk_bulk_prepare_enable(dev->num_clks, dev->clks); -+ if (err) -+ dev_err(dev->dev, "Could not enable clock clks\n"); -+ - return err; - } - - static void rk_crypto_disable_clk(struct rk_crypto_info *dev) - { -- clk_disable_unprepare(dev->dmaclk); -- clk_disable_unprepare(dev->hclk); -- clk_disable_unprepare(dev->aclk); -- clk_disable_unprepare(dev->sclk); -+ clk_bulk_disable_unprepare(dev->num_clks, dev->clks); - } - - /* -@@ -266,27 +235,10 @@ static int rk_crypto_probe(struct platform_device *pdev) - goto err_crypto; - } - -- crypto_info->aclk = devm_clk_get(&pdev->dev, "aclk"); -- if (IS_ERR(crypto_info->aclk)) { -- err = PTR_ERR(crypto_info->aclk); -- goto err_crypto; -- } -- -- crypto_info->hclk = devm_clk_get(&pdev->dev, "hclk"); -- if (IS_ERR(crypto_info->hclk)) { -- err = PTR_ERR(crypto_info->hclk); -- goto err_crypto; -- } -- -- crypto_info->sclk = devm_clk_get(&pdev->dev, "sclk"); -- if (IS_ERR(crypto_info->sclk)) { -- err = PTR_ERR(crypto_info->sclk); -- goto err_crypto; -- } -- -- crypto_info->dmaclk = devm_clk_get(&pdev->dev, "apb_pclk"); -- if (IS_ERR(crypto_info->dmaclk)) { -- err = PTR_ERR(crypto_info->dmaclk); -+ crypto_info->num_clks = devm_clk_bulk_get_all(&pdev->dev, -+ &crypto_info->clks); -+ if (crypto_info->num_clks < 3) { -+ err = -EINVAL; - goto err_crypto; - } - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h -index ddbb9246ce16..28bf09fe1c1d 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.h -+++ b/drivers/crypto/rockchip/rk3288_crypto.h -@@ -190,10 +190,8 @@ - - struct rk_crypto_info { - struct device *dev; -- struct clk *aclk; -- struct clk *hclk; -- struct clk *sclk; -- struct clk *dmaclk; -+ struct clk_bulk_data *clks; -+ int num_clks; - struct reset_control *rst; - void __iomem *reg; - int irq; - -From patchwork Wed Jul 6 09:03:55 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907943 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 82CD1C43334 - for ; - Wed, 6 Jul 2022 10:29:48 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=QD51c4VaC622sHzgs5YuqTYYf2zcsbQDMtyxi5BAb64=; b=XHznmMXfbrmFAL - Ok6OeUc8JJtcqbh4ogVjyFXty/LSqXEQB8itS1BwLMDQJPs0SeD7aFFFXT9FRKMbsTr/SKNxKQMfv - l4GjhYlOIDYFhSw9AthYv9h1nFPa8Fc9LjXQAC5/0QrmEwxVJ7MC4CZNdco3WyWX5/uJTslfHj4Ej - iQYNnMh6KHzXZCXVlG4KFVxL7yEisaAJDXUTUvIcEqBsjsZuIDJlsTAWSlGyjN0h4USaNH5ZKTRKi - UI52cHr8cahIRK7IkKU/6SRZYmc4tlQF3UsaSwkrFD8njjim/lf3QmtYwRDUhtW4pe22JhvV3CkZi - 7b0wfsB5UL1cozrc60/w==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92Hl-008VwZ-GS; Wed, 06 Jul 2022 10:29:33 +0000 -Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xm-007bj1-Cp - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:51 +0000 -Received: by mail-wr1-x42f.google.com with SMTP id d16so14734540wrv.10 - for ; - Wed, 06 Jul 2022 02:04:50 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=QRwoijrMVyavgOhukFjDrHIPhw2Aizqfl4rhNplf9c8=; - b=EbUW1CorL++pA5HZwPVyXI6H8KXbBXQOWYFlcoiY3OJsBDxqinf63l+PavhtEofQAo - W5ftr1cD08Cle/swB280sWtQPz3Biv445WGbK7hStJXcJbOz9fGedSzu8RCp7g5c3g9M - jSSYhf9YXDACW67Yty9sEtXLo7REbXz6KWlh7kadZkKFilPJoloPNyfRXJUEU80sAnNj - vs3lWwjwx51u0xAyJT3JjzzG6IfewPbFTHbbmQIFuKMeB/dBz+ti+h+gaRNVbaZzPR7P - ANktB5poxuBZ1wpftcZabrVA2vcgeVzX3tfT8DtYQ/5Nrq6kDF60QW5/cWpMtLfKfuPk - cRNw== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=QRwoijrMVyavgOhukFjDrHIPhw2Aizqfl4rhNplf9c8=; - b=QlGzUFEOMhm2uVBGmVc19Szuf8bohL4QRAD4CZLgf+UvtKdeN+NRZ6eHv1/Aw0HmGs - IWZ6mPP0Nr5MJuECUok5+IAytTBhe+7orZrbakm2C1dVTDwrG+5Ukwu6Ulnq8yA4Tc/S - myV+gYCQdj+I9Z2n8YtDJvtRbtiCG9qGcy+rcboeUO5izaLlVAx4/PnLozklWbhOWJjp - IOKEs9hQU3hVGQElxYmdGxRRQFQpKzNQqoM6ZxP1Fk4dt7E96CbbOoiY5jE9f8gywP7u - SPW8jrJZv0HeZFVhw0X+1bKqrdTSxKmSuwF2zsVIKF0tuBnmAnl2EZL1/fz2D/pFrcYi - fcTA== -X-Gm-Message-State: AJIora9HreXJq+fMCPzF5UNmf6ppWK/7SJNq3MkrnPpFbBkFyxLhv46W - vur5ashnXZkSNQpG82UvibkBfAKYINSDYw== -X-Google-Smtp-Source: - AGRyM1uHRACL/yhNWelXRoGTrppw3+XTWYAI6/alcnOGghNjRVtWhGW3TsrfO52e6QKv1JVHStv7sw== -X-Received: by 2002:adf:e8ca:0:b0:21d:4ace:15b1 with SMTP id - k10-20020adfe8ca000000b0021d4ace15b1mr24902118wrn.400.1657098289986; - Wed, 06 Jul 2022 02:04:49 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.49 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:49 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 16/33] crypto: rockchip: add myself as maintainer -Date: Wed, 6 Jul 2022 09:03:55 +0000 -Message-Id: <20220706090412.806101-17-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020450_469095_C76F649A -X-CRM114-Status: UNSURE ( 8.50 ) -X-CRM114-Notice: Please train this message. -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -Nobody is set as maintainer of rockchip crypto, I propose to do it as I -have already reworked lot of this code. - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - MAINTAINERS | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/MAINTAINERS b/MAINTAINERS -index 392e59e9a03e..f8af07fa96fe 100644 ---- a/MAINTAINERS -+++ b/MAINTAINERS -@@ -17449,6 +17449,13 @@ F: Documentation/ABI/*/sysfs-driver-hid-roccat* - F: drivers/hid/hid-roccat* - F: include/linux/hid-roccat* - -+ROCKCHIP CRYPTO DRIVERS -+M: Corentin Labbe -+L: linux-crypto@vger.kernel.org -+S: Maintained -+F: Documentation/devicetree/bindings/crypto/rockchip,rk3288-crypto.yaml -+F: drivers/crypto/rockchip/ -+ - ROCKCHIP I2S TDM DRIVER - M: Nicolas Frattaroli - L: linux-rockchip@lists.infradead.org - -From patchwork Wed Jul 6 09:03:56 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907944 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 3E184C43334 - for ; - Wed, 6 Jul 2022 10:31:43 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=nBdeeIzR0mCBjAbeHq+NQRSc9l2stPfhyQ/lAKob2SU=; b=lcB5qAmn2Qex/E - ss6Ke01Y+14Kv8leHx34/AP2OlsddF8TmLaftnTP1ky/BTGEa/OkHvvnug8CbxI19ClznNFPorXr4 - gcKtgfTy2sBsYToOrPr2HGztsam1Ze5yPPpJSgjhWewvgDl1xd8Q9XOZXi+gMOtMRJXVMVipm8nxW - ixhfQh7jE6ZvKiBUoy+/ZCZvfl9p9LDh4ZhJVcEfEA2JLD5QwNuN9j+CpuBscTZ0LthrklcQqUycY - Buavprr8dOHhYByaAy0wvG7l38tV6BfbpNklYybLs6hjL/f7kKrizQeUYSzVgrcXzVPEdeegQE3Sd - u/lTyONHQpPU59hgW9FA==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92Jf-008Xz6-Lt; Wed, 06 Jul 2022 10:31:31 +0000 -Received: from mail-wr1-f53.google.com ([209.85.221.53]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xq-007bxv-1E - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:55 +0000 -Received: by mail-wr1-f53.google.com with SMTP id q9so21051974wrd.8 - for ; - Wed, 06 Jul 2022 02:04:52 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=cJE9JrNh4HvbwKuPRZxdjE4sOr8yHsnud2KqNuPrCRY=; - b=zu+LLYNfYMR5w2kmcD+VYvYPTp0nJI+jT7tqr9TOwHrQicaqgP6aWYB4SxDRI4kvXK - BTpaTst+Kf2CgpT8EMtXXOLZBdyjJltD/PkJYqQZlYlOt0DDcXWpehZHlYpOR0GPscdp - 2MeE5vjRhXLjQHwfeySb9QQrwi8wJaCfBCzq0tYbMV3hxIVrX1u7f0UgFvrHSwmSpmJO - JsbbVnLZhXi0ihk7Ko9AtHZhwkXPjnk7t7rabDtQouXLzJb5akPuulNS3jm2qpHDr8UB - l298OPf2l8G1OsnQjwvWuGBdVXJkdMmjJtsLQx3KyFAaqQpNNU/uML10kbrGUrtv9uWt - k0oA== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=cJE9JrNh4HvbwKuPRZxdjE4sOr8yHsnud2KqNuPrCRY=; - b=1uAHs8oj1T2TuRZh+5074ksFPoGuDCfLzvdaChfgX7EbYW4SXSxN2Ry6JM2+mxxj3C - BtEQLKDhOzEqfNjtHUAnp95etKQMSqg48cV7rSBtOo2HSG6UNWDiQ/yUfuZaeiFChgRW - 3Hmoj3D2msZb5xshqhuNEJeVryv7IBz+yFOXUVLqg0fq7v2vlltixsLcaqkQzsstSGF8 - 9zPTrSJyjIT+LgelJZpdBvzoJVv2VGVB3ottOiagmOcGhKSzt1DxBEIIaEEpcATFrmR8 - z7aaK2L3RN1RBvvcrGWPmIVNQW/BHKCEHxdgr5qzsY18+AgfXIO/Ma8t8kMDSjdzkSHU - j4Yw== -X-Gm-Message-State: AJIora/wD1LW5NTlxrN3LLgI/U38J7sy5GP7iILQ/doYWoiuiaq6l4Zh - YaeQiaCJL3EfgeRJB2X9ROYQaA== -X-Google-Smtp-Source: - AGRyM1tEKqZlLUJfN0k4nDeQgcEf9DG4eNIDN0NpdWfXaZGKmEatPTHkXZAc5xBm0SQDd3swFPHszA== -X-Received: by 2002:a05:6000:170e:b0:21d:54ac:6ce8 with SMTP id - n14-20020a056000170e00b0021d54ac6ce8mr21083862wrc.43.1657098290976; - Wed, 06 Jul 2022 02:04:50 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.50 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:50 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 17/33] crypto: rockchip: use read_poll_timeout -Date: Wed, 6 Jul 2022 09:03:56 +0000 -Message-Id: <20220706090412.806101-18-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020454_138978_1CB1DFA2 -X-CRM114-Status: GOOD ( 13.42 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -Use read_poll_timeout instead of open coding it. -In the same time, fix indentation of related comment. - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto_ahash.c | 24 +++++++++---------- - 1 file changed, 12 insertions(+), 12 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -index 137013bd4410..1fbab86c9238 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -@@ -10,6 +10,7 @@ - */ - #include - #include -+#include - #include "rk3288_crypto.h" - - /* -@@ -295,18 +296,17 @@ static int rk_hash_run(struct crypto_engine *engine, void *breq) - sg = sg_next(sg); - } - -- /* -- * it will take some time to process date after last dma -- * transmission. -- * -- * waiting time is relative with the last date len, -- * so cannot set a fixed time here. -- * 10us makes system not call here frequently wasting -- * efficiency, and make it response quickly when dma -- * complete. -- */ -- while (!CRYPTO_READ(tctx->dev, RK_CRYPTO_HASH_STS)) -- udelay(10); -+ /* -+ * it will take some time to process date after last dma -+ * transmission. -+ * -+ * waiting time is relative with the last date len, -+ * so cannot set a fixed time here. -+ * 10us makes system not call here frequently wasting -+ * efficiency, and make it response quickly when dma -+ * complete. -+ */ -+ readl_poll_timeout(tctx->dev->reg + RK_CRYPTO_HASH_STS, v, v == 0, 10, 1000); - - for (i = 0; i < crypto_ahash_digestsize(tfm) / 4; i++) { - v = readl(tctx->dev->reg + RK_CRYPTO_HASH_DOUT_0 + i * 4); - -From patchwork Wed Jul 6 09:03:57 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907838 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 74F12C43334 - for ; - Wed, 6 Jul 2022 09:54:25 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=35cUXlheViRc9W5Nnxy/6X2zW+vKmV2DAxlTz3gj9/Q=; b=ui8fSl78N+cajC - Ueg7mYuWhe7UW8xC5xgAGUsGH8g2lQMoFDRE5tzDcke5OfLteD9VVAiuQaQx0VJf1iyx6EOi3077U - ZEtva/GYFdmd7g0r8OHoR4+e7i1d2MRvTZwEGiYaaGMXZxYoZcVA3oZ4kOQ7s4XxjpquZD7wYTi0o - lxeWquSNoYaPl9c9nsrMHiOI7Xv0w7+xsWkaSJSnOVIY6S0ZVJldRXIZlwMjKTmiMqCxlKb3Pa4UK - rG7IxTUVW36e2p/7TWuwsc73s/OgbEqQeNwMpeiDn57qn/mfA4q4Ek7/BDpPQ+qdgexiXIN1vMNmM - rup6IM6zVAwX89IxEDmA==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91jZ-007zM3-IX; Wed, 06 Jul 2022 09:54:13 +0000 -Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91Ux-007qIs-H9 - for linux-rockchip@bombadil.infradead.org; Wed, 06 Jul 2022 09:39:07 +0000 -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version - :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: - Content-Type:Content-ID:Content-Description; - bh=YefmDD2ry3pwsMvqRhlFBCTRYluZUGamucEuHQLyttA=; b=cvjSXvsMxg0UaTYyDEhG6T4SAE - mYgg55qBTUKv6oo1WndMhlL7ah2haHlSZBE0LoZ2NKzjh6nEVoAI879Vg04r7fsmDbg0u3BbPSOCb - vmVF4oa7IjIEuy40pqBOLRVxBfZcZCGik2iM3IT+4ijhZeoaSZQ5lLkmnRLz6u3EwpmMlWZ4PgN2c - iZ3ZvU2heBEyor7YledevVrUDg2PD5kTwldP+rnGAhV3zHd/qrOmSAJZXuMPX6YA5BKPYVAw5/S2V - Kxr37w+tTOeOwspEg7qhJzDyj/mVa3E1UXYQGW21zUHBK7QnMOImfRnm502HBVArJmrPzS6ft+hHm - jpRYubRQ==; -Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) - by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xp-000NKE-0Y - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:05:15 +0000 -Received: by mail-wr1-x431.google.com with SMTP id bk26so5988637wrb.11 - for ; - Wed, 06 Jul 2022 02:04:52 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=YefmDD2ry3pwsMvqRhlFBCTRYluZUGamucEuHQLyttA=; - b=L7ciS97RLhOsfeKYlDlu8uDqvlYHu5nruqE3Z1CfDRdMSrwQf6knk8+pVieatsISs9 - Of0f745OYA404hCWfAOC33y8Pbuj//tIzFKT9F2/QfHQUVaxwVZMuc1GzxHfe+YMU8ny - BQx7w2gmkVRQTqY3MKq88QPjKEt3J4loRHPXZ36XuTbmtcWnrcf2QPeNSlp+WJUPnDSR - UyUTpl7VQhBGKBKHal/IkqvfX8qeyQeUzJ5lcUXnAc1g2VUHq2A+KSJ6AHAWqGG+3lPV - iKP1cFPhrjskyhvHotSobOUfRmL7bKKpio+ustI4Pb/bGnI//Z/2vFkrxfdirWuHiWYa - 2vCg== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=YefmDD2ry3pwsMvqRhlFBCTRYluZUGamucEuHQLyttA=; - b=KwuCzcOlLebb0iGH+5plkQodr2Rf1be9NoZMf0RmsaRwZc52TQ2Hx4SpclfeoAWPWX - g17rh5J11de+AiFaE6D7OKuMmHNRpi8nOzxRZLMXDTR3YU9Xgr0fXPW/A0YHN05Imc9+ - RW4S6WSNUG9nQYt9S3gx7M4sL1rcjDzPV1P9NgFUhO5fxybDeMmSICO7WxSXixSknNd7 - pdgIkTA7Ru0kClGokWYIaKqQ0iw4kI6cNnX8XKEOgzxCco5rw9p+nIbQNULXgGyFKgMI - AXlDqEXXL4A/pZ4jFY0fC1S81qIwNRtMcRH9KG1r3NsVWqfGOzmA4WUaNtyVFMNyE4NV - kc9A== -X-Gm-Message-State: AJIora8VAQF393B7rjiDQoRKPlUSqxOkqsd/CNupgwTwyJme/3xkOqXb - xrSKgoSpON+4OeiaAWIRzjJl/w== -X-Google-Smtp-Source: - AGRyM1tP38P1u6ggCE6YQXSuG57GyJD05zvmba2ae23fJzXhQ4yWNHlDdFkZuypKNNeZIaGw6Pz+fw== -X-Received: by 2002:adf:fb08:0:b0:21b:af81:2ffd with SMTP id - c8-20020adffb08000000b0021baf812ffdmr36962812wrr.685.1657098291934; - Wed, 06 Jul 2022 02:04:51 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.51 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:51 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 18/33] crypto: rockchip: fix style issue -Date: Wed, 6 Jul 2022 09:03:57 +0000 -Message-Id: <20220706090412.806101-19-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_100453_695846_4EB0B659 -X-CRM114-Status: GOOD ( 10.80 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -This patch fixes some warning reported by checkpatch - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto_ahash.c | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -index 1fbab86c9238..fae779d73c84 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -@@ -336,7 +336,7 @@ static int rk_cra_hash_init(struct crypto_tfm *tfm) - - /* for fallback */ - tctx->fallback_tfm = crypto_alloc_ahash(alg_name, 0, -- CRYPTO_ALG_NEED_FALLBACK); -+ CRYPTO_ALG_NEED_FALLBACK); - if (IS_ERR(tctx->fallback_tfm)) { - dev_err(tctx->dev->dev, "Could not load fallback driver.\n"); - return PTR_ERR(tctx->fallback_tfm); -@@ -394,8 +394,8 @@ struct rk_crypto_tmp rk_ahash_sha1 = { - .cra_init = rk_cra_hash_init, - .cra_exit = rk_cra_hash_exit, - .cra_module = THIS_MODULE, -- } -- } -+ } -+ } - } - }; - -@@ -424,8 +424,8 @@ struct rk_crypto_tmp rk_ahash_sha256 = { - .cra_init = rk_cra_hash_init, - .cra_exit = rk_cra_hash_exit, - .cra_module = THIS_MODULE, -- } -- } -+ } -+ } - } - }; - -@@ -454,7 +454,7 @@ struct rk_crypto_tmp rk_ahash_md5 = { - .cra_init = rk_cra_hash_init, - .cra_exit = rk_cra_hash_exit, - .cra_module = THIS_MODULE, -- } - } -+ } - } - }; - -From patchwork Wed Jul 6 09:03:58 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907945 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 4F403C43334 - for ; - Wed, 6 Jul 2022 10:31:47 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=dMscJtp68Bm1C3vm1JdDa8HEdZgAprFBWuiMnOnaWFo=; b=A0n5sssABDVxu8 - YdNTDFSa0Rh3mLyCgdNJPtv6DZjLrYGqZ46ZoeOOYax2vjYF62k9iYSa4OqoFK948C+dJh6jzTiiY - 9r5Uybqc1nMfFqGTYwE2y39UTZqDJSsXKjlaCsF1jEw7qBO0uQW/6rdU3xqZPAvNVJXWY22UEfTUF - aGLF/avEZPRtPYOj+VRX8vNjV/LldZJwPfuCN5T1qD1nWKC1jbR5tmNmPNT7vdoYgIR1RqEEGPsx5 - PCb76PsbFB7sfVSVRdPb87XPY+kGqA72h4miM2dLWd3Z9ZTMgKq6lWARkoQHgi6IZuI8vJnFpIesS - 5Asnt9es+UW3nCUgQvKA==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92Jg-008Y0B-SP; Wed, 06 Jul 2022 10:31:32 +0000 -Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xp-007bo8-At - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:55 +0000 -Received: by mail-wm1-x331.google.com with SMTP id f190so8422757wma.5 - for ; - Wed, 06 Jul 2022 02:04:53 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=V0VQZblY3ilqDl88ksU7sNdmpCxvXcKe3g1VMncWlyM=; - b=e0yxJClSSXUpxDCwHaDOIvRbSdrRABgnEeecbOpuZA4XLCVBkpW4gXL+Wk1VaIiSVL - /yCdOstHJFcouC915CbdVqS7Tx868WNSlZHGvvOdjzkN+8V4Iv948hnotFeMmebif5KJ - jIcJMhNoBQlK/G0WDrkfLcATnb9vue15d+/tkV0tTl32cpb+D5dpTGg0Xj77/c19ZvxH - WPqz6PrZNnUt8yLrm11Rz6kMcDArUEH6QWDdDV8MwpK3kf9HDJ+QTxhEc+4S0/vzEyPb - 3lGPUJhBlXEb7UCNljr3yotpXx9k6NmWl69/f13H4yxs8XCnIHf4nt4r8hN3UbP+WjrO - hs5A== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=V0VQZblY3ilqDl88ksU7sNdmpCxvXcKe3g1VMncWlyM=; - b=JcGMzaRfRfNREmN1JKA2fKrj7ZRq3be0kFFthLinQrcuLo52tti+uUb1xvnhQY2rBh - pdCH0/Vo1WUx64yZ1YYOFaAadv0Azd+XwJ2bJ8ocE7q4ae2yvwM1CQBBJq2kp5ehR4wv - i/nH9e6bhmZZI71vAkxGa7Gs+6A9eOHiCUwv9TOq4EctjbqmijD2YGzee+Gz+wv7SWnq - vwn6rIlJtwv5MLKmL2o1uOXJaOO6P6Mj+RD73Z1PJR64bZtZ51llA636R5DKDXQScTpk - EsZjCKtTXQ4wnRBsOu1iSotY4w9uknzp94SrTqn0TNKPislnzc+0Dc3Xj0lJt1W+SdB3 - K0bw== -X-Gm-Message-State: AJIora9YhH70UeA6yQIIySmNPgmRVCLbZk8LKcjfRykfnWmEb0lKDYFx - pzkqd5B+r9msfWZ8RQMDSdpeOw== -X-Google-Smtp-Source: - AGRyM1vhku6FFRqMSgg0ZToVK+4jD8sS/eXzzi4dV/619Zhx8Ilio+pxWWjXHv62NgKXwOO5OBzU6w== -X-Received: by 2002:a7b:ca54:0:b0:3a0:522c:d0ec with SMTP id - m20-20020a7bca54000000b003a0522cd0ecmr40784122wml.63.1657098292893; - Wed, 06 Jul 2022 02:04:52 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.52 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:52 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 19/33] crypto: rockchip: add support for rk3328 -Date: Wed, 6 Jul 2022 09:03:58 +0000 -Message-Id: <20220706090412.806101-20-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020453_425337_EAF7A955 -X-CRM114-Status: GOOD ( 10.87 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -The rk3328 could be used as-is by the rockchip driver. - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index a635029ac71d..c92559b83f7d 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.c -+++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -202,6 +202,7 @@ static void rk_crypto_unregister(void) - - static const struct of_device_id crypto_of_id_table[] = { - { .compatible = "rockchip,rk3288-crypto" }, -+ { .compatible = "rockchip,rk3328-crypto" }, - {} - }; - MODULE_DEVICE_TABLE(of, crypto_of_id_table); - -From patchwork Wed Jul 6 09:03:59 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907947 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 3918FCCA473 - for ; - Wed, 6 Jul 2022 10:31:49 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=iYFpc/Kmt+gMZIxwyMUVdKUhc0T64WmCLTm1jbbS9JU=; b=LpkhlonJyN8QeU - 4eM1ORLe4d/vZe0KzmguaYAjy62R7zaxHK4jzszECn/J0DcoR5sT4f5FapDgCGpUkX8E8xSF3KtJQ - VulWr7CSKiE8ax5CRoL29ypr6aD0yX5uYDuiGKeFxt+GC9h8Q5ntj7hVZYyfd2BSepfTsIhDBVruZ - EuIt1ovBkNI7oh9qlE/NnkBPiiq+XfQj1Aj8i830SFEfiScH8Ef41M8p2we3ogEo6LFXMZMlfae+q - S0PdF7mVhtZseOrx/qM6QxE2p4LZUToSTmjn6G3RPMEXL+YoQfPGh8Rd+jvOmt3/gL0b2qekpVgJr - krT39yHCnDeQM+oa7+yw==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92Jk-008Y2T-2Y; Wed, 06 Jul 2022 10:31:36 +0000 -Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xq-007bkH-Ev - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:56 +0000 -Received: by mail-wr1-x434.google.com with SMTP id d16so14734818wrv.10 - for ; - Wed, 06 Jul 2022 02:04:54 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=Q4N9p9400PLUtdaZmzB/PKY2HSpZteQvpiDlvRaNw2k=; - b=E/X6MfH5/AkDJTFLrHZF36oWqYZhCgjU+jjYMINuE1GVrVih8A9NRiAFtp9psn0q70 - uN9jmVORb0Mx6yUlYCQq+XWLe/j9Y5uEB2EDRU8zDbIsF0zX7XCZeZKF1H7vLfS7kK3R - vodka19BRoaGx10wVKpN91kAW6Mf2CQ+35ct74F3UpvLCOxp3RRgat7qAUTrl4owUALY - efxfhcszpUwoX0YtnkSpCgDo3D94Ngiu6zRZ4yixMGq9dmlGSJnAsjevU1d3ylb/35ea - 9QWAxZrxCFBJeYQ4eT/Oq8LWuPzXkFfjRLHZ6zBv1M+TfkDOFS8/6bODvpAYrAT+0eUO - OuZw== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=Q4N9p9400PLUtdaZmzB/PKY2HSpZteQvpiDlvRaNw2k=; - b=gTus2CwJaLEEH8BwNxPNd2XLgoQg4z7WI6Bf8UNNmDmWaO8k+I/Jg/fRKD7wF3X6QJ - WrJUCvfL9CV6FnHn7PbPQ2ovqQxo0N29pm9ubOb14IKa5C5dDIxc+GiveJstUz1mU6rQ - B7yTcLULqcwiTyyE08EKGITiT2+NaVL4dfAbFvgMyQMXWsFq5YiVtF0CfM/Blu74tyvp - iBTBKgcGmQf8G8fPPzDuAcCSPBkGhGUo9HQDY5yY/L0Qvm/CT0pFko/lxU8IACANEUqA - VFfHzA4jbrnq+gEEm1Pt0kO/KjAbyfydHcXZpyU24+W0MHjUZbNl/Awk6whbhwOA2iZM - dQ4g== -X-Gm-Message-State: AJIora/j9bD/U+LpHjUWRx6SHzcIeF5ZPL2pDW8wu9ySWFjFCyLDNQMq - n27noCYNA25HGiyoKazdWi0VQA== -X-Google-Smtp-Source: - AGRyM1vfUAg5E5BdkTbwulCrH70p7oxtuPBB3KuCILIlr8VD9qQd7o6EDTHhD+xx14csRNAVLW/4Fg== -X-Received: by 2002:adf:f581:0:b0:21d:1e01:e9b7 with SMTP id - f1-20020adff581000000b0021d1e01e9b7mr34980459wro.529.1657098293916; - Wed, 06 Jul 2022 02:04:53 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.52 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:53 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 20/33] crypto: rockchip: rename ablk functions to cipher -Date: Wed, 6 Jul 2022 09:03:59 +0000 -Message-Id: <20220706090412.806101-21-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020454_577368_B19DAAE5 -X-CRM114-Status: GOOD ( 10.42 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -Some functions have still ablk in their name even if there are -not handling ablk_cipher anymore. -So let's rename them. - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - .../crypto/rockchip/rk3288_crypto_skcipher.c | 32 +++++++++---------- - 1 file changed, 16 insertions(+), 16 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index 3bdb304aa794..d60c206e717d 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -273,7 +273,7 @@ static int rk_des3_ede_cbc_decrypt(struct skcipher_request *req) - return rk_handle_req(dev, req); - } - --static void rk_ablk_hw_init(struct rk_crypto_info *dev, struct skcipher_request *req) -+static void rk_cipher_hw_init(struct rk_crypto_info *dev, struct skcipher_request *req) - { - struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(req); - struct crypto_tfm *tfm = crypto_skcipher_tfm(cipher); -@@ -382,7 +382,7 @@ static int rk_cipher_run(struct crypto_engine *engine, void *async_req) - } - } - err = 0; -- rk_ablk_hw_init(ctx->dev, areq); -+ rk_cipher_hw_init(ctx->dev, areq); - if (ivsize) { - if (ivsize == DES_BLOCK_SIZE) - memcpy_toio(ctx->dev->reg + RK_CRYPTO_TDES_IV_0, ivtouse, ivsize); -@@ -448,7 +448,7 @@ static int rk_cipher_run(struct crypto_engine *engine, void *async_req) - return err; - } - --static int rk_ablk_init_tfm(struct crypto_skcipher *tfm) -+static int rk_cipher_tfm_init(struct crypto_skcipher *tfm) - { - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct skcipher_alg *alg = crypto_skcipher_alg(tfm); -@@ -482,7 +482,7 @@ static int rk_ablk_init_tfm(struct crypto_skcipher *tfm) - return err; - } - --static void rk_ablk_exit_tfm(struct crypto_skcipher *tfm) -+static void rk_cipher_tfm_exit(struct crypto_skcipher *tfm) - { - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - -@@ -503,8 +503,8 @@ struct rk_crypto_tmp rk_ecb_aes_alg = { - .base.cra_alignmask = 0x0f, - .base.cra_module = THIS_MODULE, - -- .init = rk_ablk_init_tfm, -- .exit = rk_ablk_exit_tfm, -+ .init = rk_cipher_tfm_init, -+ .exit = rk_cipher_tfm_exit, - .min_keysize = AES_MIN_KEY_SIZE, - .max_keysize = AES_MAX_KEY_SIZE, - .setkey = rk_aes_setkey, -@@ -525,8 +525,8 @@ struct rk_crypto_tmp rk_cbc_aes_alg = { - .base.cra_alignmask = 0x0f, - .base.cra_module = THIS_MODULE, - -- .init = rk_ablk_init_tfm, -- .exit = rk_ablk_exit_tfm, -+ .init = rk_cipher_tfm_init, -+ .exit = rk_cipher_tfm_exit, - .min_keysize = AES_MIN_KEY_SIZE, - .max_keysize = AES_MAX_KEY_SIZE, - .ivsize = AES_BLOCK_SIZE, -@@ -548,8 +548,8 @@ struct rk_crypto_tmp rk_ecb_des_alg = { - .base.cra_alignmask = 0x07, - .base.cra_module = THIS_MODULE, - -- .init = rk_ablk_init_tfm, -- .exit = rk_ablk_exit_tfm, -+ .init = rk_cipher_tfm_init, -+ .exit = rk_cipher_tfm_exit, - .min_keysize = DES_KEY_SIZE, - .max_keysize = DES_KEY_SIZE, - .setkey = rk_des_setkey, -@@ -570,8 +570,8 @@ struct rk_crypto_tmp rk_cbc_des_alg = { - .base.cra_alignmask = 0x07, - .base.cra_module = THIS_MODULE, - -- .init = rk_ablk_init_tfm, -- .exit = rk_ablk_exit_tfm, -+ .init = rk_cipher_tfm_init, -+ .exit = rk_cipher_tfm_exit, - .min_keysize = DES_KEY_SIZE, - .max_keysize = DES_KEY_SIZE, - .ivsize = DES_BLOCK_SIZE, -@@ -593,8 +593,8 @@ struct rk_crypto_tmp rk_ecb_des3_ede_alg = { - .base.cra_alignmask = 0x07, - .base.cra_module = THIS_MODULE, - -- .init = rk_ablk_init_tfm, -- .exit = rk_ablk_exit_tfm, -+ .init = rk_cipher_tfm_init, -+ .exit = rk_cipher_tfm_exit, - .min_keysize = DES3_EDE_KEY_SIZE, - .max_keysize = DES3_EDE_KEY_SIZE, - .setkey = rk_tdes_setkey, -@@ -615,8 +615,8 @@ struct rk_crypto_tmp rk_cbc_des3_ede_alg = { - .base.cra_alignmask = 0x07, - .base.cra_module = THIS_MODULE, - -- .init = rk_ablk_init_tfm, -- .exit = rk_ablk_exit_tfm, -+ .init = rk_cipher_tfm_init, -+ .exit = rk_cipher_tfm_exit, - .min_keysize = DES3_EDE_KEY_SIZE, - .max_keysize = DES3_EDE_KEY_SIZE, - .ivsize = DES_BLOCK_SIZE, - -From patchwork Wed Jul 6 09:04:00 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907946 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id D121BC433EF - for ; - Wed, 6 Jul 2022 10:31:48 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=OOW0FbIoNTvlR5L+I8vwKfJNgXSZZfcPQNGfVjVjeGk=; b=gdfuyHpr/CPPv8 - fvcvZkzd5eW6lN8eHi7t4qht//9Sd4ABmJXNjGr0XCZO5xTovYwL7gwfh7IUiEpRU9yJLOnryFp6G - Ewtaz/Jn3+4IFpzx4fw/Km8wFmQtX3vXQcnDM7xuxhA1u27kFdzO5b/1xIWkKdEmgWegofcLOUn6e - z8+HZuDPlmaAkqLDOhOwoTWSalm01NCWjURa2oZRYT0XvDxBsRQHFmsQu6zK7hL4pwz42C+msDlw2 - bNjhGZfn4J5gfWEhd57MCED9/UbOw9zTHA7dYpo+emV6KOEh1Z6tdDWTGqcXBSt6mwVGLt/3IFaKb - KPXiNKLbZZL7EYxsVo8A==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92Jl-008Y4k-EE; Wed, 06 Jul 2022 10:31:37 +0000 -Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xr-007bnL-EY - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:57 +0000 -Received: by mail-wm1-x32d.google.com with SMTP id - t17-20020a1c7711000000b003a0434b0af7so8623012wmi.0 - for ; - Wed, 06 Jul 2022 02:04:55 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=cJjKlAvPGNgNOZFjIKeGYWIyXJ/4+hZsDzTA+cA/SLw=; - b=U3AwLBj1g1YQ3JNmcAwcZca/D6p0ZY1ffNhW6Xvx9xIdHIbypj7LpTZ7z4V0josTgO - gkGcDmNHiWQkPxMLoiu8dkpj/wSVxEivmIrV937TIXWGCydZT+Wnfmji8d735oxqPfgn - wGCMFWXjHz2Va20vEMkV5WoXsxwvypctXOg1LoaFQTF/sv7HFq3waQj/6JQp93cFMs5+ - ers0CZiAIcyznmeD2GRVLDnRCSemUEiJnZJHb8pflR+4oVDxeOKvr1P5gPB46Y+t7b22 - eqqqTaNQrbG9CJq0W9qxNESvw6LCuWrYXaFCFjCT+Sn+s6MgQx+OqEBZ0eSR2lU/Ty8S - xJAA== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=cJjKlAvPGNgNOZFjIKeGYWIyXJ/4+hZsDzTA+cA/SLw=; - b=AusDMycohBkW+pStVMdC5sOWzMUwBdaCB8t2NIH02445I9BHeLdXWQtTSfy/b4qat0 - kKExnjrWbeF9Adiw+8LAtLOVmtOYSV+aHyl7wgt02JVOb3STnpqrJNLejLKHRJLSTU3V - 9uPyRaZSDWVDUqYuLq9eaY4K/6P+PXlEHyy5KLH7tT4Pbel9YIsdc3vQifQCKIf/Ght5 - 41YMVhpEzz5pUtx+DIe0qnT3MzUjN7zvlnrZm+ETNCI24b95/jbszfAApeUSgOzBLq3a - DFaT21ClnZvgcA5OY7g47+rsd9S/aNNbBSQSb8WB8BMbMeYVBWl6zM9o5AaxNr0NR/6w - 5pCw== -X-Gm-Message-State: AJIora+enTOHt42l+2NaUgN0dWsSrxqseVZ+itA3coWYPn111g1oC0o7 - CwpLUlV9BdHZ11CfD443s9yYtg== -X-Google-Smtp-Source: - AGRyM1tPE5BGonvjBbfeMeK14L4zurk2Dxeu0LauZuOywqFsXgqlODuGNOxklTBDSWSObXD9grko0g== -X-Received: by 2002:a05:600c:8a9:b0:3a0:3d78:21a4 with SMTP id - l41-20020a05600c08a900b003a03d7821a4mr40585392wmp.112.1657098294939; - Wed, 06 Jul 2022 02:04:54 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.54 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:54 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 21/33] crypto: rockchip: rework rk_handle_req function -Date: Wed, 6 Jul 2022 09:04:00 +0000 -Message-Id: <20220706090412.806101-22-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020455_543862_49A64B88 -X-CRM114-Status: GOOD ( 10.60 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -This patch rework the rk_handle_req(), simply removing the -rk_crypto_info parameter. - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - .../crypto/rockchip/rk3288_crypto_skcipher.c | 68 +++++-------------- - 1 file changed, 17 insertions(+), 51 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index d60c206e717d..3187869c4c68 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -82,10 +82,12 @@ static int rk_cipher_fallback(struct skcipher_request *areq) - return err; - } - --static int rk_handle_req(struct rk_crypto_info *dev, -- struct skcipher_request *req) -+static int rk_cipher_handle_req(struct skcipher_request *req) - { -- struct crypto_engine *engine = dev->engine; -+ struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -+ struct rk_cipher_ctx *tctx = crypto_skcipher_ctx(tfm); -+ struct rk_crypto_info *rkc = tctx->dev; -+ struct crypto_engine *engine = rkc->engine; - - if (rk_cipher_need_fallback(req)) - return rk_cipher_fallback(req); -@@ -142,135 +144,99 @@ static int rk_tdes_setkey(struct crypto_skcipher *cipher, - - static int rk_aes_ecb_encrypt(struct skcipher_request *req) - { -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_crypto_info *dev = ctx->dev; - - rctx->mode = RK_CRYPTO_AES_ECB_MODE; -- return rk_handle_req(dev, req); -+ return rk_cipher_handle_req(req); - } - - static int rk_aes_ecb_decrypt(struct skcipher_request *req) - { -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_crypto_info *dev = ctx->dev; - - rctx->mode = RK_CRYPTO_AES_ECB_MODE | RK_CRYPTO_DEC; -- return rk_handle_req(dev, req); -+ return rk_cipher_handle_req(req); - } - - static int rk_aes_cbc_encrypt(struct skcipher_request *req) - { -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_crypto_info *dev = ctx->dev; - - rctx->mode = RK_CRYPTO_AES_CBC_MODE; -- return rk_handle_req(dev, req); -+ return rk_cipher_handle_req(req); - } - - static int rk_aes_cbc_decrypt(struct skcipher_request *req) - { -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_crypto_info *dev = ctx->dev; - - rctx->mode = RK_CRYPTO_AES_CBC_MODE | RK_CRYPTO_DEC; -- return rk_handle_req(dev, req); -+ return rk_cipher_handle_req(req); - } - - static int rk_des_ecb_encrypt(struct skcipher_request *req) - { -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_crypto_info *dev = ctx->dev; - - rctx->mode = 0; -- return rk_handle_req(dev, req); -+ return rk_cipher_handle_req(req); - } - - static int rk_des_ecb_decrypt(struct skcipher_request *req) - { -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_crypto_info *dev = ctx->dev; - - rctx->mode = RK_CRYPTO_DEC; -- return rk_handle_req(dev, req); -+ return rk_cipher_handle_req(req); - } - - static int rk_des_cbc_encrypt(struct skcipher_request *req) - { -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_crypto_info *dev = ctx->dev; - - rctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC; -- return rk_handle_req(dev, req); -+ return rk_cipher_handle_req(req); - } - - static int rk_des_cbc_decrypt(struct skcipher_request *req) - { -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_crypto_info *dev = ctx->dev; - - rctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC | RK_CRYPTO_DEC; -- return rk_handle_req(dev, req); -+ return rk_cipher_handle_req(req); - } - - static int rk_des3_ede_ecb_encrypt(struct skcipher_request *req) - { -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_crypto_info *dev = ctx->dev; - - rctx->mode = RK_CRYPTO_TDES_SELECT; -- return rk_handle_req(dev, req); -+ return rk_cipher_handle_req(req); - } - - static int rk_des3_ede_ecb_decrypt(struct skcipher_request *req) - { -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_crypto_info *dev = ctx->dev; - - rctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_DEC; -- return rk_handle_req(dev, req); -+ return rk_cipher_handle_req(req); - } - - static int rk_des3_ede_cbc_encrypt(struct skcipher_request *req) - { -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_crypto_info *dev = ctx->dev; - - rctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC; -- return rk_handle_req(dev, req); -+ return rk_cipher_handle_req(req); - } - - static int rk_des3_ede_cbc_decrypt(struct skcipher_request *req) - { -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_crypto_info *dev = ctx->dev; - - rctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC | - RK_CRYPTO_DEC; -- return rk_handle_req(dev, req); -+ return rk_cipher_handle_req(req); - } - - static void rk_cipher_hw_init(struct rk_crypto_info *dev, struct skcipher_request *req) - -From patchwork Wed Jul 6 09:04:01 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907951 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 5569EC433EF - for ; - Wed, 6 Jul 2022 10:33:14 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=4ajE7yFRUv8gRJHWE4m7wprHzCQaaZvjyu5bVUMcwJc=; b=SR4veGpiE5XHut - KUoIoYTvdfBConOpQH3K3hgw+Kw/UfF/dkREq+00m59sZ4p86MctM1h1dMH3hm/0GIIp26EpHTYV4 - uKL1tNsoOGVypVqlP4NuIuuENNCR3W1W3TvAscgSRHR8vFIclBKjb2V7oFOAKjqnQVEt2jGL4sYnt - nuVc8B/kr2PAlENGHrnEzhjzQ5cHcwab9wLsudcLx7Cnp5kFVCNr7tQSdEHgWSIFKAeBUDogHysoy - dwg9Dp+4Ibp8gwUihesxpJ0k6KoITCWnYxyvYp9poJRPVrva03c6lSlUWv+irJRmf4rIM3kLaLhGp - JHvC5xcw/NL7S3KNqBlw==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92L5-008ZIo-J7; Wed, 06 Jul 2022 10:32:59 +0000 -Received: from casper.infradead.org ([90.155.50.34]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xz-007c4V-7w - for linux-rockchip@bombadil.infradead.org; Wed, 06 Jul 2022 09:05:03 +0000 -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: - References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: - Content-Type:Content-ID:Content-Description; - bh=ByxNWxvo3Qxto7Y23zUxo9nNTozJns03C6t8K9dbr0w=; b=rG4UGUGwzW7OAMVbFhpBZPNsnP - DwpCUB4NS3HhaDnvWBpjI67BsaxeiaxNfqf5UZcgZsOQKXfciIN01pT30kMG7/UDonbnyz91KgjZ8 - KDeq+plhqHjxoMiUCDikUwpPwbt8VhdQQ9+jGWTxSBMTkjIZgqxfBIDw9g6qyPzkpCnvkaJN6ktGh - emcpd8e+3vigfs4dyv9OtfGOKZ6PAUE4cYsLUBHZyLyv+Lj2/Jzdv6b0J6fSUl5JKjlXQebjF4m3g - EJUjkr7ZoE2BvqOnbUuUeBNJmp8opUkweAGQ7ODST/PzFVtBiiCW6tz2ZHVP/mSZXGG4m4rYenJZQ - tCnlZBHQ==; -Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) - by casper.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xu-001MNB-Gb - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:05:00 +0000 -Received: by mail-wm1-x32d.google.com with SMTP id - g39-20020a05600c4ca700b003a03ac7d540so11171180wmp.3 - for ; - Wed, 06 Jul 2022 02:04:57 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=ByxNWxvo3Qxto7Y23zUxo9nNTozJns03C6t8K9dbr0w=; - b=Uj6A4VQMorRDpukAwKo3mZYizpLwaXmXw3lMifLZfkNvlTsXxaOCOXSNIwnm7GfcHL - 6ob6kzQY/T//oE3PC27+bx2vNVultePS61OJLn36+bTtfkh8ZiU24sO9+IS2hSGjtPXv - BmNJpmexSVy7EUqT9sXD90kSeF2GcAfKCo8ZR1+vXqwuV4mYpMRBtj8DOha/L6H4FVVr - hO2ljaI/Q+d6f/BKhElVy7LS9GvB5L8uKJDWuyIZM86KPO2R5DeiOo8yLI2YfD8PkiA9 - kCMdnW66aFFNLs5sRF6rI6sg6Pg78NTJj6ELBnzzo9qa9jTzbdTw22P24VKRDM5Jnq+H - lLnw== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=ByxNWxvo3Qxto7Y23zUxo9nNTozJns03C6t8K9dbr0w=; - b=m1pEuoW95u1racgYsidEbf7EOfLILErT9D9bDJyHRgoCqokblOgClDdzRqHF9pGOsd - sNyiOemPsZCMuQnJyc85/WsaQWCG97CM9pavEho4D3tPFByQGJdFNtzjpZcDVVDwTE6Z - 7wkjw5Qrq/6wqGEoUq5f/T88LI+5fOkUYihE3KRtk2rLIigZKIWuGpP7jHRdo3QXcTET - QnUCuf10ZPBzi6tln1kIafVn2iL1LSZmyyAn6NKXjOS79Hw//cIoQd3TSlr91ALDKB05 - R5dioh9eteE/Ign6ufWRT6gvIE9GQQD4SUfQjBydaUsh1S8Jdj5mZao/0/aoxEZpMIMt - o/vg== -X-Gm-Message-State: AJIora+3IM8yQUl8K01/F8pR14kqVdbfKDnIV0CczPyy8Tgz8Gj8wVbG - aiOvR1bDdG50C5o0hBqu/rCrpw== -X-Google-Smtp-Source: - AGRyM1sbbL9OFOe0vMUyFtYyzwsesNGIbCCct5C0zRev6g+zKLrjo/jGIAovgbyi6B6L3LuGTV9hgQ== -X-Received: by 2002:a05:600c:500a:b0:3a1:8c53:9bd5 with SMTP id - n10-20020a05600c500a00b003a18c539bd5mr29827788wmr.82.1657098295936; - Wed, 06 Jul 2022 02:04:55 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.55 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:55 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 22/33] crypto: rockchip: use a rk_crypto_info variable - instead of lot of indirection -Date: Wed, 6 Jul 2022 09:04:01 +0000 -Message-Id: <20220706090412.806101-23-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_100458_575807_3BF16CDC -X-CRM114-Status: GOOD ( 12.34 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -Instead of using lot of ctx->dev->xx indirections, use an intermediate -variable for rk_crypto_info. -This will help later, when 2 different rk_crypto_info would be used. - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto_ahash.c | 23 +++++++----- - .../crypto/rockchip/rk3288_crypto_skcipher.c | 37 ++++++++++--------- - 2 files changed, 32 insertions(+), 28 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -index fae779d73c84..636dbcde0ca3 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -@@ -226,9 +226,10 @@ static int rk_hash_prepare(struct crypto_engine *engine, void *breq) - struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); - struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); - struct rk_ahash_ctx *tctx = crypto_ahash_ctx(tfm); -+ struct rk_crypto_info *rkc = tctx->dev; - int ret; - -- ret = dma_map_sg(tctx->dev->dev, areq->src, sg_nents(areq->src), DMA_TO_DEVICE); -+ ret = dma_map_sg(rkc->dev, areq->src, sg_nents(areq->src), DMA_TO_DEVICE); - if (ret <= 0) - return -EINVAL; - -@@ -243,8 +244,9 @@ static int rk_hash_unprepare(struct crypto_engine *engine, void *breq) - struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); - struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); - struct rk_ahash_ctx *tctx = crypto_ahash_ctx(tfm); -+ struct rk_crypto_info *rkc = tctx->dev; - -- dma_unmap_sg(tctx->dev->dev, areq->src, rctx->nrsg, DMA_TO_DEVICE); -+ dma_unmap_sg(rkc->dev, areq->src, rctx->nrsg, DMA_TO_DEVICE); - return 0; - } - -@@ -257,6 +259,7 @@ static int rk_hash_run(struct crypto_engine *engine, void *breq) - struct ahash_alg *alg = __crypto_ahash_alg(tfm->base.__crt_alg); - struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash); - struct scatterlist *sg = areq->src; -+ struct rk_crypto_info *rkc = tctx->dev; - int err = 0; - int i; - u32 v; -@@ -283,13 +286,13 @@ static int rk_hash_run(struct crypto_engine *engine, void *breq) - rk_ahash_reg_init(areq); - - while (sg) { -- reinit_completion(&tctx->dev->complete); -- tctx->dev->status = 0; -- crypto_ahash_dma_start(tctx->dev, sg); -- wait_for_completion_interruptible_timeout(&tctx->dev->complete, -+ reinit_completion(&rkc->complete); -+ rkc->status = 0; -+ crypto_ahash_dma_start(rkc, sg); -+ wait_for_completion_interruptible_timeout(&rkc->complete, - msecs_to_jiffies(2000)); -- if (!tctx->dev->status) { -- dev_err(tctx->dev->dev, "DMA timeout\n"); -+ if (!rkc->status) { -+ dev_err(rkc->dev, "DMA timeout\n"); - err = -EFAULT; - goto theend; - } -@@ -306,10 +309,10 @@ static int rk_hash_run(struct crypto_engine *engine, void *breq) - * efficiency, and make it response quickly when dma - * complete. - */ -- readl_poll_timeout(tctx->dev->reg + RK_CRYPTO_HASH_STS, v, v == 0, 10, 1000); -+ readl_poll_timeout(rkc->reg + RK_CRYPTO_HASH_STS, v, v == 0, 10, 1000); - - for (i = 0; i < crypto_ahash_digestsize(tfm) / 4; i++) { -- v = readl(tctx->dev->reg + RK_CRYPTO_HASH_DOUT_0 + i * 4); -+ v = readl(rkc->reg + RK_CRYPTO_HASH_DOUT_0 + i * 4); - put_unaligned_le32(v, areq->result + i * 4); - } - -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index 3187869c4c68..6a1bea98fded 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -303,6 +303,7 @@ static int rk_cipher_run(struct crypto_engine *engine, void *async_req) - unsigned int todo; - struct skcipher_alg *alg = crypto_skcipher_alg(tfm); - struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); -+ struct rk_crypto_info *rkc = ctx->dev; - - algt->stat_req++; - -@@ -330,49 +331,49 @@ static int rk_cipher_run(struct crypto_engine *engine, void *async_req) - scatterwalk_map_and_copy(biv, sgs, offset, ivsize, 0); - } - if (sgs == sgd) { -- err = dma_map_sg(ctx->dev->dev, sgs, 1, DMA_BIDIRECTIONAL); -+ err = dma_map_sg(rkc->dev, sgs, 1, DMA_BIDIRECTIONAL); - if (err <= 0) { - err = -EINVAL; - goto theend_iv; - } - } else { -- err = dma_map_sg(ctx->dev->dev, sgs, 1, DMA_TO_DEVICE); -+ err = dma_map_sg(rkc->dev, sgs, 1, DMA_TO_DEVICE); - if (err <= 0) { - err = -EINVAL; - goto theend_iv; - } -- err = dma_map_sg(ctx->dev->dev, sgd, 1, DMA_FROM_DEVICE); -+ err = dma_map_sg(rkc->dev, sgd, 1, DMA_FROM_DEVICE); - if (err <= 0) { - err = -EINVAL; - goto theend_sgs; - } - } - err = 0; -- rk_cipher_hw_init(ctx->dev, areq); -+ rk_cipher_hw_init(rkc, areq); - if (ivsize) { - if (ivsize == DES_BLOCK_SIZE) -- memcpy_toio(ctx->dev->reg + RK_CRYPTO_TDES_IV_0, ivtouse, ivsize); -+ memcpy_toio(rkc->reg + RK_CRYPTO_TDES_IV_0, ivtouse, ivsize); - else -- memcpy_toio(ctx->dev->reg + RK_CRYPTO_AES_IV_0, ivtouse, ivsize); -+ memcpy_toio(rkc->reg + RK_CRYPTO_AES_IV_0, ivtouse, ivsize); - } -- reinit_completion(&ctx->dev->complete); -- ctx->dev->status = 0; -+ reinit_completion(&rkc->complete); -+ rkc->status = 0; - - todo = min(sg_dma_len(sgs), len); - len -= todo; -- crypto_dma_start(ctx->dev, sgs, sgd, todo / 4); -- wait_for_completion_interruptible_timeout(&ctx->dev->complete, -+ crypto_dma_start(rkc, sgs, sgd, todo / 4); -+ wait_for_completion_interruptible_timeout(&rkc->complete, - msecs_to_jiffies(2000)); -- if (!ctx->dev->status) { -- dev_err(ctx->dev->dev, "DMA timeout\n"); -+ if (!rkc->status) { -+ dev_err(rkc->dev, "DMA timeout\n"); - err = -EFAULT; - goto theend; - } - if (sgs == sgd) { -- dma_unmap_sg(ctx->dev->dev, sgs, 1, DMA_BIDIRECTIONAL); -+ dma_unmap_sg(rkc->dev, sgs, 1, DMA_BIDIRECTIONAL); - } else { -- dma_unmap_sg(ctx->dev->dev, sgs, 1, DMA_TO_DEVICE); -- dma_unmap_sg(ctx->dev->dev, sgd, 1, DMA_FROM_DEVICE); -+ dma_unmap_sg(rkc->dev, sgs, 1, DMA_TO_DEVICE); -+ dma_unmap_sg(rkc->dev, sgd, 1, DMA_FROM_DEVICE); - } - if (rctx->mode & RK_CRYPTO_DEC) { - memcpy(iv, biv, ivsize); -@@ -405,10 +406,10 @@ static int rk_cipher_run(struct crypto_engine *engine, void *async_req) - - theend_sgs: - if (sgs == sgd) { -- dma_unmap_sg(ctx->dev->dev, sgs, 1, DMA_BIDIRECTIONAL); -+ dma_unmap_sg(rkc->dev, sgs, 1, DMA_BIDIRECTIONAL); - } else { -- dma_unmap_sg(ctx->dev->dev, sgs, 1, DMA_TO_DEVICE); -- dma_unmap_sg(ctx->dev->dev, sgd, 1, DMA_FROM_DEVICE); -+ dma_unmap_sg(rkc->dev, sgs, 1, DMA_TO_DEVICE); -+ dma_unmap_sg(rkc->dev, sgd, 1, DMA_FROM_DEVICE); - } - theend_iv: - return err; - -From patchwork Wed Jul 6 09:04:02 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907948 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 646A0C433EF - for ; - Wed, 6 Jul 2022 10:33:08 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=7SOx+iAXlq6yNXvzopTrDrui2BIXsjYxviGstDzetSg=; b=MMly/iQ/X5cJxA - 8zwyGKSJ0RMIMjnccJXMxnLpPLp3I2xOxbndpRm+EAdDCzTt2XxQC2KozZ+UcszVLcX+/1+QaOp1P - Cy82iYRM0/mfcF6qY4yRbnSpUO5uHQdPERqVVwNi2a2riHLEfmLfnIjrqDCBzzvy1QcH1FXkS+SiW - jzvB33Vl7AsEMObVkL+hJhiQCwFtSlda4SLV4YjLvZJi32N7UUGS26ntlwWYG/DzxSG/p03mViZYE - PyjgzIXOfWlKI6uUFYa8E5TEN5SoMh5rd/Y1D/TnYUpm108nH3AS6sktWLZOejMUhH+VROCgICFby - YSzEja0W/NSkmDP6ciHA==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92L1-008ZDv-2k; Wed, 06 Jul 2022 10:32:55 +0000 -Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xt-007bo8-Ac - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:04:58 +0000 -Received: by mail-wm1-x331.google.com with SMTP id f190so8422870wma.5 - for ; - Wed, 06 Jul 2022 02:04:57 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=0KerGvUzdejWLAwshDyy9ppWCWrJnFuYbHleK5z5lUU=; - b=cOcyzI19J2bwcidkSWv6IYChVJ99SgUBngiNcjkB1r7bHy8FEb/EHmXmVgJy+39WrI - 5blmGvmfl/D2NUpaj/q6rfywpUvhhuYaegNRmMdTMEAW83+GcS/q+MqGBx1YpCQOBsNg - qBuyuXLVhgf4djHOFJbgV2qsK4Rr46EOxdkXQ2MT5ZQCGfTQHhafDZXyOSHxPEScxAyi - AHAWtXQTG4qcg6cG1349R17HfqlHyjtUo/gpO2yxSxyWvKDfKJAGLqnjcxNgQoeTQYLC - gjv9XDsUSccvRe6OCe8NqKOiYZLID5sJXebE6y85t7ZjV/f+m8Ytib19LC1BoziJ20nl - NXGQ== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=0KerGvUzdejWLAwshDyy9ppWCWrJnFuYbHleK5z5lUU=; - b=Kp1llPulUp64pcZtq3/dBByaS07L3icvboLh+nUOrTFx3ugYiPH+Jpi0kM2UPmuwXL - 3CeFbNt/8GEj+7Ts7sfn3l+3feAHRiOkWX8qihEQEztckB5QdY4vV6lhwA2ARVFqVXWb - 6IZ0YcCERywT6RN5D+j3cQUa+Yk8fDxRcWVs51XmoNps3bDNMNZX8kczEezkp15W8OI7 - NzeWU/yVGoqkzvFGdWlMrEHTlXSUDL1/dIOVebRH4B51oL4XCkNNnihH9tkbN5w2SDhE - AbUQ7hvAbfwO+OQHWPI85ZTkwUAhgLrEt89s1A/rgSWoQdOgUsnREjlSVdBo0/S85O+T - OhpA== -X-Gm-Message-State: AJIora+mBXEwGO6Xh1iEhNGR5yz4MH+qcpVsRep/OJqtMPFpeezPvx/w - 7hv0cSRLoYDEK3xhxJYkUm1ueQ== -X-Google-Smtp-Source: - AGRyM1tm3jF1Mm9yTBvcrOrrcNwguVUNZ62czBNqaQaZTtes5qap/g64RlerawH0KAvGyiXDXVAxDQ== -X-Received: by 2002:a1c:720f:0:b0:3a0:2ac9:5231 with SMTP id - n15-20020a1c720f000000b003a02ac95231mr41272448wmc.39.1657098296950; - Wed, 06 Jul 2022 02:04:56 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.56 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:56 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 23/33] crypto: rockchip: use the rk_crypto_info given as - parameter -Date: Wed, 6 Jul 2022 09:04:02 +0000 -Message-Id: <20220706090412.806101-24-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020457_419252_3FF6B609 -X-CRM114-Status: GOOD ( 10.89 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -Instead of using the crypto_info from TFM ctx, use the one given as parameter. - -Reviewed-by: John Keeping -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto_skcipher.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index 6a1bea98fded..cf0dfb6029d8 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -254,7 +254,7 @@ static void rk_cipher_hw_init(struct rk_crypto_info *dev, struct skcipher_reques - RK_CRYPTO_TDES_BYTESWAP_KEY | - RK_CRYPTO_TDES_BYTESWAP_IV; - CRYPTO_WRITE(dev, RK_CRYPTO_TDES_CTRL, rctx->mode); -- memcpy_toio(ctx->dev->reg + RK_CRYPTO_TDES_KEY1_0, ctx->key, ctx->keylen); -+ memcpy_toio(dev->reg + RK_CRYPTO_TDES_KEY1_0, ctx->key, ctx->keylen); - conf_reg = RK_CRYPTO_DESSEL; - } else { - rctx->mode |= RK_CRYPTO_AES_FIFO_MODE | -@@ -266,7 +266,7 @@ static void rk_cipher_hw_init(struct rk_crypto_info *dev, struct skcipher_reques - else if (ctx->keylen == AES_KEYSIZE_256) - rctx->mode |= RK_CRYPTO_AES_256BIT_key; - CRYPTO_WRITE(dev, RK_CRYPTO_AES_CTRL, rctx->mode); -- memcpy_toio(ctx->dev->reg + RK_CRYPTO_AES_KEY_0, ctx->key, ctx->keylen); -+ memcpy_toio(dev->reg + RK_CRYPTO_AES_KEY_0, ctx->key, ctx->keylen); - } - conf_reg |= RK_CRYPTO_BYTESWAP_BTFIFO | - RK_CRYPTO_BYTESWAP_BRFIFO; - -From patchwork Wed Jul 6 09:04:03 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907724 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 76AC7C433EF - for ; - Wed, 6 Jul 2022 09:22:44 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=PvLHvPgkdXNjW06lWXyzHBo/Ek/+4m0dYe6KZZixp0o=; b=N6Nxvfq9vZTduR - zttAsKg8YHgFKDOA6h8AkaNhZuLxY1OnHpISHX3YbPUdEaJsqa1aMg4xvbt3sHbTCZO7SXTDl2XEH - QZi47+B6x2ESy9lz9mh/RnphdLjt5uDdTQh9BmrSLvnsf0n04VbghP0ijnTxLfScF59Z2cAM9YkJk - 6UsoZdzXqIpCJ1t8T2b2auy9FbXTeceECBh3ThcnCqdMggSLB7NfrQjRlmMCxMLEh/Qz/SPAbq5UB - NVJO2dbukA8Nu9VJ59FWKKAC7EpuGfXCGmT69ZuGWxfP6zi1EK/u3ieO8wnIkx94asw9asQ2uWuip - 7ev5qYNu42ng4FfYJoRg==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91Eu-007k14-Df; Wed, 06 Jul 2022 09:22:32 +0000 -Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91EO-007jcM-TK - for linux-rockchip@bombadil.infradead.org; Wed, 06 Jul 2022 09:22:01 +0000 -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: - References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: - Content-Type:Content-ID:Content-Description; - bh=Y1ZryWow92c9hwwvz5Hh3ukn+dkdomJWMwO/HyG9hMQ=; b=sPHW6Jaodd7+pqDcgyHjV8wBzs - k02vcQoue3Zw1gB6OvViWSo0Fa9R+m+dSoXfto2BXlVZmfmB6wbt5++IgTjWjCiGfp4Uu4V+oYWx0 - /PHq1H6uWqlMspJesE/51yW9DtZd1H2hcR3SOtnGGtW43PKl9dYuiVEAHX6aRgItjnSD+DBqnRrK9 - XHy+sX1AzWK4IzXHc5coRxtIS2V7/ov+htxl04ByrMcolm3rRQSXDT2lbuq8nfGTqejhcxmWcesMZ - mVu9sHdAL5s4j2WyhUkKv0XENOz1+nrMlLWxlw7H/knfVcLSxkdBqVlhZgH4+rDDFSSGrmnc0X02E - 1GhNasWQ==; -Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) - by casper.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90yD-001MPK-UR - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:05:21 +0000 -Received: by mail-wr1-x42d.google.com with SMTP id f2so15687572wrr.6 - for ; - Wed, 06 Jul 2022 02:05:17 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=Y1ZryWow92c9hwwvz5Hh3ukn+dkdomJWMwO/HyG9hMQ=; - b=1hvxm1lYCf3dt/kNWqZz5AZEreEizX7NEtB62mDJGcxhqDzVDR6GsNQjJEw6hU3Li5 - DiiKB9lR7xHFHTLRAdNpWSWuQbSURbNkL4ltJzXpRwp/LO7NlZUKRyuZNF5Er/bAPBjH - fHTn0cTIeLflHz8GDaigTuF2B018PZUuJJJ4xtbR6ZbHJTTNqJHyMKENGJ+uiSownI2k - CD5lvOVAK4ovTpy9ILkL1b2htX61KzBLOSOsgPiYEkLzX9zQDN5FUXrVf9eJk04sXXFR - j9ASqPnC7sBOK4hXbpnemsRssUwnMlNqTMG60Jpoqpbr/89/GDSIcxJ2Q4T3Chwgbbus - lRbg== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=Y1ZryWow92c9hwwvz5Hh3ukn+dkdomJWMwO/HyG9hMQ=; - b=F5gj9Mm1gAzfwYYFYfA2SqaBmtX7//2WnAKqcSgSxp/7znjYRJ00fgPzyySiG+dKdK - pSuOqPjFKEGAe9ww+g6jIe8qLpMr6kH3veNQks3841GvUDW0lIzMrGgmbH4v9aFUGwyU - zU7XCIZaE/1EeRrDiW1qq7GImyrkj3XPP7G8AAHn4g/k2lmSGouULXbTLrSC1pl8qPff - OMmydKGNNPb2JXfXMNVoDwrWi5Nr/EFi77DCgn4Aj0veqBvr8sTarzwyunjqUFU9OlBA - gYgMsNM6grnBmt6WaUHatILH09XK5mlomyrwnm+7y+cTOqzZPncLpiNm5vgIif9q1aqD - t5hA== -X-Gm-Message-State: AJIora8NBZFoIXg0GZnA/VAzHPkuoV6LvZw1BpB/9fHSpE0k+qw9Yh8i - 3OH/pZBX6WVuoB3IByq33BBGZTzNk/HLcg== -X-Google-Smtp-Source: - AGRyM1uabznHJAkndj0/PP8wr1qRzCNfHAe31LWA6AzcW1fqDJpCvWnIpQT9vAyuXkgDBlb3NHxJMw== -X-Received: by 2002:a5d:59a9:0:b0:21d:7ee2:8f90 with SMTP id - p9-20020a5d59a9000000b0021d7ee28f90mr1317827wrr.598.1657098297942; - Wed, 06 Jul 2022 02:04:57 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.57 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:57 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe , - Krzysztof Kozlowski -Subject: [PATCH v8 24/33] dt-bindings: crypto: convert rockchip-crypto to YAML -Date: Wed, 6 Jul 2022 09:04:03 +0000 -Message-Id: <20220706090412.806101-25-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_100518_296700_1B5B943C -X-CRM114-Status: GOOD ( 12.81 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -Convert rockchip-crypto to YAML. - -Reviewed-by: John Keeping -Reviewed-by: Krzysztof Kozlowski -Signed-off-by: Corentin Labbe ---- - .../crypto/rockchip,rk3288-crypto.yaml | 64 +++++++++++++++++++ - .../bindings/crypto/rockchip-crypto.txt | 28 -------- - 2 files changed, 64 insertions(+), 28 deletions(-) - create mode 100644 Documentation/devicetree/bindings/crypto/rockchip,rk3288-crypto.yaml - delete mode 100644 Documentation/devicetree/bindings/crypto/rockchip-crypto.txt - -diff --git a/Documentation/devicetree/bindings/crypto/rockchip,rk3288-crypto.yaml b/Documentation/devicetree/bindings/crypto/rockchip,rk3288-crypto.yaml -new file mode 100644 -index 000000000000..8a219d439d02 ---- /dev/null -+++ b/Documentation/devicetree/bindings/crypto/rockchip,rk3288-crypto.yaml -@@ -0,0 +1,64 @@ -+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) -+%YAML 1.2 -+--- -+$id: http://devicetree.org/schemas/crypto/rockchip,rk3288-crypto.yaml# -+$schema: http://devicetree.org/meta-schemas/core.yaml# -+ -+title: Rockchip Electronics Security Accelerator -+ -+maintainers: -+ - Heiko Stuebner -+ -+properties: -+ compatible: -+ enum: -+ - rockchip,rk3288-crypto -+ -+ reg: -+ maxItems: 1 -+ -+ interrupts: -+ maxItems: 1 -+ -+ clocks: -+ maxItems: 4 -+ -+ clock-names: -+ items: -+ - const: aclk -+ - const: hclk -+ - const: sclk -+ - const: apb_pclk -+ -+ resets: -+ maxItems: 1 -+ -+ reset-names: -+ items: -+ - const: crypto-rst -+ -+required: -+ - compatible -+ - reg -+ - interrupts -+ - clocks -+ - clock-names -+ - resets -+ - reset-names -+ -+additionalProperties: false -+ -+examples: -+ - | -+ #include -+ #include -+ crypto@ff8a0000 { -+ compatible = "rockchip,rk3288-crypto"; -+ reg = <0xff8a0000 0x4000>; -+ interrupts = ; -+ clocks = <&cru ACLK_CRYPTO>, <&cru HCLK_CRYPTO>, -+ <&cru SCLK_CRYPTO>, <&cru ACLK_DMAC1>; -+ clock-names = "aclk", "hclk", "sclk", "apb_pclk"; -+ resets = <&cru SRST_CRYPTO>; -+ reset-names = "crypto-rst"; -+ }; -diff --git a/Documentation/devicetree/bindings/crypto/rockchip-crypto.txt b/Documentation/devicetree/bindings/crypto/rockchip-crypto.txt -deleted file mode 100644 -index 5e2ba385b8c9..000000000000 ---- a/Documentation/devicetree/bindings/crypto/rockchip-crypto.txt -+++ /dev/null -@@ -1,28 +0,0 @@ --Rockchip Electronics And Security Accelerator -- --Required properties: --- compatible: Should be "rockchip,rk3288-crypto" --- reg: Base physical address of the engine and length of memory mapped -- region --- interrupts: Interrupt number --- clocks: Reference to the clocks about crypto --- clock-names: "aclk" used to clock data -- "hclk" used to clock data -- "sclk" used to clock crypto accelerator -- "apb_pclk" used to clock dma --- resets: Must contain an entry for each entry in reset-names. -- See ../reset/reset.txt for details. --- reset-names: Must include the name "crypto-rst". -- --Examples: -- -- crypto: cypto-controller@ff8a0000 { -- compatible = "rockchip,rk3288-crypto"; -- reg = <0xff8a0000 0x4000>; -- interrupts = ; -- clocks = <&cru ACLK_CRYPTO>, <&cru HCLK_CRYPTO>, -- <&cru SCLK_CRYPTO>, <&cru ACLK_DMAC1>; -- clock-names = "aclk", "hclk", "sclk", "apb_pclk"; -- resets = <&cru SRST_CRYPTO>; -- reset-names = "crypto-rst"; -- }; - -From patchwork Wed Jul 6 09:04:04 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907723 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 63C01C43334 - for ; - Wed, 6 Jul 2022 09:22:42 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=a+REbs+4dZYI1qPV/EuAe3Cwlr0r9qpF5lTLwpLGOzY=; b=VfHKJmWtxHPuwu - 2O5XftT5bGcElcYYk7v3msnh7apK4/VD6MW/fFzmoIfvmsFox4PAiRH6eUSodQRwBPgfJ67FYStcX - Ts+Ydfg+AzBxGGRNPtII+OKN31x0fYSIiZz90uO4beG8x1L/7XG80/YC7TVNmypjfxJftmQL0tHGo - cuWJN7XPso3gjkQz2r+ZtVR94JkYlPRAFnJZeYwNSNJp1BM8Yp+IGBrUAS3VeoWf7LMKzT2Hv6DgV - d8RpgQx9DebjrRHzjnLvUTn3y/TN6kHBTyNsJAOYqfWF5eiRlnZTJK4MawI9oP2ZzppblaTJBJE3N - ynLA68XYU3QeDY+7T5Kw==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91Et-007k0d-Nd; Wed, 06 Jul 2022 09:22:31 +0000 -Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91EO-007jjw-Q7 - for linux-rockchip@bombadil.infradead.org; Wed, 06 Jul 2022 09:22:00 +0000 -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: - References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: - Content-Type:Content-ID:Content-Description; - bh=X7cJlxa5ip0o5lrSA1Cq27Abc5a+ZcugcbcpPEkeHA0=; b=c7BPe9Ce1EibT+IcNWbuBcZnVf - p4fRWPNWdmdhMq+7tjsf3B2xE7oABsM2IqLPr3TZuwf67Zog4riZ1TwPLzNWdwKa7LI1JQe/IVotZ - pGJ9NInEWDSGu9XeOE5GhDNLCr5cJgT4FMou2o1iZz+zN3wc675FIbk083YadRXB4TKyASMQN4e5F - iJ6PUnSpXgT2dS14zZcVu64MZxl6wR4SoCsYea7sJlK9WNofYGMNXJGrCvrbes46YBWVM7q6eH1SF - sjFJDd3wVcUGCaFyLEiWKq7fmR9Q0at1vBIoxfdUw+21TOkLr/gMkvIyGff0QlrsSwEdems4xyQZ/ - L/qwEnOw==; -Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) - by casper.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90yD-001MPM-UU - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:05:22 +0000 -Received: by mail-wm1-x32b.google.com with SMTP id j7so8437104wmp.2 - for ; - Wed, 06 Jul 2022 02:05:17 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=X7cJlxa5ip0o5lrSA1Cq27Abc5a+ZcugcbcpPEkeHA0=; - b=BfBzAqSa8w4fzWQfTTC5FNOLO2uFMVd7IYdWjSD1AGYBlpM8m5TE1ecjewFy4BzQdm - FplphJsHz3EMKXLnuHO0YKsCoQMx9RNS6XtxNkdrGzCO6zQdxMATQaL8JL/UnQKwIv5c - r/dKRE5+NOm78+DireDdXfXz7kYN9M2FmHCjQJNAlJkuAE5oh6lL6xe5FEcOBLKr5DYL - cAAMmtZtdp+qJ+In3wyGnuARZcJJDnCvMzxpqfqdiomMHErTKlnxg2tQyzjSZRmh+EJU - bAqN98KmOGhaUC5nWrNl1UZjuXvogwdsAedOnXZEBJcsl9x4KytoIM8gc4N7HlsFQAef - hR4w== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=X7cJlxa5ip0o5lrSA1Cq27Abc5a+ZcugcbcpPEkeHA0=; - b=Iutfk4rmavmnH8mnkMys0EB5/aZinn+numv3OC6c/9bIack41bBQ0UigUh0krFzBhs - vo2qkv886/aqTvDL/2yNvivk+FTh2g+bnGbXiEnETXWqinDQSCLABx827VvdZeLQr6tc - j8jETm/cWitQpDqO383jk9HJ2AmAW78/to0yFDJF/GinWh1RozQEvnL17VkRCEFNPUlX - PJ/UaS8UYviuUa/lzzhWdhGaUyPJjl8LHLoETja0Pe5XTe2SIOk1QYaIyZuLSR/LYvA1 - IcsC1pZ29N73SWrUg6chHfeAQcHLvyF3nZ07lplK3uAnpQJGNHGdRi+Zp0EcmrwWIH34 - soyw== -X-Gm-Message-State: AJIora+qys9Ukhawsde7YEA6BtEVCOMW8b2N/mMyEXd0TR1DrwvvsjUX - bxNGAcuN0cP9RJBreXR3jIztWA== -X-Google-Smtp-Source: - AGRyM1utZG4kGVK/bdSC11gh5qhrQPpgTsu7xN4H/jrdTP0t32LTuyn3YGK5ZUhfv+JR9psfGdVT3Q== -X-Received: by 2002:a05:600c:1f11:b0:3a1:967c:5f0d with SMTP id - bd17-20020a05600c1f1100b003a1967c5f0dmr22483370wmb.26.1657098299074; - Wed, 06 Jul 2022 02:04:59 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.58 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:58 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe , - Krzysztof Kozlowski -Subject: [PATCH v8 25/33] dt-bindings: crypto: rockchip: convert to new driver - bindings -Date: Wed, 6 Jul 2022 09:04:04 +0000 -Message-Id: <20220706090412.806101-26-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_100519_228129_9F768702 -X-CRM114-Status: UNSURE ( 8.43 ) -X-CRM114-Notice: Please train this message. -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -The latest addition to the rockchip crypto driver need to update the -driver bindings. - -Reviewed-by: Krzysztof Kozlowski -Signed-off-by: Corentin Labbe ---- - .../crypto/rockchip,rk3288-crypto.yaml | 85 +++++++++++++++++-- - 1 file changed, 77 insertions(+), 8 deletions(-) - -diff --git a/Documentation/devicetree/bindings/crypto/rockchip,rk3288-crypto.yaml b/Documentation/devicetree/bindings/crypto/rockchip,rk3288-crypto.yaml -index 8a219d439d02..5bb6bf4699ff 100644 ---- a/Documentation/devicetree/bindings/crypto/rockchip,rk3288-crypto.yaml -+++ b/Documentation/devicetree/bindings/crypto/rockchip,rk3288-crypto.yaml -@@ -13,6 +13,8 @@ properties: - compatible: - enum: - - rockchip,rk3288-crypto -+ - rockchip,rk3328-crypto -+ - rockchip,rk3399-crypto - - reg: - maxItems: 1 -@@ -21,21 +23,88 @@ properties: - maxItems: 1 - - clocks: -+ minItems: 3 - maxItems: 4 - - clock-names: -- items: -- - const: aclk -- - const: hclk -- - const: sclk -- - const: apb_pclk -+ minItems: 3 -+ maxItems: 4 - - resets: -- maxItems: 1 -+ minItems: 1 -+ maxItems: 3 - - reset-names: -- items: -- - const: crypto-rst -+ minItems: 1 -+ maxItems: 3 -+ -+allOf: -+ - if: -+ properties: -+ compatible: -+ contains: -+ const: rockchip,rk3288-crypto -+ then: -+ properties: -+ clocks: -+ minItems: 4 -+ clock-names: -+ items: -+ - const: aclk -+ - const: hclk -+ - const: sclk -+ - const: apb_pclk -+ minItems: 4 -+ resets: -+ maxItems: 1 -+ reset-names: -+ items: -+ - const: crypto-rst -+ maxItems: 1 -+ - if: -+ properties: -+ compatible: -+ contains: -+ const: rockchip,rk3328-crypto -+ then: -+ properties: -+ clocks: -+ maxItems: 3 -+ clock-names: -+ items: -+ - const: hclk_master -+ - const: hclk_slave -+ - const: sclk -+ maxItems: 3 -+ resets: -+ maxItems: 1 -+ reset-names: -+ items: -+ - const: crypto-rst -+ maxItems: 1 -+ - if: -+ properties: -+ compatible: -+ contains: -+ const: rockchip,rk3399-crypto -+ then: -+ properties: -+ clocks: -+ maxItems: 3 -+ clock-names: -+ items: -+ - const: hclk_master -+ - const: hclk_slave -+ - const: sclk -+ maxItems: 3 -+ resets: -+ minItems: 3 -+ reset-names: -+ items: -+ - const: rst_master -+ - const: rst_slave -+ - const: crypto-rst -+ minItems: 3 - - required: - - compatible - -From patchwork Wed Jul 6 09:04:05 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907949 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id C06DBC43334 - for ; - Wed, 6 Jul 2022 10:33:08 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=GR2Mqob1pbbmyqyAEvQTaHicS3PW1q6UTOI88ydJ/CM=; b=Xklp7r3imAS5UF - PiE+xHjYzDxvP2pEzf2YH8h4lD5NNUqC91OSiA4U50aLOFeJluWzAJPZKQpy36mTdXndCLGvoqcVs - hUOzrPw8Aee7I275kUTViIM1SV9vgyDjJzlHVaPVuX6KkqxOWJLP+9skcxH5BU+CKskGTHDZfTCJ6 - IlZgJX66O9ZtOF5MyVngEEN3eJ4KQj4tBjk0h29SM2iRFVfBCBvK2QoeItlZ192Kuc8Gzk/o1YCms - Qxc+tbAeJNkZrMiKOxUURAoOAXXxH7UyGTAAIS71J44VRHnil7bzd1tpOiqmOO9ACExOrdVUYwgDI - +lMbRLvLYYE6fjNFNSxg==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92L3-008ZFE-2u; Wed, 06 Jul 2022 10:32:57 +0000 -Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xw-007blz-HC - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:05:01 +0000 -Received: by mail-wr1-x433.google.com with SMTP id b26so21081719wrc.2 - for ; - Wed, 06 Jul 2022 02:05:00 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=ZivRzjlDS3OoPoRTHkJnPDZ3sM1VA8uv4BaZC71qcQ0=; - b=SoR7Ux0on4nf1Qo15rxc7uNb2HO/RqGdhLcmgjl5TJEByBP0inejUpsOr/9+9c4VNe - U116K/wfR+Ufafd45lYbdRzH3rmt6Y/5FzkewGjvyiK8q6SjpI6u+1dIUiDvyYyC4Mbi - kwKhdmm9RZMnCRTTCcoYZdYu+JxdHWjrAX3I2fXsey51UGDw96iSQbH4mr2/lvmIjiGJ - dVtw7lH3wQ4YX72TefVnwD85Nv4XoN2RiIX5+SqTM5bBc3XRAEYGPiLNCoMlJCcOo4LV - cV79VDm8OAtCOf3BIV4j55ctG2COtEOh9mUkjNzSAs8uq1AHXUA3JSxfLnYfZh/13TP/ - oewA== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=ZivRzjlDS3OoPoRTHkJnPDZ3sM1VA8uv4BaZC71qcQ0=; - b=K3A9UQB9a1ehs5zjXWBeaN2UyGFQOamf39Ohwzn+OOYZ7r3IsMxjdxkZ0y6bRxr0Fo - UWxi/611TCQ4f26izaXorpJRd8viBTopp5aoeaZnSmI5eeQ6dPAWWvERpkAsYoDPhmvG - VQAWaBr+s38EkvcWW/ArnNk4rPTAuMWgMlY69zQGnmK8tiSrWUXadEVJ3rh1Amtt4+n0 - xJ64/6/ji0FStxeHWsIG66fMBtxZhbWO54hmcvENUGsUiFV1lE9o1h/eQjg2KrGaxevE - XBdcqrIzvgjS1tw/NGFDb1v5oxO6k4DwWOp5HmwQjGGm+8ANcXZcq2r7JDl+UAgbEfn4 - 8Qtg== -X-Gm-Message-State: AJIora+HqlRcbQ6LeN+M+7W74ZkIxY1Txw7lhaAtfZqcIng72dagNhMW - o/y6r+ZtWbEhR4wQR8lZQUWOIoXclJYU6g== -X-Google-Smtp-Source: - AGRyM1s0NtrzbFsGKeEvThnAUtfR0Dz41YElbKBkLJkfRZht8Yko9gJ0WTqHFIVMkhaWXaYuStEsBg== -X-Received: by 2002:a5d:6e8d:0:b0:21d:7223:1e1b with SMTP id - k13-20020a5d6e8d000000b0021d72231e1bmr7736406wrz.713.1657098300111; - Wed, 06 Jul 2022 02:05:00 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.04.59 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:04:59 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe , - Rob Herring -Subject: [PATCH v8 26/33] clk: rk3399: use proper crypto0 name -Date: Wed, 6 Jul 2022 09:04:05 +0000 -Message-Id: <20220706090412.806101-27-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020500_610368_F1663984 -X-CRM114-Status: GOOD ( 10.81 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -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. - -Acked-by: Rob Herring -Signed-off-by: Corentin Labbe ---- - include/dt-bindings/clock/rk3399-cru.h | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/include/dt-bindings/clock/rk3399-cru.h b/include/dt-bindings/clock/rk3399-cru.h -index 44e0a319f077..39169d94a44e 100644 ---- a/include/dt-bindings/clock/rk3399-cru.h -+++ b/include/dt-bindings/clock/rk3399-cru.h -@@ -547,8 +547,8 @@ - #define SRST_H_PERILP0 171 - #define SRST_H_PERILP0_NOC 172 - #define SRST_ROM 173 --#define SRST_CRYPTO_S 174 --#define SRST_CRYPTO_M 175 -+#define SRST_CRYPTO0_S 174 -+#define SRST_CRYPTO0_M 175 - - /* cru_softrst_con11 */ - #define SRST_P_DCF 176 -@@ -556,7 +556,7 @@ - #define SRST_CM0S 178 - #define SRST_CM0S_DBG 179 - #define SRST_CM0S_PO 180 --#define SRST_CRYPTO 181 -+#define SRST_CRYPTO0 181 - #define SRST_P_PERILP1_SGRF 182 - #define SRST_P_PERILP1_GRF 183 - #define SRST_CRYPTO1_S 184 - -From patchwork Wed Jul 6 09:04:06 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907950 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id C2E2EC43334 - for ; - Wed, 6 Jul 2022 10:33:10 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=m1BlqizxwG22VMLb8BXRDGZnVUkaK3foJH4NgpAi8Jk=; b=utU+CrN/cFrdHA - YrdtJJyNMZffk19ZlSWkVnfTCTDTsnmWzkVfSUyX1EAB9g3uJPEouhIiNktHz6mC31KaUGp+UeKI+ - EbF/qEQ/EBBnLsnSrrIo36vqIjit5HSbZVsHfIYAgehcIairtYxiQ5OmSB7zLZTa8uKweUrlhUAmc - i3Ql1OHo46Ki0+BGwqjKamdEJomYZp2ihnXZZfVRLoFqqc405TYucjsGAmpnN7WvKGwRSWEEy2ZkU - Qcx8VVKBmCOfxIcitdhw0T2mZd6nYo4FFDI3SjaLTc+EbafAcFyN5Csxi/SAHHnTyXxmR7wLfVkgS - qm/qoMc1MVbVPL7Zegkw==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o92L4-008ZHb-Qo; Wed, 06 Jul 2022 10:32:58 +0000 -Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xx-007bo8-EL - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:05:02 +0000 -Received: by mail-wm1-x331.google.com with SMTP id f190so8423027wma.5 - for ; - Wed, 06 Jul 2022 02:05:01 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=QXNec13rQxx7mczo0Bb45Dl1W4/rRz+jQsRU4AeJnZM=; - b=2KH0c9i5pRILecSD4cAr1i5IG81/CljsGJebd4GrlEu87GGF+p4iLvgg69UypD4DGA - l545no2gU5djMfQXCkQ13fkRA6JgbOl04rIrM6ABTL0bmmCnR1jciczP2obeGis+6VaG - v3YHDgcdTBNvuLmF7cDwpiCUQHw2E/SyNMjbz6/BHLG0R1x71jyIulfD0jboY1YyPPIM - k9BAZp0vE4EF8p5/Xeho4rFX51MilcYI0SEO6UF+eTxIihL0BCZ5GdVEBIFl9mZV70m0 - m3hNv+FivGSRxvIYos1Wgq1x6JMp3lx9XVdmv+NO6xxmbgGCXd+0QaoI5xzy42DkYErn - qIqA== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=QXNec13rQxx7mczo0Bb45Dl1W4/rRz+jQsRU4AeJnZM=; - b=jUa0OnwYUpQclPzUAFHvFSUjTIA2NMAFqwmaBTBhpES68RHbjFSPrbe+egXRAUaISN - mkzD+H21DpB0DCR7ftFfE09D2EK0E+rKhP1PeZCFFuhv+zs6PlpLaX1vTKV1eocaqase - kh1zkv8kMNY91RDul6ZRMA4I3RFNSavazpdDOCoeRaF0NaX50JKJR5wOV3p27dfVyFLg - AoNEG+xJnFm6xHIWgy1jN0A4ZnXWgju5noILZKO3xIUyGHp18tG9SANDA29hrfC2ACd9 - 9Tm31jUJu8fksHvD16szFenNeKWm56VXl2s+GPV1GkWOHr3Y2YyTg82DV+PabBPOeDX/ - 2glw== -X-Gm-Message-State: AJIora9bdrF4C7dMWfT1jddaKHiRRGzDM5OaiBy2t+rLcHK4+uxH+E/A - PBfDpOh3ETbCYDSiK7Jmqh/e7Q== -X-Google-Smtp-Source: - AGRyM1toIJ3bBwvAdPj3WgU9vUOPQT1BAvlEHJ5810B7GsO/4J25yaE+bYN0O90J2JbxvuU5axmchw== -X-Received: by 2002:a05:600c:3788:b0:3a0:4279:5142 with SMTP id - o8-20020a05600c378800b003a042795142mr38248606wmr.21.1657098301075; - Wed, 06 Jul 2022 02:05:01 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.05.00 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:05:00 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 27/33] arm64: dts: rockchip: add rk3328 crypto node -Date: Wed, 6 Jul 2022 09:04:06 +0000 -Message-Id: <20220706090412.806101-28-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020501_540484_F333D9C0 -X-CRM114-Status: UNSURE ( 9.82 ) -X-CRM114-Notice: Please train this message. -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -rk3328 has a crypto IP handled by the rk3288 crypto driver so adds a -node for it. - -Signed-off-by: Corentin Labbe ---- - arch/arm64/boot/dts/rockchip/rk3328.dtsi | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi -index 49ae15708a0b..96a7a777bae8 100644 ---- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi -+++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi -@@ -1025,6 +1025,17 @@ gic: interrupt-controller@ff811000 { - (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>; - }; - -+ crypto: crypto@ff060000 { -+ compatible = "rockchip,rk3328-crypto"; -+ reg = <0x0 0xff060000 0x0 0x4000>; -+ interrupts = ; -+ clocks = <&cru HCLK_CRYPTO_MST>, <&cru HCLK_CRYPTO_SLV>, -+ <&cru SCLK_CRYPTO>; -+ clock-names = "hclk_master", "hclk_slave", "sclk"; -+ resets = <&cru SRST_CRYPTO>; -+ reset-names = "crypto-rst"; -+ }; +-static void rk_crypto_complete(struct crypto_async_request *base, int err) ++static int rk_cipher_need_fallback(struct skcipher_request *req) + { +- if (base->complete) +- base->complete(base, err); ++ struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); ++ struct skcipher_alg *alg = crypto_skcipher_alg(tfm); ++ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); ++ struct scatterlist *sgs, *sgd; ++ unsigned int stodo, dtodo, len; ++ unsigned int bs = crypto_skcipher_blocksize(tfm); + - pinctrl: pinctrl { - compatible = "rockchip,rk3328-pinctrl"; - rockchip,grf = <&grf>; - -From patchwork Wed Jul 6 09:04:07 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907827 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 464CCC43334 - for ; - Wed, 6 Jul 2022 09:48:41 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=H321X8HU8AaKEs0TKy0EVrM84Pt6F97kQmbLE8Rtg4M=; b=sa4iSnXMnZM1nG - QmEoXPrRnlVRNbM0GjPVcwo0eJ/o1hZPDaZ3KJtfXeNv1BUjFJr5xqpwAFu1OKCbc/rqhhFc65V1E - UWrYVGCmSubmyVkthq2FJXHJccdV1ewH7zi3pY1sUuw5F7niMg8asXZ9xJGTEEB7yt8jnM+otkg99 - cKBAm4lAFWIeiy+vZ2XMSUtsuYWEl1Kr5frbaZHA0HvUkPBJ+8dhkp0gspVc8+X0sHGiEZRKOjKi1 - 3uz6EmzSYt0fB9fZWFvz0LeMeQH3owRxzUyjHUL/rXz7GsxJanwNnNliQUHPem7jp0q2BposyMGvA - ciGDLlWXJPgqJnyDa8Lg==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91e0-007vWE-Oa; Wed, 06 Jul 2022 09:48:28 +0000 -Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91Uu-007qGk-Fi - for linux-rockchip@bombadil.infradead.org; Wed, 06 Jul 2022 09:39:04 +0000 -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version - :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: - Content-Type:Content-ID:Content-Description; - bh=Rj/Na2p2CdSqeZMTsRP9N7r+JNYd47iwYks0u+hdyhY=; b=Dk3IUdUXzFl9LkosXUtEU1tijY - QZvxwzIJGcjsE2WOTkvYAqRKAzyh9Fnjs6/y8JscI9YX2kSFpaA3Kc7RTdlluVjIABKlQEJPfYtHs - gZHz94GH8xFDJKwYH0yiYuFo47cxiegcuPD2Ze2UKoNjCkhKlnN+tjs5BC0I+RSUsCMa9xrfj0T+u - 6PUtfclDXAkXZBwaGPtq+fP92xqhaqmrDqz2tzEcOFrZ7gSPI0Yg5UyhWuQHDkBBAnPaIkWfobG+i - V5cT7UVF6tbjyUgVTl8o6Thx0ZfLx+iKykyD7uWneIJdF9CPdziXhQbfjb7UADv0XGhdSbD6NBOmO - dlIgMBUw==; -Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) - by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90yD-000NGq-Sl - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:05:22 +0000 -Received: by mail-wm1-x32c.google.com with SMTP id - h14-20020a1ccc0e000000b0039eff745c53so8588139wmb.5 - for ; - Wed, 06 Jul 2022 02:05:02 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=Rj/Na2p2CdSqeZMTsRP9N7r+JNYd47iwYks0u+hdyhY=; - b=mKtq9ve1yeoQVoxcX9vU8Kzc4lD26BfGnICxDQSTU+FaPGF//iOE0yhM54oCSAigK9 - nw9+9IBaikZ7fIBfJL5/xRtLdv6VunAaQ1NIogOf9pia8Ily3Ben5QVis32InM4k/D5T - AfSj67218HVN2+GtVGePlqM0jgo2354uQNXUsMyuZAioIP9MGKGscKVmvyklsbm3pcON - /aKvGA8XIweKLAH1x5YWdI/17e9p+Wtui1phg0hDbSSYqdPcnc4L6WRBNE+otZiCFUvK - JXdJofacBazG0blo5TNTGr+Z/z30kJwYylSc0JUYrIBbnTaLTKIAVKYdnWsrhvS09EC+ - G5kg== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=Rj/Na2p2CdSqeZMTsRP9N7r+JNYd47iwYks0u+hdyhY=; - b=lbWxmC6CtxdCCzAv1n9dHSlvQR0QmdcrZANgob1Z35OKIKNtbojkuRsxirQiTU7sLT - M2yPcgFfyeGLGX487pRzj/xKAf32a7fHCWD6pgeTxSNLohN53uCQCCA9hEDvu7/PNWfb - kgkLZ0s4CL4E0Ol07qgK2jpF6BFmH17+az6nExFgErFgPpvWK4wSpMe09s9SQuSHFdN7 - 1ADF5zIhZrzoGTLpdLLzI8K4jW/5DWmfFZSwHiYuQ0vUSqcbcAMxxSrGQzSxpBYRtwPZ - sDpGynpT6eIb3fB7mVXMPNF1GSsfg7d0Q8ycNxu2v+UlxvXVmnLwIxriYf+3F5mX8vDu - o8jA== -X-Gm-Message-State: AJIora9dm+EF+yPL0Bp3IcxMjzSvQBXfUAI02t9odRcuprlmZzOUldU6 - ihINodyEyvbqOORvD865fGLOFA== -X-Google-Smtp-Source: - AGRyM1sAnoPrBg6uJutH5ajAxHTIlpAdgFxVpIOIcQSoVgdpXp9s7DoczGILgzfePMiGZltE3rbq0A== -X-Received: by 2002:a05:600c:a18d:b0:3a0:2c9a:b3de with SMTP id - id13-20020a05600ca18d00b003a02c9ab3demr40212216wmb.147.1657098302032; - Wed, 06 Jul 2022 02:05:02 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.05.01 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:05:01 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 28/33] arm64: dts: rockchip: rk3399: add crypto node -Date: Wed, 6 Jul 2022 09:04:07 +0000 -Message-Id: <20220706090412.806101-29-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_100519_988071_B1C2DF26 -X-CRM114-Status: UNSURE ( 8.97 ) -X-CRM114-Notice: Please train this message. -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -The rk3399 has a crypto IP handled by the rk3288 crypto driver so adds a -node for it. - -Tested-by Diederik de Haas -Signed-off-by: Corentin Labbe ---- - arch/arm64/boot/dts/rockchip/rk3399.dtsi | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) - -diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi -index 9d5b0e8c9cca..8e5aa1ca62d1 100644 ---- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi -+++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi -@@ -582,6 +582,26 @@ saradc: saradc@ff100000 { - status = "disabled"; - }; ++ if (!req->cryptlen) ++ return true; ++ ++ len = req->cryptlen; ++ sgs = req->src; ++ sgd = req->dst; ++ while (sgs && sgd) { ++ if (!IS_ALIGNED(sgs->offset, sizeof(u32))) { ++ algt->stat_fb_align++; ++ return true; ++ } ++ if (!IS_ALIGNED(sgd->offset, sizeof(u32))) { ++ algt->stat_fb_align++; ++ return true; ++ } ++ stodo = min(len, sgs->length); ++ if (stodo % bs) { ++ algt->stat_fb_len++; ++ return true; ++ } ++ dtodo = min(len, sgd->length); ++ if (dtodo % bs) { ++ algt->stat_fb_len++; ++ return true; ++ } ++ if (stodo != dtodo) { ++ algt->stat_fb_sgdiff++; ++ return true; ++ } ++ len -= stodo; ++ sgs = sg_next(sgs); ++ sgd = sg_next(sgd); ++ } ++ return false; + } -+ crypto0: crypto@ff8b0000 { -+ compatible = "rockchip,rk3399-crypto"; -+ reg = <0x0 0xff8b0000 0x0 0x4000>; -+ interrupts = ; -+ clocks = <&cru HCLK_M_CRYPTO0>, <&cru HCLK_S_CRYPTO0>, <&cru SCLK_CRYPTO0>; -+ clock-names = "hclk_master", "hclk_slave", "sclk"; -+ resets = <&cru SRST_CRYPTO0>, <&cru SRST_CRYPTO0_S>, <&cru SRST_CRYPTO0_M>; -+ reset-names = "rst_master", "rst_slave", "crypto-rst"; -+ }; +-static int rk_handle_req(struct rk_crypto_info *dev, +- struct skcipher_request *req) ++static int rk_cipher_fallback(struct skcipher_request *areq) + { +- if (!IS_ALIGNED(req->cryptlen, dev->align_size)) +- return -EINVAL; ++ struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); ++ struct rk_cipher_ctx *op = crypto_skcipher_ctx(tfm); ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(areq); ++ struct skcipher_alg *alg = crypto_skcipher_alg(tfm); ++ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); ++ int err; + -+ crypto1: crypto@ff8b8000 { -+ compatible = "rockchip,rk3399-crypto"; -+ reg = <0x0 0xff8b8000 0x0 0x4000>; -+ interrupts = ; -+ clocks = <&cru HCLK_M_CRYPTO1>, <&cru HCLK_S_CRYPTO1>, <&cru SCLK_CRYPTO1>; -+ clock-names = "hclk_master", "hclk_slave", "sclk"; -+ resets = <&cru SRST_CRYPTO1>, <&cru SRST_CRYPTO1_S>, <&cru SRST_CRYPTO1_M>; -+ reset-names = "rst_master", "rst_slave", "crypto-rst"; -+ }; ++ algt->stat_fb++; + - i2c1: i2c@ff110000 { - compatible = "rockchip,rk3399-i2c"; - reg = <0x0 0xff110000 0x0 0x1000>; - -From patchwork Wed Jul 6 09:04:08 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907618 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id F339FCCA485 - for ; - Wed, 6 Jul 2022 09:05:43 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=br+uZG4aj8CPR33Ld/ERFImYRe47BjEQqkF0a6921D4=; b=baazuieCsYXYZX - xbcS/JW+TO+E4dDt14qhraCOEoxq3U3wsozMrxiUH+iRvzbkpNk8UkWF4SP6roeWYMrwRa1QbE1R8 - vWYmWr5mN0vdE36sc8y/iz9lmvX/Dog+nkOcDdOpvxg2TCIiC+KsWSdwvYxX1vVv1xkW54eUNnwcQ - 0K8hZExGWvLAYxFjkof1ICydBGoYeyGaqZZQWYCiqe81P5tKCiCuFYEBwIFRZf3Z4PfgqHFH/HnhU - O611R9P8mUJb1yyfjMxlFKCg2hkQ3Mk1RY9Q9iDm92Uw/VeTcGVSNPDZipbkuTKcBzxOdZR9Vw2Fn - KWSub8r5Ahd1AWGqjS1A==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90yP-007cGi-Ks; Wed, 06 Jul 2022 09:05:29 +0000 -Received: from mail-wr1-f53.google.com ([209.85.221.53]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90xz-007bxv-FM - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:05:05 +0000 -Received: by mail-wr1-f53.google.com with SMTP id q9so21052773wrd.8 - for ; - Wed, 06 Jul 2022 02:05:03 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=YTCwVt48y9KJqKpi4AoXVBEGpD4ZzF22SRLhTWJSe6w=; - b=aROmTaAGd5Uz5ErAcUPgj5Xng9693lZ8XtgK2awEuQqhxAkqjQwWM4e9bCWIzuN+uc - wtw+U7lTfgBdzB7scPLu92+ZDbFpxIMPTR9qj22P+Jfxatc/rsIt/ni7zG9Xvp45Qc1j - uxylZy+jPptwy6+sevgtRWzhVjd7xCO+6GlWPmrf39fqipXEwibsZdfy5CiwlqYUiO3o - bom/rzprf++oFWPvrbxSimc6AV1Qqlq/sD2yufBm1H2ZYCLsKFaPm61pmYKSrp3q/amA - 8suMAqn73A02BwL5qgCNRGSjHyO+yp019HEbO8oUz4qJcEuXe9LtkK0kcVIrYMrLg0+v - 5Y1w== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=YTCwVt48y9KJqKpi4AoXVBEGpD4ZzF22SRLhTWJSe6w=; - b=vpfHg5565/i1kIAHca9vGTAeqWWMhgBaR8qMaxh+G+jdBgaQeghO0QLEVsSCawndTr - jlyZ5A64+VzF09+uGjVIjk4kSDm1HXJdkya9VstXUHDcGvhFYuB3OFLUXu69Q5VBlnDq - iQxE0Nqn6XBLRhiX7xtpPF5N+JLNRLWzXp8QmmjVwT2Dh1PGgXdSY/V9+hniJFoVKuWl - KW/TE4P/Jz/9mWZZuRgLgZqKxTWv+juy5ZzvbGt/uoRiSUf6J+I4WnjS7YqdqDfHoc2e - WDjF+Yu46zeSPtTNkGC3lE/WTwyvphYQ374asQOxhdTTfl7dEnzrbS3iyBt9c/pyYurD - FXJw== -X-Gm-Message-State: AJIora++1gLys25ECof0u9LvsLqq53NL/aKg9Xfn7EGhEqYqtk6Jm0P5 - RTbc+JahRli2OzmOKQRZI4wWlA== -X-Google-Smtp-Source: - AGRyM1vC9VxnuvLBjsVAM6qNEFXl5IPwmRbanNxBUua9l8GqQ2AlSl2w3qIg0HwpaHw77/ccv3FGlw== -X-Received: by 2002:adf:db12:0:b0:21b:970b:e882 with SMTP id - s18-20020adfdb12000000b0021b970be882mr37317063wri.6.1657098303035; - Wed, 06 Jul 2022 02:05:03 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.05.02 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:05:02 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 29/33] crypto: rockchip: store crypto_info in request - context -Date: Wed, 6 Jul 2022 09:04:08 +0000 -Message-Id: <20220706090412.806101-30-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020503_569252_3FCE3A43 -X-CRM114-Status: GOOD ( 13.57 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -The crypto_info to use must be stored in the request context. -This will help when 2 crypto_info will be available on rk3399. - -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.h | 2 ++ - drivers/crypto/rockchip/rk3288_crypto_ahash.c | 14 ++++++-------- - drivers/crypto/rockchip/rk3288_crypto_skcipher.c | 6 ++++-- - 3 files changed, 12 insertions(+), 10 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h -index 28bf09fe1c1d..ff9fc25972eb 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.h -+++ b/drivers/crypto/rockchip/rk3288_crypto.h -@@ -215,6 +215,7 @@ struct rk_ahash_ctx { ++ skcipher_request_set_tfm(&rctx->fallback_req, op->fallback_tfm); ++ skcipher_request_set_callback(&rctx->fallback_req, areq->base.flags, ++ areq->base.complete, areq->base.data); ++ skcipher_request_set_crypt(&rctx->fallback_req, areq->src, areq->dst, ++ areq->cryptlen, areq->iv); ++ if (rctx->mode & RK_CRYPTO_DEC) ++ err = crypto_skcipher_decrypt(&rctx->fallback_req); + else +- return dev->enqueue(dev, &req->base); ++ err = crypto_skcipher_encrypt(&rctx->fallback_req); ++ return err; ++} ++ ++static int rk_cipher_handle_req(struct skcipher_request *req) ++{ ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); ++ struct rk_crypto_info *rkc; ++ struct crypto_engine *engine; ++ ++ if (rk_cipher_need_fallback(req)) ++ return rk_cipher_fallback(req); ++ ++ rkc = get_rk_crypto(); ++ ++ engine = rkc->engine; ++ rctx->dev = rkc; ++ ++ return crypto_transfer_skcipher_request_to_engine(engine, req); + } - /* the private variable of hash for fallback */ - struct rk_ahash_rctx { -+ struct rk_crypto_info *dev; - struct ahash_request fallback_req; - u32 mode; - int nrsg; -@@ -231,6 +232,7 @@ struct rk_cipher_ctx { - }; + static int rk_aes_setkey(struct crypto_skcipher *cipher, +@@ -38,8 +109,9 @@ static int rk_aes_setkey(struct crypto_s + keylen != AES_KEYSIZE_256) + return -EINVAL; + ctx->keylen = keylen; +- memcpy_toio(ctx->dev->reg + RK_CRYPTO_AES_KEY_0, key, keylen); +- return 0; ++ memcpy(ctx->key, key, keylen); ++ ++ return crypto_skcipher_setkey(ctx->fallback_tfm, key, keylen); + } - struct rk_cipher_rctx { -+ struct rk_crypto_info *dev; - u8 backup_iv[AES_BLOCK_SIZE]; - u32 mode; - struct skcipher_request fallback_req; // keep at the end -diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -index 636dbcde0ca3..d1bf68cb390d 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -@@ -200,6 +200,7 @@ static int rk_ahash_export(struct ahash_request *req, void *out) + static int rk_des_setkey(struct crypto_skcipher *cipher, +@@ -53,8 +125,9 @@ static int rk_des_setkey(struct crypto_s + return err; + + ctx->keylen = keylen; +- memcpy_toio(ctx->dev->reg + RK_CRYPTO_TDES_KEY1_0, key, keylen); +- return 0; ++ memcpy(ctx->key, key, keylen); ++ ++ return crypto_skcipher_setkey(ctx->fallback_tfm, key, keylen); + } + + static int rk_tdes_setkey(struct crypto_skcipher *cipher, +@@ -68,161 +141,136 @@ static int rk_tdes_setkey(struct crypto_ + return err; + + ctx->keylen = keylen; +- memcpy_toio(ctx->dev->reg + RK_CRYPTO_TDES_KEY1_0, key, keylen); +- return 0; ++ memcpy(ctx->key, key, keylen); ++ ++ return crypto_skcipher_setkey(ctx->fallback_tfm, key, keylen); + } + + static int rk_aes_ecb_encrypt(struct skcipher_request *req) + { +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- struct rk_crypto_info *dev = ctx->dev; ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); + +- ctx->mode = RK_CRYPTO_AES_ECB_MODE; +- return rk_handle_req(dev, req); ++ rctx->mode = RK_CRYPTO_AES_ECB_MODE; ++ return rk_cipher_handle_req(req); + } + + static int rk_aes_ecb_decrypt(struct skcipher_request *req) + { +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- struct rk_crypto_info *dev = ctx->dev; ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); + +- ctx->mode = RK_CRYPTO_AES_ECB_MODE | RK_CRYPTO_DEC; +- return rk_handle_req(dev, req); ++ rctx->mode = RK_CRYPTO_AES_ECB_MODE | RK_CRYPTO_DEC; ++ return rk_cipher_handle_req(req); + } + + static int rk_aes_cbc_encrypt(struct skcipher_request *req) + { +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- struct rk_crypto_info *dev = ctx->dev; ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); + +- ctx->mode = RK_CRYPTO_AES_CBC_MODE; +- return rk_handle_req(dev, req); ++ rctx->mode = RK_CRYPTO_AES_CBC_MODE; ++ return rk_cipher_handle_req(req); + } + + static int rk_aes_cbc_decrypt(struct skcipher_request *req) + { +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- struct rk_crypto_info *dev = ctx->dev; ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); + +- ctx->mode = RK_CRYPTO_AES_CBC_MODE | RK_CRYPTO_DEC; +- return rk_handle_req(dev, req); ++ rctx->mode = RK_CRYPTO_AES_CBC_MODE | RK_CRYPTO_DEC; ++ return rk_cipher_handle_req(req); + } + + static int rk_des_ecb_encrypt(struct skcipher_request *req) + { +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- struct rk_crypto_info *dev = ctx->dev; ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - static int rk_ahash_digest(struct ahash_request *req) - { -+ struct rk_ahash_rctx *rctx = ahash_request_ctx(req); - struct rk_ahash_ctx *tctx = crypto_tfm_ctx(req->base.tfm); - struct rk_crypto_info *dev = tctx->dev; +- ctx->mode = 0; +- return rk_handle_req(dev, req); ++ rctx->mode = 0; ++ return rk_cipher_handle_req(req); + } -@@ -209,6 +210,8 @@ static int rk_ahash_digest(struct ahash_request *req) - if (!req->nbytes) - return zero_message_process(req); + static int rk_des_ecb_decrypt(struct skcipher_request *req) + { +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- struct rk_crypto_info *dev = ctx->dev; ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -+ rctx->dev = dev; -+ - return crypto_transfer_hash_request_to_engine(dev->engine, req); +- ctx->mode = RK_CRYPTO_DEC; +- return rk_handle_req(dev, req); ++ rctx->mode = RK_CRYPTO_DEC; ++ return rk_cipher_handle_req(req); } -@@ -223,10 +226,8 @@ static void crypto_ahash_dma_start(struct rk_crypto_info *dev, struct scatterlis - static int rk_hash_prepare(struct crypto_engine *engine, void *breq) + static int rk_des_cbc_encrypt(struct skcipher_request *req) { - struct ahash_request *areq = container_of(breq, struct ahash_request, base); -- struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); - struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); -- struct rk_ahash_ctx *tctx = crypto_ahash_ctx(tfm); -- struct rk_crypto_info *rkc = tctx->dev; -+ struct rk_crypto_info *rkc = rctx->dev; - int ret; +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- struct rk_crypto_info *dev = ctx->dev; ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - ret = dma_map_sg(rkc->dev, areq->src, sg_nents(areq->src), DMA_TO_DEVICE); -@@ -241,10 +242,8 @@ static int rk_hash_prepare(struct crypto_engine *engine, void *breq) - static int rk_hash_unprepare(struct crypto_engine *engine, void *breq) - { - struct ahash_request *areq = container_of(breq, struct ahash_request, base); -- struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); - struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); -- struct rk_ahash_ctx *tctx = crypto_ahash_ctx(tfm); -- struct rk_crypto_info *rkc = tctx->dev; -+ struct rk_crypto_info *rkc = rctx->dev; +- ctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC; +- return rk_handle_req(dev, req); ++ rctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC; ++ return rk_cipher_handle_req(req); + } - dma_unmap_sg(rkc->dev, areq->src, rctx->nrsg, DMA_TO_DEVICE); - return 0; -@@ -255,11 +254,10 @@ static int rk_hash_run(struct crypto_engine *engine, void *breq) - struct ahash_request *areq = container_of(breq, struct ahash_request, base); - struct crypto_ahash *tfm = crypto_ahash_reqtfm(areq); - struct rk_ahash_rctx *rctx = ahash_request_ctx(areq); -- struct rk_ahash_ctx *tctx = crypto_ahash_ctx(tfm); - struct ahash_alg *alg = __crypto_ahash_alg(tfm->base.__crt_alg); - struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash); - struct scatterlist *sg = areq->src; -- struct rk_crypto_info *rkc = tctx->dev; -+ struct rk_crypto_info *rkc = rctx->dev; - int err = 0; - int i; - u32 v; -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index cf0dfb6029d8..0b1c90ababb7 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -86,12 +86,15 @@ static int rk_cipher_handle_req(struct skcipher_request *req) + static int rk_des_cbc_decrypt(struct skcipher_request *req) { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *tctx = crypto_skcipher_ctx(tfm); +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- struct rk_crypto_info *dev = ctx->dev; + struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - struct rk_crypto_info *rkc = tctx->dev; - struct crypto_engine *engine = rkc->engine; - - if (rk_cipher_need_fallback(req)) - return rk_cipher_fallback(req); -+ rctx->dev = rkc; -+ - return crypto_transfer_skcipher_request_to_engine(engine, req); +- ctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC | RK_CRYPTO_DEC; +- return rk_handle_req(dev, req); ++ rctx->mode = RK_CRYPTO_TDES_CHAINMODE_CBC | RK_CRYPTO_DEC; ++ return rk_cipher_handle_req(req); } -@@ -290,7 +293,6 @@ static int rk_cipher_run(struct crypto_engine *engine, void *async_req) + static int rk_des3_ede_ecb_encrypt(struct skcipher_request *req) { - struct skcipher_request *areq = container_of(async_req, struct skcipher_request, base); - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(areq); - struct scatterlist *sgs, *sgd; - int err = 0; -@@ -303,7 +305,7 @@ static int rk_cipher_run(struct crypto_engine *engine, void *async_req) - unsigned int todo; - struct skcipher_alg *alg = crypto_skcipher_alg(tfm); - struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); -- struct rk_crypto_info *rkc = ctx->dev; -+ struct rk_crypto_info *rkc = rctx->dev; +- struct rk_crypto_info *dev = ctx->dev; ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); - algt->stat_req++; +- ctx->mode = RK_CRYPTO_TDES_SELECT; +- return rk_handle_req(dev, req); ++ rctx->mode = RK_CRYPTO_TDES_SELECT; ++ return rk_cipher_handle_req(req); + } - -From patchwork Wed Jul 6 09:04:09 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907620 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 22B53C433EF - for ; - Wed, 6 Jul 2022 09:06:46 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=4yUFm+Vvs1p9hY6KzCEkltw4qRvzP9fc8rVhfhJ2kGc=; b=Sg8go8gyTRURdZ - 5csJCRlw5wflkSHGBwPNzr5n9IwvcKq0txhL5J56xvvzacG2luKDY0p7X5ywJ2vYJzfBQN/hOE8uk - I6f3NCGE4aU4y1EFhqujr7VZIJJqzaoVL4miKtzMA8RBsXHRt1NzUGzJL4pNueRhyT0HFsLrqZplL - BtDNaYSjTYA/B7p4kshc6rMUlLFyjxvVsOzKXdRX6rrDOVBD0+eYtZTWo9L7hadJRcO2wgMKrYCB/ - 7W0j9A5K8hU+QNtSlCxpeENjYb/rPmpruue6ORzXOo7Z1acE90rbeQVojMPqhThOUaANn+W2dZTwB - kH5XsRBvN7pacqUd6uZA==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90zN-007cpM-LE; Wed, 06 Jul 2022 09:06:29 +0000 -Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90y5-007c61-Bm - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:05:10 +0000 -Received: by mail-wr1-x431.google.com with SMTP id f2so15687958wrr.6 - for ; - Wed, 06 Jul 2022 02:05:05 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=ScW8Amy0Gr2Hkf7kzoiIS1O1Eux9N8ylUQeMnxBh6Sw=; - b=4A5yy9kQGo4ERp7rY2PIggGhwgToU+H7F5Vixchm05HVmWIxMTCm23JSUWwZ4YrvrZ - 4rLoYxOtsS5yOzF2LLnviYJiTkDqFM00MxCfLXDLimC+AT1C89H3VSjKftnxCnNU9f+Y - ieNBQRYWjpG4TYMYyjmVYUdP1b8zGWiV/6AWO8XeoAap8O+x/aGhv3LsnZSnw6yGow0X - FvKQ5d/0dSksvcaRkc+/8PA3wA4ibfYMcq5PXph5q0+ICVmb+jbae9VNDthaU0wces6f - LUJmH0XnIiYmKMQ9NEJFrG9uAWSGWeoWvVN3SNlOUWBndCaNUtxjtlg5e1jiQVnJXNHO - B+6Q== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=ScW8Amy0Gr2Hkf7kzoiIS1O1Eux9N8ylUQeMnxBh6Sw=; - b=UlMPGiErs5ZU24OPF4DCWEEgk0OaBdhedVA2GvNLblkLMPuDJDzs490nToWhijAzeq - ZO9WnScTaPf0oU43fyz4yVtHDOcG9E4azRK/bOcNAVG7PjMvFwT3QHc8Y+Bxc38O3V+Q - 2Jcos9aS+6sqlW968XqxD//kqygwfx0IYGJbOKeyMDRG2T3grFIxf5WyhE2HJKc1M99r - afOS2CUYNTc87x8R4gUSoXQXH9ZH0Y7qFivULPnkvodVfzN+rcOSs9wPYqgM5yx48AYm - tquV9jrrJ0hJEy9h8Z46gE9vNuTnHx7H0CPuDC88V41FY/pdmyM4xY5i53Z78snBbNkO - j3VA== -X-Gm-Message-State: AJIora8mdhioU20xC2b5buPuiW+ZGhFXoL1RNdKk19ZenpXe/A344Lht - B6saEuYKz2zKQFpHKe7Afkviwg== -X-Google-Smtp-Source: - AGRyM1txrhlhWPK2Za2eFDLPM41Mg7oVNtni+D3lhM3bHh5w5qfPwPuqYoMY0QBvWftGTwBnQMY2Ow== -X-Received: by 2002:adf:dc09:0:b0:218:5f6a:f5db with SMTP id - t9-20020adfdc09000000b002185f6af5dbmr36469063wri.480.1657098304025; - Wed, 06 Jul 2022 02:05:04 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.05.03 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:05:03 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 30/33] crypto: rockchip: Check for clocks numbers and their - frequencies -Date: Wed, 6 Jul 2022 09:04:09 +0000 -Message-Id: <20220706090412.806101-31-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020509_427772_96179BC9 -X-CRM114-Status: GOOD ( 20.30 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -Add the number of clocks needed for each compatible. -Rockchip's datasheet give maximum frequencies for some clocks, so add -checks for verifying they are within limits. Let's start with rk3288 for -clock frequency check, other will came later. - -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.c | 75 +++++++++++++++++++++---- - drivers/crypto/rockchip/rk3288_crypto.h | 16 +++++- - 2 files changed, 79 insertions(+), 12 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index c92559b83f7d..232dc625d6e5 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.c -+++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -14,10 +14,58 @@ - #include - #include - #include -+#include - #include - #include - #include + static int rk_des3_ede_ecb_decrypt(struct skcipher_request *req) + { +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- struct rk_crypto_info *dev = ctx->dev; ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -+static const struct rk_variant rk3288_variant = { -+ .num_clks = 4, -+ .rkclks = { -+ { "sclk", 150000000}, -+ } -+}; -+ -+static const struct rk_variant rk3328_variant = { -+ .num_clks = 3, -+}; -+ -+static int rk_crypto_get_clks(struct rk_crypto_info *dev) -+{ -+ int i, j, err; -+ unsigned long cr; -+ -+ dev->num_clks = devm_clk_bulk_get_all(dev->dev, &dev->clks); -+ if (dev->num_clks < dev->variant->num_clks) { -+ dev_err(dev->dev, "Missing clocks, got %d instead of %d\n", -+ dev->num_clks, dev->variant->num_clks); -+ return -EINVAL; -+ } -+ -+ for (i = 0; i < dev->num_clks; i++) { -+ cr = clk_get_rate(dev->clks[i].clk); -+ for (j = 0; j < ARRAY_SIZE(dev->variant->rkclks); j++) { -+ if (dev->variant->rkclks[j].max == 0) -+ continue; -+ if (strcmp(dev->variant->rkclks[j].name, dev->clks[i].id)) -+ continue; -+ if (cr > dev->variant->rkclks[j].max) { -+ err = clk_set_rate(dev->clks[i].clk, -+ dev->variant->rkclks[j].max); -+ if (err) -+ dev_err(dev->dev, "Fail downclocking %s from %lu to %lu\n", -+ dev->variant->rkclks[j].name, cr, -+ dev->variant->rkclks[j].max); -+ else -+ dev_info(dev->dev, "Downclocking %s from %lu to %lu\n", -+ dev->variant->rkclks[j].name, cr, -+ dev->variant->rkclks[j].max); -+ } -+ } -+ } -+ return 0; -+} -+ - static int rk_crypto_enable_clk(struct rk_crypto_info *dev) +- ctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_DEC; +- return rk_handle_req(dev, req); ++ rctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_DEC; ++ return rk_cipher_handle_req(req); + } + + static int rk_des3_ede_cbc_encrypt(struct skcipher_request *req) { - int err; -@@ -201,8 +249,12 @@ static void rk_crypto_unregister(void) +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- struct rk_crypto_info *dev = ctx->dev; ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); + +- ctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC; +- return rk_handle_req(dev, req); ++ rctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC; ++ return rk_cipher_handle_req(req); } - static const struct of_device_id crypto_of_id_table[] = { -- { .compatible = "rockchip,rk3288-crypto" }, -- { .compatible = "rockchip,rk3328-crypto" }, -+ { .compatible = "rockchip,rk3288-crypto", -+ .data = &rk3288_variant, -+ }, -+ { .compatible = "rockchip,rk3328-crypto", -+ .data = &rk3328_variant, -+ }, - {} - }; - MODULE_DEVICE_TABLE(of, crypto_of_id_table); -@@ -220,6 +272,15 @@ static int rk_crypto_probe(struct platform_device *pdev) - goto err_crypto; - } + static int rk_des3_ede_cbc_decrypt(struct skcipher_request *req) + { +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- struct rk_crypto_info *dev = ctx->dev; ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -+ crypto_info->dev = &pdev->dev; -+ platform_set_drvdata(pdev, crypto_info); -+ -+ crypto_info->variant = of_device_get_match_data(&pdev->dev); -+ if (!crypto_info->variant) { -+ dev_err(&pdev->dev, "Missing variant\n"); -+ return -EINVAL; -+ } -+ - crypto_info->rst = devm_reset_control_get(dev, "crypto-rst"); - if (IS_ERR(crypto_info->rst)) { - err = PTR_ERR(crypto_info->rst); -@@ -236,12 +297,9 @@ static int rk_crypto_probe(struct platform_device *pdev) - goto err_crypto; - } +- ctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC | ++ rctx->mode = RK_CRYPTO_TDES_SELECT | RK_CRYPTO_TDES_CHAINMODE_CBC | + RK_CRYPTO_DEC; +- return rk_handle_req(dev, req); ++ return rk_cipher_handle_req(req); + } -- crypto_info->num_clks = devm_clk_bulk_get_all(&pdev->dev, -- &crypto_info->clks); -- if (crypto_info->num_clks < 3) { -- err = -EINVAL; -+ err = rk_crypto_get_clks(crypto_info); -+ if (err) - goto err_crypto; -- } +-static void rk_ablk_hw_init(struct rk_crypto_info *dev) ++static void rk_cipher_hw_init(struct rk_crypto_info *dev, struct skcipher_request *req) + { +- struct skcipher_request *req = +- skcipher_request_cast(dev->async_req); + struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(req); + struct crypto_tfm *tfm = crypto_skcipher_tfm(cipher); ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); + struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(cipher); +- u32 ivsize, block, conf_reg = 0; ++ u32 block, conf_reg = 0; - crypto_info->irq = platform_get_irq(pdev, 0); - if (crypto_info->irq < 0) { -@@ -259,9 +317,6 @@ static int rk_crypto_probe(struct platform_device *pdev) - goto err_crypto; - } + block = crypto_tfm_alg_blocksize(tfm); +- ivsize = crypto_skcipher_ivsize(cipher); -- crypto_info->dev = &pdev->dev; -- platform_set_drvdata(pdev, crypto_info); -- - crypto_info->engine = crypto_engine_alloc_init(&pdev->dev, true); - crypto_engine_start(crypto_info->engine); - init_completion(&crypto_info->complete); -diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h -index ff9fc25972eb..ac979d67ced9 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.h -+++ b/drivers/crypto/rockchip/rk3288_crypto.h -@@ -188,14 +188,26 @@ - #define CRYPTO_WRITE(dev, offset, val) \ - writel_relaxed((val), ((dev)->reg + (offset))) + if (block == DES_BLOCK_SIZE) { +- ctx->mode |= RK_CRYPTO_TDES_FIFO_MODE | ++ rctx->mode |= RK_CRYPTO_TDES_FIFO_MODE | + RK_CRYPTO_TDES_BYTESWAP_KEY | + RK_CRYPTO_TDES_BYTESWAP_IV; +- CRYPTO_WRITE(dev, RK_CRYPTO_TDES_CTRL, ctx->mode); +- memcpy_toio(dev->reg + RK_CRYPTO_TDES_IV_0, req->iv, ivsize); ++ CRYPTO_WRITE(dev, RK_CRYPTO_TDES_CTRL, rctx->mode); ++ memcpy_toio(dev->reg + RK_CRYPTO_TDES_KEY1_0, ctx->key, ctx->keylen); + conf_reg = RK_CRYPTO_DESSEL; + } else { +- ctx->mode |= RK_CRYPTO_AES_FIFO_MODE | ++ rctx->mode |= RK_CRYPTO_AES_FIFO_MODE | + RK_CRYPTO_AES_KEY_CHANGE | + RK_CRYPTO_AES_BYTESWAP_KEY | + RK_CRYPTO_AES_BYTESWAP_IV; + if (ctx->keylen == AES_KEYSIZE_192) +- ctx->mode |= RK_CRYPTO_AES_192BIT_key; ++ rctx->mode |= RK_CRYPTO_AES_192BIT_key; + else if (ctx->keylen == AES_KEYSIZE_256) +- ctx->mode |= RK_CRYPTO_AES_256BIT_key; +- CRYPTO_WRITE(dev, RK_CRYPTO_AES_CTRL, ctx->mode); +- memcpy_toio(dev->reg + RK_CRYPTO_AES_IV_0, req->iv, ivsize); ++ rctx->mode |= RK_CRYPTO_AES_256BIT_key; ++ CRYPTO_WRITE(dev, RK_CRYPTO_AES_CTRL, rctx->mode); ++ memcpy_toio(dev->reg + RK_CRYPTO_AES_KEY_0, ctx->key, ctx->keylen); + } + conf_reg |= RK_CRYPTO_BYTESWAP_BTFIFO | + RK_CRYPTO_BYTESWAP_BRFIFO; +@@ -231,189 +279,196 @@ static void rk_ablk_hw_init(struct rk_cr + RK_CRYPTO_BCDMA_ERR_ENA | RK_CRYPTO_BCDMA_DONE_ENA); + } -+#define RK_MAX_CLKS 4 -+ -+struct rk_clks { -+ const char *name; -+ unsigned long max; -+}; -+ -+struct rk_variant { -+ int num_clks; -+ struct rk_clks rkclks[RK_MAX_CLKS]; -+}; -+ - struct rk_crypto_info { - struct device *dev; - struct clk_bulk_data *clks; -- int num_clks; -+ int num_clks; - struct reset_control *rst; - void __iomem *reg; - int irq; -- -+ const struct rk_variant *variant; - struct crypto_engine *engine; - struct completion complete; - int status; - -From patchwork Wed Jul 6 09:04:10 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907619 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 015D4CCA473 - for ; - Wed, 6 Jul 2022 09:05:55 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=zvZNIDIhcnabxTjE92iLjr4QMJFv2RIy57SH0KW3teM=; b=LmV+607184ZxmK - Tqbo7LOKWvsLzkdjTEQN+gz2WprVrBLJA3/t9OHvKjlLMNDaPm1+ptohOeP0aXMvDZon/NF7gOypC - XxgkjFUC4XEodJW9b2bCW81e4kHzC40/SNaCWG+JRJfaQgdIFHaHdRMqEhppDUGgicb3ba9H4/xXr - iasflgRTziDNUDvhAmkDGdqjJl02+qbSbgFA1XRWRMI4V4DTqJgHQLlR+NmYi+yqds7J3JgH7SGtR - pix7zTajZ5e44tGDWTNI8jZA5Cp6CcI51VrQVoZQg+eCOI+zPnddQWO/0syNQhGTYCp+XqgYLhBI/ - VeMraEHTQ41wtUMEvyjA==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90yg-007cQE-Hf; Wed, 06 Jul 2022 09:05:46 +0000 -Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90y1-007blz-Eu - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:05:06 +0000 -Received: by mail-wr1-x433.google.com with SMTP id b26so21082074wrc.2 - for ; - Wed, 06 Jul 2022 02:05:05 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=/HcULCDUWUOb7zL9pkaT5teTJK7hgsOh6ToY9+UZMac=; - b=jzmrHnL6AP5JP5ynKqMYe5yX2tYmFdVE8TwhZFHgWJFWW0o1xKFCEzfUtnEChQnGm/ - A6fQvxFRl2SJpiM4Zj/xug3hmVwSmyjac1QgUpHLeezzF65VvWPXm1axFpEEUOV6/Tvq - FmFmnBGkQtH8EGsxTiOQ3zh9mBrKz/VYH64Ram1n1qoiNJN0DeG0dPQXrNtxp3U+wfWW - e1NjKc352R2J8iC4t/8fmbX8ZkB6Zor6dVY+HZIwU2XX5wv7jTxP50GPf53rIHxA+20F - 12t1xepnNyAfFnfApYwl21tsc0KoW0p5KIZ1vlvUXF4b+4tt44fifPg2WA5jVg9InUm5 - TAyg== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=/HcULCDUWUOb7zL9pkaT5teTJK7hgsOh6ToY9+UZMac=; - b=j2XYAuVoOHEAIK5mDYbvS8IyqzZL9sA0PO+08zMWyrwJ9kbBppzFnQHYAUH4Kn2P8d - rAFZKCpj2qtozrY44pEq831Ab5FTK0PBQt3tr9lqBnXq4KV/6T6i9m2eKIwX5HPGwL4c - JaQPiEQi/IXIFCFgMM3NdFqXPP2STl4CkQjrqGTabGce1s2YJOuuY0JCXIQCeMX1aq7y - +R7gkpko9AFCR3BzYGmEZEXniLR+vLSurgKV8fd3RD6I8wkwGERG0ap75WZKU2MdN8VZ - w4oocFyC2zlc9lzz/YfST0MrrHWywCfRrifF1fGin1nCLklfd7GcznJApevg6bFQLpVe - SRZg== -X-Gm-Message-State: AJIora9tP2AMcN1s/Wm7hsRLBl3t5v5Gd6XtBTJyWrgRf6Jq5l54ZGbU - hXQincE9Y2FWsw9hrUIcXXnFBA== -X-Google-Smtp-Source: - AGRyM1vRD4rRZCFfC8x4QQPMMOy8cjZ8voHj35W/8OT3F5k7JS0Li37UwyHkRVf/XoUVjf0EDwXrnw== -X-Received: by 2002:adf:fb08:0:b0:21b:af81:2ffd with SMTP id - c8-20020adffb08000000b0021baf812ffdmr36963912wrr.685.1657098305026; - Wed, 06 Jul 2022 02:05:05 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.05.04 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:05:04 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 31/33] crypto: rockchip: rk_ahash_reg_init use crypto_info - from parameter -Date: Wed, 6 Jul 2022 09:04:10 +0000 -Message-Id: <20220706090412.806101-32-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_020505_557491_1E895A01 -X-CRM114-Status: GOOD ( 10.28 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -rk_ahash_reg_init() use crypto_info from TFM context, since we will -remove it, let's take if from parameters. - -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto_ahash.c | 8 +++----- - 1 file changed, 3 insertions(+), 5 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -index d1bf68cb390d..30f78256c955 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -@@ -78,12 +78,10 @@ static int zero_message_process(struct ahash_request *req) - return 0; +-static void crypto_dma_start(struct rk_crypto_info *dev) +-{ +- CRYPTO_WRITE(dev, RK_CRYPTO_BRDMAS, dev->addr_in); +- CRYPTO_WRITE(dev, RK_CRYPTO_BRDMAL, dev->count / 4); +- CRYPTO_WRITE(dev, RK_CRYPTO_BTDMAS, dev->addr_out); ++static void crypto_dma_start(struct rk_crypto_info *dev, ++ struct scatterlist *sgs, ++ struct scatterlist *sgd, unsigned int todo) ++{ ++ CRYPTO_WRITE(dev, RK_CRYPTO_BRDMAS, sg_dma_address(sgs)); ++ CRYPTO_WRITE(dev, RK_CRYPTO_BRDMAL, todo); ++ CRYPTO_WRITE(dev, RK_CRYPTO_BTDMAS, sg_dma_address(sgd)); + CRYPTO_WRITE(dev, RK_CRYPTO_CTRL, RK_CRYPTO_BLOCK_START | + _SBF(RK_CRYPTO_BLOCK_START, 16)); } --static void rk_ahash_reg_init(struct ahash_request *req) -+static void rk_ahash_reg_init(struct ahash_request *req, -+ struct rk_crypto_info *dev) +-static int rk_set_data_start(struct rk_crypto_info *dev) ++static int rk_cipher_run(struct crypto_engine *engine, void *async_req) { - struct rk_ahash_rctx *rctx = ahash_request_ctx(req); -- struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); -- struct rk_ahash_ctx *tctx = crypto_ahash_ctx(tfm); -- struct rk_crypto_info *dev = tctx->dev; - int reg_status; +- int err; +- struct skcipher_request *req = +- skcipher_request_cast(dev->async_req); +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- u32 ivsize = crypto_skcipher_ivsize(tfm); +- u8 *src_last_blk = page_address(sg_page(dev->sg_src)) + +- dev->sg_src->offset + dev->sg_src->length - ivsize; +- +- /* Store the iv that need to be updated in chain mode. +- * And update the IV buffer to contain the next IV for decryption mode. +- */ +- if (ctx->mode & RK_CRYPTO_DEC) { +- memcpy(ctx->iv, src_last_blk, ivsize); +- sg_pcopy_to_buffer(dev->first, dev->src_nents, req->iv, +- ivsize, dev->total - ivsize); +- } +- +- err = dev->load_data(dev, dev->sg_src, dev->sg_dst); +- if (!err) +- crypto_dma_start(dev); +- return err; +-} +- +-static int rk_ablk_start(struct rk_crypto_info *dev) +-{ +- struct skcipher_request *req = +- skcipher_request_cast(dev->async_req); +- unsigned long flags; ++ struct skcipher_request *areq = container_of(async_req, struct skcipher_request, base); ++ struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); ++ struct rk_cipher_rctx *rctx = skcipher_request_ctx(areq); ++ struct scatterlist *sgs, *sgd; + int err = 0; ++ int ivsize = crypto_skcipher_ivsize(tfm); ++ int offset; ++ u8 iv[AES_BLOCK_SIZE]; ++ u8 biv[AES_BLOCK_SIZE]; ++ u8 *ivtouse = areq->iv; ++ unsigned int len = areq->cryptlen; ++ unsigned int todo; ++ struct skcipher_alg *alg = crypto_skcipher_alg(tfm); ++ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); ++ struct rk_crypto_info *rkc = rctx->dev; - reg_status = CRYPTO_READ(dev, RK_CRYPTO_CTRL) | -@@ -281,7 +279,7 @@ static int rk_hash_run(struct crypto_engine *engine, void *breq) - goto theend; - } +- dev->left_bytes = req->cryptlen; +- dev->total = req->cryptlen; +- dev->sg_src = req->src; +- dev->first = req->src; +- dev->src_nents = sg_nents(req->src); +- dev->sg_dst = req->dst; +- dev->dst_nents = sg_nents(req->dst); +- dev->aligned = 1; +- +- spin_lock_irqsave(&dev->lock, flags); +- rk_ablk_hw_init(dev); +- err = rk_set_data_start(dev); +- spin_unlock_irqrestore(&dev->lock, flags); +- return err; +-} ++ err = pm_runtime_resume_and_get(rkc->dev); ++ if (err) ++ return err; -- rk_ahash_reg_init(areq); -+ rk_ahash_reg_init(areq, rkc); +-static void rk_iv_copyback(struct rk_crypto_info *dev) +-{ +- struct skcipher_request *req = +- skcipher_request_cast(dev->async_req); +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- u32 ivsize = crypto_skcipher_ivsize(tfm); ++ algt->stat_req++; ++ rkc->nreq++; - while (sg) { - reinit_completion(&rkc->complete); - -From patchwork Wed Jul 6 09:04:11 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907735 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 2E4B6C43334 - for ; - Wed, 6 Jul 2022 09:23:56 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=W4tZDmVWGzyWSJ+GdWHCd/W5YmN2WN6EOoqV9ZRrB2U=; b=xaX5PyNjqPaXBy - lXyQ+bZH58AcgVH4TEtBziR3uiX3pVsX6qkQ/+K4GSM3QmLsaJAo5rqk3ORlW+5+77Vw6mvhhHrfv - sphzD1NHkgxOz4NI4kMlRS0w/FRc67h4+5sct+HXUrJyQVl4oRIouuQFJtVdAW7d3uoM483zs3PeQ - dvrO7Lcg/JQUtXcUg1pGLgo/BuWFRSM+uZINXCRPdbWRLa7uOhXFD8N662bcMAM7awPIUsI4VAbfL - rYgokY8U/E3iqnQ7WPvxv34cKizCGHR5R+Gv8X+tiAJHrOxkYD+XSWolutiFkaqap+QXf4nGZfiB0 - 3N21lwrwQyaZtzJOZOAQ==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91G0-007kjO-BB; Wed, 06 Jul 2022 09:23:40 +0000 -Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91EP-007jeN-9b - for linux-rockchip@bombadil.infradead.org; Wed, 06 Jul 2022 09:22:01 +0000 -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: - References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: - Content-Type:Content-ID:Content-Description; - bh=z10vTtQ4qHSJZ9nRrmQY5lLp9Bvyc0G2kDbemdDveLc=; b=dYEAiulZ8yG0ODZVrtn67nbllf - Of6BwkBGS+nImAQntWEnO1p1dj91dF4lOyKJQE6Pff+8ueWiPRsJzcTTgGBqbKjwKFNs9s2hqzsYA - pGwaeQ+lGndDA+/mUJLC30TNa+PYb/cG+efvf/xDnmkhkj8GzbGaUPxZnjva/uJ/GkcUC+9E0EEAH - j8OGhSzvWQ93uHsMNiENCPC6N62mZAIM3F2a0obbi5agYPQzIIxBvKuFQUT8uTr4YijrofaLtfaYG - 47iLFAdaks346bID0URPsPC/6TYi/UOk1wI6+rFe+l9oYsanNN4FuGSlWdcVmuvmpuSVnsI/1GyVD - 3n4oUDSg==; -Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) - by casper.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90yD-001MPF-UF - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:05:19 +0000 -Received: by mail-wr1-x42e.google.com with SMTP id h17so7904518wrx.0 - for ; - Wed, 06 Jul 2022 02:05:17 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=z10vTtQ4qHSJZ9nRrmQY5lLp9Bvyc0G2kDbemdDveLc=; - b=E5GE9YCmCMIhMO2D/gpbHRe1l3D7xDBrlxRw1T0NpHDSuJX2I0zJ01SA77X+Ypb95F - IxH9341vzS6f9HRvGDZW1Pvfah1Ajs+GYMuuix6+XAER3HwBkC8VVVKn8re/11zSOLUY - /PpGB+RRuIYMS+tnnb7gKAgXTpXUqslS3pUYbx55O7iqFoFMR5yXFZX4/XHD1KneRk27 - SbYZG0c2XxXOMsPSLg0CkQOe2LamirBkkH4ropL6mvCgJ/uXVy57YtoLlOl2NbUTROU7 - xs6SXcvpWeY8HlpE/xnWr7NDJiJTiGnStnPsoRqaj2Qc0zZ5J+/gJORvYosCb/3sgoWn - UDWg== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=z10vTtQ4qHSJZ9nRrmQY5lLp9Bvyc0G2kDbemdDveLc=; - b=e1zqKpNRQkaFaLjJzxrxpQKHkOfmBj7ZCKS7B1BX9zoZb3XsgLO2uu7rT2jY0AJjoC - CNTzBB/kAS9IVj50FEWs7w32DPW8Jk1HFmzNs/jt66lvFt+Ri0DE9ZyxycVGhlRvmyQ7 - 262o6ibrJmOLXcAUiwIw5qpmbvqfrsPTowaaqaarEhq1NHH3Mel4SxVha7rVJ32vvnvn - y7AdqETuvOXVJ9+NAFnMnb53fR7P2CMtK/cyGqd0SlCLBzGL6mrg7MIQrQcAPIE7O1HK - o+8qOQ2dsjfsnJnfgH6BlTVKK76hqaTeMiR0bjTRsyzBUMpzTwIKJmeSHkPoth+aKfMZ - AH+w== -X-Gm-Message-State: AJIora+x/P17rVbyZVuzl2mw8l9j2gvyHa1pRNloaIVZsV0rKjI/Nh2T - CSobf1O73Jy61FmCC/EZkDvUsQ== -X-Google-Smtp-Source: - AGRyM1ulg96UJaCG6169ehYplV1+a5sXk+kbCnPbNNkmvYpCCQnDU08EeOTBhit7iFXQIkTZCwV3Gg== -X-Received: by 2002:a05:6000:1243:b0:21d:6123:7a80 with SMTP id - j3-20020a056000124300b0021d61237a80mr20483339wrx.354.1657098305981; - Wed, 06 Jul 2022 02:05:05 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.05.05 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:05:05 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 32/33] crypto: rockchip: permit to have more than one reset -Date: Wed, 6 Jul 2022 09:04:11 +0000 -Message-Id: <20220706090412.806101-33-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_100518_046260_25E97BAD -X-CRM114-Status: GOOD ( 10.62 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -The RK3399 has 3 resets, so the driver to handle multiple resets. -This is done by using devm_reset_control_array_get_exclusive(). - -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index 232dc625d6e5..d96f375423d5 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.c -+++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -281,7 +281,7 @@ static int rk_crypto_probe(struct platform_device *pdev) - return -EINVAL; +- /* Update the IV buffer to contain the next IV for encryption mode. */ +- if (!(ctx->mode & RK_CRYPTO_DEC)) { +- if (dev->aligned) { +- memcpy(req->iv, sg_virt(dev->sg_dst) + +- dev->sg_dst->length - ivsize, ivsize); +- } else { +- memcpy(req->iv, dev->addr_vir + +- dev->count - ivsize, ivsize); ++ ivsize = crypto_skcipher_ivsize(tfm); ++ if (areq->iv && crypto_skcipher_ivsize(tfm) > 0) { ++ if (rctx->mode & RK_CRYPTO_DEC) { ++ offset = areq->cryptlen - ivsize; ++ scatterwalk_map_and_copy(rctx->backup_iv, areq->src, ++ offset, ivsize, 0); + } } +-} -- crypto_info->rst = devm_reset_control_get(dev, "crypto-rst"); -+ crypto_info->rst = devm_reset_control_array_get_exclusive(dev); - if (IS_ERR(crypto_info->rst)) { - err = PTR_ERR(crypto_info->rst); - goto err_crypto; - -From patchwork Wed Jul 6 09:04:12 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: LABBE Corentin -X-Patchwork-Id: 12907722 -Return-Path: - -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -Received: from bombadil.infradead.org (bombadil.infradead.org - [198.137.202.133]) - (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) - (No client certificate requested) - by smtp.lore.kernel.org (Postfix) with ESMTPS id 8311AC43334 - for ; - Wed, 6 Jul 2022 09:22:22 +0000 (UTC) -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=lists.infradead.org; s=bombadil.20210309; h=Sender: - Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: - List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: - Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: - Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: - List-Owner; bh=slcSx6WVp3XyesXTEFyl1tDRMdhRdFzbTQJXtQHc88A=; b=j05Jk9Z5myYkoh - eCkssf9ks30K3xFJsA2MLcCr/KBhSnCk9LzzQyCiqZwnbQlQIfOuF5J6ybIj/V5Dh1pW1YjOzYTZh - UmT3v8chbMr6a1X2GP9ihMxtBv3Gi5pocQLfWsa8Vat9mzn6E3P6T4jwf5Lcw2YnRuHZFsoXJWfnC - T8U95KI3IaR09TT8AhxZqv6q27agcwnKdr7nMUnnm3CUqMT89zwhoS+eXrn73t87ZA1oLAQlJTn45 - 17X1zf8PrGgdpRUS/sQ4dTjCrKUDgNDBKDRkb4YGPVicA6mX0goGAvWA1mL0mRT7fEJ/WNxgLo+aY - QnSufzsLeRQqxaUofRzQ==; -Received: from localhost ([::1] helo=bombadil.infradead.org) - by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91EY-007jqK-U3; Wed, 06 Jul 2022 09:22:10 +0000 -Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) - by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o91EO-007jjw-EQ - for linux-rockchip@bombadil.infradead.org; Wed, 06 Jul 2022 09:22:00 +0000 -DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; - d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: - References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: - Content-Type:Content-ID:Content-Description; - bh=QipqmHbUZGHLWu5BlBNjHs+pAuw4tqeLoTpMAyu+/es=; b=L53XNEyZCYmSgqzNnDNrKXPGq1 - VUm7s61WEI7zA2Py72tNjK57HZJdQX1w2tqf/rIYqNQF71gjGBHhfw2ukBbEmYWsTe1KGf6XiEj8C - RcpGp8Oi8KGYIjbwK0Ni/uFEIAtFK0o/Ud1SifFFScoWfDGhGILSD8LN4qa+wPD4QFqD6QtsI7iaK - 6GEnrIcjgn89welRVZ5gEjzTW1Qz5FZOeZDi5GL5ytTpjyfS1kbC0Tathucl0WCUNqVUFobC46Ii+ - W+5Dp8EH9QtHoKFJi+uBbfB2C1YjfSdMLiQRtMt0/no6aRcMPSGC1BCRsIDiPbbOUVKqVjS+1AXMH - NOghKB2w==; -Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) - by casper.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) - id 1o90yD-001MPJ-UN - for linux-rockchip@lists.infradead.org; Wed, 06 Jul 2022 09:05:23 +0000 -Received: by mail-wr1-x42d.google.com with SMTP id r14so15270113wrg.1 - for ; - Wed, 06 Jul 2022 02:05:17 -0700 (PDT) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=baylibre-com.20210112.gappssmtp.com; s=20210112; - h=from:to:cc:subject:date:message-id:in-reply-to:references - :mime-version:content-transfer-encoding; - bh=QipqmHbUZGHLWu5BlBNjHs+pAuw4tqeLoTpMAyu+/es=; - b=gDGpXwHRGY/7p/RFFeQQP0rfqzNe0NslrnJ0ZJTYW3I7ZMGxirM4hfH6Wqo9U3TuPO - IjJ40nttP70N8YE/47mhmgpRtNBux2d7QCylqgCyWaPicxhBnOtSUAdlh5AhEoThiqFx - rq8OsFyO7a7Q/mKBIrAUhPj8MKQTCK7pzTRnyGsMh3VCZ0e0cNN97/SP+M+uNbYXbB3W - A643FBD2j8ghcN3GR6sNSufPMkh9kEXH3TnPSkYWUS7uloS45eJt8M3P23c7A5pongGo - ULdMkGdkGO4thl4or8Cw9eKTzUh1pYp5VgAK3B/XN3kRevxoUtalya5BXYYNJIJNfUZM - 2w3g== -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20210112; - h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to - :references:mime-version:content-transfer-encoding; - bh=QipqmHbUZGHLWu5BlBNjHs+pAuw4tqeLoTpMAyu+/es=; - b=jnlcZ0GBoln3SkmMaLxiQCVjjIOfInUut+X8YSmwhSDCp1mqd/et1K1w6AuLNcVstH - VpA+3okmNMd28YXpP+fygNspvfPgy2QnDNS8EwNoGAYlxF2gZs3ARCm0D6DrmbzVdic9 - Aho+Te2MOijvSyPFbEeuuYtsJXBydyElu/3WAlVuqhWB1sXDLpktkT3mJMH3hdakKU4a - qEVzOcw/PLuK2Tr3SuUvAXb2kaZ/OfPgtBBJF6vKYzl35xVu0Pc1Aw044FUXlo//lrxW - afYF6nmQoCpQU1vBbagZ6HUEb5F/72QrQyr0p4UTN75xFzG4wX9uR8JfiGvL5KGeRd60 - GEgw== -X-Gm-Message-State: AJIora9ASdTeoCXAzbItBkTmIU1p1zme0KHXFjyMjJiw0/Ybzs7y+WvX - viDcwBk6Qx+gXc2FT2SwyojA3Q== -X-Google-Smtp-Source: - AGRyM1skwT19WIXB6+P0R6c6aHo+fjYbbftLuYZNo8otvFAD+8FiLqMKZ8oLiKk8lrcWovoYVSYUTg== -X-Received: by 2002:adf:d22f:0:b0:21d:6b26:8c6f with SMTP id - k15-20020adfd22f000000b0021d6b268c6fmr14385816wrh.70.1657098306982; - Wed, 06 Jul 2022 02:05:06 -0700 (PDT) -Received: from localhost.localdomain - (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) - by smtp.googlemail.com with ESMTPSA id - v11-20020adfe28b000000b0021d6ef34b2asm5230223wri.51.2022.07.06.02.05.06 - (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); - Wed, 06 Jul 2022 02:05:06 -0700 (PDT) -From: Corentin Labbe -To: heiko@sntech.de, - herbert@gondor.apana.org.au, - krzysztof.kozlowski+dt@linaro.org, - mturquette@baylibre.com, - p.zabel@pengutronix.de, - robh+dt@kernel.org, - sboyd@kernel.org -Cc: linux-rockchip@lists.infradead.org, - devicetree@vger.kernel.org, - linux-arm-kernel@lists.infradead.org, - linux-clk@vger.kernel.org, - linux-crypto@vger.kernel.org, - linux-kernel@vger.kernel.org, - john@metanate.com, - didi.debian@cknow.org, - Corentin Labbe -Subject: [PATCH v8 33/33] crypto: rockchip: Add support for RK3399 -Date: Wed, 6 Jul 2022 09:04:12 +0000 -Message-Id: <20220706090412.806101-34-clabbe@baylibre.com> -X-Mailer: git-send-email 2.25.1 -In-Reply-To: <20220706090412.806101-1-clabbe@baylibre.com> -References: <20220706090412.806101-1-clabbe@baylibre.com> -MIME-Version: 1.0 -X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 -X-CRM114-CacheID: sfid-20220706_100519_417420_1045A328 -X-CRM114-Status: GOOD ( 25.31 ) -X-BeenThere: linux-rockchip@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: Upstream kernel work for Rockchip platforms - -List-Unsubscribe: , - -List-Archive: -List-Post: -List-Help: -List-Subscribe: , - -Sender: "Linux-rockchip" -Errors-To: - linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org - -The RK3399 has 2 rk3288 compatible crypto device named crypto0 and -crypto1. The only difference is lack of RSA in crypto1. - -We need to add driver support for 2 parallel instance as only one need -to register crypto algorithms. -Then the driver will round robin each request on each device. - -For avoiding complexity (device bringup after a TFM is created), PM is -modified to be handled per request. -Signed-off-by: Corentin Labbe ---- - drivers/crypto/rockchip/rk3288_crypto.c | 92 +++++++++++++++---- - drivers/crypto/rockchip/rk3288_crypto.h | 25 +++-- - drivers/crypto/rockchip/rk3288_crypto_ahash.c | 37 ++++---- - .../crypto/rockchip/rk3288_crypto_skcipher.c | 37 ++++---- - 4 files changed, 123 insertions(+), 68 deletions(-) - -diff --git a/drivers/crypto/rockchip/rk3288_crypto.c b/drivers/crypto/rockchip/rk3288_crypto.c -index d96f375423d5..6217e73ba4c4 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.c -+++ b/drivers/crypto/rockchip/rk3288_crypto.c -@@ -19,6 +19,23 @@ - #include - #include +-static void rk_update_iv(struct rk_crypto_info *dev) +-{ +- struct skcipher_request *req = +- skcipher_request_cast(dev->async_req); +- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); +- struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); +- u32 ivsize = crypto_skcipher_ivsize(tfm); +- u8 *new_iv = NULL; ++ sgs = areq->src; ++ sgd = areq->dst; -+static struct rockchip_ip rocklist = { -+ .dev_list = LIST_HEAD_INIT(rocklist.dev_list), -+ .lock = __SPIN_LOCK_UNLOCKED(rocklist.lock), -+}; -+ -+struct rk_crypto_info *get_rk_crypto(void) -+{ -+ struct rk_crypto_info *first; -+ -+ spin_lock(&rocklist.lock); -+ first = list_first_entry_or_null(&rocklist.dev_list, -+ struct rk_crypto_info, list); -+ list_rotate_left(&rocklist.dev_list); -+ spin_unlock(&rocklist.lock); -+ return first; -+} +- if (ctx->mode & RK_CRYPTO_DEC) { +- new_iv = ctx->iv; +- } else { +- new_iv = page_address(sg_page(dev->sg_dst)) + +- dev->sg_dst->offset + dev->sg_dst->length - ivsize; ++ while (sgs && sgd && len) { ++ if (!sgs->length) { ++ sgs = sg_next(sgs); ++ sgd = sg_next(sgd); ++ continue; ++ } ++ if (rctx->mode & RK_CRYPTO_DEC) { ++ /* we backup last block of source to be used as IV at next step */ ++ offset = sgs->length - ivsize; ++ scatterwalk_map_and_copy(biv, sgs, offset, ivsize, 0); ++ } ++ if (sgs == sgd) { ++ err = dma_map_sg(rkc->dev, sgs, 1, DMA_BIDIRECTIONAL); ++ if (err <= 0) { ++ err = -EINVAL; ++ goto theend_iv; ++ } ++ } else { ++ err = dma_map_sg(rkc->dev, sgs, 1, DMA_TO_DEVICE); ++ if (err <= 0) { ++ err = -EINVAL; ++ goto theend_iv; ++ } ++ err = dma_map_sg(rkc->dev, sgd, 1, DMA_FROM_DEVICE); ++ if (err <= 0) { ++ err = -EINVAL; ++ goto theend_sgs; ++ } ++ } ++ err = 0; ++ rk_cipher_hw_init(rkc, areq); ++ if (ivsize) { ++ if (ivsize == DES_BLOCK_SIZE) ++ memcpy_toio(rkc->reg + RK_CRYPTO_TDES_IV_0, ivtouse, ivsize); ++ else ++ memcpy_toio(rkc->reg + RK_CRYPTO_AES_IV_0, ivtouse, ivsize); ++ } ++ reinit_completion(&rkc->complete); ++ rkc->status = 0; + - static const struct rk_variant rk3288_variant = { - .num_clks = 4, - .rkclks = { -@@ -30,6 +47,10 @@ static const struct rk_variant rk3328_variant = { - .num_clks = 3, - }; ++ todo = min(sg_dma_len(sgs), len); ++ len -= todo; ++ crypto_dma_start(rkc, sgs, sgd, todo / 4); ++ wait_for_completion_interruptible_timeout(&rkc->complete, ++ msecs_to_jiffies(2000)); ++ if (!rkc->status) { ++ dev_err(rkc->dev, "DMA timeout\n"); ++ err = -EFAULT; ++ goto theend; ++ } ++ if (sgs == sgd) { ++ dma_unmap_sg(rkc->dev, sgs, 1, DMA_BIDIRECTIONAL); ++ } else { ++ dma_unmap_sg(rkc->dev, sgs, 1, DMA_TO_DEVICE); ++ dma_unmap_sg(rkc->dev, sgd, 1, DMA_FROM_DEVICE); ++ } ++ if (rctx->mode & RK_CRYPTO_DEC) { ++ memcpy(iv, biv, ivsize); ++ ivtouse = iv; ++ } else { ++ offset = sgd->length - ivsize; ++ scatterwalk_map_and_copy(iv, sgd, offset, ivsize, 0); ++ ivtouse = iv; ++ } ++ sgs = sg_next(sgs); ++ sgd = sg_next(sgd); + } -+static const struct rk_variant rk3399_variant = { -+ .num_clks = 3, -+}; +- if (ivsize == DES_BLOCK_SIZE) +- memcpy_toio(dev->reg + RK_CRYPTO_TDES_IV_0, new_iv, ivsize); +- else if (ivsize == AES_BLOCK_SIZE) +- memcpy_toio(dev->reg + RK_CRYPTO_AES_IV_0, new_iv, ivsize); +-} ++ if (areq->iv && ivsize > 0) { ++ offset = areq->cryptlen - ivsize; ++ if (rctx->mode & RK_CRYPTO_DEC) { ++ memcpy(areq->iv, rctx->backup_iv, ivsize); ++ memzero_explicit(rctx->backup_iv, ivsize); ++ } else { ++ scatterwalk_map_and_copy(areq->iv, areq->dst, offset, ++ ivsize, 0); ++ } ++ } + +-/* return: +- * true some err was occurred +- * fault no err, continue +- */ +-static int rk_ablk_rx(struct rk_crypto_info *dev) +-{ +- int err = 0; +- struct skcipher_request *req = +- skcipher_request_cast(dev->async_req); ++theend: ++ pm_runtime_put_autosuspend(rkc->dev); + +- dev->unload_data(dev); +- if (!dev->aligned) { +- if (!sg_pcopy_from_buffer(req->dst, dev->dst_nents, +- dev->addr_vir, dev->count, +- dev->total - dev->left_bytes - +- dev->count)) { +- err = -EINVAL; +- goto out_rx; +- } +- } +- if (dev->left_bytes) { +- rk_update_iv(dev); +- if (dev->aligned) { +- if (sg_is_last(dev->sg_src)) { +- dev_err(dev->dev, "[%s:%d] Lack of data\n", +- __func__, __LINE__); +- err = -ENOMEM; +- goto out_rx; +- } +- dev->sg_src = sg_next(dev->sg_src); +- dev->sg_dst = sg_next(dev->sg_dst); +- } +- err = rk_set_data_start(dev); ++ local_bh_disable(); ++ crypto_finalize_skcipher_request(engine, areq, err); ++ local_bh_enable(); ++ return 0; + - static int rk_crypto_get_clks(struct rk_crypto_info *dev) - { - int i, j, err; -@@ -83,8 +104,8 @@ static void rk_crypto_disable_clk(struct rk_crypto_info *dev) ++theend_sgs: ++ if (sgs == sgd) { ++ dma_unmap_sg(rkc->dev, sgs, 1, DMA_BIDIRECTIONAL); + } else { +- rk_iv_copyback(dev); +- /* here show the calculation is over without any err */ +- dev->complete(dev->async_req, 0); +- tasklet_schedule(&dev->queue_task); ++ dma_unmap_sg(rkc->dev, sgs, 1, DMA_TO_DEVICE); ++ dma_unmap_sg(rkc->dev, sgd, 1, DMA_FROM_DEVICE); + } +-out_rx: ++theend_iv: + return err; } - /* -- * Power management strategy: The device is suspended unless a TFM exists for -- * one of the algorithms proposed by this driver. -+ * Power management strategy: The device is suspended until a request -+ * is handled. For avoiding suspend/resume yoyo, the autosuspend is set to 2s. - */ - static int rk_crypto_pm_suspend(struct device *dev) - { -@@ -166,8 +187,17 @@ static struct rk_crypto_tmp *rk_cipher_algs[] = { - #ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG - static int rk_crypto_debugfs_show(struct seq_file *seq, void *v) +-static int rk_ablk_init_tfm(struct crypto_skcipher *tfm) ++static int rk_cipher_tfm_init(struct crypto_skcipher *tfm) { -+ struct rk_crypto_info *dd; - unsigned int i; + struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); ++ const char *name = crypto_tfm_alg_name(&tfm->base); + struct skcipher_alg *alg = crypto_skcipher_alg(tfm); +- struct rk_crypto_tmp *algt; ++ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); -+ spin_lock(&rocklist.lock); -+ list_for_each_entry(dd, &rocklist.dev_list, list) { -+ seq_printf(seq, "%s %s requests: %lu\n", -+ dev_driver_string(dd->dev), dev_name(dd->dev), -+ dd->nreq); +- algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); ++ ctx->fallback_tfm = crypto_alloc_skcipher(name, 0, CRYPTO_ALG_NEED_FALLBACK); ++ if (IS_ERR(ctx->fallback_tfm)) { ++ dev_err(algt->dev->dev, "ERROR: Cannot allocate fallback for %s %ld\n", ++ name, PTR_ERR(ctx->fallback_tfm)); ++ return PTR_ERR(ctx->fallback_tfm); + } -+ spin_unlock(&rocklist.lock); + - for (i = 0; i < ARRAY_SIZE(rk_cipher_algs); i++) { - if (!rk_cipher_algs[i]->dev) - continue; -@@ -198,6 +228,18 @@ static int rk_crypto_debugfs_show(struct seq_file *seq, void *v) - DEFINE_SHOW_ATTRIBUTE(rk_crypto_debugfs); - #endif ++ tfm->reqsize = sizeof(struct rk_cipher_rctx) + ++ crypto_skcipher_reqsize(ctx->fallback_tfm); -+static void register_debugfs(struct rk_crypto_info *crypto_info) -+{ -+#ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG -+ /* Ignore error of debugfs */ -+ rocklist.dbgfs_dir = debugfs_create_dir("rk3288_crypto", NULL); -+ rocklist.dbgfs_stats = debugfs_create_file("stats", 0444, -+ rocklist.dbgfs_dir, -+ &rocklist, -+ &rk_crypto_debugfs_fops); -+#endif -+} -+ - static int rk_crypto_register(struct rk_crypto_info *crypto_info) - { - unsigned int i, k; -@@ -255,6 +297,9 @@ static const struct of_device_id crypto_of_id_table[] = { - { .compatible = "rockchip,rk3328-crypto", - .data = &rk3328_variant, - }, -+ { .compatible = "rockchip,rk3399-crypto", -+ .data = &rk3399_variant, -+ }, - {} - }; - MODULE_DEVICE_TABLE(of, crypto_of_id_table); -@@ -262,7 +307,7 @@ MODULE_DEVICE_TABLE(of, crypto_of_id_table); - static int rk_crypto_probe(struct platform_device *pdev) - { - struct device *dev = &pdev->dev; -- struct rk_crypto_info *crypto_info; -+ struct rk_crypto_info *crypto_info, *first; - int err = 0; +- ctx->dev = algt->dev; +- ctx->dev->align_size = crypto_tfm_alg_alignmask(crypto_skcipher_tfm(tfm)) + 1; +- ctx->dev->start = rk_ablk_start; +- ctx->dev->update = rk_ablk_rx; +- ctx->dev->complete = rk_crypto_complete; +- ctx->dev->addr_vir = (char *)__get_free_page(GFP_KERNEL); ++ ctx->enginectx.op.do_one_request = rk_cipher_run; - crypto_info = devm_kzalloc(&pdev->dev, -@@ -325,22 +370,22 @@ static int rk_crypto_probe(struct platform_device *pdev) - if (err) - goto err_pm; +- return ctx->dev->addr_vir ? ctx->dev->enable_clk(ctx->dev) : -ENOMEM; ++ return 0; + } -- err = rk_crypto_register(crypto_info); -- if (err) { -- dev_err(dev, "err in register alg"); -- goto err_register_alg; -- } -+ spin_lock(&rocklist.lock); -+ first = list_first_entry_or_null(&rocklist.dev_list, -+ struct rk_crypto_info, list); -+ list_add_tail(&crypto_info->list, &rocklist.dev_list); -+ spin_unlock(&rocklist.lock); -+ -+ if (!first) { -+ err = rk_crypto_register(crypto_info); -+ if (err) { -+ dev_err(dev, "Fail to register crypto algorithms"); -+ goto err_register_alg; -+ } +-static void rk_ablk_exit_tfm(struct crypto_skcipher *tfm) ++static void rk_cipher_tfm_exit(struct crypto_skcipher *tfm) + { + struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); --#ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG -- /* Ignore error of debugfs */ -- crypto_info->dbgfs_dir = debugfs_create_dir("rk3288_crypto", NULL); -- crypto_info->dbgfs_stats = debugfs_create_file("stats", 0444, -- crypto_info->dbgfs_dir, -- crypto_info, -- &rk_crypto_debugfs_fops); --#endif -+ register_debugfs(crypto_info); -+ } +- free_page((unsigned long)ctx->dev->addr_vir); +- ctx->dev->disable_clk(ctx->dev); ++ memzero_explicit(ctx->key, ctx->keylen); ++ crypto_free_skcipher(ctx->fallback_tfm); + } -- dev_info(dev, "Crypto Accelerator successfully registered\n"); - return 0; + struct rk_crypto_tmp rk_ecb_aes_alg = { +- .type = ALG_TYPE_CIPHER, ++ .type = CRYPTO_ALG_TYPE_SKCIPHER, + .alg.skcipher = { + .base.cra_name = "ecb(aes)", + .base.cra_driver_name = "ecb-aes-rk", + .base.cra_priority = 300, +- .base.cra_flags = CRYPTO_ALG_ASYNC, ++ .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, + .base.cra_blocksize = AES_BLOCK_SIZE, + .base.cra_ctxsize = sizeof(struct rk_cipher_ctx), + .base.cra_alignmask = 0x0f, + .base.cra_module = THIS_MODULE, - err_register_alg: -@@ -355,11 +400,20 @@ static int rk_crypto_probe(struct platform_device *pdev) - static int rk_crypto_remove(struct platform_device *pdev) - { - struct rk_crypto_info *crypto_tmp = platform_get_drvdata(pdev); -+ struct rk_crypto_info *first; -+ -+ spin_lock_bh(&rocklist.lock); -+ list_del(&crypto_tmp->list); -+ first = list_first_entry_or_null(&rocklist.dev_list, -+ struct rk_crypto_info, list); -+ spin_unlock_bh(&rocklist.lock); +- .init = rk_ablk_init_tfm, +- .exit = rk_ablk_exit_tfm, ++ .init = rk_cipher_tfm_init, ++ .exit = rk_cipher_tfm_exit, + .min_keysize = AES_MIN_KEY_SIZE, + .max_keysize = AES_MAX_KEY_SIZE, + .setkey = rk_aes_setkey, +@@ -423,19 +478,19 @@ struct rk_crypto_tmp rk_ecb_aes_alg = { + }; -+ if (!first) { - #ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG -- debugfs_remove_recursive(crypto_tmp->dbgfs_dir); -+ debugfs_remove_recursive(rocklist.dbgfs_dir); - #endif -- rk_crypto_unregister(); -+ rk_crypto_unregister(); -+ } - rk_crypto_pm_exit(crypto_tmp); - crypto_engine_exit(crypto_tmp->engine); - return 0; -diff --git a/drivers/crypto/rockchip/rk3288_crypto.h b/drivers/crypto/rockchip/rk3288_crypto.h -index ac979d67ced9..b2695258cade 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto.h -+++ b/drivers/crypto/rockchip/rk3288_crypto.h -@@ -190,6 +190,20 @@ + struct rk_crypto_tmp rk_cbc_aes_alg = { +- .type = ALG_TYPE_CIPHER, ++ .type = CRYPTO_ALG_TYPE_SKCIPHER, + .alg.skcipher = { + .base.cra_name = "cbc(aes)", + .base.cra_driver_name = "cbc-aes-rk", + .base.cra_priority = 300, +- .base.cra_flags = CRYPTO_ALG_ASYNC, ++ .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, + .base.cra_blocksize = AES_BLOCK_SIZE, + .base.cra_ctxsize = sizeof(struct rk_cipher_ctx), + .base.cra_alignmask = 0x0f, + .base.cra_module = THIS_MODULE, - #define RK_MAX_CLKS 4 +- .init = rk_ablk_init_tfm, +- .exit = rk_ablk_exit_tfm, ++ .init = rk_cipher_tfm_init, ++ .exit = rk_cipher_tfm_exit, + .min_keysize = AES_MIN_KEY_SIZE, + .max_keysize = AES_MAX_KEY_SIZE, + .ivsize = AES_BLOCK_SIZE, +@@ -446,19 +501,19 @@ struct rk_crypto_tmp rk_cbc_aes_alg = { + }; -+/* -+ * struct rockchip_ip - struct for managing a list of RK crypto instance -+ * @dev_list: Used for doing a list of rk_crypto_info -+ * @lock: Control access to dev_list -+ * @dbgfs_dir: Debugfs dentry for statistic directory -+ * @dbgfs_stats: Debugfs dentry for statistic counters -+ */ -+struct rockchip_ip { -+ struct list_head dev_list; -+ spinlock_t lock; /* Control access to dev_list */ -+ struct dentry *dbgfs_dir; -+ struct dentry *dbgfs_stats; -+}; -+ - struct rk_clks { - const char *name; - unsigned long max; -@@ -201,6 +215,7 @@ struct rk_variant { + struct rk_crypto_tmp rk_ecb_des_alg = { +- .type = ALG_TYPE_CIPHER, ++ .type = CRYPTO_ALG_TYPE_SKCIPHER, + .alg.skcipher = { + .base.cra_name = "ecb(des)", + .base.cra_driver_name = "ecb-des-rk", + .base.cra_priority = 300, +- .base.cra_flags = CRYPTO_ALG_ASYNC, ++ .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, + .base.cra_blocksize = DES_BLOCK_SIZE, + .base.cra_ctxsize = sizeof(struct rk_cipher_ctx), + .base.cra_alignmask = 0x07, + .base.cra_module = THIS_MODULE, + +- .init = rk_ablk_init_tfm, +- .exit = rk_ablk_exit_tfm, ++ .init = rk_cipher_tfm_init, ++ .exit = rk_cipher_tfm_exit, + .min_keysize = DES_KEY_SIZE, + .max_keysize = DES_KEY_SIZE, + .setkey = rk_des_setkey, +@@ -468,19 +523,19 @@ struct rk_crypto_tmp rk_ecb_des_alg = { }; - struct rk_crypto_info { -+ struct list_head list; - struct device *dev; - struct clk_bulk_data *clks; - int num_clks; -@@ -208,19 +223,15 @@ struct rk_crypto_info { - void __iomem *reg; - int irq; - const struct rk_variant *variant; -+ unsigned long nreq; - struct crypto_engine *engine; - struct completion complete; - int status; --#ifdef CONFIG_CRYPTO_DEV_ROCKCHIP_DEBUG -- struct dentry *dbgfs_dir; -- struct dentry *dbgfs_stats; --#endif + struct rk_crypto_tmp rk_cbc_des_alg = { +- .type = ALG_TYPE_CIPHER, ++ .type = CRYPTO_ALG_TYPE_SKCIPHER, + .alg.skcipher = { + .base.cra_name = "cbc(des)", + .base.cra_driver_name = "cbc-des-rk", + .base.cra_priority = 300, +- .base.cra_flags = CRYPTO_ALG_ASYNC, ++ .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, + .base.cra_blocksize = DES_BLOCK_SIZE, + .base.cra_ctxsize = sizeof(struct rk_cipher_ctx), + .base.cra_alignmask = 0x07, + .base.cra_module = THIS_MODULE, + +- .init = rk_ablk_init_tfm, +- .exit = rk_ablk_exit_tfm, ++ .init = rk_cipher_tfm_init, ++ .exit = rk_cipher_tfm_exit, + .min_keysize = DES_KEY_SIZE, + .max_keysize = DES_KEY_SIZE, + .ivsize = DES_BLOCK_SIZE, +@@ -491,19 +546,19 @@ struct rk_crypto_tmp rk_cbc_des_alg = { }; - /* the private variable of hash */ - struct rk_ahash_ctx { - struct crypto_engine_ctx enginectx; -- struct rk_crypto_info *dev; - /* for fallback */ - struct crypto_ahash *fallback_tfm; + struct rk_crypto_tmp rk_ecb_des3_ede_alg = { +- .type = ALG_TYPE_CIPHER, ++ .type = CRYPTO_ALG_TYPE_SKCIPHER, + .alg.skcipher = { + .base.cra_name = "ecb(des3_ede)", + .base.cra_driver_name = "ecb-des3-ede-rk", + .base.cra_priority = 300, +- .base.cra_flags = CRYPTO_ALG_ASYNC, ++ .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, + .base.cra_blocksize = DES_BLOCK_SIZE, + .base.cra_ctxsize = sizeof(struct rk_cipher_ctx), + .base.cra_alignmask = 0x07, + .base.cra_module = THIS_MODULE, + +- .init = rk_ablk_init_tfm, +- .exit = rk_ablk_exit_tfm, ++ .init = rk_cipher_tfm_init, ++ .exit = rk_cipher_tfm_exit, + .min_keysize = DES3_EDE_KEY_SIZE, + .max_keysize = DES3_EDE_KEY_SIZE, + .setkey = rk_tdes_setkey, +@@ -513,19 +568,19 @@ struct rk_crypto_tmp rk_ecb_des3_ede_alg }; -@@ -236,7 +247,6 @@ struct rk_ahash_rctx { - /* the private variable of cipher */ - struct rk_cipher_ctx { - struct crypto_engine_ctx enginectx; -- struct rk_crypto_info *dev; - unsigned int keylen; - u8 key[AES_MAX_KEY_SIZE]; - u8 iv[AES_BLOCK_SIZE]; -@@ -252,7 +262,7 @@ struct rk_cipher_rctx { - struct rk_crypto_tmp { - u32 type; -- struct rk_crypto_info *dev; -+ struct rk_crypto_info *dev; - union { - struct skcipher_alg skcipher; - struct ahash_alg hash; -@@ -276,4 +286,5 @@ extern struct rk_crypto_tmp rk_ahash_sha1; - extern struct rk_crypto_tmp rk_ahash_sha256; - extern struct rk_crypto_tmp rk_ahash_md5; + struct rk_crypto_tmp rk_cbc_des3_ede_alg = { +- .type = ALG_TYPE_CIPHER, ++ .type = CRYPTO_ALG_TYPE_SKCIPHER, + .alg.skcipher = { + .base.cra_name = "cbc(des3_ede)", + .base.cra_driver_name = "cbc-des3-ede-rk", + .base.cra_priority = 300, +- .base.cra_flags = CRYPTO_ALG_ASYNC, ++ .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, + .base.cra_blocksize = DES_BLOCK_SIZE, + .base.cra_ctxsize = sizeof(struct rk_cipher_ctx), + .base.cra_alignmask = 0x07, + .base.cra_module = THIS_MODULE, -+struct rk_crypto_info *get_rk_crypto(void); - #endif -diff --git a/drivers/crypto/rockchip/rk3288_crypto_ahash.c b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -index 30f78256c955..a78ff3dcd0b1 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_ahash.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_ahash.c -@@ -199,8 +199,8 @@ static int rk_ahash_export(struct ahash_request *req, void *out) - static int rk_ahash_digest(struct ahash_request *req) - { - struct rk_ahash_rctx *rctx = ahash_request_ctx(req); -- struct rk_ahash_ctx *tctx = crypto_tfm_ctx(req->base.tfm); -- struct rk_crypto_info *dev = tctx->dev; -+ struct rk_crypto_info *dev; -+ struct crypto_engine *engine; +- .init = rk_ablk_init_tfm, +- .exit = rk_ablk_exit_tfm, ++ .init = rk_cipher_tfm_init, ++ .exit = rk_cipher_tfm_exit, + .min_keysize = DES3_EDE_KEY_SIZE, + .max_keysize = DES3_EDE_KEY_SIZE, + .ivsize = DES_BLOCK_SIZE, +--- a/drivers/crypto/Kconfig ++++ b/drivers/crypto/Kconfig +@@ -784,7 +784,12 @@ config CRYPTO_DEV_IMGTEC_HASH + config CRYPTO_DEV_ROCKCHIP + tristate "Rockchip's Cryptographic Engine driver" + depends on OF && ARCH_ROCKCHIP ++ depends on PM ++ select CRYPTO_ECB ++ select CRYPTO_CBC ++ select CRYPTO_DES + select CRYPTO_AES ++ select CRYPTO_ENGINE + select CRYPTO_LIB_DES + select CRYPTO_MD5 + select CRYPTO_SHA1 +@@ -796,6 +801,16 @@ config CRYPTO_DEV_ROCKCHIP + This driver interfaces with the hardware crypto accelerator. + Supporting cbc/ecb chainmode, and aes/des/des3_ede cipher mode. - if (rk_ahash_need_fallback(req)) - return rk_ahash_digest_fb(req); -@@ -208,9 +208,12 @@ static int rk_ahash_digest(struct ahash_request *req) - if (!req->nbytes) - return zero_message_process(req); ++config CRYPTO_DEV_ROCKCHIP_DEBUG ++ bool "Enable Rockchip crypto stats" ++ depends on CRYPTO_DEV_ROCKCHIP ++ depends on DEBUG_FS ++ help ++ Say y to enable Rockchip crypto debug stats. ++ This will create /sys/kernel/debug/rk3288_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 +--- a/MAINTAINERS ++++ b/MAINTAINERS +@@ -16972,6 +16972,13 @@ F: Documentation/ABI/*/sysfs-driver-hid- + F: drivers/hid/hid-roccat* + F: include/linux/hid-roccat* -+ dev = get_rk_crypto(); ++ROCKCHIP CRYPTO DRIVERS ++M: Corentin Labbe ++L: linux-crypto@vger.kernel.org ++S: Maintained ++F: Documentation/devicetree/bindings/crypto/rockchip,rk3288-crypto.yaml ++F: drivers/crypto/rockchip/ ++ + ROCKCHIP I2S TDM DRIVER + M: Nicolas Frattaroli + L: linux-rockchip@lists.infradead.org +--- /dev/null ++++ b/Documentation/devicetree/bindings/crypto/rockchip,rk3288-crypto.yaml +@@ -0,0 +1,133 @@ ++# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) ++%YAML 1.2 ++--- ++$id: http://devicetree.org/schemas/crypto/rockchip,rk3288-crypto.yaml# ++$schema: http://devicetree.org/meta-schemas/core.yaml# ++ ++title: Rockchip Electronics Security Accelerator ++ ++maintainers: ++ - Heiko Stuebner ++ ++properties: ++ compatible: ++ enum: ++ - rockchip,rk3288-crypto ++ - rockchip,rk3328-crypto ++ - rockchip,rk3399-crypto ++ ++ reg: ++ maxItems: 1 ++ ++ interrupts: ++ maxItems: 1 ++ ++ clocks: ++ minItems: 3 ++ maxItems: 4 ++ ++ clock-names: ++ minItems: 3 ++ maxItems: 4 ++ ++ resets: ++ minItems: 1 ++ maxItems: 3 ++ ++ reset-names: ++ minItems: 1 ++ maxItems: 3 ++ ++allOf: ++ - if: ++ properties: ++ compatible: ++ contains: ++ const: rockchip,rk3288-crypto ++ then: ++ properties: ++ clocks: ++ minItems: 4 ++ clock-names: ++ items: ++ - const: aclk ++ - const: hclk ++ - const: sclk ++ - const: apb_pclk ++ minItems: 4 ++ resets: ++ maxItems: 1 ++ reset-names: ++ items: ++ - const: crypto-rst ++ maxItems: 1 ++ - if: ++ properties: ++ compatible: ++ contains: ++ const: rockchip,rk3328-crypto ++ then: ++ properties: ++ clocks: ++ maxItems: 3 ++ clock-names: ++ items: ++ - const: hclk_master ++ - const: hclk_slave ++ - const: sclk ++ maxItems: 3 ++ resets: ++ maxItems: 1 ++ reset-names: ++ items: ++ - const: crypto-rst ++ maxItems: 1 ++ - if: ++ properties: ++ compatible: ++ contains: ++ const: rockchip,rk3399-crypto ++ then: ++ properties: ++ clocks: ++ maxItems: 3 ++ clock-names: ++ items: ++ - const: hclk_master ++ - const: hclk_slave ++ - const: sclk ++ maxItems: 3 ++ resets: ++ minItems: 3 ++ reset-names: ++ items: ++ - const: rst_master ++ - const: rst_slave ++ - const: crypto-rst ++ minItems: 3 + - rctx->dev = dev; -+ engine = dev->engine; - -- return crypto_transfer_hash_request_to_engine(dev->engine, req); -+ return crypto_transfer_hash_request_to_engine(engine, req); - } - - static void crypto_ahash_dma_start(struct rk_crypto_info *dev, struct scatterlist *sg) -@@ -260,9 +263,14 @@ static int rk_hash_run(struct crypto_engine *engine, void *breq) - int i; - u32 v; - -+ err = pm_runtime_resume_and_get(rkc->dev); -+ if (err) -+ return err; ++required: ++ - compatible ++ - reg ++ - interrupts ++ - clocks ++ - clock-names ++ - resets ++ - reset-names + - rctx->mode = 0; - - algt->stat_req++; -+ rkc->nreq++; - - switch (crypto_ahash_digestsize(tfm)) { - case SHA1_DIGEST_SIZE: -@@ -313,6 +321,8 @@ static int rk_hash_run(struct crypto_engine *engine, void *breq) - } - - theend: -+ pm_runtime_put_autosuspend(rkc->dev); ++additionalProperties: false + - local_bh_disable(); - crypto_finalize_hash_request(engine, breq, err); - local_bh_enable(); -@@ -323,21 +333,15 @@ static int rk_hash_run(struct crypto_engine *engine, void *breq) - static int rk_cra_hash_init(struct crypto_tfm *tfm) - { - struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm); -- struct rk_crypto_tmp *algt; -- struct ahash_alg *alg = __crypto_ahash_alg(tfm->__crt_alg); -- - const char *alg_name = crypto_tfm_alg_name(tfm); -- int err; -- -- algt = container_of(alg, struct rk_crypto_tmp, alg.hash); ++examples: ++ - | ++ #include ++ #include ++ crypto@ff8a0000 { ++ compatible = "rockchip,rk3288-crypto"; ++ reg = <0xff8a0000 0x4000>; ++ interrupts = ; ++ clocks = <&cru ACLK_CRYPTO>, <&cru HCLK_CRYPTO>, ++ <&cru SCLK_CRYPTO>, <&cru ACLK_DMAC1>; ++ clock-names = "aclk", "hclk", "sclk", "apb_pclk"; ++ resets = <&cru SRST_CRYPTO>; ++ reset-names = "crypto-rst"; ++ }; +--- a/Documentation/devicetree/bindings/crypto/rockchip-crypto.txt ++++ /dev/null +@@ -1,28 +0,0 @@ +-Rockchip Electronics And Security Accelerator - -- tctx->dev = algt->dev; -+ struct ahash_alg *alg = __crypto_ahash_alg(tfm->__crt_alg); -+ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.hash); - - /* for fallback */ - tctx->fallback_tfm = crypto_alloc_ahash(alg_name, 0, - CRYPTO_ALG_NEED_FALLBACK); - if (IS_ERR(tctx->fallback_tfm)) { -- dev_err(tctx->dev->dev, "Could not load fallback driver.\n"); -+ dev_err(algt->dev->dev, "Could not load fallback driver.\n"); - return PTR_ERR(tctx->fallback_tfm); - } - -@@ -349,15 +353,7 @@ static int rk_cra_hash_init(struct crypto_tfm *tfm) - tctx->enginectx.op.prepare_request = rk_hash_prepare; - tctx->enginectx.op.unprepare_request = rk_hash_unprepare; - -- err = pm_runtime_resume_and_get(tctx->dev->dev); -- if (err < 0) -- goto error_pm; +-Required properties: +-- compatible: Should be "rockchip,rk3288-crypto" +-- reg: Base physical address of the engine and length of memory mapped +- region +-- interrupts: Interrupt number +-- clocks: Reference to the clocks about crypto +-- clock-names: "aclk" used to clock data +- "hclk" used to clock data +- "sclk" used to clock crypto accelerator +- "apb_pclk" used to clock dma +-- resets: Must contain an entry for each entry in reset-names. +- See ../reset/reset.txt for details. +-- reset-names: Must include the name "crypto-rst". - - return 0; --error_pm: -- crypto_free_ahash(tctx->fallback_tfm); +-Examples: - -- return err; - } - - static void rk_cra_hash_exit(struct crypto_tfm *tfm) -@@ -365,7 +361,6 @@ static void rk_cra_hash_exit(struct crypto_tfm *tfm) - struct rk_ahash_ctx *tctx = crypto_tfm_ctx(tfm); - - crypto_free_ahash(tctx->fallback_tfm); -- pm_runtime_put_autosuspend(tctx->dev->dev); - } - - struct rk_crypto_tmp rk_ahash_sha1 = { -diff --git a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -index 0b1c90ababb7..59069457582b 100644 ---- a/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -+++ b/drivers/crypto/rockchip/rk3288_crypto_skcipher.c -@@ -17,11 +17,11 @@ - static int rk_cipher_need_fallback(struct skcipher_request *req) - { - struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- unsigned int bs = crypto_skcipher_blocksize(tfm); - struct skcipher_alg *alg = crypto_skcipher_alg(tfm); - struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); - struct scatterlist *sgs, *sgd; - unsigned int stodo, dtodo, len; -+ unsigned int bs = crypto_skcipher_blocksize(tfm); - - if (!req->cryptlen) - return true; -@@ -84,15 +84,16 @@ static int rk_cipher_fallback(struct skcipher_request *areq) - - static int rk_cipher_handle_req(struct skcipher_request *req) - { -- struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); -- struct rk_cipher_ctx *tctx = crypto_skcipher_ctx(tfm); - struct rk_cipher_rctx *rctx = skcipher_request_ctx(req); -- struct rk_crypto_info *rkc = tctx->dev; -- struct crypto_engine *engine = rkc->engine; -+ struct rk_crypto_info *rkc; -+ struct crypto_engine *engine; +- crypto: cypto-controller@ff8a0000 { +- compatible = "rockchip,rk3288-crypto"; +- reg = <0xff8a0000 0x4000>; +- interrupts = ; +- clocks = <&cru ACLK_CRYPTO>, <&cru HCLK_CRYPTO>, +- <&cru SCLK_CRYPTO>, <&cru ACLK_DMAC1>; +- clock-names = "aclk", "hclk", "sclk", "apb_pclk"; +- resets = <&cru SRST_CRYPTO>; +- reset-names = "crypto-rst"; +- }; +--- a/include/dt-bindings/clock/rk3399-cru.h ++++ b/include/dt-bindings/clock/rk3399-cru.h +@@ -547,8 +547,8 @@ + #define SRST_H_PERILP0 171 + #define SRST_H_PERILP0_NOC 172 + #define SRST_ROM 173 +-#define SRST_CRYPTO_S 174 +-#define SRST_CRYPTO_M 175 ++#define SRST_CRYPTO0_S 174 ++#define SRST_CRYPTO0_M 175 - if (rk_cipher_need_fallback(req)) - return rk_cipher_fallback(req); + /* cru_softrst_con11 */ + #define SRST_P_DCF 176 +@@ -556,7 +556,7 @@ + #define SRST_CM0S 178 + #define SRST_CM0S_DBG 179 + #define SRST_CM0S_PO 180 +-#define SRST_CRYPTO 181 ++#define SRST_CRYPTO0 181 + #define SRST_P_PERILP1_SGRF 182 + #define SRST_P_PERILP1_GRF 183 + #define SRST_CRYPTO1_S 184 +--- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi +@@ -1040,6 +1040,17 @@ + (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>; + }; -+ rkc = get_rk_crypto(); ++ crypto: crypto@ff060000 { ++ compatible = "rockchip,rk3328-crypto"; ++ reg = <0x0 0xff060000 0x0 0x4000>; ++ interrupts = ; ++ clocks = <&cru HCLK_CRYPTO_MST>, <&cru HCLK_CRYPTO_SLV>, ++ <&cru SCLK_CRYPTO>; ++ clock-names = "hclk_master", "hclk_slave", "sclk"; ++ resets = <&cru SRST_CRYPTO>; ++ reset-names = "crypto-rst"; ++ }; + -+ engine = rkc->engine; - rctx->dev = rkc; - - return crypto_transfer_skcipher_request_to_engine(engine, req); -@@ -307,7 +308,12 @@ static int rk_cipher_run(struct crypto_engine *engine, void *async_req) - struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); - struct rk_crypto_info *rkc = rctx->dev; + pinctrl: pinctrl { + compatible = "rockchip,rk3328-pinctrl"; + rockchip,grf = <&grf>; +--- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi +@@ -573,6 +573,26 @@ + status = "disabled"; + }; -+ err = pm_runtime_resume_and_get(rkc->dev); -+ if (err) -+ return err; ++ crypto0: crypto@ff8b0000 { ++ compatible = "rockchip,rk3399-crypto"; ++ reg = <0x0 0xff8b0000 0x0 0x4000>; ++ interrupts = ; ++ clocks = <&cru HCLK_M_CRYPTO0>, <&cru HCLK_S_CRYPTO0>, <&cru SCLK_CRYPTO0>; ++ clock-names = "hclk_master", "hclk_slave", "sclk"; ++ resets = <&cru SRST_CRYPTO0>, <&cru SRST_CRYPTO0_S>, <&cru SRST_CRYPTO0_M>; ++ reset-names = "rst_master", "rst_slave", "crypto-rst"; ++ }; + - algt->stat_req++; -+ rkc->nreq++; - - ivsize = crypto_skcipher_ivsize(tfm); - if (areq->iv && crypto_skcipher_ivsize(tfm) > 0) { -@@ -401,6 +407,8 @@ static int rk_cipher_run(struct crypto_engine *engine, void *async_req) - } - - theend: -+ pm_runtime_put_autosuspend(rkc->dev); ++ crypto1: crypto@ff8b8000 { ++ compatible = "rockchip,rk3399-crypto"; ++ reg = <0x0 0xff8b8000 0x0 0x4000>; ++ interrupts = ; ++ clocks = <&cru HCLK_M_CRYPTO1>, <&cru HCLK_S_CRYPTO1>, <&cru SCLK_CRYPTO1>; ++ clock-names = "hclk_master", "hclk_slave", "sclk"; ++ resets = <&cru SRST_CRYPTO1>, <&cru SRST_CRYPTO1_S>, <&cru SRST_CRYPTO1_M>; ++ reset-names = "rst_master", "rst_slave", "crypto-rst"; ++ }; + - local_bh_disable(); - crypto_finalize_skcipher_request(engine, areq, err); - local_bh_enable(); -@@ -420,18 +428,13 @@ static int rk_cipher_run(struct crypto_engine *engine, void *async_req) - static int rk_cipher_tfm_init(struct crypto_skcipher *tfm) - { - struct rk_cipher_ctx *ctx = crypto_skcipher_ctx(tfm); -- struct skcipher_alg *alg = crypto_skcipher_alg(tfm); - const char *name = crypto_tfm_alg_name(&tfm->base); -- struct rk_crypto_tmp *algt; -- int err; -- -- algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); -- -- ctx->dev = algt->dev; -+ struct skcipher_alg *alg = crypto_skcipher_alg(tfm); -+ struct rk_crypto_tmp *algt = container_of(alg, struct rk_crypto_tmp, alg.skcipher); - - ctx->fallback_tfm = crypto_alloc_skcipher(name, 0, CRYPTO_ALG_NEED_FALLBACK); - if (IS_ERR(ctx->fallback_tfm)) { -- dev_err(ctx->dev->dev, "ERROR: Cannot allocate fallback for %s %ld\n", -+ dev_err(algt->dev->dev, "ERROR: Cannot allocate fallback for %s %ld\n", - name, PTR_ERR(ctx->fallback_tfm)); - return PTR_ERR(ctx->fallback_tfm); - } -@@ -441,14 +444,7 @@ static int rk_cipher_tfm_init(struct crypto_skcipher *tfm) - - ctx->enginectx.op.do_one_request = rk_cipher_run; - -- err = pm_runtime_resume_and_get(ctx->dev->dev); -- if (err < 0) -- goto error_pm; -- - return 0; --error_pm: -- crypto_free_skcipher(ctx->fallback_tfm); -- return err; - } - - static void rk_cipher_tfm_exit(struct crypto_skcipher *tfm) -@@ -457,7 +453,6 @@ static void rk_cipher_tfm_exit(struct crypto_skcipher *tfm) - - memzero_explicit(ctx->key, ctx->keylen); - crypto_free_skcipher(ctx->fallback_tfm); -- pm_runtime_put_autosuspend(ctx->dev->dev); - } - - struct rk_crypto_tmp rk_ecb_aes_alg = { + i2c1: i2c@ff110000 { + compatible = "rockchip,rk3399-i2c"; + reg = <0x0 0xff110000 0x0 0x1000>; From 8852b7bb51998731f8821a045b26d8ee4f2631f7 Mon Sep 17 00:00:00 2001 From: aakkll <94471752+aakkll@users.noreply.github.com> Date: Fri, 22 Jul 2022 18:13:08 +0800 Subject: [PATCH 2/2] kernel: bump 5.15 to 5.15.56 (#9816) Signed-off-by: aakkll <94471752+aakkll@users.noreply.github.com> --- include/kernel-5.15 | 4 ++-- ...ethernet-mtk_eth_soc-add-txd_size-to-mtk_soc_dat.patch | 2 +- .../510-net-mediatek-add-flow-offload-for-mt7623.patch | 8 ++++---- .../700-net-ethernet-mediatek-support-net-labels.patch | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/kernel-5.15 b/include/kernel-5.15 index 8045799cc76dec..a8540b3d828542 100644 --- a/include/kernel-5.15 +++ b/include/kernel-5.15 @@ -1,2 +1,2 @@ -LINUX_VERSION-5.15 = .55 -LINUX_KERNEL_HASH-5.15.55 = 1ef6bd508b6c3af3bef2d5b337e4477254dba284c79e329aa38f9763ae3bfdcc +LINUX_VERSION-5.15 = .56 +LINUX_KERNEL_HASH-5.15.56 = e9a6bb3437f1497b1c74841ebf70d5b96f915d6ac767b5ba3d8d820dd89b8223 diff --git a/target/linux/generic/backport-5.15/702-v5.19-19-net-ethernet-mtk_eth_soc-add-txd_size-to-mtk_soc_dat.patch b/target/linux/generic/backport-5.15/702-v5.19-19-net-ethernet-mtk_eth_soc-add-txd_size-to-mtk_soc_dat.patch index 0aeb1ab9504b27..7aeeda0ba06591 100644 --- a/target/linux/generic/backport-5.15/702-v5.19-19-net-ethernet-mtk_eth_soc-add-txd_size-to-mtk_soc_dat.patch +++ b/target/linux/generic/backport-5.15/702-v5.19-19-net-ethernet-mtk_eth_soc-add-txd_size-to-mtk_soc_dat.patch @@ -14,7 +14,7 @@ Signed-off-by: David S. Miller --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c -@@ -837,20 +837,20 @@ static inline bool mtk_rx_get_desc(struc +@@ -837,20 +837,20 @@ static void *mtk_max_lro_buf_alloc(gfp_t /* the qdma core needs scratch memory to be setup */ static int mtk_init_fq_dma(struct mtk_eth *eth) { diff --git a/target/linux/mediatek/patches-5.15/510-net-mediatek-add-flow-offload-for-mt7623.patch b/target/linux/mediatek/patches-5.15/510-net-mediatek-add-flow-offload-for-mt7623.patch index c75a72f93ff4a0..21674c53e6c9d4 100644 --- a/target/linux/mediatek/patches-5.15/510-net-mediatek-add-flow-offload-for-mt7623.patch +++ b/target/linux/mediatek/patches-5.15/510-net-mediatek-add-flow-offload-for-mt7623.patch @@ -14,11 +14,11 @@ Signed-off-by: Frank Wunderlich --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c -@@ -3384,6 +3384,7 @@ static const struct mtk_soc_data mt2701_ +@@ -3675,6 +3675,7 @@ static const struct mtk_soc_data mt2701_ .hw_features = MTK_HW_FEATURES, .required_clks = MT7623_CLKS_BITMAP, .required_pctl = true, + .offload_version = 2, - }; - - static const struct mtk_soc_data mt7621_data = { + .txrx = { + .txd_size = sizeof(struct mtk_tx_dma), + .rxd_size = sizeof(struct mtk_rx_dma), \ No newline at end of file diff --git a/target/linux/ramips/patches-5.15/700-net-ethernet-mediatek-support-net-labels.patch b/target/linux/ramips/patches-5.15/700-net-ethernet-mediatek-support-net-labels.patch index 67d949246315fb..f6ac8360ee3506 100644 --- a/target/linux/ramips/patches-5.15/700-net-ethernet-mediatek-support-net-labels.patch +++ b/target/linux/ramips/patches-5.15/700-net-ethernet-mediatek-support-net-labels.patch @@ -14,7 +14,7 @@ Signed-off-by: René van Dorst --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c -@@ -2988,6 +2988,7 @@ static const struct net_device_ops mtk_n +@@ -3290,6 +3290,7 @@ static const struct net_device_ops mtk_n static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np) { @@ -22,7 +22,7 @@ Signed-off-by: René van Dorst const __be32 *_id = of_get_property(np, "reg", NULL); phy_interface_t phy_mode; struct phylink *phylink; -@@ -3083,6 +3084,9 @@ static int mtk_add_mac(struct mtk_eth *e +@@ -3385,6 +3386,9 @@ static int mtk_add_mac(struct mtk_eth *e else eth->netdev[id]->max_mtu = MTK_MAX_RX_LENGTH_2K - MTK_RX_ETH_HLEN;