qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alexander Motin <mav@FreeBSD.org>
To: Alexander Graf <agraf@suse.de>
Cc: Kevin Wolf <kwolf@redhat.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] AHCI Port Interrupt Enable register cleaning on soft reset
Date: Mon, 12 Sep 2011 11:19:25 +0300	[thread overview]
Message-ID: <4E6DC08D.3010507@FreeBSD.org> (raw)
In-Reply-To: <A46C481C-1242-4C0B-A870-B2D52D3504A0@suse.de>

Alexander Graf wrote:
> Am 11.09.2011 um 16:43 schrieb Alexander Motin <mav@FreeBSD.org>:
>> I've found that FreeBSD AHCI driver doesn't work with AHCI hardware
>> emulation of QEMU 0.15.0. I believe the problem is on QEMU's side. As I
>> see, it clears port's Interrupt Enable register each time when reset of
>> any level happens. Is is reasonable for the global controller reset. It
>> is probably not good, but acceptable for FreeBSD driver for the port
>> hard reset. But it is IMO wrong for the device soft reset. None of real
>> hardware I know behaves that way.
>>
>> This patch fixes the problem for me:
>> http://people.freebsd.org/~mav/qemu.ahci.patch
> 
> Ah, cool! So FreeBSD works with AHCI using this patch? 

Yes. I haven't done deep testing to guarantee there is no other issues,
but at least disk is properly detected now.

> Please send it again as an inline patch (if really really hard not 100% important) and add a signed-off-by line (very important) to the patch.

OK. Here it is:

Signed-off-by: Alexander Motin <mav@FreeBSD.org>

--- hw/ide/ahci.c.prev	2011-09-11 16:39:53.000000000 +0300
+++ hw/ide/ahci.c	2011-09-11 16:39:48.000000000 +0300
@@ -505,10 +505,7 @@ static void ahci_reset_port(AHCIState *s
     ide_bus_reset(&d->port);
     ide_state->ncq_queues = AHCI_MAX_CMDS;

-    pr->irq_stat = 0;
-    pr->irq_mask = 0;
     pr->scr_stat = 0;
-    pr->scr_ctl = 0;
     pr->scr_err = 0;
     pr->scr_act = 0;
     d->busy_slot = -1;
@@ -1157,12 +1154,17 @@ void ahci_uninit(AHCIState *s)
 void ahci_reset(void *opaque)
 {
     struct AHCIPCIState *d = opaque;
+    AHCIPortRegs *pr;
     int i;

     d->ahci.control_regs.irqstatus = 0;
     d->ahci.control_regs.ghc = 0;

     for (i = 0; i < d->ahci.ports; i++) {
+        pr = &d->ahci.dev[i].port_regs;
+        pr->irq_stat = 0;
+        pr->irq_mask = 0;
+        pr->scr_ctl = 0;
         ahci_reset_port(&d->ahci, i);
     }
 }

-- 
Alexander Motin

  reply	other threads:[~2011-09-12  8:20 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-11 14:43 [Qemu-devel] AHCI Port Interrupt Enable register cleaning on soft reset Alexander Motin
2011-09-11 20:37 ` Alexander Graf
2011-09-12  8:19   ` Alexander Motin [this message]
2011-09-19 10:36     ` Kevin Wolf

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=4E6DC08D.3010507@FreeBSD.org \
    --to=mav@freebsd.org \
    --cc=agraf@suse.de \
    --cc=kwolf@redhat.com \
    --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 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).