|
@@ -148,6 +148,7 @@ static void aspeed_sdhci_realize(DeviceState *dev, Error **errp)
|
|
|
{
|
|
|
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
|
|
|
AspeedSDHCIState *sdhci = ASPEED_SDHCI(dev);
|
|
|
+ AspeedSDHCIClass *asc = ASPEED_SDHCI_GET_CLASS(sdhci);
|
|
|
|
|
|
/* Create input irqs for the slots */
|
|
|
qdev_init_gpio_in_named_with_opaque(DEVICE(sbd), aspeed_sdhci_set_irq,
|
|
@@ -167,7 +168,7 @@ static void aspeed_sdhci_realize(DeviceState *dev, Error **errp)
|
|
|
}
|
|
|
|
|
|
if (!object_property_set_uint(sdhci_slot, "capareg",
|
|
|
- ASPEED_SDHCI_CAPABILITIES, errp)) {
|
|
|
+ asc->capareg, errp)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -218,12 +219,56 @@ static void aspeed_sdhci_class_init(ObjectClass *classp, void *data)
|
|
|
device_class_set_props(dc, aspeed_sdhci_properties);
|
|
|
}
|
|
|
|
|
|
+static void aspeed_2400_sdhci_class_init(ObjectClass *klass, void *data)
|
|
|
+{
|
|
|
+ DeviceClass *dc = DEVICE_CLASS(klass);
|
|
|
+ AspeedSDHCIClass *asc = ASPEED_SDHCI_CLASS(klass);
|
|
|
+
|
|
|
+ dc->desc = "ASPEED 2400 SDHCI Controller";
|
|
|
+ asc->capareg = 0x0000000001e80080;
|
|
|
+}
|
|
|
+
|
|
|
+static void aspeed_2500_sdhci_class_init(ObjectClass *klass, void *data)
|
|
|
+{
|
|
|
+ DeviceClass *dc = DEVICE_CLASS(klass);
|
|
|
+ AspeedSDHCIClass *asc = ASPEED_SDHCI_CLASS(klass);
|
|
|
+
|
|
|
+ dc->desc = "ASPEED 2500 SDHCI Controller";
|
|
|
+ asc->capareg = 0x0000000001e80080;
|
|
|
+}
|
|
|
+
|
|
|
+static void aspeed_2600_sdhci_class_init(ObjectClass *klass, void *data)
|
|
|
+{
|
|
|
+ DeviceClass *dc = DEVICE_CLASS(klass);
|
|
|
+ AspeedSDHCIClass *asc = ASPEED_SDHCI_CLASS(klass);
|
|
|
+
|
|
|
+ dc->desc = "ASPEED 2600 SDHCI Controller";
|
|
|
+ asc->capareg = 0x0000000701f80080;
|
|
|
+}
|
|
|
+
|
|
|
static const TypeInfo aspeed_sdhci_types[] = {
|
|
|
{
|
|
|
.name = TYPE_ASPEED_SDHCI,
|
|
|
.parent = TYPE_SYS_BUS_DEVICE,
|
|
|
.instance_size = sizeof(AspeedSDHCIState),
|
|
|
.class_init = aspeed_sdhci_class_init,
|
|
|
+ .class_size = sizeof(AspeedSDHCIClass),
|
|
|
+ .abstract = true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = TYPE_ASPEED_2400_SDHCI,
|
|
|
+ .parent = TYPE_ASPEED_SDHCI,
|
|
|
+ .class_init = aspeed_2400_sdhci_class_init,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = TYPE_ASPEED_2500_SDHCI,
|
|
|
+ .parent = TYPE_ASPEED_SDHCI,
|
|
|
+ .class_init = aspeed_2500_sdhci_class_init,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = TYPE_ASPEED_2600_SDHCI,
|
|
|
+ .parent = TYPE_ASPEED_SDHCI,
|
|
|
+ .class_init = aspeed_2600_sdhci_class_init,
|
|
|
},
|
|
|
};
|
|
|
|