Spacemit: HW crypto fixes / speedup.
Note: HW AES is really slow with LUKS2 when using default 512 byte block size, regardless what cryptsetup benchmark prints out (this uses 65536 bytes). Performance is much better with luksFormat --sector-size 4096. Signed-off-by: Sven-Ola Tuecke <sven-ola@gmx.de>
This commit is contained in:
parent
2c8090aaaa
commit
51295805e2
@ -0,0 +1,35 @@
|
||||
From d365c18ea76b42795ffc4162a8d34f122821999e Mon Sep 17 00:00:00 2001
|
||||
From: Sven-Ola Tuecke <sven-ola@gmx.de>
|
||||
Date: Tue, 13 Jan 2026 16:32:06 +0100
|
||||
Subject: [PATCH] Spacemit CRYPTO_DEBUG and CRYPTO_SELF_TEST are options not
|
||||
modules
|
||||
|
||||
Signed-off-by: Sven-Ola Tuecke <sven-ola@gmx.de>
|
||||
---
|
||||
drivers/crypto/spacemit/Kconfig | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/crypto/spacemit/Kconfig b/drivers/crypto/spacemit/Kconfig
|
||||
index 36545d478a..3ed342ef2f 100644
|
||||
--- a/drivers/crypto/spacemit/Kconfig
|
||||
+++ b/drivers/crypto/spacemit/Kconfig
|
||||
@@ -15,14 +15,14 @@ config SPACEMIT_REE_AES
|
||||
Support AES using SPACEMIT REE Crypto Engine.
|
||||
|
||||
config SPACEMIT_CRYPTO_DEBUG
|
||||
- tristate "Enable SPACEMIT REE Crytpo Engine Debug Interface"
|
||||
+ bool "Enable SPACEMIT REE Crytpo Engine Debug Interface"
|
||||
depends on SPACEMIT_REE_ENGINE
|
||||
default n
|
||||
help
|
||||
Enable spacemit crypto engine debug interface in userspace
|
||||
|
||||
config SPACEMIT_CRYPTO_SELF_TEST
|
||||
- tristate "Enable SPACEMIT REE Crytpo Engine Selftest"
|
||||
+ bool "Enable SPACEMIT REE Crytpo Engine Selftest"
|
||||
depends on SPACEMIT_REE_ENGINE
|
||||
default n
|
||||
help
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@ -0,0 +1,63 @@
|
||||
From 46b2e452144de658327605d46d818809c29fa7e2 Mon Sep 17 00:00:00 2001
|
||||
From: Sven-Ola Tuecke <sven-ola@gmx.de>
|
||||
Date: Tue, 13 Jan 2026 16:50:46 +0100
|
||||
Subject: [PATCH] Spacemit HW crypto: avoid unnecessary fallback to SW crypto
|
||||
|
||||
Signed-off-by: Sven-Ola Tuecke <sven-ola@gmx.de>
|
||||
---
|
||||
drivers/crypto/spacemit/spacemit_ce_engine.c | 21 ++++++++++----------
|
||||
1 file changed, 11 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/drivers/crypto/spacemit/spacemit_ce_engine.c b/drivers/crypto/spacemit/spacemit_ce_engine.c
|
||||
index 7baaa5f5a..14ffc7c85 100644
|
||||
--- a/drivers/crypto/spacemit/spacemit_ce_engine.c
|
||||
+++ b/drivers/crypto/spacemit/spacemit_ce_engine.c
|
||||
@@ -1147,14 +1147,15 @@ static int ce_aes_process_nblocks_noalign(int index, const unsigned char *buf_in
|
||||
unsigned long blocks, symmetric_key * skey1, symmetric_key * skey2,
|
||||
AES_MODE_T mode, uint8_t *inv, AES_OP_MODE_T op) {
|
||||
int ret;
|
||||
- int len_bytes = 0;
|
||||
- int step_bytes = 0;
|
||||
- unsigned char *in_cpy = NULL, *out_cpy = NULL;
|
||||
- unsigned char *in_work = NULL, *out_work = NULL;
|
||||
- unsigned char *aligned_buf_1 = &engine[index].internal_working_buffer[0];
|
||||
- unsigned char *aligned_buf_2 = &engine[index].internal_working_buffer[WORK_BUF_SIZE];
|
||||
|
||||
if ((unsigned long) buf_in & 0x3 || (unsigned long) buf_out & 0x3) {
|
||||
+ int len_bytes = 0;
|
||||
+ int step_bytes = 0;
|
||||
+ unsigned char *in_cpy = NULL, *out_cpy = NULL;
|
||||
+ unsigned char *in_work = NULL, *out_work = NULL;
|
||||
+ unsigned char *aligned_buf_1 = &engine[index].internal_working_buffer[0];
|
||||
+ unsigned char *aligned_buf_2 = &engine[index].internal_working_buffer[WORK_BUF_SIZE];
|
||||
+
|
||||
len_bytes = blocks << 4;
|
||||
in_cpy = (unsigned char *) buf_in;
|
||||
out_cpy = (unsigned char *) buf_out;
|
||||
@@ -1193,9 +1194,12 @@ static int ce_aes_process_nblocks_noalign(int index, const unsigned char *buf_in
|
||||
sw_aes_ce_decrypt(inv, inv, key_local, key_len);
|
||||
}
|
||||
}
|
||||
+exit:
|
||||
+ memset(aligned_buf_1, 0x0, WORK_BUF_SIZE);
|
||||
+ memset(aligned_buf_2, 0x0, WORK_BUF_SIZE);
|
||||
} else {
|
||||
ret = ce_aes_process_nblocks(index, buf_in, buf_out, blocks, skey1, skey2, mode, inv, op);
|
||||
- if (!ret && (mode == E_AES_XTS)) {
|
||||
+ if ((ret != 0) && (mode == E_AES_XTS)) {
|
||||
unsigned char key_local[32];
|
||||
unsigned int key_len = (skey2->rijndael.Nr < 32) ? skey2->rijndael.Nr : 32;
|
||||
|
||||
@@ -1207,9 +1211,6 @@ static int ce_aes_process_nblocks_noalign(int index, const unsigned char *buf_in
|
||||
}
|
||||
}
|
||||
|
||||
-exit:
|
||||
- memset(aligned_buf_1, 0x0, WORK_BUF_SIZE);
|
||||
- memset(aligned_buf_2, 0x0, WORK_BUF_SIZE);
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
From d365c18ea76b42795ffc4162a8d34f122821999e Mon Sep 17 00:00:00 2001
|
||||
From: Sven-Ola Tuecke <sven-ola@gmx.de>
|
||||
Date: Tue, 13 Jan 2026 16:32:06 +0100
|
||||
Subject: [PATCH] Spacemit CRYPTO_DEBUG and CRYPTO_SELF_TEST are options not
|
||||
modules
|
||||
|
||||
Signed-off-by: Sven-Ola Tuecke <sven-ola@gmx.de>
|
||||
---
|
||||
drivers/crypto/spacemit/Kconfig | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/crypto/spacemit/Kconfig b/drivers/crypto/spacemit/Kconfig
|
||||
index 36545d478a..3ed342ef2f 100644
|
||||
--- a/drivers/crypto/spacemit/Kconfig
|
||||
+++ b/drivers/crypto/spacemit/Kconfig
|
||||
@@ -15,14 +15,14 @@ config SPACEMIT_REE_AES
|
||||
Support AES using SPACEMIT REE Crypto Engine.
|
||||
|
||||
config SPACEMIT_CRYPTO_DEBUG
|
||||
- tristate "Enable SPACEMIT REE Crytpo Engine Debug Interface"
|
||||
+ bool "Enable SPACEMIT REE Crytpo Engine Debug Interface"
|
||||
depends on SPACEMIT_REE_ENGINE
|
||||
default n
|
||||
help
|
||||
Enable spacemit crypto engine debug interface in userspace
|
||||
|
||||
config SPACEMIT_CRYPTO_SELF_TEST
|
||||
- tristate "Enable SPACEMIT REE Crytpo Engine Selftest"
|
||||
+ bool "Enable SPACEMIT REE Crytpo Engine Selftest"
|
||||
depends on SPACEMIT_REE_ENGINE
|
||||
default n
|
||||
help
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@ -0,0 +1,63 @@
|
||||
From 6db06399424f7eaf9e455dccaf6bcde31ca21f4f Mon Sep 17 00:00:00 2001
|
||||
From: Sven-Ola Tuecke <sven-ola@gmx.de>
|
||||
Date: Tue, 13 Jan 2026 16:39:38 +0100
|
||||
Subject: [PATCH] Spacemit HW crypto: avoid unnecessary fallback to SW crypto
|
||||
|
||||
Signed-off-by: Sven-Ola Tuecke <sven-ola@gmx.de>
|
||||
---
|
||||
drivers/crypto/spacemit/spacemit_ce_engine.c | 21 ++++++++++----------
|
||||
1 file changed, 11 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/drivers/crypto/spacemit/spacemit_ce_engine.c b/drivers/crypto/spacemit/spacemit_ce_engine.c
|
||||
index 033ce6531b..d1170b47c4 100644
|
||||
--- a/drivers/crypto/spacemit/spacemit_ce_engine.c
|
||||
+++ b/drivers/crypto/spacemit/spacemit_ce_engine.c
|
||||
@@ -1153,14 +1153,15 @@ static int ce_aes_process_nblocks_noalign(int index, const unsigned char *buf_in
|
||||
unsigned long blocks, symmetric_key * skey1, symmetric_key * skey2,
|
||||
AES_MODE_T mode, uint8_t *inv, AES_OP_MODE_T op) {
|
||||
int ret;
|
||||
- int len_bytes = 0;
|
||||
- int step_bytes = 0;
|
||||
- unsigned char *in_cpy = NULL, *out_cpy = NULL;
|
||||
- unsigned char *in_work = NULL, *out_work = NULL;
|
||||
- unsigned char *aligned_buf_1 = &engine[index].internal_working_buffer[0];
|
||||
- unsigned char *aligned_buf_2 = &engine[index].internal_working_buffer[WORK_BUF_SIZE];
|
||||
|
||||
if ((unsigned long) buf_in & 0x3 || (unsigned long) buf_out & 0x3) {
|
||||
+ int len_bytes = 0;
|
||||
+ int step_bytes = 0;
|
||||
+ unsigned char *in_cpy = NULL, *out_cpy = NULL;
|
||||
+ unsigned char *in_work = NULL, *out_work = NULL;
|
||||
+ unsigned char *aligned_buf_1 = &engine[index].internal_working_buffer[0];
|
||||
+ unsigned char *aligned_buf_2 = &engine[index].internal_working_buffer[WORK_BUF_SIZE];
|
||||
+
|
||||
len_bytes = blocks << 4;
|
||||
in_cpy = (unsigned char *) buf_in;
|
||||
out_cpy = (unsigned char *) buf_out;
|
||||
@@ -1199,9 +1200,12 @@ static int ce_aes_process_nblocks_noalign(int index, const unsigned char *buf_in
|
||||
sw_aes_ce_decrypt(inv, inv, key_local, key_len);
|
||||
}
|
||||
}
|
||||
+exit:
|
||||
+ memset(aligned_buf_1, 0x0, WORK_BUF_SIZE);
|
||||
+ memset(aligned_buf_2, 0x0, WORK_BUF_SIZE);
|
||||
} else {
|
||||
ret = ce_aes_process_nblocks(index, buf_in, buf_out, blocks, skey1, skey2, mode, inv, op);
|
||||
- if (!ret && (mode == E_AES_XTS)) {
|
||||
+ if ((ret != 0) && (mode == E_AES_XTS)) {
|
||||
unsigned char key_local[32];
|
||||
unsigned int key_len = (skey2->rijndael.Nr < 32) ? skey2->rijndael.Nr : 32;
|
||||
|
||||
@@ -1213,9 +1217,6 @@ static int ce_aes_process_nblocks_noalign(int index, const unsigned char *buf_in
|
||||
}
|
||||
}
|
||||
|
||||
-exit:
|
||||
- memset(aligned_buf_1, 0x0, WORK_BUF_SIZE);
|
||||
- memset(aligned_buf_2, 0x0, WORK_BUF_SIZE);
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
Loading…
Reference in New Issue
Block a user