On 6/13/24 12:49 AM, Philippe Mathieu-Daudé wrote:
On 3/7/23 15:24, Cédric Le Goater wrote:
From: Sai Pavan Boddu <sai.pavan.bo...@xilinx.com>
switch operation in mmc cards, updated the ext_csd register to
request changes in card operations. Here we implement similar
sequence but requests are mostly dummy and make no change.
Implement SWITCH_ERROR if the write operation offset goes beyond length
of ext_csd.
Signed-off-by: Sai Pavan Boddu <sai.pavan.bo...@xilinx.com>
Signed-off-by: Edgar E. Iglesias <edgar.igles...@xilinx.com>
[ clg: - ported on SDProto framework ]
Signed-off-by: Cédric Le Goater <c...@kaod.org>
---
hw/sd/sd.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
+static void mmc_function_switch(SDState *sd, uint32_t arg)
+{
+ uint32_t access = extract32(arg, 24, 2);
+ uint32_t index = extract32(arg, 16, 8);
+ uint32_t value = extract32(arg, 8, 8);
+ uint8_t b = sd->ext_csd[index];
This field is added in the next patch :)
../../hw/sd/sd.c:927:21: error: no member named 'ext_csd' in 'struct SDState'
uint8_t b = sd->ext_csd[index];
~~ ^
../../hw/sd/sd.c:949:9: error: no member named 'ext_csd' in 'struct SDState'
sd->ext_csd[index] = b;
~~ ^
No need to respin, as I'm integrating your work.
Ah good !
There are 3 main parts :
* Base eMMC support:
hw/sd: Basis for eMMC support
hw/sd: Add emmc_cmd_SEND_OP_CMD() handler
hw/sd: Add emmc_cmd_ALL_SEND_CID() handler
hw/sd: Add emmc_cmd_SET_RELATIVE_ADDR() handler
hw/sd: Add emmc_cmd_APP_CMD() handler
hw/sd: add emmc_cmd_SEND_TUNING_BLOCK() handler
hw/sd: Add CMD21 tuning sequence
hw/sd: Add mmc switch function support
hw/sd: Add emmc_cmd_SEND_EXT_CSD() handler
* Boot area support
hw/sd: Support boot area in emmc image
hw/sd: Subtract bootarea size from blk
hw/sd: Add boot config support
hw/sd: Fix SET_BLOCK_COUNT command argument
hw/sd: Update CMD1 definition for MMC
* Aspeed eMMC support :
hw/arm/aspeed: Add eMMC device
hw/arm/aspeed: Load eMMC first boot area as a boot rom
hw/arm/aspeed: Set boot device to emmc
aspeed: Set bootconfig
aspeed: Introduce a 'boot-emmc' property for AST2600 based machines
and I can rework the aspeed part if needed.
Here is an image you can try boot on :
https://www.kaod.org/qemu/aspeed/rainier/mmc-p10bmc.qcow2
Run with :
qemu-system-arm -M rainier-bmc -net nic,netdev=net0 -netdev user,id=net0
-drive file=./mmc-p10bmc.qcow2,format=qcow2,if=sd,id=sd2,index=2 -nographic
-serial mon:stdio
Thanks,
C.
+ switch (access) {
+ case MMC_CMD6_ACCESS_COMMAND_SET:
+ qemu_log_mask(LOG_UNIMP, "MMC Command set switching not supported\n");
+ return;
+ case MMC_CMD6_ACCESS_SET_BITS:
+ b |= value;
+ break;
+ case MMC_CMD6_ACCESS_CLEAR_BITS:
+ b &= ~value;
+ break;
+ case MMC_CMD6_ACCESS_WRITE_BYTE:
+ b = value;
+ break;
+ }
+
+ if (index >= 192) {
+ sd->card_status |= R_CSR_SWITCH_ERROR_MASK;
+ return;
+ }
+
+ sd->ext_csd[index] = b;
+}