[SeaBIOS] [edk2] investigate features differences between ovmf and seabios with QEMU

Laszlo Ersek lersek at redhat.com
Thu Feb 27 12:29:24 CET 2014


On 02/27/14 11:05, Chen Fan wrote:
> On Wed, 2014-02-26 at 13:31 +0100, Laszlo Ersek wrote:
>> On 02/26/14 09:43, Chen Fan wrote:

>>> what features will be provided by MP services?  the smp feature includes
>>> detect and initialize the all CPUs in SeaBios.
>>
>> Basically, the same. See
>>
>>   13.3 MP Services Protocol Overview
>>
>> and
>>
>>   13.4 MP Services Protocol
>>
>> in
>>
>>   <http://www.uefi.org/specs/download>
>>   VOLUME 2: Platform Initialization Specification
>>   Driver Execution Environment Core Interface
>>
>> Honestly, I don't know what it is good for, to bring up APs before the
>> OS starts. OVMF doesn't do that right now (it doesn't implement
>> EFI_MP_SERVICES_PROTOCOL), and both Linux and Windows guests can start
>> and use all processors just the same. We get the number of qemu's VCPUs
>> via fw_cfg, and expose that in the MADT. 13.3 says in one spot:
>>
>>     MP Services Protocol may be consumed by ACPI module. The ACPI
>>     module may use this protocol to retrieve data that are needed for
>>     an MP platform and report them to OS.
>>
>> We use fw_cfg as source for this information, not
>> EFI_MP_SERVICES_PROTOCOL. (Note that EFI_MP_SERVICES_PROTOCOL is not
>> part of UEFI, it belongs to PI.)
>>
>> Multi-threaded execution (on multiple CPUs) is not supported in UEFI
>> anyway. You can approximate it with an illusion, by using timers, but it
>> won't "parallelize" to several CPUs.
>>
>> In another spot, 13.3 says
>>
>>     MP Services Protocol may also be used to program and configure
>>     processors, such as MTRR synchronization for memory space
>>     attributes setting in DXE Services.
>>
>> First, as I've been informed, MTRR is more like decoration than
>> something with an actual effect under KVM. Second, on some (physical)
>> Intel processor models, MTRR configuration *must* indeed happen in
>> strict lock-step, on all processors at once. However, OSes already do
>> this. By virtue of not starting the APs, we push the responsibility of
>> MTRR setup to the guest OS.
>>
> OK, maybe we can set "smp" to C: OVMF does not need to support feature,
> right?

I don't claim that EFI_MP_SERVICES_PROTOCOL would be useless for OVMF.
It's just that I personally don't see much use (but I could be wrong).

>>>>>        28. suspend
>>>>
>>>> S3 is work in progress. It should make it into the tree soon.
>>> ok, Thanks.
> sorry, I don't known why when you said that "S3 is work in progress",
> but I had test it with OVMF.fd got from master tree, it worked fine.
> "resume" is the same.

You're right that I didn't consider suspend and resume separately. For
"raw" suspend you only need to advertise support (and a way) for the S3
state in ACPI, and we do that, indeed.

Resume is quite complex, and I can't imagine how it worked for you. I
reviewed the last patch this Tuesday and AFAICS Jordan hasn't pushed it yet.

Do we have the same thing in mind? If ACPI states S3 support/method,
then the OS will happily put the VM to S3 sleep. If you then wake the
machine but the firmware lacks code for S3 resume, the wakeup simply
decays to a reboot.

