[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 12/22] sd: emmc: add CMD21 tuning sequence
From: |
Sai Pavan Boddu |
Subject: |
[PATCH v2 12/22] sd: emmc: add CMD21 tuning sequence |
Date: |
Mon, 22 Feb 2021 13:50:29 +0530 |
eMMC cards support 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>
---
hw/sd/sd.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
index e50d40b..d702027 100644
--- a/hw/sd/sd.c
+++ b/hw/sd/sd.c
@@ -1378,6 +1378,14 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,
SDRequest req)
}
break;
+ case 21: /* CMD21: mmc SEND TUNING_BLOCK */
+ if (sd->emmc && (sd->state == sd_transfer_state)) {
+ sd->state = sd_sendingdata_state;
+ sd->data_offset = 0;
+ return sd_r1;
+ }
+ break;
+
case 23: /* CMD23: SET_BLOCK_COUNT */
if (sd->spec_version < SD_PHY_SPECv3_01_VERS) {
break;
@@ -2112,6 +2120,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_tunning_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 */
@@ -2205,6 +2237,21 @@ uint8_t sd_read_byte(SDState *sd)
ret = sd_tuning_block_pattern[sd->data_offset++];
break;
+ case 21: /* CMD21: SEND_TUNNING_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_tunning_block_pattern[sd->data_offset++];
+ } else {
+ /* Return LSB Nibbles of two byte from the 8bit tuning block
+ * for 4bit mode
+ */
+ ret = mmc_tunning_block_pattern[sd->data_offset++] & 0x0F;
+ ret |= (mmc_tunning_block_pattern[sd->data_offset++] & 0x0F) << 4;
+ }
+ break;
+
case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
ret = sd->data[sd->data_offset ++];
--
2.7.4
- [PATCH v2 03/22] sd: emmc: Add support for eMMC cards, (continued)
- [PATCH v2 03/22] sd: emmc: Add support for eMMC cards, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 09/22] sd: emmc: Update CMD1 definition for eMMC, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 16/22] sd: emmc: Add Extended CSD register definitions, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 01/22] block: add eMMC block device type, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 18/22] sd: emmc: Subtract bootarea size from blk, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 15/22] sd: emmc: Update CID structure for eMMC, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 02/22] sd: sd: Remove usage of tabs in the file, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 10/22] sd: emmc: support idle state in CMD2, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 08/22] sd: emmc: Dont not update CARD_CAPACITY for eMMC cards, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 05/22] sd: emmc: Add support for EXT_CSD & CSD for eMMC, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 12/22] sd: emmc: add CMD21 tuning sequence,
Sai Pavan Boddu <=
- [PATCH v2 22/22] docs: arm: xlnx-versal-virt: Add eMMC support documentation, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 14/22] sd: emmc: Add support for emmc erase, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 19/22] sd: sdhci: Support eMMC devices, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 11/22] sd: emmc: Add mmc switch function support, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 06/22] sd: emmc: Update CMD8 to send EXT_CSD register, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 17/22] sd: emmc: Support boot area in emmc image, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 21/22] docs: devel: emmc: Add a doc for emmc card emulation, Sai Pavan Boddu, 2021/02/22
- [PATCH v2 20/22] arm: xlnx-versal: Add emmc to versal, Sai Pavan Boddu, 2021/02/22