Re: [Qemu-devel] [RFC PATCH 00/11] Generate ACPI v5.1 tables and expose it to guest over fw_cfg on ARM
On 2015/1/25 7:31, Laszlo Ersek wrote: > On 01/24/15 10:21, Shannon Zhao wrote: >> This patch series generate seven ACPI v5.1 tables for machine virt on >> ARM. >> The set of generated tables are: >> - RSDP >> - XSDT >> - MADT >> - GTDT >> - FADT >> - FACS >> - DSDT >> >> These tables are created dynamically using the function of >> acpi-build-utils.c, taking into account the needed information passed >> from the virt machine model. When the generation is finalized, it use >> fw_cfg to expose the tables to guest. >> >> This patchset is based on Igor Mammedov's branch which can be found at >> below git tree: >> https://github.com/imammedo/qemu/commits/ASL_API_v2 > > Awesome! I didn't know you had been coordinating with Igor. This is the > best (or, put differently, "only" :)) possible way forward. Great! > Thanks, Laszlo. Igor Mammedov's work is awesome and make the ACPI generation simpler. >> And this patchset refers to Alexander Spyridakis's patches which are >> sent to qemu-devel mailing list before. >> http://lists.gnu.org/archive/html/qemu-devel/2014-10/msg03987.html >> >> As UEFI (ArmVirtualizationQemu) doesn't support downloading ACPI >> tables over fw_cfg, I just do compile test and start a guest with >> UEFI. But I contacted Laszlo Ersek before, he says that if qemu can >> expose the generated ACPI tables over fw_cfg, he can quickly add >> support in UEFI. So just send this out and make it go forward. > > I hope I was quick enough: > - patches: http://thread.gmane.org/gmane.comp.bios.tianocore.devel/12158 > - branch: https://github.com/lersek/edk2/commits/armvirt_acpi > - binary: http://people.redhat.com/~lersek/armvirt_acpi/QEMU_EFI.fd > Great work! >> >> Todo: >> 1) add GPIO controller in virt and expose it through ACPI >> 2) add cpu hotplug support >> >> Any comments are welcome. > > I answered with a couple of notes and fixes in the thread. I found those > via testing. I won't offer a code review; I hope you don't mind. > > For testing on your end (and for further development) before the edk2 > series is applied, you can fetch my patches from github, or even use the > binary I built for you. > Ok, thanks. > Note: the binary includes a very small patch that is not upstream. (Well > it includes some other patches too, but they are not relevant.) This is > it: > >> --- a/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc >> +++ b/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc >> @@ -87,7 +87,7 @@ >>gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|FALSE >> >> [PcdsFixedAtBuild.common] >> - gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x804F >> + gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8040004F >> >>gArmPlatformTokenSpaceGuid.PcdFirmwareVendor|"QEMU" > > It enables the EFI_D_VERBOSE loglevel. The ACPI code logs quite a bit of > info on this loglevel, so if you build an image yourself, be sure to > enable EFI_D_VERBOSE manually. Otherwise you'll only see a part of this > log fragment: > Ok, I see. >> Loading driver at 0x000BEE66000 EntryPoint=0x000BEE662B0 AcpiPlatformDxe.efi >> InstallProtocolInterface: BC62157E-3E33-4FEC-9920-2D3B36D750DF BB7BBE98 >> ProcessCmdAllocate: File="etc/acpi/rsdp" Alignment=0x10 Zone=2 Size=0x24 >> Address=0xB7048000 >> ProcessCmdAllocate: File="etc/acpi/tables" Alignment=0x40 Zone=1 Size=0xBC0 >> Address=0xB7047000 >> ProcessCmdAddChecksum: File="etc/acpi/tables" ResultOffset=0x49 Start=0x40 >> Length=0x8F4 >> ProcessCmdAddPointer: PointerFile="etc/acpi/tables" >> PointeeFile="etc/acpi/tables" PointerOffset=0x9B8 PointerSize=8 >> ProcessCmdAddPointer: PointerFile="etc/acpi/tables" >> PointeeFile="etc/acpi/tables" PointerOffset=0x9C0 PointerSize=8 >> ProcessCmdAddChecksum: File="etc/acpi/tables" ResultOffset=0x93D Start=0x934 >> Length=0x10C >> ProcessCmdAddChecksum: File="etc/acpi/tables" ResultOffset=0xA49 Start=0xA40 >> Length=0xDC >> ProcessCmdAddChecksum: File="etc/acpi/tables" ResultOffset=0xB25 Start=0xB1C >> Length=0x60 >> ProcessCmdAddPointer: PointerFile="etc/acpi/tables" >> PointeeFile="etc/acpi/tables" PointerOffset=0xBA0 PointerSize=8 >> ProcessCmdAddPointer: PointerFile="etc/acpi/tables" >> PointeeFile="etc/acpi/tables" PointerOffset=0xBA8 PointerSize=8 >> ProcessCmdAddPointer: PointerFile="etc/acpi/tables" >> PointeeFile="etc/acpi/tables" PointerOffset=0xBB0 PointerSize=8 >> ProcessCmdAddChecksum: File="etc/acpi/tables" ResultOffset=0xB85 Start=0xB7C >> Length=0x44 >> ProcessCmdAddPointer: PointerFile="etc/acpi/rsdp" >> PointeeFile="etc/acpi/tables" PointerOffset=0x18 PointerSize=8 >> ProcessCmdAddChecksum: File="etc/acpi/rsdp" ResultOffset=0x8 Start=0x0 >> Length=0x24 >> Process2ndPassCmdAddPointer: checking for ACPI header in "etc/acpi/tables" >> at 0xB7047000 (remaining: 0xBC0): found "FACS" size 0x40 >> Process2ndPassCmdAddPointer: checking for ACPI header in "etc/acpi/tables" >> at 0xB7047040 (remaining: 0xB80): found "DSDT" size 0x8F4 >> Process2ndPassCmdAd
Re: [Qemu-devel] [RFC PATCH 00/11] Generate ACPI v5.1 tables and expose it to guest over fw_cfg on ARM
On 01/24/15 10:21, Shannon Zhao wrote: > This patch series generate seven ACPI v5.1 tables for machine virt on > ARM. > The set of generated tables are: > - RSDP > - XSDT > - MADT > - GTDT > - FADT > - FACS > - DSDT > > These tables are created dynamically using the function of > acpi-build-utils.c, taking into account the needed information passed > from the virt machine model. When the generation is finalized, it use > fw_cfg to expose the tables to guest. > > This patchset is based on Igor Mammedov's branch which can be found at > below git tree: > https://github.com/imammedo/qemu/commits/ASL_API_v2 Awesome! I didn't know you had been coordinating with Igor. This is the best (or, put differently, "only" :)) possible way forward. Great! > And this patchset refers to Alexander Spyridakis's patches which are > sent to qemu-devel mailing list before. > http://lists.gnu.org/archive/html/qemu-devel/2014-10/msg03987.html > > As UEFI (ArmVirtualizationQemu) doesn't support downloading ACPI > tables over fw_cfg, I just do compile test and start a guest with > UEFI. But I contacted Laszlo Ersek before, he says that if qemu can > expose the generated ACPI tables over fw_cfg, he can quickly add > support in UEFI. So just send this out and make it go forward. I hope I was quick enough: - patches: http://thread.gmane.org/gmane.comp.bios.tianocore.devel/12158 - branch: https://github.com/lersek/edk2/commits/armvirt_acpi - binary: http://people.redhat.com/~lersek/armvirt_acpi/QEMU_EFI.fd > > Todo: > 1) add GPIO controller in virt and expose it through ACPI > 2) add cpu hotplug support > > Any comments are welcome. I answered with a couple of notes and fixes in the thread. I found those via testing. I won't offer a code review; I hope you don't mind. For testing on your end (and for further development) before the edk2 series is applied, you can fetch my patches from github, or even use the binary I built for you. Note: the binary includes a very small patch that is not upstream. (Well it includes some other patches too, but they are not relevant.) This is it: > --- a/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc > +++ b/ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationQemu.dsc > @@ -87,7 +87,7 @@ >gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|FALSE > > [PcdsFixedAtBuild.common] > - gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x804F > + gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8040004F > >gArmPlatformTokenSpaceGuid.PcdFirmwareVendor|"QEMU" It enables the EFI_D_VERBOSE loglevel. The ACPI code logs quite a bit of info on this loglevel, so if you build an image yourself, be sure to enable EFI_D_VERBOSE manually. Otherwise you'll only see a part of this log fragment: > Loading driver at 0x000BEE66000 EntryPoint=0x000BEE662B0 AcpiPlatformDxe.efi > InstallProtocolInterface: BC62157E-3E33-4FEC-9920-2D3B36D750DF BB7BBE98 > ProcessCmdAllocate: File="etc/acpi/rsdp" Alignment=0x10 Zone=2 Size=0x24 > Address=0xB7048000 > ProcessCmdAllocate: File="etc/acpi/tables" Alignment=0x40 Zone=1 Size=0xBC0 > Address=0xB7047000 > ProcessCmdAddChecksum: File="etc/acpi/tables" ResultOffset=0x49 Start=0x40 > Length=0x8F4 > ProcessCmdAddPointer: PointerFile="etc/acpi/tables" > PointeeFile="etc/acpi/tables" PointerOffset=0x9B8 PointerSize=8 > ProcessCmdAddPointer: PointerFile="etc/acpi/tables" > PointeeFile="etc/acpi/tables" PointerOffset=0x9C0 PointerSize=8 > ProcessCmdAddChecksum: File="etc/acpi/tables" ResultOffset=0x93D Start=0x934 > Length=0x10C > ProcessCmdAddChecksum: File="etc/acpi/tables" ResultOffset=0xA49 Start=0xA40 > Length=0xDC > ProcessCmdAddChecksum: File="etc/acpi/tables" ResultOffset=0xB25 Start=0xB1C > Length=0x60 > ProcessCmdAddPointer: PointerFile="etc/acpi/tables" > PointeeFile="etc/acpi/tables" PointerOffset=0xBA0 PointerSize=8 > ProcessCmdAddPointer: PointerFile="etc/acpi/tables" > PointeeFile="etc/acpi/tables" PointerOffset=0xBA8 PointerSize=8 > ProcessCmdAddPointer: PointerFile="etc/acpi/tables" > PointeeFile="etc/acpi/tables" PointerOffset=0xBB0 PointerSize=8 > ProcessCmdAddChecksum: File="etc/acpi/tables" ResultOffset=0xB85 Start=0xB7C > Length=0x44 > ProcessCmdAddPointer: PointerFile="etc/acpi/rsdp" > PointeeFile="etc/acpi/tables" PointerOffset=0x18 PointerSize=8 > ProcessCmdAddChecksum: File="etc/acpi/rsdp" ResultOffset=0x8 Start=0x0 > Length=0x24 > Process2ndPassCmdAddPointer: checking for ACPI header in "etc/acpi/tables" at > 0xB7047000 (remaining: 0xBC0): found "FACS" size 0x40 > Process2ndPassCmdAddPointer: checking for ACPI header in "etc/acpi/tables" at > 0xB7047040 (remaining: 0xB80): found "DSDT" size 0x8F4 > Process2ndPassCmdAddPointer: checking for ACPI header in "etc/acpi/tables" at > 0xB7047934 (remaining: 0x28C): found "FACP" size 0x10C > Process2ndPassCmdAddPointer: checking for ACPI header in "etc/acpi/tables" at > 0xB7047A40 (remaining: 0x180): found "APIC" size 0xDC > Process2ndPassCmdAddPointer: checking for ACPI head
[Qemu-devel] [RFC PATCH 00/11] Generate ACPI v5.1 tables and expose it to guest over fw_cfg on ARM
This patch series generate seven ACPI v5.1 tables for machine virt on ARM. The set of generated tables are: - RSDP - XSDT - MADT - GTDT - FADT - FACS - DSDT These tables are created dynamically using the function of acpi-build-utils.c, taking into account the needed information passed from the virt machine model. When the generation is finalized, it use fw_cfg to expose the tables to guest. This patchset is based on Igor Mammedov's branch which can be found at below git tree: https://github.com/imammedo/qemu/commits/ASL_API_v2 And this patchset refers to Alexander Spyridakis's patches which are sent to qemu-devel mailing list before. http://lists.gnu.org/archive/html/qemu-devel/2014-10/msg03987.html As UEFI (ArmVirtualizationQemu) doesn't support downloading ACPI tables over fw_cfg, I just do compile test and start a guest with UEFI. But I contacted Laszlo Ersek before, he says that if qemu can expose the generated ACPI tables over fw_cfg, he can quickly add support in UEFI. So just send this out and make it go forward. Todo: 1) add GPIO controller in virt and expose it through ACPI 2) add cpu hotplug support Any comments are welcome. Thanks, Shannon Shannon Zhao (11): hw/i386: Move ACPI header definitions in an arch-independent location hw/arm/virt-acpi-build: Basic framwork for building ACPI tables hw/arm/virt-acpi-build: Generate RSDP table hw/arm/virt-acpi-build: Generate XSDT table and add a build_header function hw/arm/virt-acpi-build: Generate MADT table hw/arm/virt-acpi-build: Generate GTDT table hw/arm/virt-acpi-build: Generate FADT table and update ACPI headers hw/arm/virt-acpi-build: Generate FACS table and update ACPI headers hw/acpi/acpi-build-utils: Add acpi_fixed_memory32() and acpi_extended_irq() hw/arm/virt-acpi-build: Generation of DSDT table for virt devices hw/arm/virt: Enable dynamic generation of ACPI v5.1 tables default-configs/arm-softmmu.mak |1 + default-configs/i386-softmmu.mak |3 + default-configs/mips-softmmu.mak |3 + default-configs/mips64-softmmu.mak |3 + default-configs/mips64el-softmmu.mak |3 + default-configs/mipsel-softmmu.mak |3 + default-configs/x86_64-softmmu.mak |3 + hw/acpi/Makefile.objs|5 +- hw/acpi/acpi-build-utils.c | 42 +++ hw/arm/Makefile.objs |1 + hw/arm/virt-acpi-build.c | 520 ++ hw/arm/virt.c| 59 - hw/i2c/Makefile.objs |2 +- hw/i386/acpi-build.c |2 +- hw/i386/acpi-defs.h | 368 include/hw/acpi/acpi-build-utils.h |2 + include/hw/acpi/acpi-defs.h | 503 include/hw/arm/virt-acpi-build.h | 71 + tests/bios-tables-test.c |2 +- 19 files changed, 1219 insertions(+), 377 deletions(-) create mode 100644 hw/arm/virt-acpi-build.c delete mode 100644 hw/i386/acpi-defs.h create mode 100644 include/hw/acpi/acpi-defs.h create mode 100644 include/hw/arm/virt-acpi-build.h