* [PULL 1/3] ide: run diagnostic after SRST
2020-10-27 14:42 [PULL 0/3] Ide patches John Snow
@ 2020-10-27 14:42 ` John Snow
2020-10-27 14:42 ` [PULL 2/3] ide: perform SRST as early as possible John Snow
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: John Snow @ 2020-10-27 14:42 UTC (permalink / raw)
To: Peter Maydell, qemu-devel; +Cc: Mark Cave-Ayland, John Snow, qemu-block
Software reset (SRST) should cause the diagnostic command to be run. Make an
explicit call to that routine.
Reported-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20201020200242.1497705-2-jsnow@redhat.com
Fixes: 55adb3c45620c31f29978f209e2a44a08d34e2da
Fixes: https://bugs.launchpad.net/bugs/1900155
Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: John Snow <jsnow@redhat.com>
---
hw/ide/core.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/hw/ide/core.c b/hw/ide/core.c
index 693b352d5ebe..84e887d4269d 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -2254,10 +2254,8 @@ static void ide_perform_srst(IDEState *s)
/* Cancel PIO callback, reset registers/signature, etc */
ide_reset(s);
- if (s->drive_kind == IDE_CD) {
- /* ATAPI drives do not set READY or SEEK */
- s->status = 0x00;
- }
+ /* perform diagnostic */
+ cmd_exec_dev_diagnostic(s, WIN_DIAGNOSE);
}
static void ide_bus_perform_srst(void *opaque)
--
2.26.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PULL 2/3] ide: perform SRST as early as possible
2020-10-27 14:42 [PULL 0/3] Ide patches John Snow
2020-10-27 14:42 ` [PULL 1/3] ide: run diagnostic after SRST John Snow
@ 2020-10-27 14:42 ` John Snow
2020-10-27 14:42 ` [PULL 3/3] ide: clear SRST after SRST finishes John Snow
2020-10-30 14:36 ` [PULL 0/3] Ide patches Peter Maydell
3 siblings, 0 replies; 5+ messages in thread
From: John Snow @ 2020-10-27 14:42 UTC (permalink / raw)
To: Peter Maydell, qemu-devel; +Cc: Mark Cave-Ayland, John Snow, qemu-block
We don't need to wait for the falling edge. We can set BSY as
soon as possible and begin immediately resetting the drive. Devices
don't appear to need to take any specific action on the falling edge.
Signed-off-by: John Snow <jsnow@redhat.com>
Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Message-id: 20201020200242.1497705-3-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
---
hw/ide/core.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/hw/ide/core.c b/hw/ide/core.c
index 84e887d4269d..98cea7ad4507 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -2280,9 +2280,7 @@ void ide_ctrl_write(void *opaque, uint32_t addr, uint32_t val)
/* Device0 and Device1 each have their own control register,
* but QEMU models it as just one register in the controller. */
- if ((bus->cmd & IDE_CTRL_RESET) &&
- !(val & IDE_CTRL_RESET)) {
- /* SRST triggers on falling edge */
+ if (!(bus->cmd & IDE_CTRL_RESET) && (val & IDE_CTRL_RESET)) {
for (i = 0; i < 2; i++) {
s = &bus->ifs[i];
s->status |= BUSY_STAT;
--
2.26.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PULL 3/3] ide: clear SRST after SRST finishes
2020-10-27 14:42 [PULL 0/3] Ide patches John Snow
2020-10-27 14:42 ` [PULL 1/3] ide: run diagnostic after SRST John Snow
2020-10-27 14:42 ` [PULL 2/3] ide: perform SRST as early as possible John Snow
@ 2020-10-27 14:42 ` John Snow
2020-10-30 14:36 ` [PULL 0/3] Ide patches Peter Maydell
3 siblings, 0 replies; 5+ messages in thread
From: John Snow @ 2020-10-27 14:42 UTC (permalink / raw)
To: Peter Maydell, qemu-devel; +Cc: Mark Cave-Ayland, John Snow, qemu-block
The SRST protocol states that after diagnostics are complete and the
status is posted, we should clear the SRST bit if it should so happen to
be set.
The reset method itself should handle this, but just in case -- make our
intention explicit here.
Signed-off-by: John Snow <jsnow@redhat.com>
Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Message-id: 20201020200242.1497705-4-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
---
hw/ide/core.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/hw/ide/core.c b/hw/ide/core.c
index 98cea7ad4507..e85821637c96 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -2268,6 +2268,8 @@ static void ide_bus_perform_srst(void *opaque)
s = &bus->ifs[i];
ide_perform_srst(s);
}
+
+ bus->cmd &= ~IDE_CTRL_RESET;
}
void ide_ctrl_write(void *opaque, uint32_t addr, uint32_t val)
--
2.26.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PULL 0/3] Ide patches
2020-10-27 14:42 [PULL 0/3] Ide patches John Snow
` (2 preceding siblings ...)
2020-10-27 14:42 ` [PULL 3/3] ide: clear SRST after SRST finishes John Snow
@ 2020-10-30 14:36 ` Peter Maydell
3 siblings, 0 replies; 5+ messages in thread
From: Peter Maydell @ 2020-10-30 14:36 UTC (permalink / raw)
To: John Snow; +Cc: QEMU Developers, Qemu-block
On Tue, 27 Oct 2020 at 14:43, John Snow <jsnow@redhat.com> wrote:
>
> The following changes since commit a95e0396c805735c491a049b01de6f5a713fb91b:
>
> Merge remote-tracking branch 'remotes/bonzini-gitlab/tags/for-upstream' into staging (2020-10-26 15:49:11 +0000)
>
> are available in the Git repository at:
>
> https://gitlab.com/jsnow/qemu.git tags/ide-pull-request
>
> for you to fetch changes up to 1a9925e3390b6adf1125e3abaa17c80ca012bede:
>
> ide: clear SRST after SRST finishes (2020-10-27 10:39:06 -0400)
>
> ----------------------------------------------------------------
> IDE Pull request
>
> ----------------------------------------------------------------
>
> John Snow (3):
> ide: run diagnostic after SRST
> ide: perform SRST as early as possible
> ide: clear SRST after SRST finishes
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/5.2
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 5+ messages in thread