crypto: sa2ul - Set the supported_algos bits individually
PATCH v2 1/2 crypto: sa2ul - Set the supported_algos bits individually
Setting these individually gives a better picture of supported functions at a glance. Plus if the list changes an unwanted one will not accidentally get set with GENMASK.
---
Changes from v1:
- Split these two patches from the DTS changes
drivers/crypto/sa2ul.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
drivers/crypto/sa2ul.c +9 -1
@@ -2361,7 +2361,15 @@ static int sa_link_child(struct device *dev, void *data)static struct sa_match_data am654_match_data = { .priv =1 , .priv_id =1 , - .supported_algos =GENMASK (SA_ALG_AUTHENC_SHA256_AES ,0 ), + .supported_algos =BIT (SA_ALG_CBC_AES ) | +BIT (SA_ALG_EBC_AES ) | +BIT (SA_ALG_CBC_DES3 ) | +BIT (SA_ALG_ECB_DES3 ) | +BIT (SA_ALG_SHA1 ) | +BIT (SA_ALG_SHA256 ) | +BIT (SA_ALG_SHA512 ) | +BIT (SA_ALG_AUTHENC_SHA1_AES ) | +BIT (SA_ALG_AUTHENC_SHA256_AES ), };static struct sa_match_data am64_match_data = {
Signature · 1 line
2.36.1
PATCH v2 2/2 crypto: sa2ul - Check engine status before enabling
There is a engine status register that can be used to check if the different HW crypto engines are enabled. Check that first and then only try to enable the engines if they are not already on.
This has a couple benefits. First we don't need to use match_data for this. Second, this driver can now work on HS devices where the engine control registers are read-only and writing causes a firewall exception.
--- drivers/crypto/sa2ul.c | 15 +++++++-------- drivers/crypto/sa2ul.h | 1 + 2 files changed, 8 insertions(+), 8 deletions(-)
drivers/crypto/sa2ul.c +7 -8
@@ -86,7 +86,6 @@ struct sa_match_data {u8 priv;u8 priv_id;u32 supported_algos; -bool skip_engine_control; };static struct device *sa_k3_dev;
@@ -2380,7 +2379,6 @@ static struct sa_match_data am64_match_data = {BIT (SA_ALG_SHA256 ) |BIT (SA_ALG_SHA512 ) | BIT(SA_ALG_AUTHENC_SHA256_AES), - .skip_engine_control = true, }; static const struct of_device_id of_match[] = {
@@ -2398,6 +2396,7 @@ static int sa_ul_probe(struct platform_device *pdev)struct device_node *node = dev->of_node;static void __iomem *saul_base;struct sa_crypto_data *dev_data; +u32 status, val;int ret; dev_data =devm_kzalloc (dev,sizeof (*dev_data),GFP_KERNEL );
@@ -2434,13 +2433,13 @@ static int sa_ul_probe(struct platform_device *pdev)spin_lock_init (&dev_data->scid_lock); -if (!dev_data->match_data->skip_engine_control) { -u32 val =SA_EEC_ENCSS_EN |SA_EEC_AUTHSS_EN |SA_EEC_CTXCACH_EN | -SA_EEC_CPPI_PORT_IN_EN |SA_EEC_CPPI_PORT_OUT_EN | -SA_EEC_TRNG_EN ; - + val =SA_EEC_ENCSS_EN |SA_EEC_AUTHSS_EN |SA_EEC_CTXCACH_EN | +SA_EEC_CPPI_PORT_IN_EN |SA_EEC_CPPI_PORT_OUT_EN | +SA_EEC_TRNG_EN ; + status =readl_relaxed (saul_base +SA_ENGINE_STATUS ); +/* Only enable engines if all are not already enabled */ +if (val & ~status)writel_relaxed (val, saul_base +SA_ENGINE_ENABLE_CONTROL ); - }sa_register_algos (dev_data);
drivers/crypto/sa2ul.h +1 -0
@@ -16,6 +16,7 @@#include <crypto/sha1.h> #include <crypto/sha2.h> +#define SA_ENGINE_STATUS 0x0008#define SA_ENGINE_ENABLE_CONTROL 0x1000struct sa_tfm_ctx ;
Signature · 1 line
2.36.1
Herbert Xu
maintainerQuoted 4 lines · Andrew Davis
Setting these individually gives a better picture of supported functions at a glance. Plus if the list changes an unwanted one will not accidentally get set with GENMASK.
Quoted 8 lines
Signed-off-by Andrew Davis <[email protected]>---
Changes from v1:
- Split these two patches from the DTS changesdrivers/crypto/sa2ul.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
All applied. Thanks.
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt