diff mbox series

[2/4] hw/sd/milkymist-memcard: Reset SD card on controller reset

Message ID 1515506513-31961-3-git-send-email-peter.maydell@linaro.org
State Accepted
Commit 16bf0e0e7aaa8efc0b8ee7e2aecb2fa235f82d38
Headers show
Series Reset SD cards attached to legacy-API controllers | expand

Commit Message

Peter Maydell Jan. 9, 2018, 2:01 p.m. UTC
Since pl181 is still using the legacy SD card API, the SD
card created by sd_init() is not plugged into any bus. This
means that the controller has to reset it manually.

Failing to do this mostly didn't affect the guest since the
guest typically does a programmed SD card reset as part of
its SD controller driver initialization, but meant that
migration failed because it's only in sd_reset() that we
set up the wpgrps_size field.

Cc: qemu-stable@nongnu.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

---
 hw/sd/milkymist-memcard.c | 4 ++++
 1 file changed, 4 insertions(+)

-- 
2.7.4

Comments

Philippe Mathieu-Daudé Jan. 9, 2018, 4:08 p.m. UTC | #1
Hi Peter,

On 01/09/2018 11:01 AM, Peter Maydell wrote:
> Since pl181 is still using the legacy SD card API, the SD


pl181 -> milkymist-memcard ;)

> card created by sd_init() is not plugged into any bus. This

> means that the controller has to reset it manually.

> 

> Failing to do this mostly didn't affect the guest since the

> guest typically does a programmed SD card reset as part of

> its SD controller driver initialization, but meant that

> migration failed because it's only in sd_reset() that we

> set up the wpgrps_size field.

> 

> Cc: qemu-stable@nongnu.org

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

> ---

>  hw/sd/milkymist-memcard.c | 4 ++++

>  1 file changed, 4 insertions(+)

> 

> diff --git a/hw/sd/milkymist-memcard.c b/hw/sd/milkymist-memcard.c

> index 4008c81..341da88 100644

> --- a/hw/sd/milkymist-memcard.c

> +++ b/hw/sd/milkymist-memcard.c

> @@ -248,6 +248,10 @@ static void milkymist_memcard_reset(DeviceState *d)

>      for (i = 0; i < R_MAX; i++) {

>          s->regs[i] = 0;

>      }

> +    /* Since we're still using the legacy SD API the card is not plugged

> +     * into any bus, and we must reset it manually.

> +     */

> +    device_reset(DEVICE(s->card));

>  }

>  

>  static int milkymist_memcard_init(SysBusDevice *dev)

>
diff mbox series

Patch

diff --git a/hw/sd/milkymist-memcard.c b/hw/sd/milkymist-memcard.c
index 4008c81..341da88 100644
--- a/hw/sd/milkymist-memcard.c
+++ b/hw/sd/milkymist-memcard.c
@@ -248,6 +248,10 @@  static void milkymist_memcard_reset(DeviceState *d)
     for (i = 0; i < R_MAX; i++) {
         s->regs[i] = 0;
     }
+    /* Since we're still using the legacy SD API the card is not plugged
+     * into any bus, and we must reset it manually.
+     */
+    device_reset(DEVICE(s->card));
 }
 
 static int milkymist_memcard_init(SysBusDevice *dev)