qemu/hw-ufs-add-basic-info-of-query-response-upiu.patch
Jiabo Feng 811278419b QEMU update to version 8.2.0-20:
- Added CoDA feature support in the context of CVM. When virtcca cvm is enabled, the iommu is tagged as secure.
- hw/block: fix uint32 overflow
- hw/ufs: add basic info of query response upiu
- crypto: avoid leak of ctx when bad cipher mode is given Fixes: Coverity CID 1546884

Signed-off-by: Jiabo Feng <fengjiabo1@huawei.com>
2024-10-21 09:58:43 +08:00

72 lines
2.9 KiB
Diff

From 450b67a5dd3954db8441a1ad65a5e4594ba2e405 Mon Sep 17 00:00:00 2001
From: dinglimin <dinglimin@cmss.chinamobile.com>
Date: Mon, 16 Sep 2024 17:34:34 +0800
Subject: [PATCH] hw/ufs: add basic info of query response upiu cherry picked
from de2cc4078240f8b745a7caeed461b02f2577e2d2 Modify to fill the opcode, idn,
index, selector information of all Query Response UPIU. because attr and flag
operation of query response upiu need these information too.
Signed-off-by: KyoungrulKim <k831.kim@samsung.com>
Reviewed-by: Minwoo Im <minwoo.im@samsung.com>
Reviewed-by: Jeuk Kim <jeuk20.kim@samsung.com>
Signed-off-by: Jeuk Kim <jeuk20.kim@samsung.com>
Signed-off-by: dinglimin <dinglimin@cmss.chinamobile.com>
---
hw/ufs/ufs.c | 13 +++++++++----
hw/ufs/ufs.h | 1 +
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/hw/ufs/ufs.c b/hw/ufs/ufs.c
index bac78a32bb..068895b27b 100644
--- a/hw/ufs/ufs.c
+++ b/hw/ufs/ufs.c
@@ -455,6 +455,14 @@ void ufs_build_upiu_header(UfsRequest *req, uint8_t trans_type, uint8_t flags,
req->rsp_upiu.header.data_segment_length = cpu_to_be16(data_segment_length);
}
+void ufs_build_query_response(UfsRequest *req)
+{
+ req->rsp_upiu.qr.opcode = req->req_upiu.qr.opcode;
+ req->rsp_upiu.qr.idn = req->req_upiu.qr.idn;
+ req->rsp_upiu.qr.index = req->req_upiu.qr.index;
+ req->rsp_upiu.qr.selector = req->req_upiu.qr.selector;
+}
+
static UfsReqResult ufs_exec_scsi_cmd(UfsRequest *req)
{
UfsHc *u = req->hc;
@@ -931,10 +939,6 @@ static QueryRespCode ufs_read_desc(UfsRequest *req)
if (length > req->rsp_upiu.qr.data[0]) {
length = req->rsp_upiu.qr.data[0];
}
- req->rsp_upiu.qr.opcode = req->req_upiu.qr.opcode;
- req->rsp_upiu.qr.idn = req->req_upiu.qr.idn;
- req->rsp_upiu.qr.index = req->req_upiu.qr.index;
- req->rsp_upiu.qr.selector = req->req_upiu.qr.selector;
req->rsp_upiu.qr.length = cpu_to_be16(length);
return status;
@@ -1015,6 +1019,7 @@ static UfsReqResult ufs_exec_query_cmd(UfsRequest *req)
data_segment_length = be16_to_cpu(req->rsp_upiu.qr.length);
ufs_build_upiu_header(req, UFS_UPIU_TRANSACTION_QUERY_RSP, 0, status, 0,
data_segment_length);
+ ufs_build_query_response(req);
if (status != UFS_QUERY_RESULT_SUCCESS) {
return UFS_REQUEST_FAIL;
diff --git a/hw/ufs/ufs.h b/hw/ufs/ufs.h
index 8fda94f4ef..8a74b4c2ab 100644
--- a/hw/ufs/ufs.h
+++ b/hw/ufs/ufs.h
@@ -132,6 +132,7 @@ static inline bool is_wlun(uint8_t lun)
void ufs_build_upiu_header(UfsRequest *req, uint8_t trans_type, uint8_t flags,
uint8_t response, uint8_t scsi_status,
uint16_t data_segment_length);
+void ufs_build_query_response(UfsRequest *req);
void ufs_complete_req(UfsRequest *req, UfsReqResult req_result);
void ufs_init_wlu(UfsLu *wlu, uint8_t wlun);
#endif /* HW_UFS_UFS_H */
--
2.41.0.windows.1