From nobody Sat May 18 01:07:52 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.53 as permitted sender) client-ip=209.85.221.53; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f53.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.53 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1611520108; cv=none; d=zohomail.com; s=zohoarc; b=htPbX8pX+onrY4mVpIi9D41MUx2DiFVn+OT21qnYAGLgs/KREkBSLfbvvDNfnHfUO2y3oaPsakq+E//S3Chm1NXrmttMerH8fStSNI4lmLXTc92l9vZZcssMQS7oQgThvOe7Oj3lX+HBcFugKoHOHLqKTn+4geK+3RJnaRWB67I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611520108; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=vbPgcE8iMHZqcnJv4lm0MKaKfzQFYn4DZYh80ZJfCVg=; b=JiPuzUgdsnUTdm/0JTa8x1MdIbJjUhhideRe+wHYzQBhu9dEvWq/pUonpa7pVrx6nQsk1iYNF3ORgDVh7Cc7iCEF5/wA77URhP9VptxZjAZMeR6TxCEGa67brlDrvlNvzVdq2DN+is9li8cPCFFZ6+Ip4B4RVvjrnUm1iOmF0iQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.53 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) by mx.zohomail.com with SMTPS id 1611520108035678.0801669071712; Sun, 24 Jan 2021 12:28:28 -0800 (PST) Received: by mail-wr1-f53.google.com with SMTP id v15so10245339wrx.4 for ; Sun, 24 Jan 2021 12:28:26 -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 u142sm11558013wmu.3.2021.01.24.12.28.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:28:24 -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=vbPgcE8iMHZqcnJv4lm0MKaKfzQFYn4DZYh80ZJfCVg=; b=rU7F7V+Jx17yHER5emQDtiYKjj+I6z3sn4wtgHJSJ9Q7VYrQu0hBpjb9Tsc1tpAxxo ssFAaMBizane7hab6SwLDoXP/V6qSoMsjYX+28zE1Ho4zyL+okjP+dbOP7bS9m4OXAZq n45h1af5wkm8iOFgMEggUPXa+kPxp2wp+PKEGRmf1i1UkNO5Zg+ku0zNIdBoOr8TdTc7 j5atjYitcdnxV/eEWNqjg+fDb5WlXe+MtoB/lrIUXFbFkwKEaG9Uowp45SHqGnnXb4o0 xDDoBDrggJnnPCnDSEG9l0gUNzrmtmsIv7zJ4+CcJInpftF8Nvxf3jVNjeMyh6OidyEZ HSxQ== 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=vbPgcE8iMHZqcnJv4lm0MKaKfzQFYn4DZYh80ZJfCVg=; b=DIclLnBDwOQy/bt4AgysR5039ny9r+IatGhTcRrlh4cAR0fj0EDHQdnLEUwtMjMRg1 5JjVTVg2fr3a8LK967VAjXuYN044D+2U9RqADe6hfbCeBIYf7+Oq0FFP3L273QuGXh5v 3F95y6wF94wGXxV3+A5eiMbSRvqQ4N2CBgzik5lJ0I9EQIdzF8K/JCaQ5swTI6Mx+mP+ MKUaDCUmPNVmhnLBpq6sZQlIvuC3D2dVTc2LE9t0uX13h1vDmN8k+lSkzIAA2v9zUREu l4kgjsKg3B6f+s8mksHNaowrCLFo+W8zVdQoPtNPVauBy1/413hvma/mvxgli0KkIlY/ Fo0A== X-Gm-Message-State: AOAM532PZYfUPMHwyjWtsVf4q2jLjGdqrTwqWZUYr7ZVlKY2InQSox2M 1vRe79Wwah4FkKgxMpPpWnzD1StMD28= X-Google-Smtp-Source: ABdhPJy/9zyS+y5qLEzys8BJ+U+V+A1D/WzpUBrD9VGOTtRtHRY+nG0L6RIrT9FE9Hqe5M79PA6FkQ== X-Received: by 2002:a05:6000:1ce:: with SMTP id t14mr2852074wrx.297.1611520105301; Sun, 24 Jan 2021 12:28:25 -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, Bin Meng Cc: Alistair Francis , qemu-block@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pragnesh Patel , Bin Meng Subject: [PATCH v3 1/6] hw/sd: ssi-sd: Support multiple block read Date: Sun, 24 Jan 2021 21:28:12 +0100 Message-Id: <20210124202817.2624557-2-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124202817.2624557-1-f4bug@amsat.org> References: <20210124202817.2624557-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 In the case of a multiple block read operation every transferred block has its suffix of CRC16. Update the state machine logic to handle multiple block read. Signed-off-by: Bin Meng Acked-by: Alistair Francis Message-Id: <20210123104016.17485-11-bmeng.cn@gmail.com> [PMD: Change VMState version id 5 -> 6] Signed-off-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/ssi-sd.c | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index be1bb101645..6d20a240c69 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -52,6 +52,7 @@ struct ssi_sd_state { uint8_t cmdarg[4]; uint8_t response[5]; uint16_t crc16; + int32_t read_bytes; int32_t arglen; int32_t response_pos; int32_t stopping; @@ -88,11 +89,26 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uin= t32_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 0x4c) { - s->mode =3D SSI_SD_CMD; - /* There must be at least one byte delay before the card responds.= */ - s->stopping =3D 1; + /* + * Special case: allow CMD12 (STOP TRANSMISSION) while reading data. + * + * See "Physical Layer Specification Version 8.00" chapter 7.5.2.2, + * to avoid conflict between CMD12 response and next data block, + * timing of CMD12 should be controlled as follows: + * + * - CMD12 issued at the timing that end bit of CMD12 and end bit of + * data block is overlapped + * - CMD12 issued after one clock cycle after host receives a token + * (either Start Block token or Data Error token) + * + * We need to catch CMD12 in all of the data read states. + */ + if (s->mode >=3D SSI_SD_PREP_DATA && s->mode <=3D SSI_SD_DATA_CRC16) { + if (val =3D=3D 0x4c) { + s->mode =3D SSI_SD_CMD; + /* There must be at least one byte delay before the card respo= nds */ + s->stopping =3D 1; + } } =20 switch (s->mode) { @@ -212,8 +228,9 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uin= t32_t val) return SSI_TOKEN_SINGLE; case SSI_SD_DATA_READ: val =3D sdbus_read_byte(&s->sdbus); + s->read_bytes++; s->crc16 =3D crc_ccitt_false(s->crc16, (uint8_t *)&val, 1); - if (!sdbus_data_ready(&s->sdbus)) { + if (!sdbus_data_ready(&s->sdbus) || s->read_bytes =3D=3D 512) { DPRINTF("Data read end\n"); s->mode =3D SSI_SD_DATA_CRC16; } @@ -224,7 +241,12 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, ui= nt32_t val) s->response_pos++; if (s->response_pos =3D=3D 2) { DPRINTF("CRC16 read end\n"); - s->mode =3D SSI_SD_CMD; + if (s->read_bytes =3D=3D 512 && s->cmd !=3D 17) { + s->mode =3D SSI_SD_PREP_DATA; + } else { + s->mode =3D SSI_SD_CMD; + } + s->read_bytes =3D 0; s->response_pos =3D 0; } return val; @@ -255,8 +277,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 5, - .minimum_version_id =3D 5, + .version_id =3D 6, + .minimum_version_id =3D 6, .post_load =3D ssi_sd_post_load, .fields =3D (VMStateField []) { VMSTATE_UINT32(mode, ssi_sd_state), @@ -264,6 +286,7 @@ static const VMStateDescription vmstate_ssi_sd =3D { VMSTATE_UINT8_ARRAY(cmdarg, ssi_sd_state, 4), VMSTATE_UINT8_ARRAY(response, ssi_sd_state, 5), VMSTATE_UINT16(crc16, ssi_sd_state), + VMSTATE_INT32(read_bytes, ssi_sd_state), VMSTATE_INT32(arglen, ssi_sd_state), VMSTATE_INT32(response_pos, ssi_sd_state), VMSTATE_INT32(stopping, ssi_sd_state), @@ -316,6 +339,7 @@ static void ssi_sd_reset(DeviceState *dev) memset(s->cmdarg, 0, sizeof(s->cmdarg)); memset(s->response, 0, sizeof(s->response)); s->crc16 =3D 0; + s->read_bytes =3D 0; s->arglen =3D 0; s->response_pos =3D 0; s->stopping =3D 0; --=20 2.26.2 From nobody Sat May 18 01:07:52 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.128.48 as permitted sender) client-ip=209.85.128.48; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-f48.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.48 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1611520112; cv=none; d=zohomail.com; s=zohoarc; b=mADL633ty8rsCdmCWEfOZPqiyA3AJVoVoBEAPzzgrtgiz70C5Jm2Mh6l4VlvMFmZGtTPzTocju0C9hoDuMp+mCIkZ1oYG4Xr02iMqzNCzTYpNJ/76UqnfmKL3Me0gwFkMsP1J9REscMyqXsQbTT8uPQDVOr3j5WUabxZfbPav50= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611520112; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=+5slmPoo61HxnQOohyNLZo6tnq7nkp2gmI544rH0wak=; b=C9qbNloB0kDJEzEfEiG33U7JOmcOJH9n8BMcch6uZay2BaZ+0kJEc/baIM0P4tWPE385m+18+cMHSjiWtQw+2U6PpNUbBwdpA/ZlfonK14FMSVAT0jT40giRWMXPCspxfVvoEnFQHdlbi/biZchnoEwk7/MlLoCit5JXDQ3Lh7I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.48 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) by mx.zohomail.com with SMTPS id 1611520112400631.4941234061527; Sun, 24 Jan 2021 12:28:32 -0800 (PST) Received: by mail-wm1-f48.google.com with SMTP id o10so9477494wmc.1 for ; Sun, 24 Jan 2021 12:28:31 -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 n125sm2786075wmf.30.2021.01.24.12.28.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:28:29 -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=+5slmPoo61HxnQOohyNLZo6tnq7nkp2gmI544rH0wak=; b=G0PMksLv/UF/DrQ2Nzr/t0B/F0/GOCnhUkl+hRL5qWjuaUnCn1BSMFbxTx6uAnI0b3 E5eysODPudhVQR/Q0nQn4w8GGQvmbd4Xg4ZfjeGshZwf8njLd4JSxWZjZnW/ew4ObfoQ V8isKwu0I0QS6XU+oZykL+0Q3hVKnwsx0hGulb7WPEHL0pxZe9bhneKSArdNfMFjxtnX 6JEQQLTsfTY5aRPWrIvak9gjhxQ/bAPvKExvjitTK1XzG69jfWBAovtrizqMZp9k8cMO FOtPzAfZmBzqEJhnDHWQiZe9RDNwrkMT0fI9m5oE2+2f8L9xG4PjQkzXCNp3LZLb4uZA 8hTw== 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=+5slmPoo61HxnQOohyNLZo6tnq7nkp2gmI544rH0wak=; b=O+ZGrgWb2wF24iFKOgYeaGmLZ8ArxWTqEvi5jce4xk0c5jASy0eXk9A4pYxJhHpIuZ zP4wOxkKl+lhmW/GPa6zcfvDn4rLfnHfrLmbN9d6rUbJVjRvf0ZZKoJmXB5yqg+YYAGw /XysIgtDcV14/rAxqnzmdbQiUUoOljKQX+7PqhFGGm1u9WtBmCPeUthY8QnV0hraq4qo E13mIxSiEDoZh+pdn+L9A5KD7Pnafkqjae1fehqtD8GC9UaUKJ9VFxM/ujbZORxFWuAE OgOe0p6OuC9nweSONBGQDQoucg5mZiNxfxytyNd2qEOCIWeVhIc6BOigKHHOwaxFIOyC infg== X-Gm-Message-State: AOAM530G8eUeBwDEn4QIx9TmolsyZ9rkbWaTITm6VdjR231pEyNobqx8 T+rT7oNHqrtF1DoPRWzlStY= X-Google-Smtp-Source: ABdhPJz1Imu5jsf0SZ6Wv+aSNBAdTv98YqAWtTVwatJcYhn84//PfW78ar2P0a3qnT9NdvtZdwTbDA== X-Received: by 2002:a1c:a716:: with SMTP id q22mr2827044wme.143.1611520110581; Sun, 24 Jan 2021 12:28:30 -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, Bin Meng Cc: Alistair Francis , qemu-block@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pragnesh Patel , Bin Meng Subject: [PATCH v3 2/6] hw/sd: sd: Remove duplicated codes in single/multiple block read/write Date: Sun, 24 Jan 2021 21:28:13 +0100 Message-Id: <20210124202817.2624557-3-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124202817.2624557-1-f4bug@amsat.org> References: <20210124202817.2624557-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 The single block read (CMD17) codes are the same as the multiple block read (CMD18). Merge them into one. The same applies to single block write (CMD24) and multiple block write (CMD25). Signed-off-by: Bin Meng Acked-by: Alistair Francis Message-Id: <20210123104016.17485-13-bmeng.cn@gmail.com> Signed-off-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/sd.c | 47 ----------------------------------------------- 1 file changed, 47 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index b3952514fed..09753359bb2 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -1181,24 +1181,6 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, = SDRequest req) break; =20 case 17: /* CMD17: READ_SINGLE_BLOCK */ - switch (sd->state) { - case sd_transfer_state: - - if (addr + sd->blk_len > sd->size) { - sd->card_status |=3D ADDRESS_ERROR; - return sd_r1; - } - - sd->state =3D sd_sendingdata_state; - sd->data_start =3D addr; - sd->data_offset =3D 0; - return sd_r1; - - default: - break; - } - break; - case 18: /* CMD18: READ_MULTIPLE_BLOCK */ switch (sd->state) { case sd_transfer_state: @@ -1245,35 +1227,6 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, = SDRequest req) =20 /* Block write commands (Class 4) */ case 24: /* CMD24: WRITE_SINGLE_BLOCK */ - switch (sd->state) { - case sd_transfer_state: - /* Writing in SPI mode not implemented. */ - if (sd->spi) - break; - - if (addr + sd->blk_len > sd->size) { - sd->card_status |=3D ADDRESS_ERROR; - return sd_r1; - } - - sd->state =3D sd_receivingdata_state; - sd->data_start =3D addr; - sd->data_offset =3D 0; - sd->blk_written =3D 0; - - if (sd_wp_addr(sd, sd->data_start)) { - sd->card_status |=3D WP_VIOLATION; - } - if (sd->csd[14] & 0x30) { - sd->card_status |=3D WP_VIOLATION; - } - return sd_r1; - - default: - break; - } - break; - case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */ switch (sd->state) { case sd_transfer_state: --=20 2.26.2 From nobody Sat May 18 01:07:52 2024 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=1611520117; cv=none; d=zohomail.com; s=zohoarc; b=GTpuwd3i9BKD5GseBZmzZpE3uYv9hTPLY+pcg/wUI+cKSR0z6hqnKzI94UXB7jgSHgp99v9OIErDEjVBjWxEtVEzYyUaYyd6nrTgYj196ULeakv4RV5OwqGiwkUdYPZ3Jsrp68KaXVO6xclNMVkTEdbimuZzpXRuBm4qyGOsUOU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611520117; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=tfh6ZX6HuhyRZJV4+yZY7Muv5Hss9JwmwPOFvwdUOwo=; b=O91ToGQyAZ49XdbyEuZHpmoDdkrTkzmdtM2pntI55F3uXNBjM8NLG0Lzrcc2uTU9pyhmdjY+hv4LzFejczvIXr4JYxnjxRR2isTgG0mQyefk0zrsqA2yB2egynTzHz0rYQlfTpEXcBK6vvIu1Uv3JQH5yvdGkItQ0TCO57KKFz4= 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 1611520117226804.3371264376186; Sun, 24 Jan 2021 12:28:37 -0800 (PST) Received: by mail-wr1-f49.google.com with SMTP id g10so10273596wrx.1 for ; Sun, 24 Jan 2021 12:28:36 -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 k15sm8138582wmj.6.2021.01.24.12.28.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:28:34 -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=tfh6ZX6HuhyRZJV4+yZY7Muv5Hss9JwmwPOFvwdUOwo=; b=IsMnx0mhqo1o3sUrK5hX+CNtFURyVhNMOtL+ZsWgyCdXx6ROK5/nJ6AMceQYWc3OKd jKzt1PagCji85LRordIHcMNs7UPPxU6+rYbg6Rp7r9v+FZCiLBmzFjJ5XzEVCbowbiPy IjY+6i+oJl1BYHRVo7oJRxqmLMpJ55bPJEXuVGOE3qTHgJ130NG2Ic3UJU4kCYY0D3T2 LO+6Hiree2kOXAOHabSHE1aSR+mp+eFkarNUKJbezOYyHXf/bBmjIo5Ha5jtDv+PcJZO QqIiSSwIPW62yH/HzFiFwf62P4jUE8zuYIAsGdgmehsvWUUdEHLZaLPWjzoR3ilTnDPX veDA== 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=tfh6ZX6HuhyRZJV4+yZY7Muv5Hss9JwmwPOFvwdUOwo=; b=CBuG6XaeSG+Er25yQ+ff+UeA2yXwq3RLGlt9B2wLBwjmQkPhm+IcjPuyQ43JCwK/Ao 6FdGylNcI38RJnZPzZAkNMakR3mbBYHtWmtbEeP3/NzYZijgaNyqF3LJs0zgmAPePm2a Fc3dV7xJyCYGUUPSkAIKqSn/g8x19LVSlMBzVI4humT5lyDgYL9Xly9Jvq6YizgkmZB6 1AP1ShPV7Vt8KUP1EHo2RI8aAYb2uR3uV98dIX/UaDQQPs+KaP8iS3AgbwL2B06dQWjD wabELKUZdFZQbs+/1xj23bSc6DCdW5Iw7om2Dizr/Y8Esp/GUynf44JkIEhb7tFsVBlw 8zzw== X-Gm-Message-State: AOAM533A4ybgnjNMcvMQz/kazsI5PZ1Y5FqzDyodUBgFIuINHGCaFUNW dqD+HKvbQX6rtiyV09pirzo= X-Google-Smtp-Source: ABdhPJzHTqQlOKRFWiHufjaXujFPeCeO7zXFdSOLNhw+DhlfUkTITuuQt8nqN7cStwDONvRTJ6JkyA== X-Received: by 2002:a05:6000:1542:: with SMTP id 2mr3606362wry.356.1611520115545; Sun, 24 Jan 2021 12:28:35 -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, Bin Meng Cc: Alistair Francis , qemu-block@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pragnesh Patel , Bin Meng Subject: [PATCH v3 3/6] hw/sd: sd: Allow single/multiple block write for SPI mode Date: Sun, 24 Jan 2021 21:28:14 +0100 Message-Id: <20210124202817.2624557-4-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124202817.2624557-1-f4bug@amsat.org> References: <20210124202817.2624557-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 single/multiple block write in SPI mode is blocked by sd_normal_command(). Remove the limitation. Signed-off-by: Bin Meng Acked-by: Alistair Francis Message-Id: <20210123104016.17485-14-bmeng.cn@gmail.com> Signed-off-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/sd.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 09753359bb2..946036d87cb 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -1230,9 +1230,6 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, S= DRequest req) case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */ switch (sd->state) { case sd_transfer_state: - /* Writing in SPI mode not implemented. */ - if (sd->spi) - break; =20 if (addr + sd->blk_len > sd->size) { sd->card_status |=3D ADDRESS_ERROR; --=20 2.26.2 From nobody Sat May 18 01:07:52 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.128.41 as permitted sender) client-ip=209.85.128.41; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-f41.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.41 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com; dmarc=fail(p=none dis=none) header.from=amsat.org ARC-Seal: i=1; a=rsa-sha256; t=1611520122; cv=none; d=zohomail.com; s=zohoarc; b=hoyhz8NLN8YbWYyGoKgWtT03e0C6sjfaljTWIipJEtxpFcung3XmB7BP58TnG+iwRtooWeJoFw7JnHhxEoVMAnjAs4nJUgEjjUmfiVawFZVdG4Z5BkgjhpUgjQIUWLcEyue0cMNn7sWSG92BaW679rtws/6ohSHJd4WNoRODfbU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611520122; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0OXE2ghwu/u4aUK+J3Nc88xMP1SZwgJgIRrsmYs8INU=; b=F+993M0Wqk4/ttwY30E1LV7k1HBQJpdgUNHU19bmN+wHDK4eeDjGfh4lkU+THqmSV+Dk+B+py0i1wjKGEKDd3f44ji3Pd1l1sv8NSHEntKOtD6JTn9s/UcXWuT0g9AsUK42J73tr7lo/XLhmN9wQix+A+rf8Rg6+Yw+ogYankPg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.41 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) by mx.zohomail.com with SMTPS id 1611520122320498.04553494717027; Sun, 24 Jan 2021 12:28:42 -0800 (PST) Received: by mail-wm1-f41.google.com with SMTP id o10so9477965wmc.1 for ; Sun, 24 Jan 2021 12:28:41 -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 q6sm17888028wmj.32.2021.01.24.12.28.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:28:39 -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=0OXE2ghwu/u4aUK+J3Nc88xMP1SZwgJgIRrsmYs8INU=; b=Fpg6V24l1DjGB4gs7vV+NgtFU504NpKBadkEWUju0Iy2nhqjR8OZYnehu+mDw5LNLs WDjpjdwbN2Nv0Oufxba5oVgq50OLWp318wele7ILzxgfi7p/t+e9uWKdLJ0lw5MlhePV u3vIwm5idR92Nb0NY4vnRr1C0YoDInsy36mKpIhX5qWCViXig3oZHor+ykCxkVXXB5Ha nUbiKvww8Bm7Ff8/xaIg/9cl+boz6/u+ulTFsQm28bjA/eNaLS1X46tts6uQBOH+hzgb eSyULyhF1OfQUJJrQg9LgfQJ5xVdYAWDhMEz0RPgISxGmhnCbWlPvr+XKloOj9dha239 MVDQ== 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=0OXE2ghwu/u4aUK+J3Nc88xMP1SZwgJgIRrsmYs8INU=; b=F+h+gXhdBigtWPcgQz/+JsZ8ybTXNda37zIQWcIylBFTl3kelV5g0eLCT6cPo0yxen XyddnjFBtTj2mqRttzhR4o00MWLN/dh/u1AwThxuwTB+lh9sX93IMqc0X5SvAxYIDMFM 4ZZnkWeru2JmeBfDfZ7UiRqpWebPtr3GRFZYIpgkLzC4i+0kXzA0YQwvhn2dyOg21rNv 4fp0QxVstj9+cmI+enoBxPE2YmvARwY4K7D7g7czv3FKzM6LE6/FI3f6mxK5JPw09cWq R6dMbAEAERWvKUA6NGa7bYE3047FW4/qLustH/B1jBMWjNGLZKS94gEUZcNLDpdUCk2b vofg== X-Gm-Message-State: AOAM532FWHOcSCMZqHgsWur9AlIFxhs32mlz2j29z9p4HRgkjgVaLBTL u28pvcEixYxw1qtVVMW1Zs8= X-Google-Smtp-Source: ABdhPJwWU7fdvvd14ySUsV82xUMtCofipzK9ODnEz2vI4g52A+uetBU9wf2OEApHMMmdu7SC9FXL3w== X-Received: by 2002:a7b:c7c8:: with SMTP id z8mr3993239wmk.72.1611520120615; Sun, 24 Jan 2021 12:28:40 -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, Bin Meng Cc: Alistair Francis , qemu-block@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pragnesh Patel , Bin Meng Subject: [PATCH v3 4/6] hw/sd: Introduce receive_ready() callback Date: Sun, 24 Jan 2021 21:28:15 +0100 Message-Id: <20210124202817.2624557-5-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124202817.2624557-1-f4bug@amsat.org> References: <20210124202817.2624557-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 there is a data_ready() callback for the SD data read path. Let's add a receive_ready() for the SD data write path. Signed-off-by: Bin Meng Reviewed-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Alistair Francis Message-Id: <20210123104016.17485-16-bmeng.cn@gmail.com> Signed-off-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- include/hw/sd/sd.h | 2 ++ hw/sd/core.c | 13 +++++++++++++ hw/sd/sd.c | 6 ++++++ 3 files changed, 21 insertions(+) diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h index 05ef9b73e56..47360ba4ee9 100644 --- a/include/hw/sd/sd.h +++ b/include/hw/sd/sd.h @@ -116,6 +116,7 @@ struct SDCardClass { * Return: byte value read */ uint8_t (*read_byte)(SDState *sd); + bool (*receive_ready)(SDState *sd); bool (*data_ready)(SDState *sd); void (*set_voltage)(SDState *sd, uint16_t millivolts); uint8_t (*get_dat_lines)(SDState *sd); @@ -187,6 +188,7 @@ void sdbus_write_data(SDBus *sdbus, const void *buf, si= ze_t length); * Read multiple bytes of data on the data lines of a SD bus. */ void sdbus_read_data(SDBus *sdbus, void *buf, size_t length); +bool sdbus_receive_ready(SDBus *sd); bool sdbus_data_ready(SDBus *sd); bool sdbus_get_inserted(SDBus *sd); bool sdbus_get_readonly(SDBus *sd); diff --git a/hw/sd/core.c b/hw/sd/core.c index 08c93b59034..30ee62c5106 100644 --- a/hw/sd/core.c +++ b/hw/sd/core.c @@ -160,6 +160,19 @@ void sdbus_read_data(SDBus *sdbus, void *buf, size_t l= ength) } } =20 +bool sdbus_receive_ready(SDBus *sdbus) +{ + SDState *card =3D get_card(sdbus); + + if (card) { + SDCardClass *sc =3D SD_CARD_GET_CLASS(card); + + return sc->receive_ready(card); + } + + return false; +} + bool sdbus_data_ready(SDBus *sdbus) { SDState *card =3D get_card(sdbus); diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 946036d87cb..c99c0e93bb8 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -2037,6 +2037,11 @@ uint8_t sd_read_byte(SDState *sd) return ret; } =20 +static bool sd_receive_ready(SDState *sd) +{ + return sd->state =3D=3D sd_receivingdata_state; +} + static bool sd_data_ready(SDState *sd) { return sd->state =3D=3D sd_sendingdata_state; @@ -2147,6 +2152,7 @@ static void sd_class_init(ObjectClass *klass, void *d= ata) sc->do_command =3D sd_do_command; sc->write_byte =3D sd_write_byte; sc->read_byte =3D sd_read_byte; + sc->receive_ready =3D sd_receive_ready; sc->data_ready =3D sd_data_ready; sc->enable =3D sd_enable; sc->get_inserted =3D sd_get_inserted; --=20 2.26.2 From nobody Sat May 18 01:07:52 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.46 as permitted sender) client-ip=209.85.221.46; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f46.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.46 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1611520127; cv=none; d=zohomail.com; s=zohoarc; b=mBtrIEqA7AhKEAhAJARWp7UfUpu633ZmYAoT4Vmec04+jKe+YvnfNH1zZ7HClfi04XhVLwN8SfdlCH0iqnT4ln45goVXoWlf0VwW42QjgGdVz1zf6jsqGUWHiuGqLf4FVuQPk1+6cqFVQ+UuZTkLLUVLEZQQ1+xdtHTx5oIHrto= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611520127; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=8cyx359tJuUV31B1jXXoRAIiQKjeJQ7/Oz0pZLR+MTQ=; b=lu8U/imd6x8CKPvOIxwdR4eCZUojTGc83WKLBznCkpG8qtv8amCoXM1UUxzzwnfyT7+j5H3dSpA2q9EpsD6opsOpQSqK58FrbmYXVkOBUJGXJh6rtGTMoxhRhDC+6RB+JrK0zvaMGi0cF+sQ8+Q1k84pm7wDKLFEFMwYITnQc6w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.46 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by mx.zohomail.com with SMTPS id 1611520127379899.462273985588; Sun, 24 Jan 2021 12:28:47 -0800 (PST) Received: by mail-wr1-f46.google.com with SMTP id m1so9558920wrq.12 for ; Sun, 24 Jan 2021 12:28:46 -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 m82sm19364651wmf.29.2021.01.24.12.28.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:28:45 -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=8cyx359tJuUV31B1jXXoRAIiQKjeJQ7/Oz0pZLR+MTQ=; b=a9wYft/xQe+7/tTaxmt1V5nDg+L0UBufe8rSk21RnUESoUYEHxXhs65QBT9VOT5N56 l8FLQVZKSbe9TlgtKjZVu7q9PEkHG7ov5Hvv15aqGn8SReB4Q3a4rItSEgdUx8QSVo+a QVPm8yltETWflut4YGNJnad+2LcbQtRnWKIL70BdiiBfdOO677cG/z3NnnH88A5tvDca 3yfmEhjbTURT+/Pc2v8buVgQp/ZwHQlycUeqtKqxXVR5BOUaDAFM+3x0OBENHeUvIYIe GEoUJKBiydEpY35UZ4RCx3wQT35YNpkXQXXnAV/XYOm96il/Qqu2YcWKjEcLpOzWHPCd bx3g== 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=8cyx359tJuUV31B1jXXoRAIiQKjeJQ7/Oz0pZLR+MTQ=; b=FVeuMTWALz1wxaFyrgUtJPMkJnWh2Db9ODDEkOpEhlchWaeOGRpsYrRXh9yNK36Wxd tVvEhhY+sbNe1KalSjMpPbepoTpRuhkD/PJR2P+IvCpYekoI+NiMzWp2Ltbje55XtB3d VoNBU62mWVSGDCUg09ccHqPDcZTlLm7WeHHWqFEoCsRbo/jUVIieJgMjpjm+ZFP90b6W ek+vPNht+2jQVe1S7JrB3+TDOZltq0Hh/f6uM6pBl7mHs9bjmlDDdCQKaRCR4fenGhkF TCqmeFgVSxcdvYiAOk3ttziiagwkdmcD5ZkjBUEm0zpKOId9bHAUNj6GRzbBhTfoR+UU VxjA== X-Gm-Message-State: AOAM532wZmIgSWZ5v3LhxZJo2Jm4z77yhQE6vCbF32P4ahqfFZ1xeD6H JHDEAxOqGJk2B+XlTWk3dJs= X-Google-Smtp-Source: ABdhPJyFegcgHD0JxJKxXyO2zJKacCOEcOdl4JWpcbwL8SbhdyCMurclxebCZYkqSYD1biMfgN1JAQ== X-Received: by 2002:adf:c6c4:: with SMTP id c4mr3692701wrh.348.1611520125663; Sun, 24 Jan 2021 12:28:45 -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, Bin Meng Cc: Alistair Francis , qemu-block@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pragnesh Patel , Bin Meng Subject: [PATCH v3 5/6] hw/sd: ssi-sd: Support single block write Date: Sun, 24 Jan 2021 21:28:16 +0100 Message-Id: <20210124202817.2624557-6-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124202817.2624557-1-f4bug@amsat.org> References: <20210124202817.2624557-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 Add 2 more states for the block write operation. The SPI host needs to send a data start token to start the transfer, and the data block written to the card will be acknowledged by a data response token. Signed-off-by: Bin Meng Acked-by: Alistair Francis Message-Id: <20210123104016.17485-17-bmeng.cn@gmail.com> [PMD: Change VMState version id 6 -> 7] Signed-off-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/ssi-sd.c | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 6d20a240c69..1205ad8b52c 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -43,6 +43,8 @@ typedef enum { SSI_SD_DATA_START, SSI_SD_DATA_READ, SSI_SD_DATA_CRC16, + SSI_SD_DATA_WRITE, + SSI_SD_SKIP_CRC16, } ssi_sd_mode; =20 struct ssi_sd_state { @@ -53,6 +55,7 @@ struct ssi_sd_state { uint8_t response[5]; uint16_t crc16; int32_t read_bytes; + int32_t write_bytes; int32_t arglen; int32_t response_pos; int32_t stopping; @@ -85,6 +88,9 @@ OBJECT_DECLARE_SIMPLE_TYPE(ssi_sd_state, SSI_SD) /* dummy value - don't care */ #define SSI_DUMMY 0xff =20 +/* data accepted */ +#define DATA_RESPONSE_ACCEPTED 0x05 + static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uint32_t val) { ssi_sd_state *s =3D SSI_SD(dev); @@ -113,10 +119,17 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, u= int32_t val) =20 switch (s->mode) { case SSI_SD_CMD: - if (val =3D=3D SSI_DUMMY) { + switch (val) { + case SSI_DUMMY: DPRINTF("NULL command\n"); return SSI_DUMMY; + break; + case SSI_TOKEN_SINGLE: + DPRINTF("Start write block\n"); + s->mode =3D SSI_SD_DATA_WRITE; + return SSI_DUMMY; } + s->cmd =3D val & 0x3f; s->mode =3D SSI_SD_CMDARG; s->arglen =3D 0; @@ -250,6 +263,27 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, ui= nt32_t val) s->response_pos =3D 0; } return val; + case SSI_SD_DATA_WRITE: + sdbus_write_byte(&s->sdbus, val); + s->write_bytes++; + if (!sdbus_receive_ready(&s->sdbus) || s->write_bytes =3D=3D 512) { + DPRINTF("Data write end\n"); + s->mode =3D SSI_SD_SKIP_CRC16; + s->response_pos =3D 0; + } + return val; + case SSI_SD_SKIP_CRC16: + /* we don't verify the crc16 */ + s->response_pos++; + if (s->response_pos =3D=3D 2) { + DPRINTF("CRC16 receive end\n"); + s->mode =3D SSI_SD_RESPONSE; + s->write_bytes =3D 0; + s->arglen =3D 1; + s->response[0] =3D DATA_RESPONSE_ACCEPTED; + s->response_pos =3D 0; + } + return SSI_DUMMY; } /* Should never happen. */ return SSI_DUMMY; @@ -259,7 +293,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_CRC16) { + if (s->mode > SSI_SD_SKIP_CRC16) { return -EINVAL; } if (s->mode =3D=3D SSI_SD_CMDARG && @@ -277,8 +311,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 6, - .minimum_version_id =3D 6, + .version_id =3D 7, + .minimum_version_id =3D 7, .post_load =3D ssi_sd_post_load, .fields =3D (VMStateField []) { VMSTATE_UINT32(mode, ssi_sd_state), @@ -287,6 +321,7 @@ static const VMStateDescription vmstate_ssi_sd =3D { VMSTATE_UINT8_ARRAY(response, ssi_sd_state, 5), VMSTATE_UINT16(crc16, ssi_sd_state), VMSTATE_INT32(read_bytes, ssi_sd_state), + VMSTATE_INT32(write_bytes, ssi_sd_state), VMSTATE_INT32(arglen, ssi_sd_state), VMSTATE_INT32(response_pos, ssi_sd_state), VMSTATE_INT32(stopping, ssi_sd_state), @@ -340,6 +375,7 @@ static void ssi_sd_reset(DeviceState *dev) memset(s->response, 0, sizeof(s->response)); s->crc16 =3D 0; s->read_bytes =3D 0; + s->write_bytes =3D 0; s->arglen =3D 0; s->response_pos =3D 0; s->stopping =3D 0; --=20 2.26.2 From nobody Sat May 18 01:07:52 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.47 as permitted sender) client-ip=209.85.221.47; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f47.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.47 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1611520132; cv=none; d=zohomail.com; s=zohoarc; b=ifFT9/D9eng2tMD1NEIBOpcqS6+diwyv3zYdoZsSpAjiKa4gyZ3kxBI899TXlUACm3/Jjtb/rBR9iNppV+1ejht7dDeCX0jd2PPhIX0i4ygkq/v380wfdtz2eOguUoQyEBhaWusQ/gJhRmsxaiWsOikuQ0uOuHr5YWBmheAeV/M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611520132; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=yP26PpmJagN4jG84JFkSeSaPQBLeLAiKLXm9b3ACybs=; b=TlCLcfcXpHCrSiVb2CA1Cn5ph8bxxD//HScF+QbswrDj4x1UPwSMyg5XXw/xMhoDwf73PTP4oUXbUBXDNZkVTT6IDX1nUPmM5s/90Ox9QukqkSKrSH8HkeyfR4rDGZtzZnCfLkycXLH+dbuEdZBC81FQnSNtDM5gKWi7WQ/OO5A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.47 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) by mx.zohomail.com with SMTPS id 1611520132323917.0332760896069; Sun, 24 Jan 2021 12:28:52 -0800 (PST) Received: by mail-wr1-f47.google.com with SMTP id h9so10179wrr.9 for ; Sun, 24 Jan 2021 12:28:51 -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 y14sm714198wro.58.2021.01.24.12.28.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 Jan 2021 12:28:50 -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=yP26PpmJagN4jG84JFkSeSaPQBLeLAiKLXm9b3ACybs=; b=tzfBvAz3pQDVChvcJBMR9Tu7opB3A18s0lrsBHzAhJYQfarIP+3WR48SoxU+DisNSb ZCSipGtobD7ux00IfeoE47MRqMANSe/aYGK+J3J4caclgOYGBccHXrkAG9lmelQwghwB 2vEs2ZftuA9uq6bl0ZDfPNfN+LaiFQAD1fO8nk5RiSqiZNh0HPregZJWVvhphVv5JSaF 1bk79ygHWtAGyEH7XlJAJaWlZKjq+7HIVrK9z9LtE72AnoW2AmhuXcoflSqHHqUTpTQb thEYIrQIF6SjPLW3CbMbvSmajIsdGcjEWWJipM8anKfHEFX0YvwPTYOyZ2jfETmvEyEF 260A== 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=yP26PpmJagN4jG84JFkSeSaPQBLeLAiKLXm9b3ACybs=; b=GVIJ8BrFa0CFx93Mp3p6lWlFWF+xFigAu5k/CCSR+u1xEgZdmz4iSROaUO9XAiF7WM raAWS0tx8NvtT+oyj3sWbumrpw1fHcsb3/Eupp5DqpkCsNNek/nFQwGBSGUrhRwiwSGw pFVq3D5FTSTctjdQZDLYu+9bpyXgQ2kEhPW08VHyHvD58kybFpoqrVh0bOfDf+vF8TFk XEJVD5G+wcvTNEeN2iSCrLWT2+BKWMFfVDXC8zTtBOR7oe/c8xHrIfELTJb2FnlfVh9a pBYLlAfNwpDKW6gE7suMPkxWQcfrV50LsDhkDzjIEFBVBbJIH/YjTP8WvVAaucADJrJi K5Og== X-Gm-Message-State: AOAM531KwtMrW/jRwMi/C7QYw/+m/6vDcaE1fh6vR5EXQETe4StOizS2 uPFz9nrQKFPctaIdON5jl5s= X-Google-Smtp-Source: ABdhPJyG17Ye37egAn5Gd5CN8XCVreyrg9hI35tuKX/AIuPVCj7/iZ/Gxw7RaNreThRKkyllUkHIeg== X-Received: by 2002:adf:eb05:: with SMTP id s5mr233869wrn.333.1611520130636; Sun, 24 Jan 2021 12:28:50 -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, Bin Meng Cc: Alistair Francis , qemu-block@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Pragnesh Patel , Bin Meng Subject: [PATCH v3 6/6] hw/sd: ssi-sd: Support multiple block write Date: Sun, 24 Jan 2021 21:28:17 +0100 Message-Id: <20210124202817.2624557-7-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210124202817.2624557-1-f4bug@amsat.org> References: <20210124202817.2624557-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 For a multiple block write operation, each block begins with a multi write start token. Unlike the SD mode that the multiple block write ends when receiving a STOP_TRAN command (CMD12), a special stop tran token is used to signal the card. Emulating this by manually sending a CMD12 to the SD card core, to bring it out of the receiving data state. Signed-off-by: Bin Meng Acked-by: Alistair Francis Message-Id: <20210123104016.17485-18-bmeng.cn@gmail.com> Signed-off-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- hw/sd/ssi-sd.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 1205ad8b52c..2d08ce4820a 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -4,6 +4,11 @@ * Copyright (c) 2007-2009 CodeSourcery. * Written by Paul Brook * + * Copyright (c) 2021 Wind River Systems, Inc. + * Improved by Bin Meng + * + * Validated with U-Boot v2021.01 and Linux v5.10 mmc_spi driver + * * This code is licensed under the GNU GPL v2. * * Contributions after 2012-01-13 are licensed under the terms of the @@ -82,6 +87,10 @@ OBJECT_DECLARE_SIMPLE_TYPE(ssi_sd_state, SSI_SD) #define SSI_SDR_ADDRESS_ERROR 0x2000 #define SSI_SDR_PARAMETER_ERROR 0x4000 =20 +/* multiple block write */ +#define SSI_TOKEN_MULTI_WRITE 0xfc +/* terminate multiple block write */ +#define SSI_TOKEN_STOP_TRAN 0xfd /* single block read/write, multiple block read */ #define SSI_TOKEN_SINGLE 0xfe =20 @@ -94,6 +103,8 @@ OBJECT_DECLARE_SIMPLE_TYPE(ssi_sd_state, SSI_SD) static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uint32_t val) { ssi_sd_state *s =3D SSI_SD(dev); + SDRequest request; + uint8_t longresp[16]; =20 /* * Special case: allow CMD12 (STOP TRANSMISSION) while reading data. @@ -125,9 +136,31 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, ui= nt32_t val) return SSI_DUMMY; break; case SSI_TOKEN_SINGLE: + case SSI_TOKEN_MULTI_WRITE: DPRINTF("Start write block\n"); s->mode =3D SSI_SD_DATA_WRITE; return SSI_DUMMY; + case SSI_TOKEN_STOP_TRAN: + DPRINTF("Stop multiple write\n"); + + /* manually issue cmd12 to stop the transfer */ + request.cmd =3D 12; + request.arg =3D 0; + s->arglen =3D sdbus_do_command(&s->sdbus, &request, longresp); + if (s->arglen <=3D 0) { + s->arglen =3D 1; + /* a zero value indicates the card is busy */ + s->response[0] =3D 0; + DPRINTF("SD card busy\n"); + } else { + s->arglen =3D 1; + /* a non-zero value indicates the card is ready */ + s->response[0] =3D SSI_DUMMY; + } + + s->mode =3D SSI_SD_RESPONSE; + s->response_pos =3D 0; + return SSI_DUMMY; } =20 s->cmd =3D val & 0x3f; @@ -136,8 +169,6 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev, uin= t32_t val) return SSI_DUMMY; case SSI_SD_CMDARG: if (s->arglen =3D=3D 4) { - SDRequest request; - uint8_t longresp[16]; /* FIXME: Check CRC. */ request.cmd =3D s->cmd; request.arg =3D ldl_be_p(s->cmdarg); --=20 2.26.2