mirror of https://github.com/xqemu/xqemu.git
sdhci: Implement DeviceClass reset
The sdhci device was missing a DeviceClass reset method; implement it. Poweron reset looks the same as reset commanded by the guest via the device registers, apart from modelling of the rpi 'pending insert interrupt on powerup' quirk. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Andrew Baumann <Andrew.Baumann@microsoft.com> Message-id: 1456493044-10025-3-git-send-email-peter.maydell@linaro.org
This commit is contained in:
parent
0719e71e52
commit
8b41c30525
|
@ -207,6 +207,21 @@ static void sdhci_reset(SDHCIState *s)
|
||||||
s->pending_insert_state = false;
|
s->pending_insert_state = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void sdhci_poweron_reset(DeviceState *dev)
|
||||||
|
{
|
||||||
|
/* QOM (ie power-on) reset. This is identical to reset
|
||||||
|
* commanded via device register apart from handling of the
|
||||||
|
* 'pending insert on powerup' quirk.
|
||||||
|
*/
|
||||||
|
SDHCIState *s = (SDHCIState *)dev;
|
||||||
|
|
||||||
|
sdhci_reset(s);
|
||||||
|
|
||||||
|
if (s->pending_insert_quirk) {
|
||||||
|
s->pending_insert_state = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void sdhci_data_transfer(void *opaque);
|
static void sdhci_data_transfer(void *opaque);
|
||||||
|
|
||||||
static void sdhci_send_command(SDHCIState *s)
|
static void sdhci_send_command(SDHCIState *s)
|
||||||
|
@ -1290,6 +1305,7 @@ static void sdhci_pci_class_init(ObjectClass *klass, void *data)
|
||||||
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
|
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
|
||||||
dc->vmsd = &sdhci_vmstate;
|
dc->vmsd = &sdhci_vmstate;
|
||||||
dc->props = sdhci_pci_properties;
|
dc->props = sdhci_pci_properties;
|
||||||
|
dc->reset = sdhci_poweron_reset;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo sdhci_pci_info = {
|
static const TypeInfo sdhci_pci_info = {
|
||||||
|
@ -1332,10 +1348,6 @@ static void sdhci_sysbus_realize(DeviceState *dev, Error ** errp)
|
||||||
memory_region_init_io(&s->iomem, OBJECT(s), &sdhci_mmio_ops, s, "sdhci",
|
memory_region_init_io(&s->iomem, OBJECT(s), &sdhci_mmio_ops, s, "sdhci",
|
||||||
SDHC_REGISTERS_MAP_SIZE);
|
SDHC_REGISTERS_MAP_SIZE);
|
||||||
sysbus_init_mmio(sbd, &s->iomem);
|
sysbus_init_mmio(sbd, &s->iomem);
|
||||||
|
|
||||||
if (s->pending_insert_quirk) {
|
|
||||||
s->pending_insert_state = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sdhci_sysbus_class_init(ObjectClass *klass, void *data)
|
static void sdhci_sysbus_class_init(ObjectClass *klass, void *data)
|
||||||
|
@ -1345,6 +1357,7 @@ static void sdhci_sysbus_class_init(ObjectClass *klass, void *data)
|
||||||
dc->vmsd = &sdhci_vmstate;
|
dc->vmsd = &sdhci_vmstate;
|
||||||
dc->props = sdhci_sysbus_properties;
|
dc->props = sdhci_sysbus_properties;
|
||||||
dc->realize = sdhci_sysbus_realize;
|
dc->realize = sdhci_sysbus_realize;
|
||||||
|
dc->reset = sdhci_poweron_reset;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo sdhci_sysbus_info = {
|
static const TypeInfo sdhci_sysbus_info = {
|
||||||
|
|
Loading…
Reference in New Issue