qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH 11/17] hw/sd: Add eMMC support


From: Philippe Mathieu-Daudé
Subject: Re: [RFC PATCH 11/17] hw/sd: Add eMMC support
Date: Mon, 30 May 2022 20:29:32 +0200
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.9.1

On 18/3/22 14:28, Cédric Le Goater wrote:
The initial eMMC support from Vincent Palatin was largely reworked to
match the current SD framework. The parameters mimick a real 4GB eMMC,
but it can be set to various sizes.

This adds a new QOM object class for EMMC devices.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
Link: 
https://lore.kernel.org/r/1311635951-11047-5-git-send-email-vpalatin@chromium.org
[ jms: - Forward ported to QEMU 5.2 ]
Signed-off-by: Joel Stanley <joel@jms.id.au>
[ clg: - ported on aspeed-7.0 patchset
        - HPI activation ]
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
  hw/sd/sdmmc-internal.h |  97 +++++++++++++++++++
  include/hw/sd/sd.h     |   9 ++
  hw/sd/sd.c             | 205 ++++++++++++++++++++++++++++++++++++++++-
  hw/sd/sdmmc-internal.c |   2 +-
  4 files changed, 311 insertions(+), 2 deletions(-)

  static void sd_instance_init(Object *obj)
  {
      SDState *sd = SD_CARD(obj);
@@ -2162,10 +2338,19 @@ static void sd_instance_finalize(Object *obj)
  static void sd_realize(DeviceState *dev, Error **errp)
  {
      SDState *sd = SD_CARD(dev);
+    SDCardClass *sc = SD_CARD_GET_CLASS(sd);
      int ret;
sd->proto = sd->spi ? &sd_proto_spi : &sd_proto_sd; + if (sc->proto) {
+        sd->proto = sc->proto;
+    }
+
+    if (sc->spec_version) {
+        sd->spec_version = sc->spec_version;
+    }
+
      switch (sd->spec_version) {
      case SD_PHY_SPECv1_10_VERS
       ... SD_PHY_SPECv3_01_VERS:


Instead I'd use:

-- >8 --
@@ -2301,14 +2297,26 @@ static const TypeInfo sd_info = {
     .instance_finalize = sd_instance_finalize,
 };

+static void emmc_realize(DeviceState *dev, Error **errp)
+{
+    SDState *sd = SD_CARD(dev);
+
+    if (sd->spec_version < SD_PHY_SPECv3_01_VERS) {
+            error_setg(errp, "Minimum spec for eMMC is v3.01");
+            return;
+    }
+
+    sd_realize(dev, errp);
+}
+
 static void emmc_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
     SDCardClass *sc = SD_CARD_CLASS(klass);

     dc->desc = "eMMC";
+    dc->realize = emmc_realize;
     sc->proto = &sd_proto_emmc;
 }

---





reply via email to

[Prev in Thread] Current Thread [Next in Thread]