From nobody Sun Jul 26 01:45:54 2026 Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A8A5E433AD for ; Fri, 10 Jul 2026 05:46:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.254.224.24 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783662368; cv=none; b=StSOG84ouxdiWNsanyMfDXQkaoSSor74BaHVo5EbOjP7X9uRlX+7WlxcQucVMBfSDrA8OT3rWklyISiU3r8DGv1G9Ix3YRgGM8YVYuRtfWr6xQScR5Xhk1cSczbsYlxTcnDV1gr4zVU0gj83BCnr1SBPnfduzHNj1XLAeZlyEAw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783662368; c=relaxed/simple; bh=e3+kr2zi+pibibEpTe5Ah8tE4Vb0dpA/Fuua9zW9abY=; h=Mime-Version:Subject:From:To:CC:Message-ID:Date:Content-Type: References; b=hbScGR9Ou85++ANI/SB9gwfx1Ug7pn7d1WlLjoJufmhYHgNGLjFtK7A0rMu2ttGwYbo0wX/T6N5iF2lwGEGC+Q6Gd4S6jogYTwnA80Gvk12crFvEzfiDA5TRQAZXEaJ5jPbdloKft5OGwrOrea1h+atcWvy71UjuhZlq5DTw6eQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com; spf=pass smtp.mailfrom=samsung.com; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b=ES1xdzPz; arc=none smtp.client-ip=203.254.224.24 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=samsung.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="ES1xdzPz" Received: from epcas2p3.samsung.com (unknown [182.195.41.55]) by mailout1.samsung.com (KnoxPortal) with ESMTP id 20260710054557epoutp0131ccf9dc78541524ad18290cad9a4785~A13bT9prf0083300833epoutp01k for ; Fri, 10 Jul 2026 05:45:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.samsung.com 20260710054557epoutp0131ccf9dc78541524ad18290cad9a4785~A13bT9prf0083300833epoutp01k DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1783662357; bh=e3+kr2zi+pibibEpTe5Ah8tE4Vb0dpA/Fuua9zW9abY=; h=Subject:Reply-To:From:To:CC:Date:References:From; b=ES1xdzPzmZ7aeteRu6dJ+M0FCgOUTDkP4bozB0Jmz4mBvMpz1PRf7U+l0OZ6Royhf A298BRfW2+4+fpuzMZqr6R+rWr0SjYoTnc8LrGC3gQjM4lt0e7rZFURh1wawKll1g9 JrJq6AyhSHeGf3T9WKHHTDIzjW0CNImDyAFnWbJk= Received: from epsnrtp02.localdomain (unknown [182.195.42.154]) by epcas2p3.samsung.com (KnoxPortal) with ESMTPS id 20260710054557epcas2p38105a1e45e67b972164bdc79cf7af928~A13at-DMG2584025840epcas2p3m; Fri, 10 Jul 2026 05:45:57 +0000 (GMT) Received: from epcas2p4.samsung.com (unknown [182.195.38.208]) by epsnrtp02.localdomain (Postfix) with ESMTP id 4gxLR860dRz2SSKY; Fri, 10 Jul 2026 05:45:56 +0000 (GMT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 Subject: [PATCH] scsi: ufs: Add support for the aggregated read query opcode Reply-To: hyenc.jeong@samsung.com Sender: Hyeoncheol Jeong From: Hyeoncheol Jeong To: "James.Bottomley@HansenPartnership.com" , "martin.petersen@oracle.com" , "bvanassche@acm.org" , "linux-scsi@vger.kernel.org" CC: ALIM AKHTAR , "linux-kernel@vger.kernel.org" , Hyeoncheol Jeong , Jinyoung Choi , Dukhyun Kwon , Jeuk Kim , Keoseong Park , Jaemyung Lee , Jieon Seol , Gyusun Lee , Yunjae Jo X-Priority: 3 X-Content-Kind-Code: NORMAL X-CPGS-Detection: blocking_info_exchange X-Drm-Type: N,general X-Msg-Generator: Mail X-Msg-Type: PERSONAL X-Reply-Demand: N Message-ID: <20260710054556epcms2p68986e2af26f42e63c87ab8fde034e450@epcms2p6> Date: Fri, 10 Jul 2026 14:45:56 +0900 X-CMS-MailID: 20260710054556epcms2p68986e2af26f42e63c87ab8fde034e450 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-Sendblock-Type: AUTO_CONFIDENTIAL CMS-TYPE: 102P cpgsPolicy: CPGSC10-223,Y X-CFilter-Loop: Reflected X-CMS-RootMailID: 20260710053524epcms2p82121eba4240c37112fc5669430035442 References: UFS 5.0 / JEDEC 220H introduces the AGGREGATED READ query opcode (0x9), which retrieves an aggregated data packet from the device in a single query request. The packet may bundle multiple Descriptors, Attributes and Flags, each organized as a group with a group header, and is returned in the Data Segment of the QUERY RESPONSE UPIU. Because an aggregated data packet can be considerably larger than a single descriptor (up to 4 KiB rather than the 255-byte descriptor limit), the response UPIU buffer must be enlarged to hold it. Introduce ALIGNED_RSP_UPIU_SIZE (4096) for the response_upiu[] area of the UTP command descriptor and program the response UPIU length in the UTRD accordingly. Teach the BSG raw-UPIU path and the device management command path to recognize the new opcode so that user space can issue aggregated reads and receive the returned data segment. Descriptor sizing now honors QUERY_AGGREGATED_MAX_SIZE for aggregated reads. Signed-off-by: Hyeoncheol Jeong --- drivers/ufs/core/ufs_bsg.c 16 +++++++++++----- drivers/ufs/core/ufshcd.c=C2=A0 =C2=A0 7 ++++--- include/ufs/ufs.h=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 2 ++ include/ufs/ufshci.h=C2=A0 =C2=A0 =C2=A0 =C2=A0 8 +++++++- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/drivers/ufs/core/ufs_bsg.c b/drivers/ufs/core/ufs_bsg.c index 58b506eac6dc..176fedd496af 100644 --- a/drivers/ufs/core/ufs_bsg.c +++ b/drivers/ufs/core/ufs_bsg.c @@ -14,14 +14,18 @@ #include "ufshcd-priv.h" static int ufs_bsg_get_query_desc_size(struct ufs_hba *hba, int *desc_len, - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0 =C2=A0 =C2=A0 struct utp_upiu_= query *qr) + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0 =C2=A0 =C2=A0 struct utp_upiu_= query *qr, + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0 =C2=A0 =C2=A0 enum query_opcod= e desc_op) { =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0int desc_size =3D be16_to_cpu(qr->length); =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (desc_size <=3D 0) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return -EINVA= L; - =C2=A0 =C2=A0 =C2=A0 =C2=A0*desc_len =3D min_t(int, QUERY_DESC_MAX_SIZE, = desc_size); + =C2=A0 =C2=A0 =C2=A0 =C2=A0if (desc_op =3D=3D UPIU_QUERY_OPCODE_AGGREGATE= D_READ) + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*desc_len =3D min_= t(int, QUERY_AGGREGATED_MAX_SIZE, desc_size); + =C2=A0 =C2=A0 =C2=A0 =C2=A0else + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*desc_len =3D min_= t(int, QUERY_DESC_MAX_SIZE, desc_size); =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0; } @@ -35,11 +39,12 @@ static int ufs_bsg_alloc_desc_buffer(struct ufs_hba *hb= a, struct bsg_job *job, =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0u8 *descp; =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (desc_op !=3D UPIU_QUERY_OPCODE_WRITE_= DESC && - =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0 =C2=A0 desc_op !=3D UPIU_QUERY_OPCODE_R= EAD_DESC) + =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0 =C2=A0 desc_op !=3D UPIU_QUERY_OPCODE_R= EAD_DESC && + =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0 =C2=A0 desc_op !=3D UPIU_QUERY_OPCODE_A= GGREGATED_READ) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto out; =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0qr =3D &bsg_request->upiu_req.qr; - =C2=A0 =C2=A0 =C2=A0 =C2=A0if (ufs_bsg_get_query_desc_size(hba, desc_len,= qr)) { + =C2=A0 =C2=A0 =C2=A0 =C2=A0if (ufs_bsg_get_query_desc_size(hba, desc_len,= qr, desc_op)) { =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0dev_err(hba->= dev, "Illegal desc size\n"); =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return -EINVA= L; =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} @@ -161,7 +166,8 @@ static int ufs_bsg_request(struct bsg_job *job) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 buff, &desc_len, desc_op); =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (ret) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0dev_err(hba->dev, "exe raw upiu: error code %d\n", ret); - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0else if (desc_op = =3D=3D UPIU_QUERY_OPCODE_READ_DESC && desc_len) { + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0else if ((desc_op = =3D=3D UPIU_QUERY_OPCODE_READ_DESC=20 + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0=C2=A0 desc_op =3D=3D UPIU_QUERY_OPCODE_AGGREGATED_READ) && desc_= len) { =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0bsg_reply->reply_payload_rcv_len =3D =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0sg_copy_from_buffer(job->reque= st_payload.sg_list, =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0 =C2=A0 job->request_payload.sg_cnt, diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index d3044a3089b5..a366224462ca 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -4108,14 +4108,14 @@ static void ufshcd_host_memory_configure(struct ufs= _hba *hba) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0utrdlp[i].prd_table_offset =3D =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cpu_to_le16(prdt_offset); =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0utrdlp[i].response_upiu_length =3D - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cpu_to_le16(ALIGNED_UPIU_SIZE); + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cpu_to_le16(ALIGNED_RSP_UPIU_SIZE); =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} else { =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0utrdlp[i].response_upiu_offset =3D =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cpu_to_le16(response_offset >>= 2); =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0utrdlp[i].prd_table_offset =3D =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cpu_to_le16(prdt_offset >> 2); =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0utrdlp[i].response_upiu_length =3D - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cpu_to_le16(ALIGNED_UPIU_SIZE >> 2); + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cpu_to_le16(ALIGNED_RSP_UPIU_SIZE >> = 2); =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} } @@ -7638,7 +7638,8 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hb= a *hba, =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* just copy the upiu response as it is */ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0memcpy(rsp_upiu, lrbp->ucd_rsp_ptr, sizeo= f(*rsp_upiu)); - =C2=A0 =C2=A0 =C2=A0 =C2=A0if (desc_buff && desc_op =3D=3D UPIU_QUERY_OPC= ODE_READ_DESC) { + =C2=A0 =C2=A0 =C2=A0 =C2=A0if (desc_buff && (desc_op =3D=3D UPIU_QUERY_OP= CODE_READ_DESC=20 + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0=C2=A0 desc_op =3D=3D UPIU_QUERY_OPCODE_AGGREGATED_READ)) { =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0u8 *descp =3D= (u8 *)lrbp->ucd_rsp_ptr + sizeof(*rsp_upiu); =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0u16 resp_len = =3D be16_to_cpu(lrbp->ucd_rsp_ptr->header =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 .data_segment_length); diff --git a/include/ufs/ufs.h b/include/ufs/ufs.h index 0d48e137d66d..01bf9a8c8bb3 100644 --- a/include/ufs/ufs.h +++ b/include/ufs/ufs.h @@ -25,6 +25,7 @@ static_assert(sizeof(struct utp_upiu_query) =3D=3D 20); #define GENERAL_UPIU_REQUEST_SIZE (sizeof(struct utp_upiu_req)) #define QUERY_DESC_MAX_SIZE=C2=A0 =C2=A0 =C2=A0 255 +#define QUERY_AGGREGATED_MAX_SIZE 4096 #define QUERY_DESC_MIN_SIZE=C2=A0 =C2=A0 =C2=A0 2 #define QUERY_DESC_HDR_SIZE=C2=A0 =C2=A0 =C2=A0 2 #define QUERY_OSF_SIZE=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (GENERAL_UP= IU_REQUEST_SIZE - \ @@ -464,6 +465,7 @@ enum query_opcode { =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0UPIU_QUERY_OPCODE_SET_FLAG =C2=A0 =C2=A0 = =C2=A0 =C2=A0=3D 0x6, =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0UPIU_QUERY_OPCODE_CLEAR_FLAG =C2=A0 =C2= =A0 =C2=A0 =C2=A0=3D 0x7, =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0UPIU_QUERY_OPCODE_TOGGLE_FLAG =C2=A0 =C2= =A0 =C2=A0 =C2=A0=3D 0x8, + =C2=A0 =C2=A0 =C2=A0 =C2=A0UPIU_QUERY_OPCODE_AGGREGATED_READ =C2=A0 =C2= =A0 =C2=A0 =C2=A0=3D 0x9, }; /* bRefClkFreq attribute values */ diff --git a/include/ufs/ufshci.h b/include/ufs/ufshci.h index 9f0fdd850e54..682104fb7390 100644 --- a/include/ufs/ufshci.h +++ b/include/ufs/ufshci.h @@ -18,6 +18,12 @@ enum { =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0TASK_REQ_UPIU_SIZE_DWORDS =C2=A0 =C2=A0 = =C2=A0 =C2=A0=3D 8, =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0TASK_RSP_UPIU_SIZE_DWORDS =C2=A0 =C2=A0 = =C2=A0 =C2=A0=3D 8, =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ALIGNED_UPIU_SIZE =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D 512, + =C2=A0 =C2=A0 =C2=A0 =C2=A0/* + =C2=A0 =C2=A0 =C2=A0 =C2=A0 * The aggregated read opcode can return an ag= gregated data packet of + =C2=A0 =C2=A0 =C2=A0 =C2=A0 * up to QUERY_AGGREGATED_MAX_SIZE bytes, so t= he response UPIU buffer + =C2=A0 =C2=A0 =C2=A0 =C2=A0 * needs to be large enough to hold it. + =C2=A0 =C2=A0 =C2=A0 =C2=A0 */ + =C2=A0 =C2=A0 =C2=A0 =C2=A0ALIGNED_RSP_UPIU_SIZE =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D 4096, }; /* UFSHCI Registers */ @@ -497,7 +503,7 @@ struct ufshcd_sg_entry { =C2=A0 */ struct utp_transfer_cmd_desc { =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0u8 command_upiu[ALIGNED_UPIU_SIZE]; - =C2=A0 =C2=A0 =C2=A0 =C2=A0u8 response_upiu[ALIGNED_UPIU_SIZE]; + =C2=A0 =C2=A0 =C2=A0 =C2=A0u8 response_upiu[ALIGNED_RSP_UPIU_SIZE]; =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0u8 prd_table[]; }; --=20 2.25.1