From nobody Thu Oct 22 19:25:20 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=1791816874; cv=none; d=zohomail.com; s=zohoarc; b=eGRGu+2eyDITHkynkO6YgPul1kO8KTsrSOMXuvtLMR0Nb5LULd+MptVzR5EnTo44Og9wR5W7OWS4ZTojrtdlvj4LacnfBKX1HBVjO6lBKequeOPw+pcO39e3SJpkTF5Z8CF5tbiUPu/zcVdD94xwpaKH8mWNAWZiFBcYFZfx56k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791816874; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HzhU63K24jErOJnBOUdAYsK2+MVciJckXxpdIRqO734=; b=UUQWOc2AH9VDVyH+d4Y/1ga0lB5ANNaWZbfEGRwKjTn54jH0WlvdGWso6qbLRP9UtyLHodAVS0QNVhmF8ZCPxVOkVmJRD1bkClmrJLECyEuMMkMc8bHdc+1EMuRvF1NHJC+0GLpimuvDJ4N5KNugWzm3gTh8J3u6L+NcPJvbVUc= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791816874595605.7224028361433; Mon, 12 Oct 2026 07:54:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xGHQ4-000610-IF; Mon, 12 Oct 2026 10:54:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xGHPQ-0005lq-Dm for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:53:50 -0400 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xGHPN-0004m1-Iw for qemu-devel@nongnu.org; Mon, 12 Oct 2026 10:53:48 -0400 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-48b00aa033bso225191f8f.0 for ; Mon, 12 Oct 2026 07:53:42 -0700 (PDT) Received: from root-hamza.home ([2a01:cb14:55d:b000:d70e:e3f9:93c6:2623]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48db9463049sm20436625f8f.4.2026.10.12.07.53.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 07:53:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791816821; x=1792421621; 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:content-type; bh=HzhU63K24jErOJnBOUdAYsK2+MVciJckXxpdIRqO734=; b=jKJHx/BNzs4EUFLKQDLZzVp60jHqEkpYlLKWZ8s0lKR/1fgr5SJ1cNDIWTQKRvcuOQ lmCgWGbzK9/tb8fNuunrK56vSnmzP86L0CsZ715E0aKT29rFXaknISrggOqe+9MShAzO ze5GnGxoz0pxFvtlDjSkzGQPE9Me3E7kgAHFh4WtG9Ij5Lj+e+ld+Rd/FlDdkjnsibvP Qg7wsVT1nx+Npw1Mmw7BxAtNA1C76JRUakAeii5ENp5LPL9owTGg47S18P6d6KOFZzR2 nJLrp1kf3BdRfXfjRcYLMYAjZyeuYt+09gjDGFRow5sn9YMmkpO9zKKx4BY230FP1yW2 jSXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791816821; x=1792421621; 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:content-type; bh=HzhU63K24jErOJnBOUdAYsK2+MVciJckXxpdIRqO734=; b=lpjxnIANM6doWF/7aG4bhbpaFXuEdHlPEzPV9Ndg6gLG8C+6CHKwrgjCyT4iWXJj+h XpFeJTSAXuhgxdzT5PLG+6oc7s/B45/tt8W/hlOdrftm2mZLKnqUfPY+cNdCoW3rElmd uojn8ZtsBFsEWc8lYjuKoag3jy7TIPZLfqYDtRfZ29hZLr4wkSXabEjskE4Ke3VsrcAh AZE3VLk4Zpz25xxop2T+LBN/CaNbW+/IdVdw4+VBf58Wj5UC/RVlixh4LCCd6zfYB4Lj TE7cnSSojcoDq6EsNxf2cDZ9PDBmj2OXJxOHYr05JjhC/IyirP3xcZ6HOEqhCuLR2zRu 2DDw== X-Gm-Message-State: AFq9FYKDtPt0lECVV2Lu2FjSufnmzcSlwt2aPcrvUSFtZzLHuZgDn/HD Sh8lp13TnwW7MXjypGYZgKdguFgwbUOS7V53i5oKgbrkl//7J0G1fHfsbw5IYebX X-Gm-Gg: AYBFou2jezNjdxx9p8IXNCOuaM2RhmiLmi9Vn4kI48Gz9rJMRuGhNdpavF0bygFs2py o9wIcsJ0SZ8fK/a+Xm65heR15CQ6IVyM8go4+bBSUC9s9JNtZS32JERJHmYsxekKdYVj+hIM16F dFdUS4w1yWt2DX/ahqfLcT5kDL5iq39JQZIEDu/cai08kiqsy82SuG+osI+mL3YfV1k+YDhsl1N p3CEawJibtGOOgQdAS+iUsu3lElOdx3VOd0YaliZpPaQpd3+mRr+CcCuN4eyiK22tRBAtO8fEsd nx9JOobxfxjEQ+Et6EohhpBVpwXl1fnhw9WwMb45f4AqC1aSEeO/n+mk/YABIrAK08eEvGygnmu KBCqREEHhv++yQORkFVDJizpIM6q/1JjgEplO69w8JIk5ZPA/RmwIG8Gn/88bYVTZJCZEk0E3Y6 lHTJqLSqn5rgT1QR6AhByP8w+t+yTWNnEJ3F6pM3kA/mQVxVwXNgUpdePOR32T3YWlIN0jCFCXj SwqAy09hu8HV8JK8rKi1vSWwKV1aSFPXrdu4Bn/HLD6wPdPy/VgZbHGIMhKd2ARh6U= X-Received: by 2002:a5d:5f92:0:b0:48c:4dba:5612 with SMTP id ffacd0b85a97d-48dbad3077cmr16267577f8f.5.1791816821028; Mon, 12 Oct 2026 07:53:41 -0700 (PDT) From: Hamza Dridi To: qemu-devel@nongnu.org Cc: jeuk20.kim@samsung.com, kwolf@redhat.com, hreitz@redhat.com, dridiha Subject: [PATCH v2] hw/ufs: Add support for REPORT_LUNS SCSI command for Well Known LUNs Date: Mon, 12 Oct 2026 16:53:20 +0200 Message-ID: <20261012145320.391400-1-dridiha98@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20261004125305.99878-1-dridiha98@gmail.com> References: <20261004125305.99878-1-dridiha98@gmail.com> 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42b; envelope-from=dridiha98@gmail.com; helo=mail-wr1-x42b.google.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 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, FORGED_GMAIL_RCVD=1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no 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: 1791816876511158500 Content-Type: text/plain; charset="utf-8" From: dridiha According to the UFS specification, the REPORT_LUNS SCSI command can query Well Known LUNs by setting CDB[2] to 0x01 (select Well Known LUNs) or 0x02 (select all LUNs). Currently, the UFS emulation layer lacks handling for these CDB[2] select report values, causing command failures when guests attempt to report Well Known LUNs. This patch adds support for handling CDB[2] values 0x01 and 0x02 in the REPORT_LUNS command, returning the appropriate Well Known LUN descriptors in the SCSI response payload. Signed-off-by: Hamza Dridi Reviewed-by: Jeuk Kim --- v1 -> v2: - Cleard the UPIU WLUN-ID before writing the Wlun byte. hw/ufs/lu.c | 44 ++++++++++++++++++++++++++++++++++---------- include/block/ufs.h | 3 +++ 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/hw/ufs/lu.c b/hw/ufs/lu.c index bdb1650851..4f1f4f265f 100644 --- a/hw/ufs/lu.c +++ b/hw/ufs/lu.c @@ -211,33 +211,57 @@ static const struct SCSIBusInfo ufs_scsi_info =3D { .cancel =3D ufs_scsi_command_cancelled, }; =20 +static bool ufs_append_lun(uint8_t *outbuf, uint32_t outbuf_len, int *len, + uint8_t lun, uint8_t lun_msb) +{ + if (*len + 8 > outbuf_len) { + return false; + } + + memset(outbuf + *len, 0, 8); + outbuf[*len] =3D lun_msb; + outbuf[*len + 1] =3D lun; + *len +=3D 8; + + return true; +} + static int ufs_emulate_report_luns(UfsRequest *req, uint8_t *outbuf, uint32_t outbuf_len) { UfsHc *u =3D req->hc; int len =3D 0; =20 - /* TODO: Support for cases where SELECT REPORT is 1 and 2 */ - if (req->req_upiu.sc.cdb[2] !=3D 0) { + uint8_t report_lun_cmd =3D req->req_upiu.sc.cdb[2]; + + if (report_lun_cmd > 2) { return SCSI_COMMAND_FAIL; } =20 if (outbuf_len < 8) { return SCSI_COMMAND_FAIL; } + memset(outbuf, 0, 8); len +=3D 8; =20 - for (uint8_t lun =3D 0; lun < UFS_MAX_LUS; ++lun) { - if (u->lus[lun]) { - if (len + 8 > outbuf_len) { + if (report_lun_cmd =3D=3D 2 || report_lun_cmd =3D=3D 1) { + ufs_append_lun(outbuf, outbuf_len, &len, u->report_wlu.lun & 0x7F, + UFS_WLUN_MSB); + ufs_append_lun(outbuf, outbuf_len, &len, u->dev_wlu.lun & 0x7F, + UFS_WLUN_MSB); + ufs_append_lun(outbuf, outbuf_len, &len, u->boot_wlu.lun & 0x7F, + UFS_WLUN_MSB); + ufs_append_lun(outbuf, outbuf_len, &len, u->rpmb_wlu.lun & 0x7F, + UFS_WLUN_MSB); + } + + if (report_lun_cmd =3D=3D 0 || report_lun_cmd =3D=3D 2) { + for (uint8_t lun =3D 0; lun < UFS_MAX_LUS; ++lun) { + if (u->lus[lun] && + !ufs_append_lun(outbuf, outbuf_len, &len, lun, 0)) { break; } - - memset(outbuf + len, 0, 8); - outbuf[len] =3D 0; - outbuf[len + 1] =3D lun; - len +=3D 8; } } =20 diff --git a/include/block/ufs.h b/include/block/ufs.h index d19b3c65ef..9d5ec4c77f 100644 --- a/include/block/ufs.h +++ b/include/block/ufs.h @@ -818,6 +818,9 @@ typedef struct QEMU_PACKED UtpTaskReqDesc { */ #define UFS_EHS_OFFSET_IN_RESPONSE 32 =20 +/* Most significant byte in the Report Lun response for Well Known LU */ +#define UFS_WLUN_MSB 0xC1 + /* Well known logical unit id in LUN field of UPIU */ enum { UFS_UPIU_REPORT_LUNS_WLUN =3D 0x81, --=20 2.43.0