From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: "Cédric Le Goater" <clg@kaod.org>, qemu-devel@nongnu.org
Cc: Bin Meng <bin.meng@windriver.com>,
Peter Maydell <peter.maydell@linaro.org>,
Lucien Murray-Pitts <lucienmp.qemu@gmail.com>,
Sai Pavan Boddu <sai.pavan.boddu@amd.com>,
"Edgar E. Iglesias" <edgar.iglesias@amd.com>
Subject: Re: [PATCH 20/32] hw/sd: Add CMD21 tuning sequence
Date: Thu, 13 Jun 2024 00:37:59 +0200 [thread overview]
Message-ID: <d28958bf-e2f3-46f3-b6fe-dad7adb1b380@linaro.org> (raw)
In-Reply-To: <9962c6af-e72d-427b-b3af-5faf0447dae1@linaro.org>
On 13/6/24 00:15, Philippe Mathieu-Daudé wrote:
> On 3/7/23 15:24, Cédric Le Goater wrote:
>> From: Sai Pavan Boddu <sai.pavan.boddu@xilinx.com>
>>
>> MMC cards support different tuning sequence for entering HS200 mode.
>>
>> Signed-off-by: Sai Pavan Boddu <sai.pavan.boddu@xilinx.com>
>> Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
>> [ clg: - ported on QEMU 7.0 ]
>> Signed-off-by: Cédric Le Goater <clg@kaod.org>
>> ---
>> hw/sd/sd.c | 40 ++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 40 insertions(+)
>>
>> diff --git a/hw/sd/sd.c b/hw/sd/sd.c
>> index 4b4a4cda2e68..7332f7a18435 100644
>> --- a/hw/sd/sd.c
>> +++ b/hw/sd/sd.c
>> @@ -2017,6 +2017,30 @@ static const uint8_t
>> sd_tuning_block_pattern[SD_TUNING_BLOCK_SIZE] = {
>> 0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
>> };
>> +#define EXCSD_BUS_WIDTH_OFFSET 183
>> +#define BUS_WIDTH_8_MASK 0x4
>> +#define BUS_WIDTH_4_MASK 0x2
>> +#define MMC_TUNING_BLOCK_SIZE 128
>> +
>> +static const uint8_t mmc_tuning_block_pattern[128] = {
>> + 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
>> + 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc,
>> + 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff, 0xff,
>> + 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee, 0xff,
>> + 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd, 0xdd,
>> + 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb,
>> + 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff,
>> + 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee, 0xff,
>> + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00,
>> + 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc,
>> + 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff,
>> + 0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee,
>> + 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd,
>> + 0xdd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff,
>> + 0xbb, 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff,
>> + 0xff, 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee,
>> +};
>> +
>> uint8_t sd_read_byte(SDState *sd)
>> {
>> /* TODO: Append CRCs */
>> @@ -2103,6 +2127,22 @@ uint8_t sd_read_byte(SDState *sd)
>> ret = sd_tuning_block_pattern[sd->data_offset++];
>> break;
>> + case 21: /* CMD21: SEND_TUNING_BLOCK (MMC) */
>
> This can be accessed in SPI/SD modes, should we check for eMMC then?
This could do:
-- >8 --
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
index 3c12ba2ad3..5bad19c766 100644
--- a/hw/sd/sd.c
+++ b/hw/sd/sd.c
@@ -160,12 +160,18 @@ static const struct SDProto *sd_proto(SDState *sd)
}
static const SDProto sd_proto_spi;
+static const SDProto sd_proto_emmc;
static bool sd_is_spi(SDState *sd)
{
return sd_proto(sd) == &sd_proto_spi;
}
+static bool sd_is_emmc(SDState *sd)
+{
+ return sd_proto(sd) == &sd_proto_emmc;
+}
+
static const char *sd_version_str(enum SDPhySpecificationVersion version)
{
static const char *sdphy_version[] = {
@@ -2389,7 +2395,9 @@ uint8_t sd_read_byte(SDState *sd)
break;
case 21: /* CMD21: SEND_TUNING_BLOCK (MMC) */
+ if (!sd_is_emmc(sd)) {
+ return 0x00;
+ }
if (sd->data_offset >= MMC_TUNING_BLOCK_SIZE - 1) {
sd->state = sd_transfer_state;
}
---
> Similarly, other cases previous eMMC introduction only expect SPI/SD
> but don't check for it. I need to think a bit more on how to handle
> that.
>
>> + if (sd->data_offset >= MMC_TUNING_BLOCK_SIZE - 1) {
>> + sd->state = sd_transfer_state;
>> + }
>> + if (sd->ext_csd[EXCSD_BUS_WIDTH_OFFSET] & BUS_WIDTH_8_MASK) {
>> + ret = mmc_tuning_block_pattern[sd->data_offset++];
>> + } else {
>> + /*
>> + * Return LSB Nibbles of two byte from the 8bit tuning
>> + * block for 4bit mode
>> + */
>> + ret = mmc_tuning_block_pattern[sd->data_offset++] & 0x0F;
>> + ret |= (mmc_tuning_block_pattern[sd->data_offset++] &
>> 0x0F) << 4;
>> + }
>> + break;
>> +
>> case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
>> ret = sd->data[sd->data_offset ++];
>
next prev parent reply other threads:[~2024-06-12 22:39 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-03 13:24 [PATCH 00/32] hw/sd: eMMC support Cédric Le Goater
2023-07-03 13:24 ` [PATCH 01/32] hw/sd: When card is in wrong state, log which state it is Cédric Le Goater
2023-07-03 13:24 ` [PATCH 02/32] hw/sd: When card is in wrong state, log which spec version is used Cédric Le Goater
2023-07-03 13:24 ` [PATCH 03/32] hw/sd: Move proto_name to SDProto structure Cédric Le Goater
2023-07-03 13:24 ` [PATCH 04/32] hw/sd: Introduce sd_cmd_handler type Cédric Le Goater
2023-07-03 13:24 ` [PATCH 05/32] hw/sd: Add sd_cmd_illegal() handler Cédric Le Goater
2023-07-03 13:24 ` [PATCH 06/32] hw/sd: Add sd_cmd_unimplemented() handler Cédric Le Goater
2023-07-03 13:24 ` [PATCH 07/32] hw/sd: Add sd_cmd_GO_IDLE_STATE() handler Cédric Le Goater
2023-07-03 13:24 ` [PATCH 08/32] hw/sd: Add sd_cmd_SEND_OP_CMD() handler Cédric Le Goater
2023-07-03 13:24 ` [PATCH 09/32] hw/sd: Add sd_cmd_ALL_SEND_CID() handler Cédric Le Goater
2023-07-03 13:24 ` [PATCH 10/32] hw/sd: Add sd_cmd_SEND_RELATIVE_ADDR() handler Cédric Le Goater
2023-07-03 13:24 ` [PATCH 11/32] hw/sd: Add sd_cmd_SEND_TUNING_BLOCK() handler Cédric Le Goater
2023-07-03 13:24 ` [PATCH 12/32] hw/sd: Add sd_cmd_SET_BLOCK_COUNT() handler Cédric Le Goater
2023-07-03 13:24 ` [PATCH 13/32] hw/sd: Introduce a "sd-card" SPI variant model Cédric Le Goater
2023-08-28 17:11 ` Philippe Mathieu-Daudé
2023-07-03 13:24 ` [PATCH 14/32] hw/sd: Basis for eMMC support Cédric Le Goater
2023-07-03 13:24 ` [PATCH 15/32] hw/sd: Add emmc_cmd_SEND_OP_CMD() handler Cédric Le Goater
2024-06-03 12:25 ` Philippe Mathieu-Daudé
2024-06-03 12:27 ` Philippe Mathieu-Daudé
2023-07-03 13:24 ` [PATCH 16/32] hw/sd: Add emmc_cmd_ALL_SEND_CID() handler Cédric Le Goater
2024-06-03 12:18 ` Philippe Mathieu-Daudé
2023-07-03 13:24 ` [PATCH 17/32] hw/sd: Add emmc_cmd_SEND_RELATIVE_ADDR() handler Cédric Le Goater
2024-06-03 12:26 ` Philippe Mathieu-Daudé
2024-06-04 15:13 ` Cédric Le Goater
2023-07-03 13:24 ` [PATCH 18/32] hw/sd: Add emmc_cmd_APP_CMD() handler Cédric Le Goater
2024-06-25 15:04 ` Philippe Mathieu-Daudé
2024-06-25 15:13 ` Cédric Le Goater
2024-06-25 15:32 ` Philippe Mathieu-Daudé
2024-06-25 15:54 ` Cédric Le Goater
2023-07-03 13:24 ` [PATCH 19/32] hw/sd: add emmc_cmd_SEND_TUNING_BLOCK() handler Cédric Le Goater
2023-07-03 13:24 ` [PATCH 20/32] hw/sd: Add CMD21 tuning sequence Cédric Le Goater
2024-06-12 22:15 ` Philippe Mathieu-Daudé
2024-06-12 22:37 ` Philippe Mathieu-Daudé [this message]
2023-07-03 13:24 ` [PATCH 21/32] hw/sd: Add mmc switch function support Cédric Le Goater
2024-06-12 22:49 ` Philippe Mathieu-Daudé
2024-06-13 7:44 ` Cédric Le Goater
2024-06-13 8:41 ` Philippe Mathieu-Daudé
2023-07-03 13:24 ` [PATCH 22/32] hw/sd: Add emmc_cmd_SEND_EXT_CSD() handler Cédric Le Goater
2024-06-19 17:40 ` Philippe Mathieu-Daudé
2024-06-20 7:23 ` Cédric Le Goater
2024-06-20 10:24 ` Philippe Mathieu-Daudé
2024-06-20 9:54 ` Philippe Mathieu-Daudé
2023-07-03 13:25 ` [PATCH 23/32] hw/sd: Support boot area in emmc image Cédric Le Goater
2023-07-03 13:25 ` [PATCH 24/32] hw/sd: Subtract bootarea size from blk Cédric Le Goater
2024-06-03 12:31 ` Philippe Mathieu-Daudé
2024-06-04 15:21 ` Cédric Le Goater
2023-07-03 13:25 ` [PATCH 25/32] hw/sd: Add boot config support Cédric Le Goater
2023-07-03 13:25 ` [PATCH 26/32] hw/sd: Fix SET_BLOCK_COUNT command argument Cédric Le Goater
2024-06-12 22:23 ` Philippe Mathieu-Daudé
2023-07-03 13:25 ` [PATCH 27/32] hw/sd: Update CMD1 definition for MMC Cédric Le Goater
2023-07-03 13:25 ` [PATCH 28/32] hw/arm/aspeed: Add eMMC device Cédric Le Goater
2023-07-03 13:25 ` [PATCH 29/32] hw/arm/aspeed: Load eMMC first boot area as a boot rom Cédric Le Goater
2023-07-03 13:25 ` [PATCH 30/32] hw/arm/aspeed: Set boot device to emmc Cédric Le Goater
2023-07-03 13:25 ` [PATCH 31/32] aspeed: Set bootconfig Cédric Le Goater
2023-07-03 13:25 ` [PATCH 32/32] aspeed: Introduce a 'boot-emmc' property for AST2600 based machines Cédric Le Goater
2023-08-28 16:27 ` [PATCH 00/32] hw/sd: eMMC support Cédric Le Goater
2024-05-21 10:59 ` Cédric Le Goater
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d28958bf-e2f3-46f3-b6fe-dad7adb1b380@linaro.org \
--to=philmd@linaro.org \
--cc=bin.meng@windriver.com \
--cc=clg@kaod.org \
--cc=edgar.iglesias@amd.com \
--cc=lucienmp.qemu@gmail.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=sai.pavan.boddu@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).