[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v47 13/19] hw/sd/sdcard: Migrate ExtCSD 'modes' register
From: |
Philippe Mathieu-Daudé |
Subject: |
[PATCH v47 13/19] hw/sd/sdcard: Migrate ExtCSD 'modes' register |
Date: |
Tue, 9 Jul 2024 17:25:50 +0200 |
Spec v4.3, chapter 8.4 "Extended CSD register":
The Extended CSD register defines the card properties
and selected modes. It is 512 bytes long. The most
significant 320 bytes are the Properties segment, which
defines the card capabilities and cannot be modified by
the host. The lower 192 bytes are the Modes segment,
which defines the configuration the card is working in.
Only migrate the Modes segment (192 lower bytes).
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/sd/sd.c | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
index 2a687977d1..a391f12b2a 100644
--- a/hw/sd/sd.c
+++ b/hw/sd/sd.c
@@ -124,7 +124,13 @@ struct SDState {
uint16_t rca;
uint32_t card_status;
uint8_t sd_status[64];
- uint8_t ext_csd[512];
+ union {
+ uint8_t ext_csd[512];
+ struct {
+ uint8_t ext_csd_rw[192]; /* Modes segment */
+ uint8_t ext_csd_ro[320]; /* Properties segment */
+ };
+ };
/* Static properties */
@@ -881,6 +887,24 @@ static const VMStateDescription sd_ocr_vmstate = {
},
};
+static bool vmstate_needed_for_emmc(void *opaque)
+{
+ SDState *sd = opaque;
+
+ return sd_is_emmc(sd);
+}
+
+static const VMStateDescription emmc_extcsd_vmstate = {
+ .name = "sd-card/ext_csd_modes-state",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .needed = vmstate_needed_for_emmc,
+ .fields = (const VMStateField[]) {
+ VMSTATE_UINT8_ARRAY(ext_csd_rw, SDState, 192),
+ VMSTATE_END_OF_LIST()
+ },
+};
+
static int sd_vmstate_pre_load(void *opaque)
{
SDState *sd = opaque;
@@ -928,6 +952,7 @@ static const VMStateDescription sd_vmstate = {
},
.subsections = (const VMStateDescription * const []) {
&sd_ocr_vmstate,
+ &emmc_extcsd_vmstate,
NULL
},
};
--
2.41.0
- [PATCH v47 06/19] hw/sd/sdcard: Add emmc_cmd_SET_RELATIVE_ADDR handler (CMD3), (continued)
- [PATCH v47 06/19] hw/sd/sdcard: Add emmc_cmd_SET_RELATIVE_ADDR handler (CMD3), Philippe Mathieu-Daudé, 2024/07/09
- [PATCH v47 08/19] hw/sd/sdcard: Add mmc_cmd_PROGRAM_CID handler (CMD26), Philippe Mathieu-Daudé, 2024/07/09
- [PATCH v47 09/19] hw/sd/sdcard: Implement eMMC sleep state (CMD5), Philippe Mathieu-Daudé, 2024/07/09
- [PATCH v47 07/19] hw/sd/sdcard: Fix SET_BLOCK_COUNT command argument on eMMC (CMD23), Philippe Mathieu-Daudé, 2024/07/09
- [PATCH v47 10/19] hw/sd/sdcard: Add emmc_cmd_SEND_EXT_CSD handler (CMD8), Philippe Mathieu-Daudé, 2024/07/09
- [PATCH v47 11/19] hw/sd/sdcard: Add eMMC 'boot-size' property, Philippe Mathieu-Daudé, 2024/07/09
- [PATCH v47 12/19] hw/sd/sdcard: Simplify EXT_CSD values for spec v4.3, Philippe Mathieu-Daudé, 2024/07/09
- [PATCH v47 13/19] hw/sd/sdcard: Migrate ExtCSD 'modes' register,
Philippe Mathieu-Daudé <=
- [PATCH v47 14/19] hw/sd/sdcard: Add mmc SWITCH function support (CMD6), Philippe Mathieu-Daudé, 2024/07/09
- [Aspeed PATCH v47 16/19] hw/sd/sdcard: Support boot area in emmc image, Philippe Mathieu-Daudé, 2024/07/09
- [Aspeed PATCH v47 17/19] hw/sd/sdcard: Subtract bootarea size from blk, Philippe Mathieu-Daudé, 2024/07/09
- [PATCH v47 15/19] hw/sd/sdcard: Implement eMMC 'boot-mode', Philippe Mathieu-Daudé, 2024/07/09
- [Aspeed PATCH v47 18/19] hw/sd/sdcard: Add boot config support, Philippe Mathieu-Daudé, 2024/07/09
- [PATCH v47 19/19] hw/sd/sdcard: Enable TYPE_EMMC card model, Philippe Mathieu-Daudé, 2024/07/09