From nobody Mon Feb 9 10:38:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.49 as permitted sender) client-ip=209.85.221.49; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f49.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.49 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1611519075; cv=none; d=zohomail.com; s=zohoarc; b=SPZxDw0cFLGPuE8N1cJAW9VrXS23O8QM6okks/+8csRog1d7XJ5hjIBW73Q8NVXNAm2mHF8ZPbOVbLl8Yehv1M+E4gvaQkfsMopeZt5i8A2oYgUO4uIJUQ+gPY/R86hi7zLn2lpIt4Nm82u9lAfiCe6h5iGDSCzlnpgtt3pgRl0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611519075; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=nIGaYtMUtzLf5rdS8bkm2HkUPDJfWchz2YtNrxVRdq4=; b=YVSyxmtR+t+4kCulhS8atvWy5sS6e2HDA4DoWaDl2eSBNNlutTyam7CIYnK4CUNgThDm272pCC+oNghD7tA84k5KPdLPJ/ihpf89gWgiMSXSKgcX2iEmrzxETVCzDPIsLblk6Do002iWnr6mo54ZmwogTEldarS4tDPwLvHnPI8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.49 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) by mx.zohomail.com with SMTPS id 1611519075472430.2243588280909; Sun, 24 Jan 2021 12:11:15 -0800 (PST) Received: by mail-wr1-f49.google.com with SMTP id 7so10232818wrz.0 for ; Sun, 24 Jan 2021 12:11:14 -0800 (PST) Return-Path: Return-Path: Received: from localhost.localdomain (13.red-83-57-169.dynamicip.rima-tde.net. [83.57.169.13]) by smtp.gmail.com with ESMTPSA id s4sm18856925wme.38.2021.01.24.12.11.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:11:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nIGaYtMUtzLf5rdS8bkm2HkUPDJfWchz2YtNrxVRdq4=; b=HtUkrZQQUwxE9iQHgWW0HYZYroH1MLW8/th3GSat2+2/k054Q5Fb1CyFLMXm74B6MV r/U0NPRT5pOkZ5+0lGAuDZZfsjcY1E4HirC8YU0jQLeQxaZSVGBTMU9W5SmQL2L5jU5f jt+9NsQ39BC2P64qClQPyklThDiyydrRbjkBuU5c5C7Uj4HzN1qaFSOaYinnWYY/ZKZL gIYyafz0XDbnFBtYRkeE1O5pbzpTf1sPdJx+hLwWx/f//4TxyEppwVUcWboXCPkdophn +qPcqBZUqm6RQTw42TZlHr85FazQ2w0RuZSgfnDQ8mHr34VFuzXfoeTOyLmCnpjF1RHv P0aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=nIGaYtMUtzLf5rdS8bkm2HkUPDJfWchz2YtNrxVRdq4=; b=fSbB8OrS6L75m/wwaWO+Uq/U7MoqUEYFmP+yrs1eOzhAonD3LIi+2dRR7nB2nihCzD KRt9KkcSwTKJZkmN4EpBsvfXXookhYMuZZxQ6Qel1sWECh0X86AzBH0PSmdBiwLeB1tS kpV5O/w6SI5nltH0DYlXkq3lcCGJF++F39ZyZ1MbQ3oiQu55N4lsCgDDUcqsVhwhxNFT 5C7r2XtOllnAnRmUFSSMG7ve63DlW30n+RHrFTgirFfVXNAOUKjR9Efmm9Jl+tZPHug0 QcPDnRnikgl2ubzi5rSFAeZZvP69YY+YJEAFGQdKUBQStKa9mJ5XRBi+fNaxUJ86kTBC BVyA== X-Gm-Message-State: AOAM531EBg2N5hkXILUwT4FJ9wp+kt0LLoyGazQjVJULMmIp5fXHwYQe vDYq7YUkGR73IdhXtls2Dbs= X-Google-Smtp-Source: ABdhPJzHEH0yvr/0cmF8efU0W1TCo1/rSo1EEU1O86a2Chmh5HaDfTYjATLzEAsR7Hbc94KqQJPhEw== X-Received: by 2002:a05:6000:188c:: with SMTP id a12mr14375845wri.105.1611519073814; Sun, 24 Jan 2021 12:11:13 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, Bin Meng , Pragnesh Patel Subject: [PULL 1/9] hw/sd: ssi-sd: Fix incorrect card response sequence Date: Sun, 24 Jan 2021 21:10:58 +0100 Message-Id: <20210124201106.2602238-2-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124201106.2602238-1-f4bug@amsat.org> References: <20210124201106.2602238-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) From: Bin Meng Per the "Physical Layer Specification Version 8.00" chapter 7.5.1, "Command/Response", there is a minimum 8 clock cycles (Ncr) before the card response shows up on the data out line. However current implementation jumps directly to the sending response state after all 6 bytes command is received, which is a spec violation. Add a new state PREP_RESP in the ssi-sd state machine to handle it. Fixes: 775616c3ae8c ("Partial SD card SPI mode support") Signed-off-by: Bin Meng Tested-by: Pragnesh Patel Reviewed-by: Pragnesh Patel Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20210123104016.17485-4-bmeng.cn@gmail.com> [PMD: Change VMState version id 2 -> 3] Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/ssi-sd.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 9a75e0095cf..d97646795a2 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -36,6 +36,7 @@ do { fprintf(stderr, "ssi_sd: error: " fmt , ## __VA_ARGS= __);} while (0) typedef enum { SSI_SD_CMD =3D 0, SSI_SD_CMDARG, + SSI_SD_PREP_RESP, SSI_SD_RESPONSE, SSI_SD_DATA_START, SSI_SD_DATA_READ, @@ -163,12 +164,16 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, u= int32_t val) s->response[1] =3D status; DPRINTF("Card status 0x%02x\n", status); } - s->mode =3D SSI_SD_RESPONSE; + s->mode =3D SSI_SD_PREP_RESP; s->response_pos =3D 0; } else { s->cmdarg[s->arglen++] =3D val; } return 0xff; + case SSI_SD_PREP_RESP: + DPRINTF("Prepare card response (Ncr)\n"); + s->mode =3D SSI_SD_RESPONSE; + return 0xff; case SSI_SD_RESPONSE: if (s->stopping) { s->stopping =3D 0; @@ -224,8 +229,8 @@ static int ssi_sd_post_load(void *opaque, int version_i= d) =20 static const VMStateDescription vmstate_ssi_sd =3D { .name =3D "ssi_sd", - .version_id =3D 2, - .minimum_version_id =3D 2, + .version_id =3D 3, + .minimum_version_id =3D 3, .post_load =3D ssi_sd_post_load, .fields =3D (VMStateField []) { VMSTATE_UINT32(mode, ssi_sd_state), --=20 2.26.2 From nobody Mon Feb 9 10:38:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.50 as permitted sender) client-ip=209.85.221.50; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f50.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.50 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1611519080; cv=none; d=zohomail.com; s=zohoarc; b=VdoCGrJCKCDg64FZdYGst0gZhyHibq4zwaFVqwtQsufQx/d4Uz5HQTshPdmmzcO6ApGFJ97z/p7BUCBauoJ843h+Aufn2bIJXEVWH7hNtDvglVqYMRKtuusm7543e7VBSrCrUx/30BCGn7sl6EtpmwJSIYylPUoiXeycbOt7+Go= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611519080; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=T/1NZ8/f0wZzR7INwfjM1hzMjKDJt4XlIepYoJ5WcVI=; b=APcbik9JNZ3EomPwluKyjZxS9kgb5W/h5kdcfIP1QpmOREHJIGXEcNurD8v9AdLRPNa9+nFSVGFmGNKNCdHYrSKXKcKu7/Pe/LdoivRiGpM1YG4D9u8P+ruJT6ae0n4CZX+wFCu/MnNx1tNu4e2ZnW8Sb+MKiTivCwdXMHBN2Co= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.50 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) by mx.zohomail.com with SMTPS id 1611519080365179.36068390097023; Sun, 24 Jan 2021 12:11:20 -0800 (PST) Received: by mail-wr1-f50.google.com with SMTP id g10so10247130wrx.1 for ; Sun, 24 Jan 2021 12:11:19 -0800 (PST) Return-Path: Return-Path: Received: from localhost.localdomain (13.red-83-57-169.dynamicip.rima-tde.net. [83.57.169.13]) by smtp.gmail.com with ESMTPSA id n11sm18927313wrw.47.2021.01.24.12.11.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:11:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=T/1NZ8/f0wZzR7INwfjM1hzMjKDJt4XlIepYoJ5WcVI=; b=ETGQg6zutDbix10CfW6O2jyNabSrbXEEBkVdImIvmRmG3I9sxjmb/UJLzHQQCHjFUi dAfb0Z4fjO2KL8GX7hlcR7dLGsewTXpuvALJOsskL/GtY1TtSHALWaQ9TVwL5erftTia XX22o9CNcGBjrH8cVCMijDZS1r+AvcpyqBML/RRbsCqfQGN71BT8SQ1ukiH29vdpSCAf 7pk70H+A6QMXMozga8r+f9RZczzbMs/GxaQmAdvfwgBgUmqJCMAR4NaAI0Pk4OocZMtK MPcEnLaAmW55m62bzObYGQhCfDPlNu/sTsImIdUkSIjq4rKRH9j22uRn+hGO3PtpJ/sv 20kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=T/1NZ8/f0wZzR7INwfjM1hzMjKDJt4XlIepYoJ5WcVI=; b=peoKjrNeY7eObrwC/x4SxhrHSzab5azFpfmL15qsIWzBJRiKcjxFkRNSHI4j85XDUn ST9KOKJaq3xnzWWD6ZNdnvz5mSDayP+CNNZAP0ky+q6AsZa0j2rt0r4r+xyTU9zyvxuo SyNABtBzTumxotPjBum28auIIjn407VhTePtqr6tMf5rgquHPED+siXv7VMYFFFA/YoS W+1iacmELfIs46xp3dMOTPBwe1lst1lC7TVj9Ff35BT4mK4uPNnL7m9BcMO385QHC9Yp i8N6nQ8LD11Ae2KTaQQMJcMF4JeY/7UnNE9VbziVa1kQBIDOEWaWFpIzRtvYB/BL8Gmb ba3A== X-Gm-Message-State: AOAM5306WzKX65wg/wHclys5+wXK1RvAN1pmKT+Bbny1uq1zIH9+UY54 9O1FjQsNfIXIp7os5207eMI= X-Google-Smtp-Source: ABdhPJz1s7aaeJdlB12dA2vujvU7hxBV8j5eoSi4Myy4pTI++VbZMYgjHedQbjLOyNYkda0AWhcZpw== X-Received: by 2002:adf:fbc5:: with SMTP id d5mr13982470wrs.82.1611519078734; Sun, 24 Jan 2021 12:11:18 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, Bin Meng , Pragnesh Patel Subject: [PULL 2/9] hw/sd: sd: Support CMD59 for SPI mode Date: Sun, 24 Jan 2021 21:10:59 +0100 Message-Id: <20210124201106.2602238-3-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124201106.2602238-1-f4bug@amsat.org> References: <20210124201106.2602238-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) From: Bin Meng After the card is put into SPI mode, CRC check for all commands including CMD0 will be done according to CMD59 setting. But this command is currently unimplemented. Simply allow the decoding of CMD59, but the CRC remains unchecked. Signed-off-by: Bin Meng Tested-by: Pragnesh Patel Reviewed-by: Pragnesh Patel Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20210123104016.17485-5-bmeng.cn@gmail.com> Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/sd.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 4375ed5b8b2..bfea5547d53 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -1517,18 +1517,12 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,= SDRequest req) if (!sd->spi) { goto bad_cmd; } - goto unimplemented_spi_cmd; + return sd_r1; =20 default: bad_cmd: qemu_log_mask(LOG_GUEST_ERROR, "SD: Unknown CMD%i\n", req.cmd); return sd_illegal; - - unimplemented_spi_cmd: - /* Commands that are recognised but not yet implemented in SPI mod= e. */ - qemu_log_mask(LOG_UNIMP, "SD: CMD%i not implemented in SPI mode\n", - req.cmd); - return sd_illegal; } =20 qemu_log_mask(LOG_GUEST_ERROR, "SD: CMD%i in a wrong state\n", req.cmd= ); --=20 2.26.2 From nobody Mon Feb 9 10:38:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.41 as permitted sender) client-ip=209.85.221.41; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f41.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.41 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1611519085; cv=none; d=zohomail.com; s=zohoarc; b=IIRdtVdhDngG3At2uu7JPvTwgs7Z1yxHdexbfQfXqaTxuh85+EFy3CxlpZQpOjRj10B1h5dGQHIbXhEkA+uEiuBvXV/hBFtRhWLqUVUBXg2JwXPw0uHJW96xhJVP9m8ccrmoInts96HCqyFGc3KHQXE4GMspwmowmz45EkzbcgI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611519085; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=VaQ5twrurTPnPi9Fu8ehy5XYvFMSYl2eaKK3OA9dOLE=; b=M7Q+m3TU/w5GkgviLK9pIri7ZeKd/G/GPPkBMbliL2qAV09pH6oAGPAx5L/VMtnUQrgNwnKaNoHR9VO4joSlCI0IFYipfdi7pZNL56577IZHV5p4lenjDuLEvP8F52kQDSIKK4+nXawtpgGEEPFq2BSxi+MBk8WRj4c5sVWVyo8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.41 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) by mx.zohomail.com with SMTPS id 1611519085176364.74848523788864; Sun, 24 Jan 2021 12:11:25 -0800 (PST) Received: by mail-wr1-f41.google.com with SMTP id r9so3585232wro.9 for ; Sun, 24 Jan 2021 12:11:24 -0800 (PST) Return-Path: Return-Path: Received: from localhost.localdomain (13.red-83-57-169.dynamicip.rima-tde.net. [83.57.169.13]) by smtp.gmail.com with ESMTPSA id o14sm19769800wri.48.2021.01.24.12.11.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:11:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=VaQ5twrurTPnPi9Fu8ehy5XYvFMSYl2eaKK3OA9dOLE=; b=VotrvCaVY1nO/qImuEdyN8sNzV46/GK4m2g5eWQaMuoOIshCWlBIjJOUio2R15Et4R /ZSbnGGyf7nqA/HENa7zcZLUzMMG2EZ47k1q6ui8lX4j/1zWy63UtUIGdYPAxSQrqxXR kTbHcqel0LDBBKbYmmep61ceB2pCuBE/riaKZSc9F6L20KcXYzpwHzhl2Lvews0Kdf65 2FyGCaT40+Zu9b6wjwYg1tfJF2RIvU+4A4a8cjA27bFJU5QsQnTw2pQRoByPgo/VGYUT vPtRctsHvIQOFyrc1qdJH6/nplogfir+GKIK2lnZJf2BlpznWps7IFUW1W/l53KCWVEP FL8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=VaQ5twrurTPnPi9Fu8ehy5XYvFMSYl2eaKK3OA9dOLE=; b=nJXPztL5/JEryRQ9ABhVjz8HUkKKt3wB/Ffnef+VhmM7u8m2TRxTjVY4oUxxcAzxkY UYLbaEaW0qnf7Ujqd6M/A1oSLa5+o9vuxu2mLChOVw8kQgbKoMJCh8yILqenHnHI96O8 IIcQjzbjDa6mN5Td2hj/ro+eGPRKZMQv7e6f3Bb8uL1+hZMaNKjOov1mWs5fq7oUH4rz IFBsnr6jsLqYIJKshx4DG1GUd1+O7bTrTMaYDuHDnA8myBTQ89SQ12piO30WxfqF3ecE mPv6hkef6uS7Bk5mtYd+DcRGfz8tADiyRNVphh5MvL+tL1AifuotdY+9tF1dcd8+N48S RcPg== X-Gm-Message-State: AOAM5316RQDFk+DWsB1PrggGvVw55FVRtTQCaK1pPZVueXVfymTGkw9M IJZTkzNHZiAre67j+RKLA8PBf25gFok= X-Google-Smtp-Source: ABdhPJwq+nPbsuAmf2eBrRSkLaLd+MeKb1HNrdMx4kUyQ4VQGab5Tl2pO9SzlngVRh34OmXH6t2HhA== X-Received: by 2002:a05:6000:104d:: with SMTP id c13mr3955122wrx.127.1611519083459; Sun, 24 Jan 2021 12:11:23 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, Bin Meng , Pragnesh Patel Subject: [PULL 3/9] hw/sd: sd: Drop sd_crc16() Date: Sun, 24 Jan 2021 21:11:00 +0100 Message-Id: <20210124201106.2602238-4-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124201106.2602238-1-f4bug@amsat.org> References: <20210124201106.2602238-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) From: Bin Meng commit f6fb1f9b319f ("sdcard: Correct CRC16 offset in sd_function_switch()") changed the 16-bit CRC to be stored at offset 64. In fact, this CRC calculation is completely wrong. From the original codes, it wants to calculate the CRC16 of the first 64 bytes of sd->data[], however passing 64 as the `width` to sd_crc16() actually counts 256 bytes starting from the `message` for the CRC16 calculation, which is not what we want. Besides that, it seems existing sd_crc16() algorithm does not match the SD spec, which says CRC16 is the CCITT one but the calculation does not produce expected result. It turns out the CRC16 was never transferred outside the sd core, as in sd_read_byte() we see: if (sd->data_offset >=3D 64) sd->state =3D sd_transfer_state; Given above reasons, let's drop it. Signed-off-by: Bin Meng Tested-by: Pragnesh Patel Reviewed-by: Pragnesh Patel Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20210123104016.17485-6-bmeng.cn@gmail.com> Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/sd.c | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index bfea5547d53..b3952514fed 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -271,23 +271,6 @@ static uint8_t sd_crc7(const void *message, size_t wid= th) return shift_reg; } =20 -static uint16_t sd_crc16(const void *message, size_t width) -{ - int i, bit; - uint16_t shift_reg =3D 0x0000; - const uint16_t *msg =3D (const uint16_t *)message; - width <<=3D 1; - - for (i =3D 0; i < width; i ++, msg ++) - for (bit =3D 15; bit >=3D 0; bit --) { - shift_reg <<=3D 1; - if ((shift_reg >> 15) ^ ((*msg >> bit) & 1)) - shift_reg ^=3D 0x1011; - } - - return shift_reg; -} - #define OCR_POWER_DELAY_NS 500000 /* 0.5ms */ =20 FIELD(OCR, VDD_VOLTAGE_WINDOW, 0, 24) @@ -843,7 +826,6 @@ static void sd_function_switch(SDState *sd, uint32_t ar= g) sd->data[16 - (i >> 1)] |=3D new_func << ((i % 2) * 4); } memset(&sd->data[17], 0, 47); - stw_be_p(sd->data + 64, sd_crc16(sd->data, 64)); } =20 static inline bool sd_wp_addr(SDState *sd, uint64_t addr) --=20 2.26.2 From nobody Mon Feb 9 10:38:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.128.52 as permitted sender) client-ip=209.85.128.52; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-f52.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.52 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1611519090; cv=none; d=zohomail.com; s=zohoarc; b=iVNrWSanQhQoJbr/ZhbUs/zHY8zm8SQDvb6R/PzRX5UHkNm5uMsdDKDGq71Wg6+3qmj0hBmh5fKOaQKZzwqTheUasXMvI4QalzB+IjG1OHJ+3Y7sQ0b0qGtugJ71FWGprBXgtZfo4cEJKpmN1bpLO2UBYrzQZwOu+s5QDKo9PZo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611519090; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=3OV8FpQZtMbRiEAI7cX2EJJqHF9nxbFO5bHAtKy6CfY=; b=Q/25HRFbaMMe17TikirjcagtQ180qwkKKes/Ja/hGa0u6YU/uiGILUXKFrYa3ZHoesaYsfzf+Lhx2X+O+Htrzv5Dxl5eUIy8HKwnle7ZwSsqhj27mXZf4zUZydo9FTDjCeJL6L4N6WKBDsXjhkZyTuZ+bhKoU2hOuGeRIAgTS7U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.52 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by mx.zohomail.com with SMTPS id 1611519090151907.349186251729; Sun, 24 Jan 2021 12:11:30 -0800 (PST) Received: by mail-wm1-f52.google.com with SMTP id o10so9462401wmc.1 for ; Sun, 24 Jan 2021 12:11:29 -0800 (PST) Return-Path: Return-Path: Received: from localhost.localdomain (13.red-83-57-169.dynamicip.rima-tde.net. [83.57.169.13]) by smtp.gmail.com with ESMTPSA id q6sm17856903wmj.32.2021.01.24.12.11.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:11:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3OV8FpQZtMbRiEAI7cX2EJJqHF9nxbFO5bHAtKy6CfY=; b=NpDTGNL/AzYCZoKUGexgB8dX0uunkeWCcLYE/C4jiThfcpWwnAnjECmhbHlF8tLNok pzzIgepUJD3tQ9dOiOuzq29JJeqxRKgXcAl/CaohDeoKlOawkEI1nQPZHICdsA0xY+AQ n4a93QNMaipbO7Aj4yszU6dKMysAQ1E7Y+IBs08ADZVsk2C+ZSTEYcspyEGvSjf6tuOl +VYWaruzePlMu4XyhLyxI8sleGDgW5A956+Z25w38gD/m4W/BBHkM+jUZ1TKh3wIvkqI nwDDu7XsiKWZpPeX1bTqE5lh6Lgiy/qEdVR7mXCWDGJ+IHCkW3v7Is6hNY2dlT9DDBtV oTIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=3OV8FpQZtMbRiEAI7cX2EJJqHF9nxbFO5bHAtKy6CfY=; b=ZHWbyT4ghOU1Z2QvCHNzKZHdyXhlhC/e2yZbhGC8j+EK06BPqRuKH6D5b//2trawDr 8G17dxElq5vmCyyyYd9i2A7zhOlxOcydRfy4NKb8q7oIa0aTa47V46YHDgSlmvgFdalE dN1b18w6drpxqVbIXWOn0JPvCah9q5J/wUqZEGkX0iXOa/oBSqlkpQwYZmbaosDhpaCz bnZliRI3lTMc8wLqt5NpyzFQqro/uUqO9J3LD6DdJ9iGFM6o26DBF3dH7SvLTvlW9l1q q/lFDu0R01dii5yyw2vNHkVXe4eGg+uoN4WVsTkUzcflLM5KBlfAnFg1dCNJAo+WjL/Z zO4g== X-Gm-Message-State: AOAM531UunXgXtBh06abcA6A5zehlOcllDJEJ7Zn1TMJPrgOiyCiJ+qt he4hPyVCgh70Khz0TpVpEl4/DyOGyuM= X-Google-Smtp-Source: ABdhPJzDDAUB+fwZ4Yl99wsa964gZ0JCgpqH9JOe/5o7skqBv8bzj7bsOp0so/RDd/5CJqKAmt+Yyg== X-Received: by 2002:a1c:9c84:: with SMTP id f126mr2977629wme.152.1611519088363; Sun, 24 Jan 2021 12:11:28 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, Bin Meng , Alistair Francis Subject: [PULL 4/9] util: Add CRC16 (CCITT) calculation routines Date: Sun, 24 Jan 2021 21:11:01 +0100 Message-Id: <20210124201106.2602238-5-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124201106.2602238-1-f4bug@amsat.org> References: <20210124201106.2602238-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) From: Bin Meng Import CRC16 calculation routines from Linux kernel v5.10: include/linux/crc-ccitt.h lib/crc-ccitt.c to QEMU: include/qemu/crc-ccitt.h util/crc-ccitt.c Signed-off-by: Bin Meng Acked-by: Alistair Francis Message-Id: <20210123104016.17485-7-bmeng.cn@gmail.com> Reviewed-by: Philippe Mathieu-Daud=C3=A9 [PMD: Restrict compilation to system emulation] Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- include/qemu/crc-ccitt.h | 33 ++++++++++ util/crc-ccitt.c | 127 +++++++++++++++++++++++++++++++++++++++ util/meson.build | 1 + 3 files changed, 161 insertions(+) create mode 100644 include/qemu/crc-ccitt.h create mode 100644 util/crc-ccitt.c diff --git a/include/qemu/crc-ccitt.h b/include/qemu/crc-ccitt.h new file mode 100644 index 00000000000..06ee55b159b --- /dev/null +++ b/include/qemu/crc-ccitt.h @@ -0,0 +1,33 @@ +/* + * CRC16 (CCITT) Checksum Algorithm + * + * Copyright (c) 2021 Wind River Systems, Inc. + * + * Author: + * Bin Meng + * + * From Linux kernel v5.10 include/linux/crc-ccitt.h + * + * SPDX-License-Identifier: GPL-2.0 + */ + +#ifndef _CRC_CCITT_H +#define _CRC_CCITT_H + +extern uint16_t const crc_ccitt_table[256]; +extern uint16_t const crc_ccitt_false_table[256]; + +extern uint16_t crc_ccitt(uint16_t crc, const uint8_t *buffer, size_t len); +extern uint16_t crc_ccitt_false(uint16_t crc, const uint8_t *buffer, size_= t len); + +static inline uint16_t crc_ccitt_byte(uint16_t crc, const uint8_t c) +{ + return (crc >> 8) ^ crc_ccitt_table[(crc ^ c) & 0xff]; +} + +static inline uint16_t crc_ccitt_false_byte(uint16_t crc, const uint8_t c) +{ + return (crc << 8) ^ crc_ccitt_false_table[(crc >> 8) ^ c]; +} + +#endif /* _CRC_CCITT_H */ diff --git a/util/crc-ccitt.c b/util/crc-ccitt.c new file mode 100644 index 00000000000..b981d8ac55b --- /dev/null +++ b/util/crc-ccitt.c @@ -0,0 +1,127 @@ +/* + * CRC16 (CCITT) Checksum Algorithm + * + * Copyright (c) 2021 Wind River Systems, Inc. + * + * Author: + * Bin Meng + * + * From Linux kernel v5.10 lib/crc-ccitt.c + * + * SPDX-License-Identifier: GPL-2.0-only + */ + +#include "qemu/osdep.h" +#include "qemu/crc-ccitt.h" + +/* + * This mysterious table is just the CRC of each possible byte. It can be + * computed using the standard bit-at-a-time methods. The polynomial can + * be seen in entry 128, 0x8408. This corresponds to x^0 + x^5 + x^12. + * Add the implicit x^16, and you have the standard CRC-CCITT. + */ +uint16_t const crc_ccitt_table[256] =3D { + 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, + 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, + 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, + 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, + 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, + 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, + 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, + 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, + 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, + 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, + 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, + 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, + 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, + 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, + 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, + 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, + 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, + 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, + 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, + 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, + 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, + 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, + 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, + 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, + 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, + 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, + 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, + 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, + 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, + 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, + 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, + 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 +}; + +/* + * Similar table to calculate CRC16 variant known as CRC-CCITT-FALSE + * Reflected bits order, does not augment final value. + */ +uint16_t const crc_ccitt_false_table[256] =3D { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, + 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, + 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, + 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, + 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, + 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, + 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, + 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, + 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, + 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, + 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, + 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, + 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, + 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, + 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, + 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, + 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, + 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, + 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, + 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, + 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, + 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, + 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 +}; + +/** + * crc_ccitt - recompute the CRC (CRC-CCITT variant) + * for the data buffer + * + * @crc: previous CRC value + * @buffer: data pointer + * @len: number of bytes in the buffer + */ +uint16_t crc_ccitt(uint16_t crc, uint8_t const *buffer, size_t len) +{ + while (len--) { + crc =3D crc_ccitt_byte(crc, *buffer++); + } + return crc; +} + +/** + * crc_ccitt_false - recompute the CRC (CRC-CCITT-FALSE variant) + * for the data buffer + * + * @crc: previous CRC value + * @buffer: data pointer + * @len: number of bytes in the buffer + */ +uint16_t crc_ccitt_false(uint16_t crc, uint8_t const *buffer, size_t len) +{ + while (len--) { + crc =3D crc_ccitt_false_byte(crc, *buffer++); + } + return crc; +} diff --git a/util/meson.build b/util/meson.build index 540a605b781..3eccdbe5962 100644 --- a/util/meson.build +++ b/util/meson.build @@ -49,6 +49,7 @@ endif =20 if have_system + util_ss.add(files('crc-ccitt.c')) util_ss.add(when: 'CONFIG_GIO', if_true: [files('dbus.c'), gio]) util_ss.add(files('yank.c')) endif --=20 2.26.2 From nobody Mon Feb 9 10:38:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.128.52 as permitted sender) client-ip=209.85.128.52; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-f52.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.52 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1611519094; cv=none; d=zohomail.com; s=zohoarc; b=NcZtHdN+bzQzmEKQXWbdWqjvWMSqxLIq3uo+1o0tSs+FjTTMjAptl1vUXoHPtuaqQF8SSDynIt3C2PRQQr/8j8y4NUN5EqOGnvKTk+C/jutp8fs4OW+hP6PdKpXypcrJyTZR17H/Uj45TeGSgLmAYygtvFpqJEVHoLTjbzoaYoc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611519094; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=azG5XzPp/6ZRHAy0TjMc2B6T/f3v9NNr1zArUdRagcQ=; b=lSYn4dKr5xzOkTAZtvjuzc1GlGyQm3BKp+TuEEJzis7CJa1dao/N5Q46/yJRejEusUb5bgsZ4albAnEoTKnNDLuSsundZvqxlUxXXLv7WRemwry6CO2UwmOmfOFlMHQ7fOL6da3Lz6eMV7JCGg2P214kyi0GtVEvgs6Vp8+MQAA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.52 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by mx.zohomail.com with SMTPS id 1611519094791475.9569699273238; Sun, 24 Jan 2021 12:11:34 -0800 (PST) Received: by mail-wm1-f52.google.com with SMTP id m187so8800992wme.2 for ; Sun, 24 Jan 2021 12:11:34 -0800 (PST) Return-Path: Return-Path: Received: from localhost.localdomain (13.red-83-57-169.dynamicip.rima-tde.net. [83.57.169.13]) by smtp.gmail.com with ESMTPSA id p15sm20093565wrt.15.2021.01.24.12.11.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:11:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=azG5XzPp/6ZRHAy0TjMc2B6T/f3v9NNr1zArUdRagcQ=; b=sfRqk+XumWyD0xgDZrmsstFrJuXQ0kf+RgjYr+iGQGoXERjkwwZUmmDu8+L009Lmsm 4bYVJPjEyni5HewZm3IQ520a4ytCDU1sV9BqUNtI+PCUD9xOCOsOuIxnsEQiw9YIR0oy z/SGfHEwht9GrDRRfLX8gJTlUYqmYCDEwdOzAN+UfNeW9/B7cfc4M3JHqi1ZpCI6zPBV iRg9VqMh5UbTWhHRt/8B3Pt0WXn1xWl6uP9XU8CTl8cQyBRwAm8eAvQNqKLO6gm4IAeF F2ZZSRJuyRcS814NDo/1vnRC2aLhxQtDz8ndZQrXS3SaeD47f6ciq54GtZxGJb70Q/ED bb4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=azG5XzPp/6ZRHAy0TjMc2B6T/f3v9NNr1zArUdRagcQ=; b=SqPT/c7HW6gK3tgEj38fP/pHqn8FhdtoydbpYr/RP3aYXUictMYhs20rnm5UJQ4Cbd V5v0ijgsU7zeMvsO7i8qE6+HeyV1nf/103mpU2Nod+DOzclRoMs59w4mbQawkvcRfyrg vmEdZYVenrr0J0BabkzFYq0JVP48RAxyc7MbfuA8t/x4VKQzl9M86iZAeDXgpe3lXvFb OHzlw62lkDeGBhzHWX0CtXB/taGU4PvptQj9woPMslj1zgBgrXL31nRHRT837EHdbObY F7TWTHfqBgK0KiJnJJUvxVbFCE8KbGPncwX3nWrcUDvXIQ4VfgySiZYPCJU6WuWjZ1EB A+qQ== X-Gm-Message-State: AOAM533SbcjC/0CcpoXuPZmE/59TlSOCtluSG2sivCm9kkwOBAkPtfxC hysz71dR7cPmz4JE87A4LYE= X-Google-Smtp-Source: ABdhPJxumd4XypZkhbsxeJA3Ww995/hZ5X68B6CI3XKragxrObBGunRGttV+PbvUUDX2fhJdagFaCw== X-Received: by 2002:a1c:a406:: with SMTP id n6mr3220348wme.53.1611519093071; Sun, 24 Jan 2021 12:11:33 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, Bin Meng , Alistair Francis Subject: [PULL 5/9] hw/sd: ssi-sd: Suffix a data block with CRC16 Date: Sun, 24 Jan 2021 21:11:02 +0100 Message-Id: <20210124201106.2602238-6-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124201106.2602238-1-f4bug@amsat.org> References: <20210124201106.2602238-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) From: Bin Meng Per the SD spec, a valid data block is suffixed with a 16-bit CRC generated by the standard CCITT polynomial x16+x12+x5+1. This part is currently missing in the ssi-sd state machine. Without it, all data block transfer fails in guest software because the expected CRC16 is missing on the data out line. Fixes: 775616c3ae8c ("Partial SD card SPI mode support") Signed-off-by: Bin Meng Acked-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20210123104016.17485-8-bmeng.cn@gmail.com> [PMD: Change VMState version id 3 -> 4, check s->mode validity in post_load()] Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/ssi-sd.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index d97646795a2..08852dc8d4b 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -17,6 +17,7 @@ #include "hw/qdev-properties.h" #include "hw/sd/sd.h" #include "qapi/error.h" +#include "qemu/crc-ccitt.h" #include "qemu/module.h" #include "qom/object.h" =20 @@ -40,6 +41,7 @@ typedef enum { SSI_SD_RESPONSE, SSI_SD_DATA_START, SSI_SD_DATA_READ, + SSI_SD_DATA_CRC16, } ssi_sd_mode; =20 struct ssi_sd_state { @@ -48,6 +50,7 @@ struct ssi_sd_state { int cmd; uint8_t cmdarg[4]; uint8_t response[5]; + uint16_t crc16; int32_t arglen; int32_t response_pos; int32_t stopping; @@ -194,12 +197,24 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, u= int32_t val) case SSI_SD_DATA_START: DPRINTF("Start read block\n"); s->mode =3D SSI_SD_DATA_READ; + s->response_pos =3D 0; return 0xfe; case SSI_SD_DATA_READ: val =3D sdbus_read_byte(&s->sdbus); + s->crc16 =3D crc_ccitt_false(s->crc16, (uint8_t *)&val, 1); if (!sdbus_data_ready(&s->sdbus)) { DPRINTF("Data read end\n"); + s->mode =3D SSI_SD_DATA_CRC16; + } + return val; + case SSI_SD_DATA_CRC16: + val =3D (s->crc16 & 0xff00) >> 8; + s->crc16 <<=3D 8; + s->response_pos++; + if (s->response_pos =3D=3D 2) { + DPRINTF("CRC16 read end\n"); s->mode =3D SSI_SD_CMD; + s->response_pos =3D 0; } return val; } @@ -211,7 +226,7 @@ static int ssi_sd_post_load(void *opaque, int version_i= d) { ssi_sd_state *s =3D (ssi_sd_state *)opaque; =20 - if (s->mode > SSI_SD_DATA_READ) { + if (s->mode > SSI_SD_DATA_CRC16) { return -EINVAL; } if (s->mode =3D=3D SSI_SD_CMDARG && @@ -229,14 +244,15 @@ static int ssi_sd_post_load(void *opaque, int version= _id) =20 static const VMStateDescription vmstate_ssi_sd =3D { .name =3D "ssi_sd", - .version_id =3D 3, - .minimum_version_id =3D 3, + .version_id =3D 4, + .minimum_version_id =3D 4, .post_load =3D ssi_sd_post_load, .fields =3D (VMStateField []) { VMSTATE_UINT32(mode, ssi_sd_state), VMSTATE_INT32(cmd, ssi_sd_state), VMSTATE_UINT8_ARRAY(cmdarg, ssi_sd_state, 4), VMSTATE_UINT8_ARRAY(response, ssi_sd_state, 5), + VMSTATE_UINT16(crc16, ssi_sd_state), VMSTATE_INT32(arglen, ssi_sd_state), VMSTATE_INT32(response_pos, ssi_sd_state), VMSTATE_INT32(stopping, ssi_sd_state), @@ -288,6 +304,7 @@ static void ssi_sd_reset(DeviceState *dev) s->cmd =3D 0; memset(s->cmdarg, 0, sizeof(s->cmdarg)); memset(s->response, 0, sizeof(s->response)); + s->crc16 =3D 0; s->arglen =3D 0; s->response_pos =3D 0; s->stopping =3D 0; --=20 2.26.2 From nobody Mon Feb 9 10:38:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.43 as permitted sender) client-ip=209.85.221.43; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f43.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1611519099; cv=none; d=zohomail.com; s=zohoarc; b=BWpgoqv+IYf8Q8po8mqwRcfTA7+KJRTw38jmW85tUN/ao+zrCAC5DDb8CzyFO2XmG8ucxvsJyuJT45qwDj5e8BTMDkV6dry5Msf9Trc7xJZm7DzBIaYnAkaVHbBGMvsi+iIRRroyquI3hi5kzncnqmAbb0i5dqvRW2g3TVKZYJA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611519099; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=LrDtq4QiTUsUiRmE+AfNkF3uAvxtgsZZEqrZ8VIhWkM=; b=dW5gvSjxqeu4bSLNlzPaHtbSzwsKCAPpor01qh35103/l/LHC77yrK8ls+8LcEgmpLtm7qVPh1yHtWO1IHSc4VYzQdTuExiNOSspR0Dpe4egR/voVOYc6BdKzryU6+sI1OnZ5IirWWnKUV5ceuTuWTG6tHuTtsqCD7o3Ya/NVeQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) by mx.zohomail.com with SMTPS id 1611519099377268.05404329358953; Sun, 24 Jan 2021 12:11:39 -0800 (PST) Received: by mail-wr1-f43.google.com with SMTP id d16so9548759wro.11 for ; Sun, 24 Jan 2021 12:11:38 -0800 (PST) Return-Path: Return-Path: Received: from localhost.localdomain (13.red-83-57-169.dynamicip.rima-tde.net. [83.57.169.13]) by smtp.gmail.com with ESMTPSA id k131sm19342293wmb.37.2021.01.24.12.11.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:11:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LrDtq4QiTUsUiRmE+AfNkF3uAvxtgsZZEqrZ8VIhWkM=; b=F/Mu9/cAI1GgaxX79lf9MscO241BrYaG52+Xx+Yz1nn/EfbHRQLDSjYv6U0q8PWHaK tM1IWwy1Rrxh+9v0bTBYoBH+MPK+n46gvGDjzY/XnqiPGq5fjOpCW36VBKexncWwp3B1 yNoZqb9L+J9xX+j8IGlbd6Y3O3NDOjWDsc2jzzk1l6HFm4VkoYk8h2nsaenl5E5/ViaF D8FCbuWcATdArxdWaqYN8YtobBvBn+UHUvIYUd4bc8x9x35dJn3J8S7Q68q4hhixbGcg OYec4sIjhFwpgr7kJRZGwJUd7SQuj3qqFrZoaKLgXEjXKNntW6uwvq+gPHd4EDCAnz4r LL/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=LrDtq4QiTUsUiRmE+AfNkF3uAvxtgsZZEqrZ8VIhWkM=; b=TtH9d44nPL5vCJjuvbdxXAr5Rq+Q+tAzwF8gz64Y7Mzs4nVARbKhI8o+nzo86zFNUH Eo+QF1gkIWODp4gAyUewhzsTglfS2MnRheOpSQzaxT/yvMVHBujNyC2svEW+vVwNF/LB A7a0ephGyvvpWn37McMExeND4BI/kLU629YTzR52L4UE90OjWpYUXG1OFpwskjlBe5n/ BM4WTbVCdynhhXBKEKmhL/IHgqzVTW70khB8FT40ggSftAfwmpt4EZJMvbkzE5+c4T1v IYfUkTUb7Kc05Co/S/uQMbFH1yC8SwxEuCV/Y4St8kA8khTtoKbd+OFj68S2W9yhspq8 IIWg== X-Gm-Message-State: AOAM531pyZxvc1zTCgoIHoQATVNCHcqLhmZmmoP+5dk1WUk8u9OFs998 81X0Tz+Nq29FwsK6BE1m7g4= X-Google-Smtp-Source: ABdhPJwQgea7d2pjlFMEw710xvdgXorvVdcsZjze0lWL16MPJQhAerm4HmwHz1uUrq8ZRV24XcJtXg== X-Received: by 2002:adf:dd05:: with SMTP id a5mr10634027wrm.402.1611519097710; Sun, 24 Jan 2021 12:11:37 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, Bin Meng Subject: [PULL 6/9] hw/sd: ssi-sd: Add a state representing Nac Date: Sun, 24 Jan 2021 21:11:03 +0100 Message-Id: <20210124201106.2602238-7-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124201106.2602238-1-f4bug@amsat.org> References: <20210124201106.2602238-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) From: Bin Meng Per the "Physical Layer Specification Version 8.00" chapter 7.5.2, "Data Read", there is a minimum 8 clock cycles (Nac) after the card response and before data block shows up on the data out line. This applies to both single and multiple block read operations. Current implementation of single block read already satisfies the timing requirement as in the RESPONSE state after all responses are transferred the state remains unchanged. In the next 8 clock cycles it jumps to DATA_START state if data is ready. However we need an explicit state when expanding our support to multiple block read in the future. Let's add a new state PREP_DATA explicitly in the ssi-sd state machine to represent Nac. Note we don't change the single block read state machine to let it jump from RESPONSE state to DATA_START state as that effectively generates a 16 clock cycles Nac, which might not be safe. As the spec says the maximum Nac shall be calculated from several fields encoded in the CSD register, we don't want to bother updating CSD to ensure our Nac is within range to complicate things. Signed-off-by: Bin Meng Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20210123104016.17485-9-bmeng.cn@gmail.com> [PMD: Change VMState version id 4 -> 5] Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/ssi-sd.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 08852dc8d4b..1cdaf73c292 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -39,6 +39,7 @@ typedef enum { SSI_SD_CMDARG, SSI_SD_PREP_RESP, SSI_SD_RESPONSE, + SSI_SD_PREP_DATA, SSI_SD_DATA_START, SSI_SD_DATA_READ, SSI_SD_DATA_CRC16, @@ -194,6 +195,10 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, ui= nt32_t val) s->mode =3D SSI_SD_CMD; } return 0xff; + case SSI_SD_PREP_DATA: + DPRINTF("Prepare data block (Nac)\n"); + s->mode =3D SSI_SD_DATA_START; + return 0xff; case SSI_SD_DATA_START: DPRINTF("Start read block\n"); s->mode =3D SSI_SD_DATA_READ; @@ -244,8 +249,8 @@ static int ssi_sd_post_load(void *opaque, int version_i= d) =20 static const VMStateDescription vmstate_ssi_sd =3D { .name =3D "ssi_sd", - .version_id =3D 4, - .minimum_version_id =3D 4, + .version_id =3D 5, + .minimum_version_id =3D 5, .post_load =3D ssi_sd_post_load, .fields =3D (VMStateField []) { VMSTATE_UINT32(mode, ssi_sd_state), --=20 2.26.2 From nobody Mon Feb 9 10:38:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.128.53 as permitted sender) client-ip=209.85.128.53; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-f53.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.53 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1611519104; cv=none; d=zohomail.com; s=zohoarc; b=N8jFx1kyALPCSZT9B1mvUvuz+B6YIEcHQ1/PYhR8E7okgHkQovAeVcsu5tFWjJpDNwLTdtOYy0EoVSnDpaf1ZBvv9jrJ5ZQvswE9BUZi6sVnO/HzeT7wNsTmQ3bq9qfAsUmQ8M1nkiHi042QLYdeEjhwywytEIf0fdD6xv175p4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611519104; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=pR8RIRikWmMM4mIlnRJBEZUYigNw7whrBQqm3cZ/N6c=; b=OZIe4UzWGlVAsRLkT/h+KlL4g/oCZfpTDyLD0zj4cgqyzcTIjuorzDHOUqPRxoU2FueUps6wr2t5sqBravi4eT3tWEv7/5XG5yYIZdHATi4ne1oIvE3FjFKxwWDX7sz9mdAB5n8jaTWsTqzwFcSmgnDK16hL/nklAGI312Hkrx0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.53 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) by mx.zohomail.com with SMTPS id 1611519104057333.68054111459605; Sun, 24 Jan 2021 12:11:44 -0800 (PST) Received: by mail-wm1-f53.google.com with SMTP id y187so8961148wmd.3 for ; Sun, 24 Jan 2021 12:11:43 -0800 (PST) Return-Path: Return-Path: Received: from localhost.localdomain (13.red-83-57-169.dynamicip.rima-tde.net. [83.57.169.13]) by smtp.gmail.com with ESMTPSA id m11sm11589758wmc.15.2021.01.24.12.11.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:11:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pR8RIRikWmMM4mIlnRJBEZUYigNw7whrBQqm3cZ/N6c=; b=j36P9siOi40WYv3UEWAAlhqr+z143duUla2hc6EKVfgGmkx1Y6IjoBlBRHzzSQOAWH 7+oBfJke8lCDrIOXrEdlhKwhAEzEQjaJ+CmmSCrfd2DMVJ3La11Rd+CzWAgUcXDfV1hC FBbbFNjLkb3zY3Pv1fhwEbm0AZ+wdRbDPMRZg5TQdSjW+lfgSXlpgfv5nb08xkOsXSlP wa2DBd6TaWnvYnYi32sYyuGRpBhPLPEuDo6lOKu99j0z4knR8C3+lkMlUMfksns7dbIB SqWbCyECjkvetD1lxMbAQwSbtToIX12hBYxFYN3Yejjr009nkjaI/uBz8FpAsdBuoqf6 w3Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=pR8RIRikWmMM4mIlnRJBEZUYigNw7whrBQqm3cZ/N6c=; b=iGRZenDhQDYnmYVvoTXf77UCrgSV9SnZ+AXIt8LQLt3SpgsTx7jYsk/PMtR+PXPsMy ifarntYTdDAgpVnS89LmSryzk0KOpKiXSqss+k3ZK40Q8hWSc0ZIGQnpu/nzfN/LHLNK tOMQD5tZiGeaLZAJCG7GuYMnbYcI7mwdk2cc+IK5hlKm563vC/c/XXPeGZUVXmAqz2hJ FxZNVv5yYm86JNHeH//emYeyls1J3PdYixZwD48c0q79K1IQinH9PxTfDVmwdyDCyP1s dZfckLtZDKe/BflNiANMMTTttHrC1AnKE4saQ4dJTaJr6RzQ3V/q2PqBWcWfFz2dzaFS v6ug== X-Gm-Message-State: AOAM531IFYezgrXDK3kC5d50oqi+ycAEcgzVa4x40XTAcn9wxCHiWzsd XTmeHMFfj9q/A133VqlpU68= X-Google-Smtp-Source: ABdhPJwPLK53We6ngm+2hPCb3ZPsXtFvZlL1GMgfN34eTqOkq306GrtBkoqK5WU/7NDjjaizsAqZgw== X-Received: by 2002:a1c:6802:: with SMTP id d2mr12631028wmc.32.1611519102375; Sun, 24 Jan 2021 12:11:42 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, Bin Meng Subject: [PULL 7/9] hw/sd: ssi-sd: Fix the wrong command index for STOP_TRANSMISSION Date: Sun, 24 Jan 2021 21:11:04 +0100 Message-Id: <20210124201106.2602238-8-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124201106.2602238-1-f4bug@amsat.org> References: <20210124201106.2602238-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) From: Bin Meng This fixes the wrong command index for STOP_TRANSMISSION, the required command to interrupt the multiple block read command, in the old codes. It should be CMD12 (0x4c), not CMD13 (0x4d). Fixes: 775616c3ae8c ("Partial SD card SPI mode support") Signed-off-by: Bin Meng Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20210123104016.17485-10-bmeng.cn@gmail.com> Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/ssi-sd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 1cdaf73c292..12dffb6f55e 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -83,7 +83,7 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uint3= 2_t val) ssi_sd_state *s =3D SSI_SD(dev); =20 /* Special case: allow CMD12 (STOP TRANSMISSION) while reading data. = */ - if (s->mode =3D=3D SSI_SD_DATA_READ && val =3D=3D 0x4d) { + if (s->mode =3D=3D SSI_SD_DATA_READ && val =3D=3D 0x4c) { s->mode =3D SSI_SD_CMD; /* There must be at least one byte delay before the card responds.= */ s->stopping =3D 1; --=20 2.26.2 From nobody Mon Feb 9 10:38:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.54 as permitted sender) client-ip=209.85.221.54; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f54.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.54 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1611519108; cv=none; d=zohomail.com; s=zohoarc; b=EOCCNsGQUVE/2JcfPa9dVFTn6/laOiRpTcRMAgflKT9YSJeYy74bllls2lNtNdd6EyM5gB/og2fOWpLQ7bEFXD9Wp/yi28DmsI+bsmAPKV6oz7hJtX6zk8pF8gmZj1jdY+TWM9l3wqQejPzWpUTAn2rDW99cqq0lkkz8xObxTdk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611519108; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=CvlrFXvx36UvMO8am/Ebt5BL3p3nP+BcIJYQlCouQhQ=; b=YxeJownoDxQNbTrHzhy11cTZchdiAQuMO7/SyDVSHO4bK5dhEULVjnvV5kM/bmUXuWJBEnieX2vkD7ogvlEY36seHeR3p2qeF30XYxLApJzczI8T9c04zF51qukLyMJvNw3vSwNFTOcjVtdQ0Mrv8UTaZr9FzGA38YTo64U5NCE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.54 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) by mx.zohomail.com with SMTPS id 1611519108701228.6520963240066; Sun, 24 Jan 2021 12:11:48 -0800 (PST) Received: by mail-wr1-f54.google.com with SMTP id b5so10212271wrr.10 for ; Sun, 24 Jan 2021 12:11:48 -0800 (PST) Return-Path: Return-Path: Received: from localhost.localdomain (13.red-83-57-169.dynamicip.rima-tde.net. [83.57.169.13]) by smtp.gmail.com with ESMTPSA id d9sm12409388wrq.74.2021.01.24.12.11.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:11:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CvlrFXvx36UvMO8am/Ebt5BL3p3nP+BcIJYQlCouQhQ=; b=iibR4p2K2ozBOrvrvixWTdiMR69bEbwQzxhdgdvEdVtjWnZDZrAWs3ZUHtBITnKGdN /AAY1OyKIiTqopAFJNDoJqYPJTR8TjREnx13y9xHCeNFDuR9/7dbHm7KrUHDb3vDi/C9 foiEPNZr3gBe3c5ue4L09C30+yPfy0k4M0y3oLkLA4/PJSk2tbI5/402LioKb39BxR1t dVPGDHnlGgqabEJ1n0lN9XGFS+gMlAUgV6Zsok53zsa15eQfWWc8KavH3MDm2wUF8iIr r0PpJg/oi9aHHMGSyIy8GpA4yqLU4S+KpBEJPcAFGLlHCRuJHZfjEJb4rDw/44h2U+9v n6eQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=CvlrFXvx36UvMO8am/Ebt5BL3p3nP+BcIJYQlCouQhQ=; b=qdwUxr7+QJ4N9a67hrXKBhUvKvZ2XMCzehmUmP+L6PXxpWH/UYFduaN0uUZYasvpS4 0vTsMgLWW5NpaI/XpbrF7Mv1JdNSXTo4lqET7eyywvwVpeIVD9d68jMpgILoiexpRCfC ncCVWZjUQqlLVQnm4oNjN2y4biCN9zybzlDN90Rnmr+03bohnLbKk0nXDm57ILdAvbeQ ZMbLuPDYbdETN0PiOGbchoYAxneDYJwcyZ3/yW3OmDQ0ETnYPf6V4tQOhjkzwX4s1cCp IM7F98c2v/ltLcj7WDeXdJKiBTinFZbCAnrc9WDWOe3zfi8UcknUxtOGdZnEcuYua/FO oYrA== X-Gm-Message-State: AOAM5305dx8TavFz3jEdOMYvaUBXOrztYadKhvq34DB5GrMG032dSwoS 3kZowzS7TksmAS2XaKm+K+P/LjyzVfw= X-Google-Smtp-Source: ABdhPJzxbwcyMWSK0hq8p0/OoC/e1TVLiEeT1vwoGzjmSg5wkxV0JYNRmJyQ5GBxf2PXMNjB9S5/6w== X-Received: by 2002:a5d:6a02:: with SMTP id m2mr4063559wru.364.1611519107021; Sun, 24 Jan 2021 12:11:47 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, Bin Meng , Alistair Francis Subject: [PULL 8/9] hw/sd: ssi-sd: Use macros for the dummy value and tokens in the transfer Date: Sun, 24 Jan 2021 21:11:05 +0100 Message-Id: <20210124201106.2602238-9-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124201106.2602238-1-f4bug@amsat.org> References: <20210124201106.2602238-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) From: Bin Meng At present the codes use hardcoded numbers (0xff/0xfe) for the dummy value and block start token. Replace them with macros. Signed-off-by: Bin Meng Reviewed-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20210123104016.17485-12-bmeng.cn@gmail.com> Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/ssi-sd.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 12dffb6f55e..be1bb101645 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -78,6 +78,12 @@ OBJECT_DECLARE_SIMPLE_TYPE(ssi_sd_state, SSI_SD) #define SSI_SDR_ADDRESS_ERROR 0x2000 #define SSI_SDR_PARAMETER_ERROR 0x4000 =20 +/* single block read/write, multiple block read */ +#define SSI_TOKEN_SINGLE 0xfe + +/* dummy value - don't care */ +#define SSI_DUMMY 0xff + static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uint32_t val) { ssi_sd_state *s =3D SSI_SD(dev); @@ -91,14 +97,14 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uin= t32_t val) =20 switch (s->mode) { case SSI_SD_CMD: - if (val =3D=3D 0xff) { + if (val =3D=3D SSI_DUMMY) { DPRINTF("NULL command\n"); - return 0xff; + return SSI_DUMMY; } s->cmd =3D val & 0x3f; s->mode =3D SSI_SD_CMDARG; s->arglen =3D 0; - return 0xff; + return SSI_DUMMY; case SSI_SD_CMDARG: if (s->arglen =3D=3D 4) { SDRequest request; @@ -173,15 +179,15 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, u= int32_t val) } else { s->cmdarg[s->arglen++] =3D val; } - return 0xff; + return SSI_DUMMY; case SSI_SD_PREP_RESP: DPRINTF("Prepare card response (Ncr)\n"); s->mode =3D SSI_SD_RESPONSE; - return 0xff; + return SSI_DUMMY; case SSI_SD_RESPONSE: if (s->stopping) { s->stopping =3D 0; - return 0xff; + return SSI_DUMMY; } if (s->response_pos < s->arglen) { DPRINTF("Response 0x%02x\n", s->response[s->response_pos]); @@ -194,16 +200,16 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, u= int32_t val) DPRINTF("End of command\n"); s->mode =3D SSI_SD_CMD; } - return 0xff; + return SSI_DUMMY; case SSI_SD_PREP_DATA: DPRINTF("Prepare data block (Nac)\n"); s->mode =3D SSI_SD_DATA_START; - return 0xff; + return SSI_DUMMY; case SSI_SD_DATA_START: DPRINTF("Start read block\n"); s->mode =3D SSI_SD_DATA_READ; s->response_pos =3D 0; - return 0xfe; + return SSI_TOKEN_SINGLE; case SSI_SD_DATA_READ: val =3D sdbus_read_byte(&s->sdbus); s->crc16 =3D crc_ccitt_false(s->crc16, (uint8_t *)&val, 1); @@ -224,7 +230,7 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uin= t32_t val) return val; } /* Should never happen. */ - return 0xff; + return SSI_DUMMY; } =20 static int ssi_sd_post_load(void *opaque, int version_id) --=20 2.26.2 From nobody Mon Feb 9 10:38:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.43 as permitted sender) client-ip=209.85.221.43; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f43.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1611519113; cv=none; d=zohomail.com; s=zohoarc; b=PoFlFubVVojXlsfnDsoMEH1KifkaDrwftvrPEew9wuRRHuMJKPYnz2a3p2LqLZy+6wvhNoy432L3T54Kh+X8jLriSF6HhQlaA6FmdNtBCNlLqwGW33OIu1p+H4pi9SWgUF52NrQ+U9cCPcMAMa26jYh1D8Wy9T2udRUq8X+R474= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611519113; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=m8jljS4EW5V2Y+XQ3p65ModjRC4/hYLCEEONBClbWgI=; b=TLuZWoNXsgl6v2frJWjKto3H/ULxHKnoW2lX6O/AFEztfshNlRDTD6ejMmYqLP7YmX8BJKm07GPSZNviNHSaJ7N1YnKnlTCnNbluvPfuQ8FoJok2bcWHY1R6n6iuOnFu81dwThNyaRT9HVDzSjyhxHGuVb49BQpR3j6oI+OW8wA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) by mx.zohomail.com with SMTPS id 1611519113475349.07182909507287; Sun, 24 Jan 2021 12:11:53 -0800 (PST) Received: by mail-wr1-f43.google.com with SMTP id q7so10204979wre.13 for ; Sun, 24 Jan 2021 12:11:52 -0800 (PST) Return-Path: Return-Path: Received: from localhost.localdomain (13.red-83-57-169.dynamicip.rima-tde.net. [83.57.169.13]) by smtp.gmail.com with ESMTPSA id l20sm21654064wrh.82.2021.01.24.12.11.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:11:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=m8jljS4EW5V2Y+XQ3p65ModjRC4/hYLCEEONBClbWgI=; b=aTx47kL+Av3B1DXPUzjVgXl0s8zC0ucf2mmsbIq93z02FUmeZbhP/4yIX6rQeCzii5 eeD+jjP0gj57rmedfOkmopJM28dzVKi2TDPxddCK2YBI9EtAST88HWS1e49UeV7Q8iMR qfc1pLsKgItDUM8n3NvU2IJrzLm7c0711GjsqB58a9lQ6J6ocrw6AHQywo/Xy+IWwZW6 Z4FoyWyZTvMddmVZ9Tey1CoMT5B3B3zqCrVVc6UXbQi5oE6yboxnfqvpDC9/yhMZ1F8b HoVzkMw746YkBXKt/qwOuUVH3+KLkp4P0FKBz/kCK98PlkShJUZ+cZugLQMBnoLHTvdR coYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=m8jljS4EW5V2Y+XQ3p65ModjRC4/hYLCEEONBClbWgI=; b=QJRA/Pz7kb6PMRDM9bdYcfa/xClgP5lXGp/lmSk5ZwUEyHz5EaMmABxlxBxChh/m/u EpM739KOmfwKG329ZG/ngjlxMUdbtxYfOpE72EzDfngDD7C/NA0WyqWim9uydRHuKKYD GkOKKwU1cO6zJZ7SThD+52PK0Q8h1r5v3+8yexdP0IWxhEGMfe+jMp3P+Saos3uouk3M 2S36XgCio1cma81n7IBCrrfnyLc0q+RoKto2l9+nQJaltnTXmo72g4vW/Y5uGBD5dvCy 8PXfu+4MJGJ/0o4RnsAYC/m3fmgtVDiN3psMxnDfqu4OWPFZEoviKs2dASRby/n+g9gQ tFZQ== X-Gm-Message-State: AOAM530vfOO6OMuPnZJooHQpUpbHuAwjvgirkvYADLsmPBzXCtRxsPAJ sii/NPaLYkCJxNX7tZlN3rM= X-Google-Smtp-Source: ABdhPJyMWCHmxT4rJUIdWKrX39+apFOc3ZLu9EvVJWJyVsoi7slA0pY18Qk3wzcNK5nt/GqNGgHlcg== X-Received: by 2002:a5d:58dc:: with SMTP id o28mr3385160wrf.414.1611519111807; Sun, 24 Jan 2021 12:11:51 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, Bin Meng , Alistair Francis Subject: [PULL 9/9] hw/sd: sd.h: Cosmetic change of using spaces Date: Sun, 24 Jan 2021 21:11:06 +0100 Message-Id: <20210124201106.2602238-10-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124201106.2602238-1-f4bug@amsat.org> References: <20210124201106.2602238-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) From: Bin Meng QEMU coding convention prefers spaces over tabs. Signed-off-by: Bin Meng Reviewed-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20210123104016.17485-15-bmeng.cn@gmail.com> Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- include/hw/sd/sd.h | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h index 59d108d4535..05ef9b73e56 100644 --- a/include/hw/sd/sd.h +++ b/include/hw/sd/sd.h @@ -33,27 +33,27 @@ #include "hw/qdev-core.h" #include "qom/object.h" =20 -#define OUT_OF_RANGE (1 << 31) -#define ADDRESS_ERROR (1 << 30) -#define BLOCK_LEN_ERROR (1 << 29) -#define ERASE_SEQ_ERROR (1 << 28) -#define ERASE_PARAM (1 << 27) -#define WP_VIOLATION (1 << 26) -#define CARD_IS_LOCKED (1 << 25) -#define LOCK_UNLOCK_FAILED (1 << 24) -#define COM_CRC_ERROR (1 << 23) -#define ILLEGAL_COMMAND (1 << 22) -#define CARD_ECC_FAILED (1 << 21) -#define CC_ERROR (1 << 20) -#define SD_ERROR (1 << 19) -#define CID_CSD_OVERWRITE (1 << 16) -#define WP_ERASE_SKIP (1 << 15) -#define CARD_ECC_DISABLED (1 << 14) -#define ERASE_RESET (1 << 13) -#define CURRENT_STATE (7 << 9) -#define READY_FOR_DATA (1 << 8) -#define APP_CMD (1 << 5) -#define AKE_SEQ_ERROR (1 << 3) +#define OUT_OF_RANGE (1 << 31) +#define ADDRESS_ERROR (1 << 30) +#define BLOCK_LEN_ERROR (1 << 29) +#define ERASE_SEQ_ERROR (1 << 28) +#define ERASE_PARAM (1 << 27) +#define WP_VIOLATION (1 << 26) +#define CARD_IS_LOCKED (1 << 25) +#define LOCK_UNLOCK_FAILED (1 << 24) +#define COM_CRC_ERROR (1 << 23) +#define ILLEGAL_COMMAND (1 << 22) +#define CARD_ECC_FAILED (1 << 21) +#define CC_ERROR (1 << 20) +#define SD_ERROR (1 << 19) +#define CID_CSD_OVERWRITE (1 << 16) +#define WP_ERASE_SKIP (1 << 15) +#define CARD_ECC_DISABLED (1 << 14) +#define ERASE_RESET (1 << 13) +#define CURRENT_STATE (7 << 9) +#define READY_FOR_DATA (1 << 8) +#define APP_CMD (1 << 5) +#define AKE_SEQ_ERROR (1 << 3) =20 enum SDPhySpecificationVersion { SD_PHY_SPECv1_10_VERS =3D 1, --=20 2.26.2