From: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
To: qemu-devel@nongnu.org
Cc: "Daniel Henrique Barboza" <dbarboza@ventanamicro.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Bin Meng" <bin.meng@windriver.com>
Subject: [RFC PATCH 2/2] hw/sd: skip double power-up in sd_vmstate_pre_load()
Date: Fri, 20 Jan 2023 09:01:33 -0300 [thread overview]
Message-ID: <20230120120133.666993-3-dbarboza@ventanamicro.com> (raw)
In-Reply-To: <20230120120133.666993-1-dbarboza@ventanamicro.com>
At this moment any migration with the RISC-V sifive_u machine
fails with the following error:
qemu-system-riscv64: ../hw/sd/sd.c:297: sd_ocr_powerup: Assertion
`!FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP)' failed.
The assert was introduced by dd26eb43337a ("hw/sd: model a power-up
delay, as a workaround for an EDK2 bug"). It introduced a delayed timer
of 0.5ms to power up the card after the first ACMD41 command. The assert
prevents the card from being turned on twice.
When migrating a machine that uses a sd card, e.g. RISC-V sifive_u, the
card is turned on during machine_init() in both source and destination
hosts. When the migration stream finishes in the destination, the
pre_load() hook will attempt to turn on the card before loading its
vmstate. The assert() is always going to hit because the card was
already on.
Change sd_vmstate_pre_load() to check first if the sd card is turned on
before executing a sd_ocr_powerup() and triggering the assert.
Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
---
hw/sd/sd.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
index bd88c1a8f0..4add719643 100644
--- a/hw/sd/sd.c
+++ b/hw/sd/sd.c
@@ -664,11 +664,19 @@ static int sd_vmstate_pre_load(void *opaque)
{
SDState *sd = opaque;
- /* If the OCR state is not included (prior versions, or not
+ /*
+ * If the OCR state is not included (prior versions, or not
* needed), then the OCR must be set as powered up. If the OCR state
* is included, this will be replaced by the state restore.
+ *
+ * However, there's a chance that the board will powerup the SD
+ * before reaching INMIGRATE state in the destination host.
+ * Powering up the SD again in this case will cause an assert
+ * inside sd_ocr_powerup(). Skip sd_ocr_powerup() in this case.
*/
- sd_ocr_powerup(sd);
+ if (!sd_card_powered_up(sd)) {
+ sd_ocr_powerup(sd);
+ }
return 0;
}
--
2.39.0
next prev parent reply other threads:[~2023-01-20 12:03 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-20 12:01 [RFC PATCH 0/2] fix SD card migration Daniel Henrique Barboza
2023-01-20 12:01 ` [RFC PATCH 1/2] hw/sd/sd.c: add sd_card_powered_up() Daniel Henrique Barboza
2023-01-20 12:01 ` Daniel Henrique Barboza [this message]
2023-01-20 12:38 ` [RFC PATCH 2/2] hw/sd: skip double power-up in sd_vmstate_pre_load() Philippe Mathieu-Daudé
2023-01-23 12:09 ` Dr. David Alan Gilbert
2023-02-01 20:52 ` Juan Quintela
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230120120133.666993-3-dbarboza@ventanamicro.com \
--to=dbarboza@ventanamicro.com \
--cc=bin.meng@windriver.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.