qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Re: EFI console stopped working in Qemu 0.14.0


From: Isaku Yamahata
Subject: Re: [Qemu-devel] Re: EFI console stopped working in Qemu 0.14.0
Date: Thu, 3 Mar 2011 16:38:16 +0900
User-agent: Mutt/1.5.19 (2009-01-05)

On Thu, Mar 03, 2011 at 08:43:11AM +0200, vagran wrote:
> I am using TianoCore EFI by Tristan Gingold which is published
> on http://wiki.qemu.org/download/efi-bios.tar.bz2. If you would try
> to load it on Qemu 0.14.0 (built either for i386 or x86_64) you will
> see nothing on VGA display or serial console. But it still will be
> able to load OS after timeout if you have proper disk image.

Thank you for the info. Then I can also test it locally.

thanks,

>> It seems your EFI BIOS doesn't enable memor, io or master bits
>> in command register.
>>   
>>
>> or disableintx.
>>   
> I have checked your guess and figured out that it works only
> if both memory and io bits are not cleared. So the following
> patch also works:
> diff --git a/hw/pci.c b/hw/pci.c
> index 8b76cea..bcf9b16 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -163,8 +163,9 @@ void pci_device_reset(PCIDevice *dev)
>     pci_device_deassert_intx(dev);
>     /* Clear all writeable bits */
>     pci_word_test_and_clear_mask(dev->config + PCI_COMMAND,
> -                                 pci_get_word(dev->wmask + PCI_COMMAND) |
> -                                 pci_get_word(dev->w1cmask + PCI_COMMAND));
> +                                 (pci_get_word(dev->wmask + PCI_COMMAND) |
> +                                 pci_get_word(dev->w1cmask +  
> PCI_COMMAND)) &
> +                                 ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY));
>     pci_word_test_and_clear_mask(dev->config + PCI_STATUS,
>                                  pci_get_word(dev->wmask + PCI_STATUS) |
>                                  pci_get_word(dev->w1cmask + PCI_STATUS));
>
> So probably the problem is in EFI BIOS. But I was not able to find
> its source code. Anyone knows how is it built?
>
> Best regards,
> Artyom.
>
>
> Isaku Yamahata wrote:
>> 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 <address@hidden>
>>>>> 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
>>>
>>>     
>

-- 
yamahata



reply via email to

[Prev in Thread] Current Thread [Next in Thread]