Acidanthera UEFI Development Kit based on EDK II edk2-stable202311
Go to file
Ruiyu Ni 0176af142e MdeModulePkg/PciBus: Shadow option ROM after BARs are programmed
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1376

Today's implementation reuses the 32bit MMIO resource requested by
all PCI devices MMIO BARs when shadowing the option ROM.
Take a simple example, a system has only one PCI device. It requires
8MB 32bit MMIO and contains a 4MB option ROM. Today's implementation
only requests 8MB (max of 4M and 8M) 32bit MMIO from
PciHostBridgeResourceAllocation protocol. Let's assume the MMIO range
[3GB, 3GB+8MB) is allocated. The 3GB base address is firstly
programmed to the option ROM BAR for option ROM shadow. Then the
option ROM decoding is turned off and 3GB base address is programmed
to the 32bit MMIO BAR.

It doesn't cause issues when the device doesn't request too much
MMIO.
But when the device contains a 64bit MMIO BAR which requests 4GB MMIO
and a 4MB option ROM. Let's assume [3GB, 3GB+8MB) 32bit MMIO range is
allocated for the option ROM. When the option ROM is being shadowed,
64bit MMIO BAR is programmed to value 0, which means [0, 4GB) MMIO is
given to the 64bit BAR.
The range overlaps with the option ROM range which may cause the
device malfunction (e.g.: option ROM cannot be read out) when the
device has two separate decoders: one for MMIO BAR, the other for
option ROM.

