[edk2-devel] [PATCH v3 4/4] OvmfPkg: don't assign PCI BARs above 4GiB when CSM enabled
Alexander Graf via Groups.Io
graf=amazon.com at groups.io
Thu Jun 27 16:36:28 UTC 2019
Hi David and Laszlo,
(with broken threading because gmane still mirrors the old ML ...)
> Mostly, this is only necessary for devices that the CSM might have
> native support for, such as VirtIO and NVMe; PciBusDxe will already
> degrade devices to 32-bit if they have an OpROM.
>
> However, there doesn't seem to be a generic way of requesting PciBusDxe
> to downgrade specific devices.
>
> There's IncompatiblePciDeviceSupportProtocol but that doesn't provide
> the PCI class information or a handle to the device itself, so there's
> no simple way to just match on all NVMe devices, for example.
>
> Just leave gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size set to zero for
> CSM builds, until/unless that can be fixed.
>
> Signed-off-by: David Woodhouse <dwmw2 at ...>
> Reviewed-by: Laszlo Ersek <lersek at ...>
> ---
> OvmfPkg/OvmfPkgIa32X64.dsc | 4 ++++
> OvmfPkg/OvmfPkgX64.dsc | 4 ++++
> 2 files changed, 8 insertions(+)
>
> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
> index 639e33cb285f..ad20531ceb8b 100644
> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
> @@ -543,7 +543,11 @@ [PcdsDynamicDefault]
> gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio32Base|0x0
> gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio32Size|0x0
> gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Base|0x0
> +!ifdef $(CSM_ENABLE)
> + gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size|0x0
> +!else
> gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size|0x800000000
> +!endif
>
> gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|0
>
> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
> index 69a3497c2c9e..0542ac2235b4 100644
> --- a/OvmfPkg/OvmfPkgX64.dsc
> +++ b/OvmfPkg/OvmfPkgX64.dsc
> @@ -542,7 +542,11 @@ [PcdsDynamicDefault]
> gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio32Base|0x0
> gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio32Size|0x0
> gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Base|0x0
> +!ifdef $(CSM_ENABLE)
> + gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size|0x0
IIRC x86 Linux just takes firmware provided BAR maps as they are and
doesn't map on its own. Or does it map if a BAR was previously unmapped?
In the former case, wouldn't that mean that we're breaking GPU
passthrough (*big* BARs) for OVMF if the OVMF version happens to support
CSM? So if a distro decides to turn on CSM, that would be a very subtle
regression.
Would it be possible to change the PCI mapping logic to just simply
*prefer* low BAR space if there's some available and the BAR is not big
(<64MB for example)?
That way we could have CSM enabled OVMF for everyone ;)
Alex
> +!else
> gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size|0x800000000
> +!endif
>
> gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|0
>
> --
> 2.21.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#42943): https://edk2.groups.io/g/devel/message/42943
Mute This Topic: https://groups.io/mt/32213812/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list