libwd/0166-drv-hpre-bugfix-async-tag-of-rsa-and-dh.patch
Yang Shen ec2f993b84 libwd: backport for uadk from 2.3.31 to 2.3.36
Update some patch for uadk from mainline.
To get more information, please visit the homepage:
https://github.comp/Linaro/uadk

Signed-off-by: Yang Shen <shenyang39@huawei.com>
2022-07-28 15:32:23 +08:00

75 lines
2.4 KiB
Diff

From 5e5bd0a4eb5a1bd794a4b6d8998bfaf40d98c808 Mon Sep 17 00:00:00 2001
From: Zhiqi Song <songzhiqi1@huawei.com>
Date: Sat, 23 Jul 2022 15:43:12 +0800
Subject: [PATCH 181/183] drv/hpre: bugfix async tag of rsa and dh
Use 'qp_mode' to distinguish between sync and async modes
of RSA and DH algs.
Signed-off-by: Zhiqi Song <songzhiqi1@huawei.com>
---
drv/hisi_hpre.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drv/hisi_hpre.c b/drv/hisi_hpre.c
index 18e5a3c..2e9db2f 100644
--- a/drv/hisi_hpre.c
+++ b/drv/hisi_hpre.c
@@ -336,7 +336,7 @@ static int hpre_tri_bin_transfer(struct wd_dtb *bin0, struct wd_dtb *bin1,
}
static int rsa_out_transfer(struct wd_rsa_msg *msg,
- struct hisi_hpre_sqe *hw_msg)
+ struct hisi_hpre_sqe *hw_msg, __u8 qp_mode)
{
struct wd_rsa_req *req = &msg->req;
struct wd_rsa_kg_out *key = req->dst;
@@ -348,7 +348,7 @@ static int rsa_out_transfer(struct wd_rsa_msg *msg,
if (hw_msg->alg == HPRE_ALG_KG_CRT || hw_msg->alg == HPRE_ALG_KG_STD) {
/* async */
- if (LW_U16(hw_msg->low_tag)) {
+ if (qp_mode == CTX_MODE_ASYNC) {
data = VA_ADDR(hw_msg->hi_out, hw_msg->low_out);
key = container_of(data, struct wd_rsa_kg_out, data);
} else {
@@ -607,7 +607,7 @@ static int rsa_recv(handle_t ctx, void *rsa_msg)
hpre_result_check(&hw_msg, &msg->result);
if (!msg->result) {
- ret = rsa_out_transfer(msg, &hw_msg);
+ ret = rsa_out_transfer(msg, &hw_msg, qp->q_info.qp_mode);
if (ret) {
WD_ERR("failed to transfer out rsa BD!\n");
msg->result = WD_OUT_EPARA;
@@ -660,7 +660,7 @@ static int fill_dh_xp_params(struct wd_dh_msg *msg,
}
static int dh_out_transfer(struct wd_dh_msg *msg,
- struct hisi_hpre_sqe *hw_msg)
+ struct hisi_hpre_sqe *hw_msg, __u8 qp_mode)
{
__u16 key_bytes = (hw_msg->task_len1 + 1) * BYTE_BITS;
struct wd_dh_req *req = &msg->req;
@@ -668,7 +668,7 @@ static int dh_out_transfer(struct wd_dh_msg *msg,
int ret;
/* async */
- if (LW_U16(hw_msg->low_tag))
+ if (qp_mode == CTX_MODE_ASYNC)
out = VA_ADDR(hw_msg->hi_out, hw_msg->low_out);
else
out = req->pri;
@@ -760,7 +760,7 @@ static int dh_recv(handle_t ctx, void *dh_msg)
hpre_result_check(&hw_msg, &msg->result);
if (!msg->result) {
- ret = dh_out_transfer(msg, &hw_msg);
+ ret = dh_out_transfer(msg, &hw_msg, qp->q_info.qp_mode);
if (ret) {
WD_ERR("failed to transfer out dh BD!\n");
msg->result = WD_OUT_EPARA;
--
2.27.0