qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PULL 0/3] Ide patches
@ 2020-10-27 14:42 John Snow
  2020-10-27 14:42 ` [PULL 1/3] ide: run diagnostic after SRST John Snow
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: John Snow @ 2020-10-27 14:42 UTC (permalink / raw)
  To: Peter Maydell, qemu-devel; +Cc: John Snow, qemu-block

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

 hw/ide/core.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

-- 
2.26.2




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [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

end of thread, other threads:[~2020-10-30 14:39 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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 ` [PULL 3/3] ide: clear SRST after SRST finishes John Snow
2020-10-30 14:36 ` [PULL 0/3] Ide patches Peter Maydell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).