From nobody Sat Feb 7 07:10:02 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1770010953; cv=none; d=zohomail.com; s=zohoarc; b=PzM1ZDF24/JNYfoxMehA3+gqxqmZeaLmrVfj/o5vHVSM35ZXD5u36+JVBhAMPZdN7drtvcZM+fudFdFxDMirvQ00oqaDw5eVRUS+4xIDx1LWcPfEv1ufXqBlYLsy8BkQR58zuVNlKOW8YBJLACB+dVuj8SqkyCrb97zCfdu59k8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770010953; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fTh1EKb0IBz/fDEzbfv1i9pC1PLYHmeeUaI6qDJBskE=; b=a50hDoBSTqPHlgXjjBZhej+F7zgvuCekgK6ZhzwAkIfjzZVmsml7tmoET3LzzAYiCWiQrvNUVoG59FQ93VvvWNmTiKiq910Z3Fu4wIs93q9ZMZXFcHRJIgaf3clj1Y0Gi/Hq1b7yIyFeA7Le46WSaON+XgIjMssYM/CB54cayuk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1770010953118170.28928216332258; Sun, 1 Feb 2026 21:42:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vmmgy-0003th-CQ; Mon, 02 Feb 2026 00:41:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vmmgs-0003sV-Oy for qemu-devel@nongnu.org; Mon, 02 Feb 2026 00:41:38 -0500 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vmmgr-0003xy-Bn for qemu-devel@nongnu.org; Mon, 02 Feb 2026 00:41:38 -0500 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-350fe1f8ea3so1894857a91.2 for ; Sun, 01 Feb 2026 21:41:37 -0800 (PST) Received: from jeuk-MS-7D42.. ([175.119.5.143]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f610266esm17804018a91.4.2026.02.01.21.41.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Feb 2026 21:41:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770010896; x=1770615696; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fTh1EKb0IBz/fDEzbfv1i9pC1PLYHmeeUaI6qDJBskE=; b=avZ4wYhiLTmUVBNJzXALxtJoO70W1v+eTkygxKCYTkhvKuSXOQcKpV0r2LNdkH/CcG KyECqz43RyTnQwiOKqxYkSldnh/I63Ngm2unayP67ushiv7XTMSna4kzYs4QGAiTaBLJ r4ic5utLsmdHg8Q8Iu0Z/TI0O78tfkubH0ngy6BLtfHPabqlRknFQuijg14MiamSSYUF E1QdLMZNngJU2ZT6welQDstIS5Fja66qR1eX5YM9iFSRAuA6Kzp8QWnuWe6tZaSpU9+S bGl/RR/5jxxn4f+6QBIEfcklWO/OpwUi7qwR2MjeesFdm+I920RLOHaKd3YpTXa3RIOy VsZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770010896; x=1770615696; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=fTh1EKb0IBz/fDEzbfv1i9pC1PLYHmeeUaI6qDJBskE=; b=C8/eZsxkO4eHKHNecu3eWU/kPvoquBWm+WQti4vF73wrgJZOKvwNxPIUT8yu6b1mEw /JTEHj/M0mXzO5azobiBh+1xZOsTZkyyPrzzRXBsEYhu087Ts29QlaHqh6viQWcKPWHK mWQd1W7t1++awJSsj5PcIPV369pCaMQnN1ntv5IrYUX5grfAu72JQE0kVoZk3yg3qG2Q H+yWwFWQug3y86zb04orDTCZ+BYUpwAqcUwbnWy8LkOaFLgZOj7ImHeNagib5ZvaNS2j Cmx70yotQgI08g4IIMyiaW2mErhjF2DYFxmS7Du72MSUrrPcz6jddI6wf6hhW43F4E8t aILA== X-Gm-Message-State: AOJu0YwBQo11BCxmfWq0hQAVFmFfXZy8BuZsRD1fLfu8BPncBlxeitKl mahJt+dVnBiXV9Qq0iaMkHU32smvwqtbVv8D5+ggBj1w+80gDVQXtTQGGy8/dw== X-Gm-Gg: AZuq6aKxvDrkxxT78OAe8G4wqQCbF1m6lyZjDgIPSeJw6S0ALnbxVa+tjUOp+7mqoPr 39tKnWfbDN5Gxzm8ChQ/NZ7rWMD7dD5/xCtzPj3XTmGWL25aE6YWuvawfmncuriPNqyiwQdoUp9 ufbjYRiJtlD4fDReA2ezLiRnSCH9k347A/QdcbMf3O9E2UumfAMM44yzGYWz335IYRMPWmH6JUi kb3NOvOYDbk7/YakLyzyHDvrCmXlsR2uJZfAWe+kAlVs/gOMpxOKVBxWb+DLpKEFFsFg0aN+tE8 g4OKrm7MywZJXAXz9oTHraR4azDGZqp+/rK3JTv75Dpy+McOixWsLdVcqjvAwDA7z0xWkYpFVEy j1IVBaqFZ5JRqWcSLVHAb/j2gZBuDG8S17nA/UUxMF1OW493RlLtEMW8uN1bZRXJ/frvrvwboBK njQgVeDpLlfzedQw== X-Received: by 2002:a17:90b:2e41:b0:340:bb51:17eb with SMTP id 98e67ed59e1d1-3543b34fcbcmr10638503a91.15.1770010895561; Sun, 01 Feb 2026 21:41:35 -0800 (PST) From: Jeuk Kim To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, jeuk20.kim@samsung.com, qemu-block@nongnu.org, j-young.choi@samsung.com Subject: [PULL v2 1/4] hw/ufs: Ensure DBC of PRDT uses only lower 18 bits Date: Mon, 2 Feb 2026 14:41:11 +0900 Message-ID: <289e6a3edf5041a9f96c3fb792845b94b5b3c666.1770010668.git.jeuk20.kim@samsung.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102d; envelope-from=jeuk20.kim@gmail.com; helo=mail-pj1-x102d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1770010954289158500 Content-Type: text/plain; charset="utf-8" From: Jeuk Kim The UFS spec defines the PRDT data byte count as an 18-bit field. This commit masks the value to the lower 18 bits to prevent incorrect transfer lengths and ensure compliance. Signed-off-by: Jeuk Kim --- hw/ufs/ufs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/ufs/ufs.c b/hw/ufs/ufs.c index cab42ae7b6..d3f08f2ba9 100644 --- a/hw/ufs/ufs.c +++ b/hw/ufs/ufs.c @@ -224,7 +224,8 @@ static MemTxResult ufs_dma_read_prdt(UfsRequest *req) =20 for (uint16_t i =3D 0; i < prdt_len; ++i) { hwaddr data_dma_addr =3D le64_to_cpu(prd_entries[i].addr); - uint32_t data_byte_count =3D le32_to_cpu(prd_entries[i].size) + 1; + uint32_t data_byte_count =3D + (le32_to_cpu(prd_entries[i].size) & 0x3ffff) + 1; qemu_sglist_add(req->sg, data_dma_addr, data_byte_count); req->data_len +=3D data_byte_count; } --=20 2.43.0 From nobody Sat Feb 7 07:10:02 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1770010929; cv=none; d=zohomail.com; s=zohoarc; b=ceod5gq9czRzolcFtGwFW+ebtQ3apaC/N91aG35Ma81qaBWvb5xuwcXwjiqCWdDxdm9RoHvPfyNYo2ZPVPKDFFvOdHNn7SRRNVOrk9HH36Z7pUlfioDq7y+zfnRrrdSoYC1n3aieCUZ1EdZCxfNPjyp/kbFvEfLmhaWfZWuwC18= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770010929; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=orTLrOWeKTPyvS26NEmXloq5PzOs+hNT/pDvq4j4jF4=; b=c9tsEOZ1IW9WThw31QELuXD6bZaL93gdVjY4EFxK8nbxXsgygtCIoHDXXl81osCt7TFYV4ilbB7LsYtPJG1278UVHPrmbdAPtAGySsSG+pAD+XuFMW1V38VN0TY6hYlqsRhufjvDhG4Mu4clVfQkE1qR5ducaUbttXcGjtZFSNM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1770010929961600.4477692998979; Sun, 1 Feb 2026 21:42:09 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vmmgy-0003uE-Ut; Mon, 02 Feb 2026 00:41:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vmmgu-0003tJ-Ru for qemu-devel@nongnu.org; Mon, 02 Feb 2026 00:41:41 -0500 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vmmgt-0003yW-7w for qemu-devel@nongnu.org; Mon, 02 Feb 2026 00:41:40 -0500 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-3543b9f60e3so1386555a91.3 for ; Sun, 01 Feb 2026 21:41:38 -0800 (PST) Received: from jeuk-MS-7D42.. ([175.119.5.143]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f610266esm17804018a91.4.2026.02.01.21.41.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Feb 2026 21:41:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770010897; x=1770615697; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=orTLrOWeKTPyvS26NEmXloq5PzOs+hNT/pDvq4j4jF4=; b=ntoQVnkl/1Io/2tNgYW5R4evF7vsT6iSvUaVJ1AIJrsJo+qB5AxO1aaYX5Zgew0KLc KOzEv0EaN1fwVQB8VnzmVcnB1vnU9rngNWjsogBnQaFX7Axiwdru2rf0qoqoKVAeFmrf 4kRqGI0+egJGkQzQmgQxnbnL7ppkJMAF05XaFZRDl5+VuvDKKqWJG+7x0dIwYzYhM1fv ebSX8ZOH4ZikVbhZ9PKNrLw/+p+UyVEwOyGM36hRSmJRsRLMje43z6s++1dSDhR4DfKL RWNlDWuRJQN6fr4Vqho4Vw9QwmDaKOWHqL7j+Wi9q+kyLioX6sPfvCdycV7/q/YHNYzj 0VJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770010897; x=1770615697; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=orTLrOWeKTPyvS26NEmXloq5PzOs+hNT/pDvq4j4jF4=; b=Ox6Uwc01yqGnKvedTzYBb+Z06Xoa/XTE/dpxTlYXbBmonZD9QLpVNKE16ZdeM62dYh kUcm2ItYhFV2y/g+lT5iLcbv0q8TM9Unk4uQI5QFC2Cb3J/0hCjwG3gSMnK06c3YPZFO 0wG4oW686bQjjvsNId9Buai/nuPtB1NOb0AkZLf7nP+xJEV3Ga1yA4R9Ban2wcHT4U5V z6Oyz/wxXn+lH0ZHidXLkpKLv7Vczn89pEYEqaQ3ypUx5GBy/jmatTNztRTIN/+ixmDW +E46/efVKF92PWJ/53v5YYRLWW4OiXRRVSAv7Dw7SmccTlPm/s2s9W1D7K56i9V/iIj8 RbtQ== X-Gm-Message-State: AOJu0Yzr5amGuwFuUAbCynEA831U61aIX8RJtujcqgUSegill/ALApV7 DRACo9g0mrPXzJ6w1BUHxFF0/yMDvGgtONfCD8IjiiV+P6xcuPr52ICJIrRnlQ== X-Gm-Gg: AZuq6aIY4kHvGtyAKhgCLjgHP05RBpA36T+GdLnzUEH5nj9iKnG396IdUHpqSvVL4jB I6ElSo5gXLczsIIesBa65hII113P03ReRorcbR2qylznCqj0kJimRxvr9eR4EoGk7xMlj4sA6f/ 3nSogXOpboNYLZKcaykFqSz1qxB0XptkVPOdmpLxSy+43CP/6e8RqPRFddK6r0z0cBcBZE4aa8y gAIL1aijaompDPfCnWJQVpNSlZnvN9rGEiHPxt4oo9opf/oTHjtAhWp3lvcDpmsqdC2BptjOGTc klVmOPO9reECq6xXZZ1YYDDLsN0lQ+gbrcgzONIw2uPyinqk9h7HcWr9QF22xXxiVM2dyd1kU+D 8X4sVVa0X6SZlOW2Ig0+Uis3IvN96WKSk0DOFjfbxl9FSGFbAC8uWCz6WyntPy/QlcBH3LOjhha 7CSCE030iibJrnnA== X-Received: by 2002:a17:90b:4a09:b0:32e:e18a:3691 with SMTP id 98e67ed59e1d1-3543b3f34d6mr10177956a91.35.1770010897460; Sun, 01 Feb 2026 21:41:37 -0800 (PST) From: Jeuk Kim To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, jeuk20.kim@samsung.com, qemu-block@nongnu.org, j-young.choi@samsung.com Subject: [PULL v2 2/4] hw/ufs: fix CQE endianness and UPIU length Date: Mon, 2 Feb 2026 14:41:12 +0900 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=jeuk20.kim@gmail.com; helo=mail-pj1-x102a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1770010930588154100 Content-Type: text/plain; charset="utf-8" From: Jeuk Kim Round-trip UTRD fields through cpu_to_le/ le_to_cpu when building MCQ CQEs = to keep BE hosts correct. Also avoid double BE conversion of response data_segment_length and document the LE round-trip. Signed-off-by: Jeuk Kim --- hw/ufs/lu.c | 3 +-- hw/ufs/ufs.c | 27 ++++++++++++++++++--------- include/block/ufs.h | 2 +- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/hw/ufs/lu.c b/hw/ufs/lu.c index 2d8ffd72c5..3f3c9589ce 100644 --- a/hw/ufs/lu.c +++ b/hw/ufs/lu.c @@ -53,8 +53,7 @@ static void ufs_build_scsi_response_upiu(UfsRequest *req,= uint8_t *sense, response =3D UFS_COMMAND_RESULT_FAIL; } =20 - data_segment_length =3D - cpu_to_be16(sense_len + sizeof(req->rsp_upiu.sr.sense_data_len)); + data_segment_length =3D sense_len + sizeof(req->rsp_upiu.sr.sense_data= _len); ufs_build_upiu_header(req, UFS_UPIU_TRANSACTION_RESPONSE, flags, respo= nse, status, data_segment_length); } diff --git a/hw/ufs/ufs.c b/hw/ufs/ufs.c index d3f08f2ba9..9cf7eab9b0 100644 --- a/hw/ufs/ufs.c +++ b/hw/ufs/ufs.c @@ -449,15 +449,24 @@ static void ufs_mcq_process_cq(void *opaque) { ufs_dma_write_rsp_upiu(req); =20 - req->cqe.utp_addr =3D - ((uint64_t)req->utrd.command_desc_base_addr_hi << 32ULL) | - req->utrd.command_desc_base_addr_lo; - req->cqe.utp_addr |=3D req->sq->sqid; - req->cqe.resp_len =3D req->utrd.response_upiu_length; - req->cqe.resp_off =3D req->utrd.response_upiu_offset; - req->cqe.prdt_len =3D req->utrd.prd_table_length; - req->cqe.prdt_off =3D req->utrd.prd_table_offset; - req->cqe.status =3D req->utrd.header.dword_2 & 0xf; + /* UTRD/CQE are LE; round-trip through host to keep BE correct. */ + uint64_t ucdba =3D + ((uint64_t)le32_to_cpu(req->utrd.command_desc_base_addr_hi) + << 32ULL) | + le32_to_cpu(req->utrd.command_desc_base_addr_lo); + uint16_t resp_len =3D le16_to_cpu(req->utrd.response_upiu_length); + uint16_t resp_off =3D le16_to_cpu(req->utrd.response_upiu_offset); + uint16_t prdt_len =3D le16_to_cpu(req->utrd.prd_table_length); + uint16_t prdt_off =3D le16_to_cpu(req->utrd.prd_table_offset); + uint8_t status =3D le32_to_cpu(req->utrd.header.dword_2) & UFS_MAS= K_OCS; + + ucdba |=3D req->sq->sqid; + req->cqe.utp_addr =3D cpu_to_le64(ucdba); + req->cqe.resp_len =3D cpu_to_le16(resp_len); + req->cqe.resp_off =3D cpu_to_le16(resp_off); + req->cqe.prdt_len =3D cpu_to_le16(prdt_len); + req->cqe.prdt_off =3D cpu_to_le16(prdt_off); + req->cqe.status =3D status; req->cqe.error =3D 0; =20 ret =3D ufs_addr_write(u, cq->addr + tail, &req->cqe, sizeof(req->= cqe)); diff --git a/include/block/ufs.h b/include/block/ufs.h index ede4aff08e..04cb24324d 100644 --- a/include/block/ufs.h +++ b/include/block/ufs.h @@ -645,7 +645,7 @@ enum UtpOcsCodes { }; =20 enum { - UFS_MASK_OCS =3D 0x0F, + UFS_MASK_OCS =3D 0xFF, }; =20 /* --=20 2.43.0 From nobody Sat Feb 7 07:10:02 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1770010966; cv=none; d=zohomail.com; s=zohoarc; b=HTayFi8N3QzeM7+VPh4bju4/tk1kTwY0jjylL/H34RrHMPC/PkWEn+M1iVy3VXb1Te7rI4r/GbXOwScRk5rdgMJa+7jHGNK8XAgbgt82C9S8gwHatDrheFYunxTN7R5NeD+wV1W9zSjVRc5ftk+3k2XhU5rDegO65DM23ZoH9Mg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770010966; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=vCHQR4xlgTSLYVszeaZ7g5UbfvlQ1I5qPfGO9QKrVmk=; b=XmcAXnK8qDxajvbfgApQNknpIzFXGyXzDTrnru7u9f/p81BsIzEvlx5bdrrgafqq+VCwPBkvXTzryTaPrPQZ7TacKTMpvSUT04DrGmwL1NcioJmPLYqdjjhBI+YzvtRDtz/CNwl8afSLq6R7WPtowaUBtsmlEMEEy9boLxNu7Cs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1770010966741391.3827073525879; Sun, 1 Feb 2026 21:42:46 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vmmh3-0003wC-Vs; Mon, 02 Feb 2026 00:41:50 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vmmgx-0003to-1h for qemu-devel@nongnu.org; Mon, 02 Feb 2026 00:41:44 -0500 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vmmgv-0003z5-Cb for qemu-devel@nongnu.org; Mon, 02 Feb 2026 00:41:42 -0500 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-3530715386cso2863061a91.2 for ; Sun, 01 Feb 2026 21:41:41 -0800 (PST) Received: from jeuk-MS-7D42.. ([175.119.5.143]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f610266esm17804018a91.4.2026.02.01.21.41.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Feb 2026 21:41:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770010899; x=1770615699; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vCHQR4xlgTSLYVszeaZ7g5UbfvlQ1I5qPfGO9QKrVmk=; b=E3pLOzibcUxC0e7GOU1Zk1W2L2hR27t5rv7nvl9pusRp3htu0iXfceWYmB5kCLEWlT s+4uih19KNVueomeCsKbWFWVGhbpWjzn69Cd/elk0glVLIF10AIz4gZQaG1M9NxW/mmL SCRd6rdTJMV6/Q/Cp8mvf9NCX76TkUK/GsGzpMoPRU4GVaKJmSJE3M85zVVtB+OULrw2 SN7LZrUr0wUJuSFWVB7B6AGJd2Er1LxN+pLVOh5ufHY4b9hVGQM4K9WX380NVqWUhwfr xDqFSCaXh9u8P7j2rkPzpjHHnzDThXZvcJOZGtzcC997wPzpf+WPMCvx4mHDFqVi0pQs 5LLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770010899; x=1770615699; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=vCHQR4xlgTSLYVszeaZ7g5UbfvlQ1I5qPfGO9QKrVmk=; b=oDMx//QDJA/6joNL9QoDaAtRjK6QpAVyKFfea2E8JqHvea5p10SNvzBlyBsDJL26ba bLkgZt0EgKPS6S/LImEWg4j8KV19nOK0vtCBfzKBvzMdLFxAgbtOVbY6SQsR//P2vMBT KLhDLTeOI4+9YEm8mSvCwlkFMCorKkBwt7V6RWpGmzuDRQvRsOKT6sXkO4fAWHw112/O YY/rwS4fQbntfGSINMWhaKtYwXxUuUDxQwLpnd0NRaQmW86Z1GDZFkjP1jQ/fRbAEO6J rRm3hzDEyTGYof5IAZCzrW99WU+S2J5Y5MXCrE8ZkKkjflJA/pQOuzQ1Ns0G7zbC4Q5Q ys7w== X-Gm-Message-State: AOJu0YzFM/GsUK6mbehtwbNWWFun+EjLt7hukpWXVe4EmlNT2rE22NX6 7UledBecVMaem4TcvX3PU8J1Z07X2aN+onZBBZrsixcH8bc58x3w/ysH+/EDZQ== X-Gm-Gg: AZuq6aK9+/murb8IBy9oN/VuTrnnZ/7jujnez3f5Bm/EtmrCyrQjP1d+CAimz0RCQpV BC86OP4Rp6tdTJwFkeRSRYWV0d7iW0pH8nluzs1OWX0euPmGPSyUZ2uxA2d8CWKTP4oSbiZbbaT 3wie+7JBB/tgtq6bifnzSCa2AMOyyR37fNMXvEn2eEDn2FRHHi3YGn8WLwUDhWiUKWM4vVOr8a+ IWKaqYvgkPw3KmaZns7I5cxjbBiD+GzF/dRTSgNztct9VPFmCU9iTWhZSEbDcz8OGyaCMF/wVEk 72jcP/D7fdL9YJSZGRa0ZEx5D8vDLP2BGA6h/k1L+n7iaUi8gWu3NbLllPMUPWqBUz+KynRXukq LsAIHkFRIwt/9t274+0/4hvtZFnnau8uT0Tg2KY4H0Kxu2jeuk3ccJbAS0N19Aokz9nsFtJ4pCT A/swdmO8ZtSF1yQCe5Zp7pepxt X-Received: by 2002:a17:90a:fc4f:b0:32e:a5ae:d00 with SMTP id 98e67ed59e1d1-3543b30827emr9777357a91.13.1770010899526; Sun, 01 Feb 2026 21:41:39 -0800 (PST) From: Jeuk Kim To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, jeuk20.kim@samsung.com, qemu-block@nongnu.org, j-young.choi@samsung.com, Ilia Levi Subject: [PULL v2 3/4] hw/ufs: Fix mcq completion queue wraparound Date: Mon, 2 Feb 2026 14:41:13 +0900 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1029; envelope-from=jeuk20.kim@gmail.com; helo=mail-pj1-x1029.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1770010969091154100 Content-Type: text/plain; charset="utf-8" From: Ilia Levi Currently, ufs_mcq_process_cq() writes to the CQ without checking whether there is available space. This can cause CQ entries to be discarded and overwritten. The solution is to stop writing when CQ is full and exert backpressure on the affected SQs. This is similar to how NVMe CQs operate. Signed-off-by: Ilia Levi Reviewed-by: Jeuk Kim Signed-off-by: Jeuk Kim --- hw/ufs/ufs.c | 20 +++++++++++++++++++- hw/ufs/ufs.h | 9 +++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/hw/ufs/ufs.c b/hw/ufs/ufs.c index 9cf7eab9b0..cb74cb56bc 100644 --- a/hw/ufs/ufs.c +++ b/hw/ufs/ufs.c @@ -447,6 +447,10 @@ static void ufs_mcq_process_cq(void *opaque) =20 QTAILQ_FOREACH_SAFE(req, &cq->req_list, entry, next) { + if (ufs_mcq_cq_full(u, cq->cqid)) { + break; + } + ufs_dma_write_rsp_upiu(req); =20 /* UTRD/CQE are LE; round-trip through host to keep BE correct. */ @@ -478,6 +482,12 @@ static void ufs_mcq_process_cq(void *opaque) tail =3D (tail + sizeof(req->cqe)) % (cq->size * sizeof(req->cqe)); ufs_mcq_update_cq_tail(u, cq->cqid, tail); =20 + if (QTAILQ_EMPTY(&req->sq->req_list) && + !ufs_mcq_sq_empty(u, req->sq->sqid)) { + /* Dequeueing from SQ was blocked due to lack of free requests= */ + qemu_bh_schedule(req->sq->bh); + } + ufs_clear_req(req); QTAILQ_INSERT_TAIL(&req->sq->req_list, req, entry); } @@ -787,10 +797,18 @@ static void ufs_write_mcq_op_reg(UfsHc *u, hwaddr off= set, uint32_t data, } opr->sq.tp =3D data; break; - case offsetof(UfsMcqOpReg, cq.hp): + case offsetof(UfsMcqOpReg, cq.hp): { + UfsCq *cq =3D u->cq[qid]; + + if (ufs_mcq_cq_full(u, qid) && !QTAILQ_EMPTY(&cq->req_list)) { + /* Enqueueing to CQ was blocked because it was full */ + qemu_bh_schedule(cq->bh); + } + opr->cq.hp =3D data; ufs_mcq_update_cq_head(u, qid, data); break; + } case offsetof(UfsMcqOpReg, cq_int.is): opr->cq_int.is &=3D ~data; break; diff --git a/hw/ufs/ufs.h b/hw/ufs/ufs.h index 3799d97f30..13d964c5ae 100644 --- a/hw/ufs/ufs.h +++ b/hw/ufs/ufs.h @@ -200,6 +200,15 @@ static inline bool ufs_mcq_cq_empty(UfsHc *u, uint32_t= qid) return ufs_mcq_cq_tail(u, qid) =3D=3D ufs_mcq_cq_head(u, qid); } =20 +static inline bool ufs_mcq_cq_full(UfsHc *u, uint32_t qid) +{ + uint32_t tail =3D ufs_mcq_cq_tail(u, qid); + uint16_t cq_size =3D u->cq[qid]->size; + + tail =3D (tail + sizeof(UfsCqEntry)) % (sizeof(UfsCqEntry) * cq_size); + return tail =3D=3D ufs_mcq_cq_head(u, qid); +} + #define TYPE_UFS "ufs" #define UFS(obj) OBJECT_CHECK(UfsHc, (obj), TYPE_UFS) =20 --=20 2.43.0 From nobody Sat Feb 7 07:10:02 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1770010972; cv=none; d=zohomail.com; s=zohoarc; b=frTW39xrELJZuTxNIAmqjamDbHdk13MxTfBlK+0KQCoruntt6Wr90nlm4ssc6avwj2kfdd6td4rhyOHYYoDvQiyGVIXZ9BtSVke1aYYrSyNky29XprJXtp9wk7IX80oo0moCYgdafiMnVo2OHOQ6AURdCxquIigtp0mPjX2IatQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770010972; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+iDOixNWGXe//eYSxb/EkDkyE8fD6B5hJmT9PeOp5xY=; b=AlKpMGiz3oRsyi+Zgkq9+CGMj1Lr8B+sRK7ylkDYdlitJ6FjMg2Va4cSPLRjtmVKZYLQvMLn3r0TxkKjS/XMbPENGr1No6S2MWiEyCb2rw0L+2W7d9VqZ1koza9PNrDdKo59DUTm/GGLuUdp+HIH8q/MLgfyKlCRlF4TrfKQIpw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1770010972796496.28995347883495; Sun, 1 Feb 2026 21:42:52 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vmmh3-0003wA-AY; Mon, 02 Feb 2026 00:41:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vmmgz-0003uK-S7 for qemu-devel@nongnu.org; Mon, 02 Feb 2026 00:41:46 -0500 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vmmgy-0003zd-5q for qemu-devel@nongnu.org; Mon, 02 Feb 2026 00:41:45 -0500 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2a9004e4239so4775205ad.0 for ; Sun, 01 Feb 2026 21:41:43 -0800 (PST) Received: from jeuk-MS-7D42.. ([175.119.5.143]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353f610266esm17804018a91.4.2026.02.01.21.41.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Feb 2026 21:41:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770010902; x=1770615702; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+iDOixNWGXe//eYSxb/EkDkyE8fD6B5hJmT9PeOp5xY=; b=Y8DvHY21yTLZU+qwjSzqBWhfjFnoz/SAi6d/c0gOjtbHowCP1R4rKQjFnls2II1Zaj 0515Jek73rz0RmVMtkakGi5sJ+V9zO+JYxwmGjQLOGUSk1YpbxMw9L+gFyZ3yQs2BF4v PKzd8IZnKXXmm6eLTurlSNZktvqY3TMwYwRQANK6qEzE6t67Yppze+w3OZtnsIlz40NK sOEYHyR6Qml7mp9nSEOd4fTXRvgEUhaaJlt27F/tqksm3ylIbP3/qC9A4B+FMiLyUeSx zXJMqnPQRa9KIOzjz1/Zg1BjliiBE8PRlrLZ80ntUT6x9Crdltb/A0FtehWvvqCPARI/ ZNLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770010902; x=1770615702; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=+iDOixNWGXe//eYSxb/EkDkyE8fD6B5hJmT9PeOp5xY=; b=W7/CwHwFWJZU87Lnhqj/b8h6TjzP6NnAUrHw0kP6cL0h6UWZBqYVeXmn/QbEgeQe2F jt/VVC9VCyQ8m0PSY6TnOqC6gGljh8lUJcPwT/mJkwYj17yPVWd4AHNW2pzWaITYPSqG xG9ZDC0MLrnfV9HbB2HitM5M9kjIS4Taa276rw3rh8phi2VARK3EIgxXhDaQuSDgBqvX o/1pCWxl0KVSDEln8p7MSa+35I7g9y0PTicY5wrI3sWHvywTSTc+RqffvfenfgP1yKkU iiUJWPUYSgVbpS94kyikMwh+Emaeg0SzSyNSnsM+51bpQ3hizSyOMgMl0YnF7jYjSygj 4t3g== X-Gm-Message-State: AOJu0YzCKy8t1t6u6y4CiV7ZcLq936e0Mcqp62f8t6jTQafpGJ/Kg3w0 OfWkUGtLJ8ZI23SByyblZmasG7Ot/8GqkI9gSNFKn45QvKgby1EL0qo/avt63w== X-Gm-Gg: AZuq6aLG5WPeNCRLab9nx4mPLRE/8KASfUqYJWRPyFhZ7+ojCH/9ZD2hqMiNNoyMGnU RDgUOJEROP8okl3kZ41nXUolYWmdbKhEm8uTQ43rAkayM6jJOKgUGh7Rcd/sw8eJwkVYgFIFaSL 7UFGVLxkM18/xZCH+4PoYxuGiqBjb7kufTcH7HQFMM5i+edAbKvC0od94vyIP8rTnPhSUCxXPKH 8cH7IvOTfmvZlFz+HbRBiQskjtLV3lewq0aGFr3gP9uesCYDzFFL5y9QbIU9utwU9YHFC0OA1Dl sc95CIpR5Hwnkpa+fU+oos/lBMdbcMMNk3PwQfo9oNqVpccLr8D+Jom6Co97mwr2Hrgj4Mq2aew m/rSLlYDRCvgHB57UR7y27l94Dvr7hRALPu4OboGi9t8+0U0s/bxOazJc9l48mC0GJDazr8vL5C leduKDt+p/DyTxpw== X-Received: by 2002:a17:903:3b51:b0:2a7:80bf:3131 with SMTP id d9443c01a7336-2a8d9a7b928mr72828965ad.58.1770010901607; Sun, 01 Feb 2026 21:41:41 -0800 (PST) From: Jeuk Kim To: qemu-devel@nongnu.org Cc: richard.henderson@linaro.org, jeuk20.kim@samsung.com, qemu-block@nongnu.org, j-young.choi@samsung.com, Ilia Levi , Fabiano Rosas Subject: [PULL v2 4/4] tests/qtest/ufs-test: Add test for mcq completion queue wraparound Date: Mon, 2 Feb 2026 14:41:14 +0900 Message-ID: <94e72135d4d657d672561b1ae02a5854421616a7.1770010668.git.jeuk20.kim@samsung.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::633; envelope-from=jeuk20.kim@gmail.com; helo=mail-pl1-x633.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1770010975185154100 Content-Type: text/plain; charset="utf-8" From: Ilia Levi Added a test that sends 32 NOP Out commands asynchronously. Since the CQ has 31 entries by default, this tests the scenario where CQ processing needs to wait for space to become available. Additionally, added two minor fixes to existing tests: * advance CQ head after reading from CQ * initialize command descriptor slots bitmap in ufs_init() Signed-off-by: Ilia Levi Acked-by: Fabiano Rosas Reviewed-by: Jeuk Kim Signed-off-by: Jeuk Kim --- tests/qtest/ufs-test.c | 126 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/tests/qtest/ufs-test.c b/tests/qtest/ufs-test.c index 8cfdc41d3c..7f99944155 100644 --- a/tests/qtest/ufs-test.c +++ b/tests/qtest/ufs-test.c @@ -167,6 +167,7 @@ __ufs_send_transfer_request_mcq(QUfs *ufs, uint8_t lun, cqhp =3D ufs_rreg(ufs, ufs->cqdao[TEST_QID]); cqentry_addr =3D ufs->cqlba[TEST_QID] + cqhp; qtest_memread(ufs->dev.bus->qts, cqentry_addr, &cqentry, sizeof(cqentr= y)); + cqhp =3D (cqhp + sizeof(UfsCqEntry)) % (QUEUE_SIZE * sizeof(UfsCqEntry= )); ufs_wreg(ufs, ufs->cqdao[TEST_QID], cqhp); =20 return cqentry.status; @@ -209,6 +210,81 @@ static enum UtpOcsCodes ufs_send_nop_out(QUfs *ufs, Ut= pUpiuRsp *rsp_out) return ret; } =20 +static bool ufs_mcq_sq_has_space(QUfs *ufs) +{ + uint32_t sqhp =3D ufs_rreg(ufs, ufs->sqdao[TEST_QID]); + uint32_t sqtp =3D ufs_rreg(ufs, ufs->sqdao[TEST_QID] + 0x4); + uint32_t next_sqtp =3D + (sqtp + sizeof(UfsSqEntry)) % (QUEUE_SIZE * sizeof(UfsSqEntry)); + return next_sqtp !=3D sqhp; +} + +static void +__ufs_send_transfer_request_mcq_async(QUfs *ufs, uint8_t lun, + const UtpTransferReqDesc *utrd) +{ + uint32_t sqtp; + uint64_t utrd_addr; + + /* Wait for SQ space */ + while (!ufs_mcq_sq_has_space(ufs)) { + qtest_clock_step(ufs->dev.bus->qts, 100); + } + + sqtp =3D ufs_rreg(ufs, ufs->sqdao[TEST_QID] + 0x4); + utrd_addr =3D ufs->sqlba[TEST_QID] + sqtp; + qtest_memwrite(ufs->dev.bus->qts, utrd_addr, utrd, sizeof(*utrd)); + sqtp =3D (sqtp + sizeof(UfsSqEntry)) % (QUEUE_SIZE * sizeof(UfsSqEntry= )); + ufs_wreg(ufs, ufs->sqdao[TEST_QID] + 0x4, sqtp); +} + +static int ufs_mcq_send_nop_out_async(QUfs *ufs) +{ + int cmd_desc_slot =3D alloc_cmd_desc_slot(ufs); + uint64_t req_upiu_addr =3D + ufs->cmd_desc_addr + cmd_desc_slot * UTP_COMMAND_DESCRIPTOR_SIZE; + + /* Build up request upiu */ + UtpUpiuReq req_upiu =3D { 0 }; + req_upiu.header.trans_type =3D UFS_UPIU_TRANSACTION_NOP_OUT; + req_upiu.header.task_tag =3D cmd_desc_slot; + qtest_memwrite(ufs->dev.bus->qts, req_upiu_addr, &req_upiu, + sizeof(req_upiu)); + + /* Build up utp transfer request descriptor */ + UtpTransferReqDesc utrd =3D + ufs_build_req_utrd(req_upiu_addr, UFS_UTP_NO_DATA_TRANSFER, 0); + + /* Send Transfer Request */ + __ufs_send_transfer_request_mcq_async(ufs, 0, &utrd); + + return cmd_desc_slot; +} + +static int ufs_mcq_poll_cq(QUfs *ufs, UfsCqEntry *cqe, uint16_t n_cqe) +{ + uint32_t cqhp, cqtp; + uint64_t cqe_addr; + int ix =3D 0; + + cqhp =3D ufs_rreg(ufs, ufs->cqdao[TEST_QID]); + cqtp =3D ufs_rreg(ufs, ufs->cqdao[TEST_QID] + 0x4); + + while (cqhp !=3D cqtp && ix < n_cqe) { + /* read completion entry */ + cqe_addr =3D ufs->cqlba[TEST_QID] + cqhp; + qtest_memread(ufs->dev.bus->qts, cqe_addr, &cqe[ix], sizeof(cqe[ix= ])); + + /* advance completion queue head pointer */ + cqhp =3D (cqhp + sizeof(UfsCqEntry)) % (QUEUE_SIZE * sizeof(UfsCqE= ntry)); + ix++; + } + + ufs_wreg(ufs, ufs->cqdao[TEST_QID], cqhp); + + return ix; +} + static enum UtpOcsCodes ufs_send_query(QUfs *ufs, uint8_t query_function, uint8_t query_opcode, uint8_t idn, uint8_t index, uint8_t selector, @@ -417,6 +493,7 @@ static void ufs_init(QUfs *ufs, QGuestAllocator *alloc) ufs_wreg(ufs, A_UTRIACR, 0); =20 /* Enable transfer request */ + bitmap_zero(ufs->cmd_desc_bitmap, UFS_MAX_CMD_DESC); ufs->cmd_desc_addr =3D guest_alloc(alloc, UFS_MAX_CMD_DESC * UTP_COMMAND_DESCRIPTOR_SIZE); ufs->data_buffer_addr =3D @@ -680,6 +757,53 @@ static void ufstest_read_write(void *obj, void *data, = QGuestAllocator *alloc) ufs_exit(ufs, alloc); } =20 +static void ufstest_mcq_cq_wraparound(void *obj, void *data, + QGuestAllocator *alloc) +{ + QUfs *ufs =3D obj; + UfsCqEntry cqe[QUEUE_SIZE]; + const int num_requests =3D QUEUE_SIZE; + int i, completed =3D 0; + + ufs_init(ufs, alloc); + + /* Ensure MCQ is supported */ + g_assert_true(ufs->support_mcq); + + for (i =3D 0; i < num_requests; ++i) { + ufs_mcq_send_nop_out_async(ufs); + } + + while (completed !=3D num_requests) { + int n_cqe =3D ufs_mcq_poll_cq(ufs, cqe, ARRAY_SIZE(cqe)); + if (!n_cqe) { + break; + } + + for (i =3D 0; i < n_cqe; ++i) { + uint64_t ucdba; + uint64_t rsp_upiu_addr; + UtpUpiuRsp rsp_upiu; + uint8_t tag; + + g_assert_cmpuint(cqe[i].status, =3D=3D, UFS_OCS_SUCCESS); + + ucdba =3D le64_to_cpu(cqe[i].utp_addr) & MAKE_64BIT_MASK(7, 57= ); + rsp_upiu_addr =3D ucdba + UTP_RESPONSE_UPIU_OFFSET; + qtest_memread(ufs->dev.bus->qts, rsp_upiu_addr, &rsp_upiu, + sizeof(rsp_upiu)); + + tag =3D rsp_upiu.header.task_tag; + release_cmd_desc_slot(ufs, tag); + } + + completed +=3D n_cqe; + } + + g_assert_cmpint(completed, =3D=3D, num_requests); + ufs_exit(ufs, alloc); +} + static void ufstest_query_flag_request(void *obj, void *data, QGuestAllocator *alloc) { @@ -1130,6 +1254,8 @@ static void ufs_register_nodes(void) qos_add_test("init", "ufs", ufstest_init, NULL); qos_add_test("legacy-read-write", "ufs", ufstest_read_write, &io_test_= opts); qos_add_test("mcq-read-write", "ufs", ufstest_read_write, &mcq_test_op= ts); + qos_add_test("mcq-cq-wraparound", "ufs", ufstest_mcq_cq_wraparound, + &mcq_test_opts); qos_add_test("query-flag", "ufs", ufstest_query_flag_request, &io_test_opts); qos_add_test("query-attribute", "ufs", ufstest_query_attr_request, --=20 2.43.0