|
@@ -27,6 +27,9 @@
|
|
#include "qemu-common.h"
|
|
#include "qemu-common.h"
|
|
#include "qemu/datadir.h"
|
|
#include "qemu/datadir.h"
|
|
#include "qemu/units.h"
|
|
#include "qemu/units.h"
|
|
|
|
+#include "sysemu/blockdev.h"
|
|
|
|
+#include "sysemu/sysemu.h"
|
|
|
|
+#include "sysemu/block-backend.h"
|
|
|
|
|
|
#define NPCM750_EVB_POWER_ON_STRAPS 0x00001ff7
|
|
#define NPCM750_EVB_POWER_ON_STRAPS 0x00001ff7
|
|
#define QUANTA_GSJ_POWER_ON_STRAPS 0x00001fff
|
|
#define QUANTA_GSJ_POWER_ON_STRAPS 0x00001fff
|
|
@@ -81,6 +84,22 @@ static void npcm7xx_connect_dram(NPCM7xxState *soc, MemoryRegion *dram)
|
|
&error_abort);
|
|
&error_abort);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void sdhci_attach_drive(SDHCIState *sdhci)
|
|
|
|
+{
|
|
|
|
+ DriveInfo *di = drive_get_next(IF_SD);
|
|
|
|
+ BlockBackend *blk = di ? blk_by_legacy_dinfo(di) : NULL;
|
|
|
|
+
|
|
|
|
+ BusState *bus = qdev_get_child_bus(DEVICE(sdhci), "sd-bus");
|
|
|
|
+ if (bus == NULL) {
|
|
|
|
+ error_report("No SD bus found in SOC object");
|
|
|
|
+ exit(1);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ DeviceState *carddev = qdev_new(TYPE_SD_CARD);
|
|
|
|
+ qdev_prop_set_drive_err(carddev, "drive", blk, &error_fatal);
|
|
|
|
+ qdev_realize_and_unref(carddev, bus, &error_fatal);
|
|
|
|
+}
|
|
|
|
+
|
|
static NPCM7xxState *npcm7xx_create_soc(MachineState *machine,
|
|
static NPCM7xxState *npcm7xx_create_soc(MachineState *machine,
|
|
uint32_t hw_straps)
|
|
uint32_t hw_straps)
|
|
{
|
|
{
|
|
@@ -355,6 +374,7 @@ static void quanta_gbs_init(MachineState *machine)
|
|
drive_get(IF_MTD, 0, 0));
|
|
drive_get(IF_MTD, 0, 0));
|
|
|
|
|
|
quanta_gbs_i2c_init(soc);
|
|
quanta_gbs_i2c_init(soc);
|
|
|
|
+ sdhci_attach_drive(&soc->mmc.sdhci);
|
|
npcm7xx_load_kernel(machine, soc);
|
|
npcm7xx_load_kernel(machine, soc);
|
|
}
|
|
}
|
|
|
|
|