> 
>>>
>>>>
>>>>>   29. block       30. boot        
>>>>
>>>> OVMF supports qemu boot order specs, but the huge conceptual difference
>>>> between UEFI boot options and the traditional BIOS boot options / the
>>>> OpenFirmware expressive power keeps us revising details and fixing bugs.
>>>>
>>>>> 31. cdrom      32. output
>>>>>   33. resume      34. serial      35. usb        36. pciint
>>>>>   37. optionroms  38. xen         
>>>>
>>>> The Xen community certainly cares about OVMF. For details you'll have to
>>>> talk to them.
>>>>
>>>>> 39. vgahooks   40. PCI I/O protcol(pci
>>>>> bios)
>>>>>   41. DSDT table  42. SEC (post)  43. MADT table 44. font
>>>>>   45. mouse       46. disk        47. kbd        48. clock
>>>>>   49. memmap      50. Memory Allocation Services (pmm) 
>>>>>   51. System table (biosvar)      52. FW_CFG 
>>>>
>>>> "Yes", in general. I'll just single out "font", which to me implies HII
>>>> in UEFI / edk2, and it's a beast.
>>> I do not find where to change the font in OVMF. maybe we can categorize
>>> "font" to B: OVMF does not support for the moment.
>>
>> In that sense, right, you can't change the font. But edk2 includes the
>> infrastructure that would let you add a new font package.
>>
>> Of course I never tried to do that. I looked now an found two clients
>> that install fonts:
>>
>> (1) RegisterFontPackage() in
>> "MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsole.c".
>>
>> The glyph data comes from "gUsStdNarrowGlyphData", in
>> "MdeModulePkg/Universal/Console/GraphicsConsoleDxe/LaffStd.c".
>>
>> (2) ExportFonts() in
>> "IntelFrameworkModulePkg/Universal/BdsDxe/Language.c". The glyph-data is
>> present in the same file ("mFontBin").
>>
>>
>>>>
>>>>>
>>>>> P.S:
>>>>>   the values ​​in parentheses represents the seabios feature.
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>>   B: OVMF does not support features which seabios support it
>>>>> ---------------------------------------------------------------------
>>>>>   53. ahci        
>>>>
>>>> Hmm. I think edk2 in general does support AHCI
>>>> (seeMdeModulePkg/Bus/Ata/AtaAtapiPassThru), we just don't include it. I
>>>> think we should have a good use case for drivers / features; more than
>>>> just "feature parity with SeaBIOS".
>>> I want to figure out which features are supported in OVMF. I don't care
>>> edk2 features. I know edk2 may include these features. in other words, 
>>> can we use it in OVMF if we just include this feature came from edk2?
>>
>> You can only tell if you try it :) The INF file in that directory does say:
>>
>>   AtaAtapiPassThru driver to provide native IDE/AHCI mode support
>>
>> So, you could
>> - add "MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf" to
>> both OvmfPkgX64.dsc and .fdf (for the syntax, check out how the virtio
>> drivers, for example "OvmfPkg/VirtioBlkDxe/VirtioBlk.inf", are included),
>> - rebuild OVMF, and
>> - boot it on a qemu where you enable AHCI on the command line.
>>
>>>
>>>>
>>>>> 54. usb-ohci    55. esp-scsi   56. lsi-scsi
>>>>>   57. magasas
>>>>
>>>> These look like various SCSI HBA's. edk2 probably has no drivers,
>>>> indeed. I'm not convinced we need to support them.
>>>
>>>>
>>>>> 58. usb-uas     59. usb-xhci
>>>>
>>>> I think the same applies to XHCI as to AHCI, see
>>>> MdeModulePkg/Bus/Pci/XhciDxe.
>>>>
>>>>>   60. cpu-hotplug
>>>>>   61. acpi-dbug   62. VGA-std     63. PIIX4 PM   64. pci-hotplug
>>>>
>>>> I'm not sure if CPU and/or PCI hotplug is very useful during the
>>>> firmware's lifetime (and I don't know if the above SeaBIOS files imply
>>>> such support). If you mean the ACPI dependencies, they should come "for
>>>> free" once we have the ACPI download patch in place.
>>> if OVMF could download ACPI table from qemu. I think CPU/PCI hotplug
>>> will be supported.
>>
>> I did test PCI hot-plug / hot-unplug once, in a Windows guest, with the
>> ACPI download patch in place. I used a virtio-blk device as victim:
>>
>> http://thread.gmane.org/gmane.comp.bios.tianocore.devel/3917/focus=4891
>>
>>>
>>>>
>>>>>   65. GPE         66. hpet        67. q35        68. pvpanic
>>>>>   69. processor table             70. smm
>>>>
>>>> No SMM in OVMF; KVM doesn't support it (last I heard). edk2 has
>>>> extensive support for SMM otherwise.
> how did edk2 to support SMM?

edk2 implements most of the SMM related protocols (see PI spec volume
4), except the "lowest level" (hardware dependent) protocols related to
SMRAM / SMI. (EFI_SMM_ACCESS2_PROTOCOL and EFI_SMM_CONTROL2_PROTOCOL).

I think SMM belongs in the "unneeded" category.

Thanks,
Laszlo



More information about the SeaBIOS mailing list