The patch requests dedicated MEM32 resource for Option ROMs and
moves the Option ROM shadow logic after all MMIO BARs are programmed.
The MMIO BAR setting to 0 when shadowing Option ROM is also skipped
because the MMIO BAR already contains the correct value.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Hao Wu <hao.a.wu@intel.com>
2018-12-10 10:30:13 +08:00
AppPkg AppPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:35 +08:00
ArmPkg ArmPkg/OpteeLib: Add dummy RPC handler 2018-12-06 17:55:45 +01:00
ArmPlatformPkg ArmPlatformPkg/PlatformPei: drop unused PCD references 2018-11-29 18:57:39 +01:00
ArmVirtPkg ArmVirtPkg/QemuVirtMemInfoLib: trim the MMIO region mapping 2018-12-03 15:56:39 +01:00
BaseTools BaseTools: Correct CCFLAG for PcdValueInit 2018-12-07 10:39:52 +08:00
BeagleBoardPkg BeagleBoardPkg/PrePi: base GCD memory space size on CPU's PA range 2018-11-29 18:57:31 +01:00
Conf EDK II: Add .gitignore 2014-10-14 16:08:15 +00:00
CorebootModulePkg CorebootModulePkg: Removing ipf from edk2. 2018-08-14 08:58:28 +08:00
CorebootPayloadPkg CorebootPayloadPkg: Remove EdkShellBinPkg in FDF 2018-11-05 13:58:24 +08:00
CryptoPkg CryptoPkg/BaseCryptLib: Fix potential integer overflow issue. 2018-10-31 11:07:53 +08:00
EdkCompatibilityPkg EdkCompatibilityPkg: Removing ipf from edk2. 2018-09-25 23:43:46 +08:00
EmbeddedPkg EmbeddedPkg/EmbeddedPkg.dec: drop PcdPrePiCpuMemorySize declarations 2018-11-30 22:43:20 +01:00
EmulatorPkg EmulatorPkg: Remove EdkShellBinPkg in FDF and DEC 2018-11-19 10:50:15 +08:00
FatPkg FatPkg: Correct the line ending to CRLF 2018-10-24 15:22:31 +08:00
FmpDevicePkg FmpDevicePkg DSC: Add NOOPT target to verify NOOPT target 2018-10-31 22:08:10 +08:00
IntelFrameworkModulePkg IntelFrameworkModulePkg: Fix UEFI and Tiano Decompression logic issue 2018-11-11 11:48:37 +08:00
IntelFrameworkPkg IntelFrameworkPkg FrameworkUefiLib: Add new EfiLocateXXXAcpiTable APIs 2018-09-27 14:25:32 +08:00
IntelFsp2Pkg IntelFsp2Pkg: Fixed potentially NULL pointer accessing 2018-10-29 11:24:58 +08:00
IntelFsp2WrapperPkg IntelFsp2WrapperPkg: Fix constant if statements issue 2018-11-26 11:40:38 +08:00
IntelFspPkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
IntelFspWrapperPkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
IntelSiliconPkg IntelSiliconPkg VTdDxe: Report status code for VTd error 2018-10-25 11:50:49 +08:00
MdeModulePkg MdeModulePkg/PciBus: Shadow option ROM after BARs are programmed 2018-12-10 10:30:13 +08:00
MdePkg Revert "MdePkg/ProcessorBind.h AARCH64: limit MAX_ADDRESS to 48 bits" 2018-12-07 12:24:19 +01:00
NetworkPkg NetworkPkg/IScsiDxe: add debug logs for failed SetVariable attempts 2018-11-23 14:27:11 +08:00
Nt32Pkg Nt32Pkg: Remove EdkShellBinPkg in FDF and DEC 2018-11-19 10:50:15 +08:00
Omap35xxPkg Omap35xxPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:46 +08:00
OptionRomPkg OptionRomPkg: Removing ipf which is no longer supported from edk2. 2018-09-06 14:44:30 +08:00
OvmfPkg OvmfPkg: Don't include TftpDynamicCommand in XCODE5 tool chain 2018-11-27 11:21:15 +08:00
PcAtChipsetPkg PcAtChipsetPkg PcRtc: Use new EfiLocateFirstAcpiTable() 2018-09-27 14:25:35 +08:00
QuarkPlatformPkg QuarkPlatformPkg: Removing ipf which is no longer supported from edk2. 2018-08-14 08:58:30 +08:00
QuarkSocPkg QuarkSocPkg: Removing ipf which is no longer supported from edk2. 2018-08-14 08:58:32 +08:00
SecurityPkg SecurityPkg: Update TCG PFP spec revision. 2018-11-21 10:06:36 +08:00
ShellBinPkg ShellBinPkg: Clean up source files 2018-06-28 11:19:51 +08:00
ShellPkg ShellPkg: Remove ShellPkg wrapper header files 2018-11-22 14:24:23 +08:00
SignedCapsulePkg SignedCapsulePkg: Remove PalLib in dsc which was missed at 52664c5 2018-09-25 23:40:40 +08:00
SourceLevelDebugPkg SourceLevelDebugPkg/Readme.txt: Update UDK Debugger Tool & manual URL 2018-11-08 12:00:34 +08:00
StandaloneMmPkg StandaloneMM: Update permissions for Standalone MM drivers memory area 2018-12-09 16:01:53 +00:00
StdLib StdLib: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:51 +08:00
StdLibPrivateInternalFiles StdLibPrivateInternalFiles: Removing ipf from edk2. 2018-06-29 16:19:51 +08:00
UefiCpuPkg UefiCpuPkg/CommonFeature: Always set FEATURE_CONTROL.Lock 2018-11-14 11:02:48 +08:00
Vlv2DeviceRefCodePkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
Vlv2TbltDevicePkg Vlv2TbltDevicePkg:Fix build and boot failure of Minnowboard Max platform. 2018-11-23 13:58:28 +08:00
.gitignore edk2: Add .DS_Store to .gitignore for macOS 2017-05-19 15:14:34 -07:00
.gitmodules CryptoPkg: Adding OpenSSL as one submodule of EDKII repo 2018-01-18 14:06:15 +08:00
BuildNotes2.txt BaseTools: Updated BuildNotes URLs 2016-03-25 09:46:44 +08:00
Contributions.txt edk2: Fix typo in Contributions.txt 2017-08-16 17:50:44 +08:00
License.txt edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
Maintainers.txt Maintainers.txt: Remove DuetPkg 2018-12-06 14:34:29 +08:00
Readme.md edk2: Add Readme.md to root of edk2 repository 2017-08-03 11:02:25 -07:00
edksetup.bat BaseTools: Fix incorrect %EDK_TOOLS_PATH% 2018-08-08 08:44:22 +08:00
edksetup.sh Revert BaseTools: PYTHON3 migration 2018-10-15 08:29:14 +08:00

Readme.md

EDK II Project

A modern, feature-rich, cross-platform firmware development environment for the UEFI and PI specifications from www.uefi.org.

Contributions to the EDK II open source project are covered by the TianoCore Contribution Agreement 1.1

The majority of the content in the EDK II open source project uses a BSD 2-Clause License. The EDK II open source project contains the following components that are covered by additional licenses:

The EDK II Project is composed of packages. The maintainers for each package are listed in Maintainers.txt.

Resources