Patchwork Re: EFI console stopped working in Qemu 0.14.0

login
register
mail settings
Submitter vagran
Date March 2, 2011, 9:27 p.m.
Message ID <4D6EB643.4030805@gmail.com>
Download mbox | patch
Permalink /patch/85170/
State New
Headers show

Comments

vagran - March 2, 2011, 9:27 p.m.
vagran wrote:
> Hi,
> I have noted that Qemu VGA and serial console with EFI BIOS stopped 
> working in
> 0.14.0 (and in latest development snapshot is still not working). 
> Everything was
> fine in 0.13.0. However EFI BIOS itself is able to load kernel if it was
> properly configured on used disk image. The only effect is that 
> neither VGA nor
> serial console is not functioning. After short investigation I have 
> discovered
> that this functionality was broken by this commit:
>
> commit 9bb3358627d87d8de25fb41b7276575539d799a7
> Author: Isaku Yamahata <yamahata@valinux.co.jp>
> Date:   Fri Nov 19 18:56:02 2010 +0900
>
> Do you have any idea how this change could affect EFI consoles?
>
After further investigation I have found that the following patch provides
a workaround for the problem, may be it could be useful for somebody who
is more familiar with Qemu PCI code:


Best regards,
Artyom.
Isaku Yamahata - March 3, 2011, 3:03 a.m.
Hi. Thank you for reporting.
Can you elaborate on the changeset that you pointed out and
your work around?

Regarding to the changeset, it had the issue, but I suppose
80376c3fc2c38fdd45354e4b0eb45031f35587ed fixed it.
Do you found any other issue?

Regarding to your workaround, what was the problem?
What EFI BIOS are you using? Tiano-core derivatives that
Tristan Gingold worked on? Or other one?
It seems your EFI BIOS doesn't enable memor, io or master bits
in command register.
If so, the issue is in the bios, not qemu.

thanks,

On Wed, Mar 02, 2011 at 11:27:31PM +0200, vagran wrote:
> vagran wrote:
>> Hi,
>> I have noted that Qemu VGA and serial console with EFI BIOS stopped  
>> working in
>> 0.14.0 (and in latest development snapshot is still not working).  
>> Everything was
>> fine in 0.13.0. However EFI BIOS itself is able to load kernel if it was
>> properly configured on used disk image. The only effect is that  
>> neither VGA nor
>> serial console is not functioning. After short investigation I have  
>> discovered
>> that this functionality was broken by this commit:
>>
>> commit 9bb3358627d87d8de25fb41b7276575539d799a7
>> Author: Isaku Yamahata <yamahata@valinux.co.jp>
>> Date:   Fri Nov 19 18:56:02 2010 +0900
>>
>> Do you have any idea how this change could affect EFI consoles?
>>
> After further investigation I have found that the following patch provides
> a workaround for the problem, may be it could be useful for somebody who
> is more familiar with Qemu PCI code:
>
> diff --git a/hw/pci.c b/hw/pci.c
> index 8b76cea..06dd7ab 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -162,9 +162,11 @@ void pci_device_reset(PCIDevice *dev)
>     pci_update_irq_status(dev);
>     pci_device_deassert_intx(dev);
>     /* Clear all writeable bits */
> +#if 0
>     pci_word_test_and_clear_mask(dev->config + PCI_COMMAND,
>                                  pci_get_word(dev->wmask + PCI_COMMAND) |
>                                  pci_get_word(dev->w1cmask + PCI_COMMAND));
> +#endif
>     pci_word_test_and_clear_mask(dev->config + PCI_STATUS,
>                                  pci_get_word(dev->wmask + PCI_STATUS) |
>                                  pci_get_word(dev->w1cmask + PCI_STATUS));
>
> Best regards,
> Artyom.
>
>
Isaku Yamahata - March 3, 2011, 3:09 a.m.
On Thu, Mar 03, 2011 at 12:03:53PM +0900, Isaku Yamahata wrote:
> Hi. Thank you for reporting.
> Can you elaborate on the changeset that you pointed out and
> your work around?
> 
> Regarding to the changeset, it had the issue, but I suppose
> 80376c3fc2c38fdd45354e4b0eb45031f35587ed fixed it.
> Do you found any other issue?
> 
> Regarding to your workaround, what was the problem?
> What EFI BIOS are you using? Tiano-core derivatives that
> Tristan Gingold worked on? Or other one?
> It seems your EFI BIOS doesn't enable memor, io or master bits
> in command register.

or disableintx.

> If so, the issue is in the bios, not qemu.
> 
> thanks,
> 
> On Wed, Mar 02, 2011 at 11:27:31PM +0200, vagran wrote:
> > vagran wrote:
> >> Hi,
> >> I have noted that Qemu VGA and serial console with EFI BIOS stopped  
> >> working in
> >> 0.14.0 (and in latest development snapshot is still not working).  
> >> Everything was
> >> fine in 0.13.0. However EFI BIOS itself is able to load kernel if it was
> >> properly configured on used disk image. The only effect is that  
> >> neither VGA nor
> >> serial console is not functioning. After short investigation I have  
> >> discovered
> >> that this functionality was broken by this commit:
> >>
> >> commit 9bb3358627d87d8de25fb41b7276575539d799a7
> >> Author: Isaku Yamahata <yamahata@valinux.co.jp>
> >> Date:   Fri Nov 19 18:56:02 2010 +0900
> >>
> >> Do you have any idea how this change could affect EFI consoles?
> >>
> > After further investigation I have found that the following patch provides
> > a workaround for the problem, may be it could be useful for somebody who
> > is more familiar with Qemu PCI code:
> >
> > diff --git a/hw/pci.c b/hw/pci.c
> > index 8b76cea..06dd7ab 100644
> > --- a/hw/pci.c
> > +++ b/hw/pci.c
> > @@ -162,9 +162,11 @@ void pci_device_reset(PCIDevice *dev)
> >     pci_update_irq_status(dev);
> >     pci_device_deassert_intx(dev);
> >     /* Clear all writeable bits */
> > +#if 0
> >     pci_word_test_and_clear_mask(dev->config + PCI_COMMAND,
> >                                  pci_get_word(dev->wmask + PCI_COMMAND) |
> >                                  pci_get_word(dev->w1cmask + PCI_COMMAND));
> > +#endif
> >     pci_word_test_and_clear_mask(dev->config + PCI_STATUS,
> >                                  pci_get_word(dev->wmask + PCI_STATUS) |
> >                                  pci_get_word(dev->w1cmask + PCI_STATUS));
> >
> > Best regards,
> > Artyom.
> >
> >
> 
> -- 
> yamahata
>

Patch

diff --git a/hw/pci.c b/hw/pci.c
index 8b76cea..06dd7ab 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -162,9 +162,11 @@  void pci_device_reset(PCIDevice *dev)
     pci_update_irq_status(dev);
     pci_device_deassert_intx(dev);
     /* Clear all writeable bits */
+#if 0
     pci_word_test_and_clear_mask(dev->config + PCI_COMMAND,
                                  pci_get_word(dev->wmask + PCI_COMMAND) |
                                  pci_get_word(dev->w1cmask + PCI_COMMAND));
+#endif
     pci_word_test_and_clear_mask(dev->config + PCI_STATUS,
                                  pci_get_word(dev->wmask + PCI_STATUS) |
                                  pci_get_word(dev->w1cmask + PCI_STATUS));