[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 20/25] hw/sd: Add CMD21 tuning sequence
From: |
Philippe Mathieu-Daudé |
Subject: |
[PATCH v2 20/25] hw/sd: Add CMD21 tuning sequence |
Date: |
Mon, 30 May 2022 21:38:11 +0200 |
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>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
hw/sd/sd.c | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
index d38ee5094d..672af1e839 100644
--- a/hw/sd/sd.c
+++ b/hw/sd/sd.c
@@ -2012,6 +2012,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 */
@@ -2098,6 +2122,21 @@ uint8_t sd_read_byte(SDState *sd)
ret = sd_tuning_block_pattern[sd->data_offset++];
break;
+ case 21: /* CMD21: SEND_TUNING_BLOCK (MMC) */
+ 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 ++];
--
2.36.1
- Re: [PATCH v2 13/25] hw/sd: Add sd_cmd_SET_BLOCK_COUNT() handler, (continued)
- [PATCH v2 14/25] hw/sd: Basis for eMMC support, Philippe Mathieu-Daudé, 2022/05/30
- [PATCH v2 15/25] hw/sd: Add sd_emmc_cmd_SEND_OP_CMD() handler, Philippe Mathieu-Daudé, 2022/05/30
- [PATCH v2 16/25] hw/sd: Add sd_emmc_cmd_ALL_SEND_CID() handler, Philippe Mathieu-Daudé, 2022/05/30
- [PATCH v2 17/25] hw/sd: Add sd_emmc_cmd_SEND_RELATIVE_ADDR() handler, Philippe Mathieu-Daudé, 2022/05/30
- [PATCH v2 18/25] hw/sd: Add sd_emmc_cmd_APP_CMD() handler, Philippe Mathieu-Daudé, 2022/05/30
- [PATCH v2 19/25] hw/sd: add sd_emmc_cmd_SEND_TUNING_BLOCK() handler, Philippe Mathieu-Daudé, 2022/05/30
- [PATCH v2 20/25] hw/sd: Add CMD21 tuning sequence,
Philippe Mathieu-Daudé <=
- [PATCH v2 21/25] hw/sd: Add mmc switch function support, Philippe Mathieu-Daudé, 2022/05/30
- [PATCH v2 22/25] hw/sd: Add sd_emmc_cmd_SEND_EXT_CSD() handler, Philippe Mathieu-Daudé, 2022/05/30
- [PATCH v2 23/25] hw/sd: Support boot area in emmc image, Philippe Mathieu-Daudé, 2022/05/30
- [PATCH v2 24/25] hw/sd: Subtract bootarea size from blk, Philippe Mathieu-Daudé, 2022/05/30
- [PATCH v2 25/25] hw/sd: Add boot config support, Philippe Mathieu-Daudé, 2022/05/30
- Re: [PATCH v2 00/25] hw/sd: Rework models for eMMC support, Cédric Le Goater, 2022/05/31
- Re: [PATCH v2 00/25] hw/sd: Rework models for eMMC support, Cédric Le Goater, 2022/05/31