Patchwork Re: SeaBIOS cdrom regression with Vista

login
register
mail settings
Submitter Kevin O'Connor
Date Nov. 20, 2009, 7:08 p.m.
Message ID <20091120190803.GA22484@morn.localdomain>
Download mbox | patch
Permalink /patch/38936/
State New
Headers show

Comments

Kevin O'Connor - Nov. 20, 2009, 7:08 p.m.
On Fri, Nov 20, 2009 at 01:03:51PM -0500, Kevin O'Connor wrote:
> I've looked into this, and it looks like the cdrom is left in an odd
> state.  At this point, I think SeaBIOS is tickling a bug outside of
> seabios (eg, in Vista or qemu).  I would appreciate it someone with
> cdrom knowledge of qemu could help.
[...]
> SeaBIOS has a different ata drive detection mechanism than bochs - it
> needs it in order to work on real hardware.  So, this explains why
> bochs bios doesn't show this issue.  (Seabios tries to send an
> "identify packet device" and then an "identify device" command to
> detect a drive; bochs bios looks for a signature in the ata registers
> after an ata reset.)

It looks like I spoke too soon.  It appears the SeaBIOS init can leave
the ATA controller in an interrupts disabled state.  This appears to
confuse Vista.  So, this is a SeaBIOS bug - I'll implement a fix.

The patch below enables Vista to see the cdrom (though, it's not a
real fix).

-Kevin
Kevin O'Connor - Nov. 20, 2009, 10:36 p.m.
On Fri, Nov 20, 2009 at 02:08:03PM -0500, Kevin O'Connor wrote:
> On Fri, Nov 20, 2009 at 01:03:51PM -0500, Kevin O'Connor wrote:
> > I've looked into this, and it looks like the cdrom is left in an odd
> > state.  At this point, I think SeaBIOS is tickling a bug outside of
> > seabios (eg, in Vista or qemu).  I would appreciate it someone with
> > cdrom knowledge of qemu could help.
> [...]
> > SeaBIOS has a different ata drive detection mechanism than bochs - it
> > needs it in order to work on real hardware.  So, this explains why
> > bochs bios doesn't show this issue.  (Seabios tries to send an
> > "identify packet device" and then an "identify device" command to
> > detect a drive; bochs bios looks for a signature in the ata registers
> > after an ata reset.)
> 
> It looks like I spoke too soon.  It appears the SeaBIOS init can leave
> the ATA controller in an interrupts disabled state.  This appears to
> confuse Vista.  So, this is a SeaBIOS bug - I'll implement a fix.

I've committed a fix to SeaBIOS - commit 42bc3940.

-Kevin
Avi Kivity - Nov. 22, 2009, 8:56 a.m.
On 11/21/2009 12:36 AM, Kevin O'Connor wrote:
>
>> It looks like I spoke too soon.  It appears the SeaBIOS init can leave
>> the ATA controller in an interrupts disabled state.  This appears to
>> confuse Vista.  So, this is a SeaBIOS bug - I'll implement a fix.
>>      
> I've committed a fix to SeaBIOS - commit 42bc3940.
>    

Many thanks.

Anthony, can you expedite this fix through qemu.git?
Avi Kivity - Nov. 26, 2009, 3:31 p.m.
On 11/21/2009 12:36 AM, Kevin O'Connor wrote:
>
>> It looks like I spoke too soon.  It appears the SeaBIOS init can leave
>> the ATA controller in an interrupts disabled state.  This appears to
>> confuse Vista.  So, this is a SeaBIOS bug - I'll implement a fix.
>>      
> I've committed a fix to SeaBIOS - commit 42bc3940.
>    

I confirm that it works with my regression tests.  I now see no 
regressions except for gpxe/pmm (which I haven't retested yet, stay tuned).

Patch

--- a/src/ata.c
+++ b/src/ata.c
@@ -237,6 +237,7 @@  send_cmd(struct drive_s *drive_g, struct ata_pio_command *cmd)
         return -4;
     }
     if (!(status & ATA_CB_STAT_DRQ)) {
+    outb(ATA_CB_DC_HD15, iobase2+ATA_CB_DC);
         dprintf(6, "send_cmd : DRQ not set (status %02x)\n", status);
         return -5;
     }