From: John Snow <jsnow@redhat.com>
To: Hannes Reinecke <hare@suse.de>, Markus Armbruster <armbru@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Alexander Graf <agraf@suse.de>,
qemu-devel@nongnu.org, Andreas Faerber <afaerber@suse.de>,
Nic Bellinger <nab@datera.com>
Subject: Re: [Qemu-devel] [PATCH 01/17] ahci: Fix CD-ROM signature
Date: Wed, 29 Oct 2014 11:47:28 -0400 [thread overview]
Message-ID: <54510C10.6060903@redhat.com> (raw)
In-Reply-To: <5450A12A.9000801@suse.de>
On 10/29/2014 04:11 AM, Hannes Reinecke wrote:
> On 10/29/2014 09:07 AM, Markus Armbruster wrote:
>> Copying John Snow for additional AHCI expertise.
>>
>> Hannes Reinecke <hare@suse.de> writes:
>>
>>> The CD-ROM signature is 0xeb140101, not 0xeb140000.
>>> Without this change OVMF/Duet runs into a timeout trying
>>> to detect a SATA cdrom.
>>>
>>> Signed-off-by: Hannes Reinecke <hare@suse.de>
>>> ---
>>> hw/ide/ahci.h | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/hw/ide/ahci.h b/hw/ide/ahci.h
>>> index e223258..970eea8 100644
>>> --- a/hw/ide/ahci.h
>>> +++ b/hw/ide/ahci.h
>>> @@ -161,7 +161,7 @@
>>> #define AHCI_CMD_HDR_CMD_FIS_LEN 0x1f
>>> #define AHCI_CMD_HDR_PRDT_LEN 16
>>>
>>> -#define SATA_SIGNATURE_CDROM 0xeb140000
>>> +#define SATA_SIGNATURE_CDROM 0xeb140101
>>> #define SATA_SIGNATURE_DISK 0x00000101
>>>
>>> #define AHCI_GENERIC_HOST_CONTROL_REGS_MAX_ADDR 0x20
>
> This is actually required by DUET/OVMF.
> It just does this check:
>
> (sig & 0xFFFF) == 0x0101
>
> and hence will run into a timeout when a CDROM is attached
> to ahci.
> It's even in the ATA spec ...
>
> Cheers,
>
> Hannes
>
This part of the code is a little messy, because the "signature" is kind
of a structure comprised of various other IDE registers.
most significant to least significant:
{
31:24 ("LBA High Register")
23:16 ("LBA Mid Register")
15:08 ("LBA Low Register")
07:00 ("Sector Count Register")
}
You can find this information in AHCI section 3.3.9, "Offset 24h PxSIG -
Port x Signature."
The ATA8 ACS3 Rev. 1b notion of a signature includes more fields, from
which the AHCI spec has cherry-picked a characteristic few.
From Table 184 - Device Signatures for Normal Output (p. 303)
Count 7:0 -- 0x01 (AKA Sector Count)
LBA 27:24 -- Reserved, 0x00 (AKA Low-Nibble of the Device/Select Reg)
LBA 23:16 -- 0xEB (AKA LBA High)
LBA 15:08 -- 0x14 (AKA LBA Mid)
LBA 07:00 -- 0x01 (AKA LBA Low)
Which would make the AHCI-specific version of this signature:
0xEB-14-01-01
So that's good! The sort of messy part is whether or not we update the
actual IDE registers with the signature, or if we should just cheese it
by updating only PxSIG. For instance, the only place where this constant
is used is:
else if (ide_state->drive_kind == IDE_CD) {
pr->sig = SATA_SIGNATURE_CDROM;
ide_state->lcyl = 0x14;
ide_state->hcyl = 0xeb;
ide_state->status = SEEK_STAT | WRERR_STAT | READY_STAT;
}
Where we sort of re-decompose the signature to set the lcyl (LBA Mid)
and hcyl (LBA High) registers, but we don't touch the sector (LBA Low)
or nsector (count) registers.
Maybe we should -- these values are, if nothing changes them, going to
be reported in the Initial D2H Register FIS, where a guest could
conceivably inspect them and, seeing a discrepancy between PxSIG and the
LBA/Count registers, get a little confused.
This patch as-is is likely fine, but if a V2 is warranted for other
reasons, try updating the ide_state->sector and ide_state->nsector
fields to match the #define, by using shifts/masks of the #define, ideally.
--JS
next prev parent reply other threads:[~2014-10-29 15:47 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-29 7:53 [Qemu-devel] [PATCH 00/17] megasas: gen2 emulation and MSI-X fixes Hannes Reinecke
2014-10-29 7:53 ` [Qemu-devel] [PATCH 01/17] ahci: Fix CD-ROM signature Hannes Reinecke
2014-10-29 8:07 ` Markus Armbruster
2014-10-29 8:11 ` Hannes Reinecke
2014-10-29 15:47 ` John Snow [this message]
2014-10-29 14:30 ` Stefan Hajnoczi
2014-10-29 7:53 ` [Qemu-devel] [PATCH 02/17] atapi: clear sense code Hannes Reinecke
2014-10-29 14:50 ` Stefan Hajnoczi
2014-10-29 7:53 ` [Qemu-devel] [PATCH 03/17] scsi: Rename scsi_cdb_length() to scsi_xfer_length() Hannes Reinecke
2014-10-30 10:38 ` Paolo Bonzini
2014-10-30 11:26 ` Hannes Reinecke
2014-10-30 12:00 ` Paolo Bonzini
2014-10-29 7:53 ` [Qemu-devel] [PATCH 04/17] scsi: fixup lba calculation for 6 byte CDBs Hannes Reinecke
2014-10-29 9:16 ` Paolo Bonzini
2014-10-29 9:52 ` Hannes Reinecke
2014-10-29 10:10 ` Paolo Bonzini
2014-10-29 7:53 ` [Qemu-devel] [PATCH 05/17] scsi: Remove 'lun' argument Hannes Reinecke
2014-10-29 9:05 ` Paolo Bonzini
2014-10-29 9:07 ` Paolo Bonzini
2014-10-29 11:13 ` Hannes Reinecke
2014-10-29 11:35 ` Paolo Bonzini
2014-10-29 7:53 ` [Qemu-devel] [PATCH 06/17] megasas: fixup MFI_DCMD_LD_LIST_QUERY Hannes Reinecke
2014-10-29 7:53 ` [Qemu-devel] [PATCH 07/17] megasas: simplify trace event messages Hannes Reinecke
2014-10-29 7:53 ` [Qemu-devel] [PATCH 08/17] megasas: fixup device mapping Hannes Reinecke
2014-10-29 7:53 ` [Qemu-devel] [PATCH 09/17] megasas: add MegaRAID SAS 2108 emulation Hannes Reinecke
2014-10-29 12:01 ` Andreas Färber
2014-10-29 7:53 ` [Qemu-devel] [PATCH 10/17] megasas: Fix typo in megasas_dcmd_ld_get_list() Hannes Reinecke
2014-10-29 7:53 ` [Qemu-devel] [PATCH 11/17] megasas: Decode register names Hannes Reinecke
2014-10-29 7:53 ` [Qemu-devel] [PATCH 12/17] megasas: Clear unit attention on initial reset Hannes Reinecke
2014-10-29 9:14 ` Paolo Bonzini
2014-10-29 9:53 ` Hannes Reinecke
2014-10-29 7:53 ` [Qemu-devel] [PATCH 13/17] megasas: Ignore duplicate init_firmware commands Hannes Reinecke
2014-10-29 7:53 ` [Qemu-devel] [PATCH 14/17] megasas: Implement DCMD_CLUSTER_RESET_LD Hannes Reinecke
2014-10-29 7:53 ` [Qemu-devel] [PATCH 15/17] megasas: Update queue logging Hannes Reinecke
2014-10-29 7:53 ` [Qemu-devel] [PATCH 16/17] megasas: Rework frame queueing algorithm Hannes Reinecke
2014-10-29 7:53 ` [Qemu-devel] [PATCH 17/17] megasas: Fixup MSI-X handling Hannes Reinecke
2014-10-29 9:18 ` [Qemu-devel] [PATCH 00/17] megasas: gen2 emulation and MSI-X fixes Paolo Bonzini
2014-10-29 11:10 ` Hannes Reinecke
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=54510C10.6060903@redhat.com \
--to=jsnow@redhat.com \
--cc=afaerber@suse.de \
--cc=agraf@suse.de \
--cc=armbru@redhat.com \
--cc=hare@suse.de \
--cc=nab@datera.com \
--cc=pbonzini@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).