On 24 September 2015 at 04:26, Laszlo Ersek <ler...@redhat.com> wrote: > A DMA-like transfer interface has recently been implemented in QEMU for > fw-cfg. For ARM and AARCH64 virtual machines, the binding prescribes a new > 8-byte wide register at offset 0x10 in the register block. Make VirtFdtDxe > expose this register if it is present. > > Please see "docs/specs/fw_cfg.txt" in the QEMU tree for more information. > > Cc: Ard Biesheuvel <ard.biesheu...@linaro.org> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Laszlo Ersek <ler...@redhat.com>
Reviewed-by: Ard Biesheuvel <ard.biesheu...@linaro.org> > --- > ArmVirtPkg/VirtFdtDxe/VirtFdtDxe.inf | 1 + > ArmVirtPkg/VirtFdtDxe/VirtFdtDxe.c | 15 +++++++++++++++ > ArmVirtPkg/ArmVirtPkg.dec | 1 + > ArmVirtPkg/ArmVirtQemu.dsc | 1 + > ArmVirtPkg/ArmVirtXen.dsc | 1 + > 5 files changed, 19 insertions(+) > > diff --git a/ArmVirtPkg/VirtFdtDxe/VirtFdtDxe.inf > b/ArmVirtPkg/VirtFdtDxe/VirtFdtDxe.inf > index 657b4e8..ee2503a 100644 > --- a/ArmVirtPkg/VirtFdtDxe/VirtFdtDxe.inf > +++ b/ArmVirtPkg/VirtFdtDxe/VirtFdtDxe.inf > @@ -53,6 +53,7 @@ [Pcd] > gArmVirtTokenSpaceGuid.PcdArmPsciMethod > gArmVirtTokenSpaceGuid.PcdFwCfgSelectorAddress > gArmVirtTokenSpaceGuid.PcdFwCfgDataAddress > + gArmVirtTokenSpaceGuid.PcdFwCfgDmaAddress > gArmVirtTokenSpaceGuid.PcdArmGicRevision > gArmTokenSpaceGuid.PcdGicDistributorBase > gArmTokenSpaceGuid.PcdGicRedistributorsBase > diff --git a/ArmVirtPkg/VirtFdtDxe/VirtFdtDxe.c > b/ArmVirtPkg/VirtFdtDxe/VirtFdtDxe.c > index 73db630..74f80d1 100644 > --- a/ArmVirtPkg/VirtFdtDxe/VirtFdtDxe.c > +++ b/ArmVirtPkg/VirtFdtDxe/VirtFdtDxe.c > @@ -302,6 +302,8 @@ InitializeVirtFdtDxe ( > UINT64 FwCfgSelectorSize; > UINT64 FwCfgDataAddress; > UINT64 FwCfgDataSize; > + UINT64 FwCfgDmaAddress; > + UINT64 FwCfgDmaSize; > > Hob = GetFirstGuidHob(&gFdtHobGuid); > if (Hob == NULL || GET_GUID_HOB_DATA_SIZE (Hob) != sizeof (UINT64)) { > @@ -382,6 +384,19 @@ InitializeVirtFdtDxe ( > > DEBUG ((EFI_D_INFO, "Found FwCfg @ 0x%Lx/0x%Lx\n", > FwCfgSelectorAddress, > FwCfgDataAddress)); > + > + if (fdt64_to_cpu (((UINT64 *)RegProp)[1]) >= 0x18) { > + FwCfgDmaAddress = FwCfgDataAddress + 0x10; > + FwCfgDmaSize = 0x08; > + > + // > + // See explanation above. > + // > + ASSERT (FwCfgDmaAddress <= MAX_UINTN - FwCfgDmaSize + 1); > + > + PcdSet64 (PcdFwCfgDmaAddress, FwCfgDmaAddress); > + DEBUG ((EFI_D_INFO, "Found FwCfg DMA @ 0x%Lx\n", FwCfgDmaAddress)); > + } > break; > > case PropertyTypeVirtio: > diff --git a/ArmVirtPkg/ArmVirtPkg.dec b/ArmVirtPkg/ArmVirtPkg.dec > index d987035..89e8448 100644 > --- a/ArmVirtPkg/ArmVirtPkg.dec > +++ b/ArmVirtPkg/ArmVirtPkg.dec > @@ -67,6 +67,7 @@ [PcdsDynamic, PcdsFixedAtBuild] > > gArmVirtTokenSpaceGuid.PcdFwCfgSelectorAddress|0x0|UINT64|0x00000004 > gArmVirtTokenSpaceGuid.PcdFwCfgDataAddress|0x0|UINT64|0x00000005 > + gArmVirtTokenSpaceGuid.PcdFwCfgDmaAddress|0x0|UINT64|0x00000009 > > # > # Supported GIC revision (2, 3, ...) > diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc > index f1af968..9e40f39 100644 > --- a/ArmVirtPkg/ArmVirtQemu.dsc > +++ b/ArmVirtPkg/ArmVirtQemu.dsc > @@ -199,6 +199,7 @@ [PcdsDynamicDefault.common] > > gArmVirtTokenSpaceGuid.PcdFwCfgSelectorAddress|0x0 > gArmVirtTokenSpaceGuid.PcdFwCfgDataAddress|0x0 > + gArmVirtTokenSpaceGuid.PcdFwCfgDmaAddress|0x0 > > # > # Set video resolution for boot options and for text setup. > diff --git a/ArmVirtPkg/ArmVirtXen.dsc b/ArmVirtPkg/ArmVirtXen.dsc > index 5c19afc..ac37cd2 100644 > --- a/ArmVirtPkg/ArmVirtXen.dsc > +++ b/ArmVirtPkg/ArmVirtXen.dsc > @@ -144,6 +144,7 @@ [PcdsDynamicDefault.common] > > gArmVirtTokenSpaceGuid.PcdFwCfgSelectorAddress|0x0 > gArmVirtTokenSpaceGuid.PcdFwCfgDataAddress|0x0 > + gArmVirtTokenSpaceGuid.PcdFwCfgDmaAddress|0x0 > > gArmVirtTokenSpaceGuid.PcdArmPsciMethod|0 > > -- > 1.8.3.1 > > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel