Message ID | 1456493044-10025-3-git-send-email-peter.maydell@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> From: Peter Maydell [mailto:peter.maydell@linaro.org] > Sent: Friday, 26 February 2016 5:24 AM > > 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> > --- > hw/sd/sdhci.c | 21 +++++++++++++++++---- > 1 file changed, 17 insertions(+), 4 deletions(-) > > diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c > index e087c17..d28b587 100644 > --- a/hw/sd/sdhci.c > +++ b/hw/sd/sdhci.c > @@ -207,6 +207,21 @@ static void sdhci_reset(SDHCIState *s) > 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_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); > dc->vmsd = &sdhci_vmstate; > dc->props = sdhci_pci_properties; > + dc->reset = sdhci_poweron_reset; > } > > 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", > SDHC_REGISTERS_MAP_SIZE); > 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) > @@ -1345,6 +1357,7 @@ static void sdhci_sysbus_class_init(ObjectClass > *klass, void *data) > dc->vmsd = &sdhci_vmstate; > dc->props = sdhci_sysbus_properties; > dc->realize = sdhci_sysbus_realize; > + dc->reset = sdhci_poweron_reset; > } > > static const TypeInfo sdhci_sysbus_info = { Not tested, but the handling of the Pi quirk looks good to me, and it's trivial. Reviewed-by: Andrew Baumann <Andrew.Baumann@microsoft.com> BTW, now that you've done this, we could unify sdhci_pci_properties and sdhci_sysbus_properties. Let me know if you'd like a patch for that. Cheers, Andrew
diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index e087c17..d28b587 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -207,6 +207,21 @@ static void sdhci_reset(SDHCIState *s) 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_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); dc->vmsd = &sdhci_vmstate; dc->props = sdhci_pci_properties; + dc->reset = sdhci_poweron_reset; } 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", SDHC_REGISTERS_MAP_SIZE); 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) @@ -1345,6 +1357,7 @@ static void sdhci_sysbus_class_init(ObjectClass *klass, void *data) dc->vmsd = &sdhci_vmstate; dc->props = sdhci_sysbus_properties; dc->realize = sdhci_sysbus_realize; + dc->reset = sdhci_poweron_reset; } static const TypeInfo sdhci_sysbus_info = {
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> --- hw/sd/sdhci.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-)