[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 16/21] sd: emmc: Support boot area in emmc image
From: |
Sai Pavan Boddu |
Subject: |
[PATCH v3 16/21] sd: emmc: Support boot area in emmc image |
Date: |
Mon, 1 Mar 2021 01:03:22 +0530 |
From: Joel Stanley <joel@jms.id.au>
This assumes a specially constructued image:
dd if=/dev/zero of=mmc-bootarea.img count=2 bs=1M
dd if=u-boot-spl.bin of=mmc-bootarea.img conv=notrunc
dd if=u-boot.bin of=mmc-bootarea.img conv=notrunc count=64 bs=1K
cat mmc-bootarea.img obmc-phosphor-image.wic > mmc.img
truncate --size 16GB mmc.img
truncate --size 128MB mmc-bootarea.img
Signed-off-by: Joel Stanley <joel@jms.id.au>
[clg: - changes on the definition names ]
Signed-off-by: Cédric Le Goater <clg@kaod.org>
[spb: use data_start property to access right emmc partition,
Clean up PARTITION_ENABLE support as incomplete,
Fix commit message to be generic.]
Signed-off-by: Sai Pavan Boddu <sai.pavan.boddu@xilinx.com>
---
hw/sd/sd.c | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
index 08b77ad..d311477 100644
--- a/hw/sd/sd.c
+++ b/hw/sd/sd.c
@@ -1044,6 +1044,34 @@ static void sd_lock_command(SDState *sd)
sd->card_status &= ~CARD_IS_LOCKED;
}
+/*
+ * This requires a disk image that has two boot partitions inserted at the
+ * beginning of it. The size of the boot partitions are configured in the
+ * ext_csd structure, which is hardcoded in qemu. They are currently set to
+ * 1MB each.
+ */
+static uint32_t sd_bootpart_offset(SDState *sd)
+{
+ unsigned int access = sd->ext_csd[EXT_CSD_PART_CONFIG] &
+ EXT_CSD_PART_CONFIG_ACC_MASK;
+ unsigned int boot_capacity = sd->ext_csd[EXT_CSD_BOOT_MULT] << 17;
+
+ if (!sd->emmc) {
+ return 0;
+ }
+
+ switch (access) {
+ case EXT_CSD_PART_CONFIG_ACC_DEFAULT:
+ return boot_capacity * 2;
+ case EXT_CSD_PART_CONFIG_ACC_BOOT0:
+ return 0;
+ case EXT_CSD_PART_CONFIG_ACC_BOOT0 + 1:
+ return boot_capacity * 1;
+ default:
+ g_assert_not_reached();
+ }
+}
+
static sd_rsp_type_t sd_normal_command(SDState *sd, SDRequest req)
{
uint32_t rca = 0x0000;
@@ -1359,6 +1387,9 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,
SDRequest req)
return sd_r1;
}
+ if (sd->emmc) {
+ addr += sd_bootpart_offset(sd);
+ }
sd->state = sd_sendingdata_state;
sd->data_start = addr;
sd->data_offset = 0;
@@ -1378,6 +1409,9 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,
SDRequest req)
return sd_r1;
}
+ if (sd->emmc) {
+ addr += sd_bootpart_offset(sd);
+ }
sd->state = sd_sendingdata_state;
sd->data_start = addr;
sd->data_offset = 0;
@@ -1434,6 +1468,9 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,
SDRequest req)
return sd_r1;
}
+ if (sd->emmc) {
+ addr += sd_bootpart_offset(sd);
+ }
sd->state = sd_receivingdata_state;
sd->data_start = addr;
sd->data_offset = 0;
@@ -1464,6 +1501,9 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,
SDRequest req)
return sd_r1;
}
+ if (sd->emmc) {
+ addr += sd_bootpart_offset(sd);
+ }
sd->state = sd_receivingdata_state;
sd->data_start = addr;
sd->data_offset = 0;
--
2.7.4
- [PATCH v3 13/21] sd: emmc: Make ACMD41 illegal for mmc, (continued)
- [PATCH v3 13/21] sd: emmc: Make ACMD41 illegal for mmc, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 20/21] docs: devel: emmc: Add a doc for emmc card emulation, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 17/21] sd: emmc: Subtract bootarea size from blk, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 21/21] docs: arm: xlnx-versal-virt: Add eMMC support documentation, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 15/21] sd: emmc: Update CID structure for eMMC, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 11/21] sd: emmc: Add mmc switch function support, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 05/21] sd: emmc: Add support for EXT_CSD & CSD for eMMC, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 01/21] sd: sd: Remove usage of tabs in the file, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 12/21] sd: emmc: add CMD21 tuning sequence, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 06/21] sd: emmc: Update CMD8 to send EXT_CSD register, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 16/21] sd: emmc: Support boot area in emmc image,
Sai Pavan Boddu <=
- [PATCH v3 10/21] sd: emmc: support idle state in CMD2, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 14/21] sd: emmc: Add support for emmc erase, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 19/21] arm: xlnx-versal: Add emmc to versal, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 18/21] sd: sdhci: Support eMMC devices, Sai Pavan Boddu, 2021/02/28
- [PATCH v3 04/21] sd: emmc: update OCR fields for eMMC, Sai Pavan Boddu, 2021/02/28