* [PATCH v2 0/2] Add support for scanning Option ROMs
@ 2020-09-15 12:26 Marcello Sylvester Bauer
2020-09-15 12:26 ` [PATCH v2 1/2] MdeModulePkg: Fix OptionROM scanning Marcello Sylvester Bauer
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Marcello Sylvester Bauer @ 2020-09-15 12:26 UTC (permalink / raw)
To: devel
Fix Option ROM enumeration and support scanning.
v2:
* add correct Maintainer and Reviewer to Cc
* PciPlatformDxe:
- Update description
- add function description
Branch: https://github.com/9elements/edk2-1/tree/UefiPayloadPkg-Option_ROMs
PR: https://github.com/tianocore/edk2/pull/926
Patrick Rudolph (2):
MdeModulePkg: Fix OptionROM scanning
UefiPayloadPkg: Scan for Option ROMs
UefiPayloadPkg/UefiPayloadPkgIa32.dsc | 1 +
UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc | 1 +
UefiPayloadPkg/UefiPayloadPkg.fdf | 1 +
UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf | 46 +++
UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h | 19 +
MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c | 10 +-
UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c | 426 ++++++++++++++++++++
7 files changed, 500 insertions(+), 4 deletions(-)
create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf
create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h
create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c
--
2.28.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 1/2] MdeModulePkg: Fix OptionROM scanning
2020-09-15 12:26 [PATCH v2 0/2] Add support for scanning Option ROMs Marcello Sylvester Bauer
@ 2020-09-15 12:26 ` Marcello Sylvester Bauer
2020-09-15 12:34 ` [edk2-devel] " Laszlo Ersek
2020-09-15 12:26 ` [PATCH v2 2/2] UefiPayloadPkg: Scan for Option ROMs Marcello Sylvester Bauer
` (2 subsequent siblings)
3 siblings, 1 reply; 10+ messages in thread
From: Marcello Sylvester Bauer @ 2020-09-15 12:26 UTC (permalink / raw)
To: devel; +Cc: Patrick Rudolph, Christian Walter, Hao A Wu, Jian J Wang, Ray Ni
From: Patrick Rudolph <patrick.rudolph@9elements.com>
The Option ROM scanner can't work as enumeration was done by the
first stage bootloader. Running it will disable the ability of the
PCIPlatform code to scan for ROMs.
Required for the following patch that enables custom Option ROM
scanning using gPciPlatformProtocol.
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Signed-off-by: Marcello Sylvester Bauer <marcello.bauer@9elements.com>
Cc: Patrick Rudolph <patrick.rudolph@9elements.com>
Cc: Christian Walter <christian.walter@9elements.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
index 6c68a97d4e46..7420f0079f7d 100644
--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
@@ -2530,10 +2530,12 @@ PciEnumeratorLight (
//
RemoveRejectedPciDevices (RootBridgeDev->Handle, RootBridgeDev);
- //
- // Process option rom light
- //
- ProcessOptionRomLight (RootBridgeDev);
+ if (!PcdGetBool (PcdPciDisableBusEnumeration)) {
+ //
+ // Process option rom light
+ //
+ ProcessOptionRomLight (RootBridgeDev);
+ }
//
// Determine attributes for all devices under this root bridge
--
2.28.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 2/2] UefiPayloadPkg: Scan for Option ROMs
2020-09-15 12:26 [PATCH v2 0/2] Add support for scanning Option ROMs Marcello Sylvester Bauer
2020-09-15 12:26 ` [PATCH v2 1/2] MdeModulePkg: Fix OptionROM scanning Marcello Sylvester Bauer
@ 2020-09-15 12:26 ` Marcello Sylvester Bauer
2020-09-16 8:28 ` [edk2-devel] [PATCH v2 0/2] Add support for scanning " Ni, Ray
[not found] ` <16353648FD0ACD96.16285@groups.io>
3 siblings, 0 replies; 10+ messages in thread
From: Marcello Sylvester Bauer @ 2020-09-15 12:26 UTC (permalink / raw)
To: devel
Cc: Patrick Rudolph, Christian Walter, Maurice Ma, Nate DeSimone,
Star Zeng
From: Patrick Rudolph <patrick.rudolph@9elements.com>
Install the gPciPlatformProtocol to scan for Option ROMs.
For every device we probe the Option ROM and provide a pointer
to the activated BAR if found.
It's safe to assume that all ROM bars have been enumerated,
reserved in the bridge resources and are disabled by default.
Enabling them and leaving them enabled will do no harm.
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Signed-off-by: Marcello Sylvester Bauer <marcello.bauer@9elements.com>
Cc: Patrick Rudolph <patrick.rudolph@9elements.com>
Cc: Christian Walter <christian.walter@9elements.com>
Cc: Maurice Ma <maurice.ma@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
---
UefiPayloadPkg/UefiPayloadPkgIa32.dsc | 1 +
UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc | 1 +
UefiPayloadPkg/UefiPayloadPkg.fdf | 1 +
UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf | 46 +++
UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h | 19 +
UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c | 426 ++++++++++++++++++++
6 files changed, 494 insertions(+)
diff --git a/UefiPayloadPkg/UefiPayloadPkgIa32.dsc b/UefiPayloadPkg/UefiPayloadPkgIa32.dsc
index 12d7ffe81416..9f42d2cd6b74 100644
--- a/UefiPayloadPkg/UefiPayloadPkgIa32.dsc
+++ b/UefiPayloadPkg/UefiPayloadPkgIa32.dsc
@@ -513,6 +513,7 @@ [Components.IA32]
MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
!endif
UefiPayloadPkg/GraphicsOutputDxe/GraphicsOutputDxe.inf
+ UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf
#------------------------------
# Build the shell
diff --git a/UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc b/UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc
index 9bae1daa09bb..59fc1b79457b 100644
--- a/UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc
+++ b/UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc
@@ -514,6 +514,7 @@ [Components.X64]
MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
!endif
UefiPayloadPkg/GraphicsOutputDxe/GraphicsOutputDxe.inf
+ UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf
#------------------------------
# Build the shell
diff --git a/UefiPayloadPkg/UefiPayloadPkg.fdf b/UefiPayloadPkg/UefiPayloadPkg.fdf
index 570a8ee7fdc1..9b188724221d 100644
--- a/UefiPayloadPkg/UefiPayloadPkg.fdf
+++ b/UefiPayloadPkg/UefiPayloadPkg.fdf
@@ -151,6 +151,7 @@ [FV.DXEFV]
INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
!endif
INF UefiPayloadPkg/GraphicsOutputDxe/GraphicsOutputDxe.inf
+INF UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf
#
# SCSI/ATA/IDE/DISK Support
diff --git a/UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf b/UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf
new file mode 100644
index 000000000000..96cedad5afc3
--- /dev/null
+++ b/UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf
@@ -0,0 +1,46 @@
+## @file
+# This driver produces gEfiPciPlatform protocol to load PCI Option ROMs
+#
+# Copyright (c) 2020, 9elements Agency GmbH
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PciPlatformDxe
+ FILE_GUID = 86D58F7B-6E7C-401F-BDD4-E32E6D582AAD
+ MODULE_TYPE = UEFI_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = InstallPciPlatformProtocol
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[Sources.common]
+ PciPlatformDxe.h
+ PciPlatformDxe.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+
+[LibraryClasses]
+ UefiDriverEntryPoint
+ UefiBootServicesTableLib
+ DxeServicesTableLib
+ DebugLib
+ MemoryAllocationLib
+ BaseMemoryLib
+ DevicePathLib
+ UefiLib
+ HobLib
+
+[Protocols]
+ gEfiPciPlatformProtocolGuid ## PRODUCES
+ gEfiPciIoProtocolGuid ## COMSUMES
diff --git a/UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h b/UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h
new file mode 100644
index 000000000000..c40518c703f8
--- /dev/null
+++ b/UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h
@@ -0,0 +1,19 @@
+/** @file
+ Header file for a PCI platform driver.
+
+Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+
+**/
+#ifndef _PCI_PLATFORM_DXE_H_
+#define _PCI_PLATFORM_DXE_H_
+#include <PiDxe.h>
+
+#include <IndustryStandard/Pci.h>
+#include <IndustryStandard/Acpi.h>
+#include <IndustryStandard/Pci22.h>
+#include <Protocol/PciIo.h>
+#include <Protocol/PciPlatform.h>
+
+#endif
diff --git a/UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c b/UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c
new file mode 100644
index 000000000000..65a1ba967314
--- /dev/null
+++ b/UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c
@@ -0,0 +1,426 @@
+/** @file
+ This driver will probe for the Option Rom and provide a pointer to
+ the activated BAR if found.
+
+Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+
+**/
+
+#include "PciPlatformDxe.h"
+#include <Bus/Pci/PciBusDxe/PciBus.h>
+#include <Bus/Pci/PciBusDxe/PciOptionRomSupport.h>
+
+//
+// The driver should only start on one graphics controller.
+// So a global flag is used to remember that the driver is already started.
+//
+EFI_HANDLE mDriverHandle = NULL;
+
+/**
+ The notification from the PCI bus enumerator to the platform that it is
+ about to enter a certain phase during the enumeration process.
+
+ @param[in] This The pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
+ @param[in] HostBridge The handle of the host bridge controller.
+ @param[in] Phase The phase of the PCI bus enumeration.
+ @param[in] ExecPhase Defines the execution phase of the PCI chipset driver.
+
+ @retval EFI_SUCCESS The function completed successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+PciPlatformNotify(
+ IN EFI_PCI_PLATFORM_PROTOCOL *This,
+ IN EFI_HANDLE HostBridge,
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase,
+ IN EFI_PCI_EXECUTION_PHASE ExecPhase
+ )
+{
+ return EFI_SUCCESS;
+}
+
+
+/**
+ The notification from the PCI bus enumerator to the platform for each PCI
+ controller at several predefined points during PCI controller initialization.
+
+ @param[in] This The pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
+ @param[in] HostBridge The associated PCI host bridge handle.
+ @param[in] RootBridge The associated PCI root bridge handle.
+ @param[in] PciAddress The address of the PCI device on the PCI bus.
+ @param[in] Phase The phase of the PCI controller enumeration.
+ @param[in] ExecPhase Defines the execution phase of the PCI chipset driver.
+
+ @retval EFI_SUCCESS The function completed successfully.
+
+**/
+EFI_STATUS
+EFIAPI
+PciPlatformPrepController(
+ IN EFI_PCI_PLATFORM_PROTOCOL *This,
+ IN EFI_HANDLE HostBridge,
+ IN EFI_HANDLE RootBridge,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
+ IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase,
+ IN EFI_PCI_EXECUTION_PHASE ExecPhase
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ Gets the PCI device's option ROM.
+
+ @param[in] This The pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
+ @param[in] PciHandle The handle of the PCI device.
+ @param[out] RomImage If the call succeeds, the pointer to the pointer to the option ROM image.
+ Otherwise, this field is undefined. The memory for RomImage is allocated
+ by EFI_PCI_PLATFORM_PROTOCOL.GetPciRom() using the EFI Boot Service AllocatePool().
+ It is the caller's responsibility to free the memory using the EFI Boot Service
+ FreePool(), when the caller is done with the option ROM.
+ @param[out] RomSize If the call succeeds, a pointer to the size of the option ROM size. Otherwise,
+ this field is undefined.
+
+ @retval EFI_SUCCESS The option ROM was available for this device and loaded into memory.
+ @retval EFI_NOT_FOUND No option ROM was available for this device.
+ @retval EFI_OUT_OF_RESOURCES No memory was available to load the option ROM.
+ @retval EFI_DEVICE_ERROR An error occurred in obtaining the option ROM.
+
+**/
+EFI_STATUS
+EFIAPI
+PciGetPciRom (
+ IN CONST EFI_PCI_PLATFORM_PROTOCOL *This,
+ IN EFI_HANDLE PciHandle,
+ OUT VOID **RomImage,
+ OUT UINTN *RomSize
+ )
+{
+ EFI_STATUS Status;
+ IN EFI_PCI_IO_PROTOCOL *PciIo;
+ UINTN PciSegment;
+ UINTN PciBus;
+ UINTN PciDevice;
+ UINTN PciFunction;
+ UINTN RomBarIndex;
+ UINT32 Buffer;
+ UINT32 AllOnes;
+ PCI_IO_DEVICE *PciIoDevice;
+ UINT8 Indicator;
+ UINT16 OffsetPcir;
+ UINT32 RomBarOffset;
+ UINT32 RomBar;
+ BOOLEAN FirstCheck;
+ PCI_EXPANSION_ROM_HEADER *RomHeader;
+ PCI_DATA_STRUCTURE *RomPcir;
+ UINT64 RomImageSize;
+ UINT32 LegacyImageLength;
+ UINT8 *RomInMemory;
+ UINT8 CodeType;
+
+ if (!RomImage || !RomSize) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ *RomImage = NULL;
+ *RomSize = 0;
+
+ Status = gBS->HandleProtocol (
+ PciHandle,
+ &gEfiPciIoProtocolGuid,
+ (VOID **) &PciIo
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_INFO, "%a: Failed to open gEfiPciIoProtocolGuid\n", __FUNCTION__));
+
+ return EFI_UNSUPPORTED;
+ }
+ PciIoDevice = PCI_IO_DEVICE_FROM_PCI_IO_THIS (PciIo);
+
+ //
+ // Get the location of the PCI device
+ //
+ PciIo->GetLocation (
+ PciIo,
+ &PciSegment,
+ &PciBus,
+ &PciDevice,
+ &PciFunction
+ );
+
+ DEBUG ((DEBUG_INFO, "%a: Searching Option ROM on device:\n", __FUNCTION__));
+ DEBUG ((DEBUG_INFO, " PciSegment - %02x\n", PciSegment));
+ DEBUG ((DEBUG_INFO, " PciBus - %02x\n", PciBus));
+ DEBUG ((DEBUG_INFO, " PciDevice - %02x\n", PciDevice));
+ DEBUG ((DEBUG_INFO, " PciFunction - %02x\n", PciFunction));
+
+ //
+ // Offset is 0x30 if is not ppb
+ //
+ RomBarIndex = PCI_EXPANSION_ROM_BASE;
+
+ if (IS_PCI_BRIDGE (&PciIoDevice->Pci)) {
+ //
+ // If is ppb, 0x38
+ //
+ RomBarIndex = PCI_BRIDGE_ROMBAR;
+ }
+
+ //
+ // Backup BAR
+ //
+ Status = PciIo->Pci.Read (
+ PciIo,
+ EfiPciWidthUint32,
+ RomBarIndex,
+ 1,
+ &Buffer
+ );
+ if (EFI_ERROR (Status)) {
+ goto CloseAndReturn;
+ return Status;
+ }
+
+ //
+ // The bit0 is 0 to prevent the enabling of the Rom address decoder
+ //
+ AllOnes = 0xfffffffe;
+
+ Status = PciIo->Pci.Write (
+ PciIo,
+ EfiPciWidthUint32,
+ RomBarIndex,
+ 1,
+ &AllOnes
+ );
+ if (EFI_ERROR (Status)) {
+ goto CloseAndReturn;
+ }
+
+ //
+ // Read back
+ //
+ Status = PciIo->Pci.Read(
+ PciIo,
+ EfiPciWidthUint32,
+ RomBarIndex,
+ 1,
+ &AllOnes
+ );
+ if (EFI_ERROR (Status)) {
+ goto CloseAndReturn;
+ }
+
+ //
+ // Bits [1, 10] are reserved
+ //
+ AllOnes &= 0xFFFFF800;
+ if ((AllOnes == 0) || (AllOnes == 0xFFFFF800)) {
+ DEBUG ((DEBUG_INFO, "%a: No Option ROM found\n", __FUNCTION__));
+ return EFI_NOT_FOUND;
+ }
+
+ *RomSize = (~AllOnes) + 1;
+
+ DEBUG ((DEBUG_INFO, "%a: Option ROM with size %d\n", __FUNCTION__, *RomSize));
+
+ //
+ // Restore BAR and enable it
+ //
+ Buffer |= 1;
+ Status = PciIo->Pci.Write (
+ PciIo,
+ EfiPciWidthUint32,
+ RomBarIndex,
+ 1,
+ &Buffer
+ );
+ if (EFI_ERROR (Status)) {
+ goto CloseAndReturn;
+ }
+
+ //
+ // Allocate memory for Rom header and PCIR
+ //
+ RomHeader = AllocatePool (sizeof (PCI_EXPANSION_ROM_HEADER));
+ if (RomHeader == NULL) {
+ Status = EFI_OUT_OF_RESOURCES;
+ goto CloseAndReturn;
+ }
+
+ RomPcir = AllocatePool (sizeof (PCI_DATA_STRUCTURE));
+ if (RomPcir == NULL) {
+ FreePool (RomHeader);
+ Status = EFI_OUT_OF_RESOURCES;
+ goto CloseAndReturn;
+ }
+
+ // FIXME: Use gEfiPciRootBridgeIoProtocolGuid
+ RomBar = (UINT32) Buffer &~1;
+
+ RomBarOffset = RomBar;
+ FirstCheck = TRUE;
+ LegacyImageLength = 0;
+ RomImageSize = 0;
+
+ do {
+ // FIXME: Use gEfiPciRootBridgeIoProtocolGuid
+ CopyMem(RomHeader, (VOID *)(UINTN)RomBarOffset, sizeof (PCI_EXPANSION_ROM_HEADER));
+
+ DEBUG ((DEBUG_INFO, "%a: RomHeader->Signature %x\n", __FUNCTION__, RomHeader->Signature));
+
+ if (RomHeader->Signature != PCI_EXPANSION_ROM_HEADER_SIGNATURE) {
+
+ RomBarOffset = RomBarOffset + 512;
+ if (FirstCheck) {
+ break;
+ } else {
+ RomImageSize = RomImageSize + 512;
+ continue;
+ }
+ }
+
+ FirstCheck = FALSE;
+ OffsetPcir = RomHeader->PcirOffset;
+ //
+ // If the pointer to the PCI Data Structure is invalid, no further images can be located.
+ // The PCI Data Structure must be DWORD aligned.
+ //
+ if (OffsetPcir == 0 ||
+ (OffsetPcir & 3) != 0 ||
+ RomImageSize + OffsetPcir + sizeof (PCI_DATA_STRUCTURE) > *RomSize) {
+ break;
+ }
+ // FIXME: Use gEfiPciRootBridgeIoProtocolGuid
+ CopyMem(RomPcir, (VOID *)(UINTN)RomBarOffset + OffsetPcir, sizeof (PCI_DATA_STRUCTURE));
+
+ DEBUG ((DEBUG_INFO, "%a: RomPcir->Signature %x\n", __FUNCTION__, RomPcir->Signature));
+
+ //
+ // If a valid signature is not present in the PCI Data Structure, no further images can be located.
+ //
+ if (RomPcir->Signature != PCI_DATA_STRUCTURE_SIGNATURE) {
+ break;
+ }
+ if (RomImageSize + RomPcir->ImageLength * 512 > *RomSize) {
+ break;
+ }
+ if (RomPcir->CodeType == PCI_CODE_TYPE_PCAT_IMAGE) {
+ CodeType = PCI_CODE_TYPE_PCAT_IMAGE;
+ LegacyImageLength = ((UINT32)((EFI_LEGACY_EXPANSION_ROM_HEADER *)RomHeader)->Size512) * 512;
+ }
+ Indicator = RomPcir->Indicator;
+ RomImageSize = RomImageSize + RomPcir->ImageLength * 512;
+ RomBarOffset = RomBarOffset + RomPcir->ImageLength * 512;
+ } while (((Indicator & 0x80) == 0x00) && ((RomBarOffset - RomBar) < *RomSize));
+
+ //
+ // Some Legacy Cards do not report the correct ImageLength so used the maximum
+ // of the legacy length and the PCIR Image Length
+ //
+ if (CodeType == PCI_CODE_TYPE_PCAT_IMAGE) {
+ RomImageSize = MAX (RomImageSize, LegacyImageLength);
+ }
+
+ if (RomImageSize > 0) {
+ // FIXME: Use gEfiPciRootBridgeIoProtocolGuid
+ RomInMemory = (VOID *)(UINTN)RomBar;
+ }
+
+ //
+ // Free allocated memory
+ //
+ FreePool (RomHeader);
+ FreePool (RomPcir);
+
+ if (RomImageSize > 0) {
+ *RomImage = RomInMemory;
+ *RomSize = RomImageSize;
+ DEBUG ((DEBUG_INFO, "%a: Found Option ROM at %p, length 0x%x\n", __FUNCTION__,
+ RomInMemory, RomImageSize));
+
+ Status = EFI_SUCCESS;
+ } else {
+ Status = EFI_NOT_FOUND;
+ }
+
+CloseAndReturn:
+ //
+ // Close the I/O Abstraction(s) used to perform the supported test
+ //
+ gBS->CloseProtocol (
+ PciHandle,
+ &gEfiPciIoProtocolGuid,
+ PciIo,
+ PciHandle
+ );
+
+ return Status;
+}
+
+/**
+ Retrieves the platform policy regarding enumeration.
+
+ The GetPlatformPolicy() function retrieves the platform policy regarding PCI
+ enumeration. The PCI bus driver and the PCI Host Bridge Resource Allocation Protocol
+ driver can call this member function to retrieve the policy.
+
+ @param[in] This The pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
+ @param[out] PciPolicy The platform policy with respect to VGA and ISA aliasing.
+
+ @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_INVALID_PARAMETER PciPolicy is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+PciGetPlatformPolicy (
+ IN CONST EFI_PCI_PLATFORM_PROTOCOL *This,
+ OUT EFI_PCI_PLATFORM_POLICY *PciPolicy
+ )
+{
+ if (PciPolicy == NULL)
+ return EFI_INVALID_PARAMETER;
+
+ *PciPolicy = 0;
+
+ return EFI_SUCCESS;
+}
+
+EFI_PCI_PLATFORM_PROTOCOL mPciPlatformProtocol = {
+ PciPlatformNotify,
+ PciPlatformPrepController,
+ PciGetPlatformPolicy,
+ PciGetPciRom,
+};
+
+/**
+ The Entry Point for Option ROM driver.
+
+ It installs DriverBinding.
+
+ @retval EFI_SUCCESS The entry point is executed successfully.
+ @retval other Some error occurs when executing this entry point.
+
+**/
+EFI_STATUS
+EFIAPI
+InstallPciPlatformProtocol (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+
+ Status = gBS->InstallProtocolInterface (
+ &mDriverHandle,
+ &gEfiPciPlatformProtocolGuid,
+ EFI_NATIVE_INTERFACE,
+ &mPciPlatformProtocol
+ );
+
+ return Status;
+}
--
2.28.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH v2 1/2] MdeModulePkg: Fix OptionROM scanning
2020-09-15 12:26 ` [PATCH v2 1/2] MdeModulePkg: Fix OptionROM scanning Marcello Sylvester Bauer
@ 2020-09-15 12:34 ` Laszlo Ersek
0 siblings, 0 replies; 10+ messages in thread
From: Laszlo Ersek @ 2020-09-15 12:34 UTC (permalink / raw)
To: Anthony Perard, Julien Grall, Rebecca Cran, Peter Grehan
Cc: devel, marcello.bauer, Patrick Rudolph, Christian Walter,
Hao A Wu, Jian J Wang, Ray Ni
Anthony, Julien, Rebecca, Peter,
FYI:
On 09/15/20 14:26, Marcello Sylvester Bauer wrote:
> From: Patrick Rudolph <patrick.rudolph@9elements.com>
>
> The Option ROM scanner can't work as enumeration was done by the
> first stage bootloader. Running it will disable the ability of the
> PCIPlatform code to scan for ROMs.
>
> Required for the following patch that enables custom Option ROM
> scanning using gPciPlatformProtocol.
>
> Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
> Signed-off-by: Marcello Sylvester Bauer <marcello.bauer@9elements.com>
> Cc: Patrick Rudolph <patrick.rudolph@9elements.com>
> Cc: Christian Walter <christian.walter@9elements.com>
> Cc: Hao A Wu <hao.a.wu@intel.com>
> Cc: Jian J Wang <jian.j.wang@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> ---
> MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c | 10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
> index 6c68a97d4e46..7420f0079f7d 100644
> --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
> +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
> @@ -2530,10 +2530,12 @@ PciEnumeratorLight (
> //
> RemoveRejectedPciDevices (RootBridgeDev->Handle, RootBridgeDev);
>
> - //
> - // Process option rom light
> - //
> - ProcessOptionRomLight (RootBridgeDev);
> + if (!PcdGetBool (PcdPciDisableBusEnumeration)) {
> + //
> + // Process option rom light
> + //
> + ProcessOptionRomLight (RootBridgeDev);
> + }
>
> //
> // Determine attributes for all devices under this root bridge
>
I suggest checking the effects of this patch on Xen and bhyve.
Thanks
Laszlo
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH v2 0/2] Add support for scanning Option ROMs
2020-09-15 12:26 [PATCH v2 0/2] Add support for scanning Option ROMs Marcello Sylvester Bauer
2020-09-15 12:26 ` [PATCH v2 1/2] MdeModulePkg: Fix OptionROM scanning Marcello Sylvester Bauer
2020-09-15 12:26 ` [PATCH v2 2/2] UefiPayloadPkg: Scan for Option ROMs Marcello Sylvester Bauer
@ 2020-09-16 8:28 ` Ni, Ray
2020-09-21 13:25 ` Marcello Sylvester Bauer
[not found] ` <16353648FD0ACD96.16285@groups.io>
3 siblings, 1 reply; 10+ messages in thread
From: Ni, Ray @ 2020-09-16 8:28 UTC (permalink / raw)
To: devel@edk2.groups.io, marcello.bauer@9elements.com
Why running it will disable the ability of PciPlatform code to scan for ROMs?
I guess it is because the PciIoDevice->AllOpRomProcessed is set which causes GetPciRom() is skipped.
Can you explain more in the code comment?
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Marcello
> Sylvester Bauer
> Sent: Tuesday, September 15, 2020 8:26 PM
> To: devel@edk2.groups.io
> Subject: [edk2-devel] [PATCH v2 0/2] Add support for scanning Option ROMs
>
> Fix Option ROM enumeration and support scanning.
>
> v2:
> * add correct Maintainer and Reviewer to Cc
> * PciPlatformDxe:
> - Update description
> - add function description
>
> Branch: https://github.com/9elements/edk2-1/tree/UefiPayloadPkg-
> Option_ROMs
> PR: https://github.com/tianocore/edk2/pull/926
>
> Patrick Rudolph (2):
> MdeModulePkg: Fix OptionROM scanning
> UefiPayloadPkg: Scan for Option ROMs
>
> UefiPayloadPkg/UefiPayloadPkgIa32.dsc | 1 +
> UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc | 1 +
> UefiPayloadPkg/UefiPayloadPkg.fdf | 1 +
> UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf | 46 +++
> UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h | 19 +
> MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c | 10 +-
> UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c | 426
> ++++++++++++++++++++
> 7 files changed, 500 insertions(+), 4 deletions(-)
> create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf
> create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h
> create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c
>
> --
> 2.28.0
>
>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH v2 0/2] Add support for scanning Option ROMs
[not found] ` <16353648FD0ACD96.16285@groups.io>
@ 2020-09-17 1:41 ` Ni, Ray
0 siblings, 0 replies; 10+ messages in thread
From: Ni, Ray @ 2020-09-17 1:41 UTC (permalink / raw)
To: devel@edk2.groups.io, Ni, Ray, marcello.bauer@9elements.com
Another comment:
In your UefiPayloadPkg change, you have an assumption that the option ROM BAR still contain the correct base address.
Is it always true in real world? Do you think maybe the boot loader should supply a MMIO space range so UeifPayloadPkg
can use for option rom decoding?
Thanks,
Ray
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Ni, Ray
> Sent: Wednesday, September 16, 2020 4:29 PM
> To: devel@edk2.groups.io; marcello.bauer@9elements.com
> Subject: Re: [edk2-devel] [PATCH v2 0/2] Add support for scanning Option ROMs
>
> Why running it will disable the ability of PciPlatform code to scan for ROMs?
>
> I guess it is because the PciIoDevice->AllOpRomProcessed is set which causes GetPciRom() is skipped.
>
> Can you explain more in the code comment?
>
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Marcello
> > Sylvester Bauer
> > Sent: Tuesday, September 15, 2020 8:26 PM
> > To: devel@edk2.groups.io
> > Subject: [edk2-devel] [PATCH v2 0/2] Add support for scanning Option ROMs
> >
> > Fix Option ROM enumeration and support scanning.
> >
> > v2:
> > * add correct Maintainer and Reviewer to Cc
> > * PciPlatformDxe:
> > - Update description
> > - add function description
> >
> > Branch: https://github.com/9elements/edk2-1/tree/UefiPayloadPkg-
> > Option_ROMs
> > PR: https://github.com/tianocore/edk2/pull/926
> >
> > Patrick Rudolph (2):
> > MdeModulePkg: Fix OptionROM scanning
> > UefiPayloadPkg: Scan for Option ROMs
> >
> > UefiPayloadPkg/UefiPayloadPkgIa32.dsc | 1 +
> > UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc | 1 +
> > UefiPayloadPkg/UefiPayloadPkg.fdf | 1 +
> > UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf | 46 +++
> > UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h | 19 +
> > MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c | 10 +-
> > UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c | 426
> > ++++++++++++++++++++
> > 7 files changed, 500 insertions(+), 4 deletions(-)
> > create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf
> > create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h
> > create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c
> >
> > --
> > 2.28.0
> >
> >
> >
>
>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH v2 0/2] Add support for scanning Option ROMs
2020-09-16 8:28 ` [edk2-devel] [PATCH v2 0/2] Add support for scanning " Ni, Ray
@ 2020-09-21 13:25 ` Marcello Sylvester Bauer
2020-09-22 23:58 ` Michael D Kinney
0 siblings, 1 reply; 10+ messages in thread
From: Marcello Sylvester Bauer @ 2020-09-21 13:25 UTC (permalink / raw)
To: Ni, Ray; +Cc: devel@edk2.groups.io
[-- Attachment #1: Type: text/plain, Size: 3151 bytes --]
hi Ray,
> I guess it is because the PciIoDevice->AllOpRomProcessed is set which
causes GetPciRom() is skipped.
exactly. Therefore we need this for the gPciPlatformProtocol implementation
to work.
I will add this information as a code comment.
> In your UefiPayloadPkg change, you have an assumption that the option ROM
BAR still contain the correct base address.
> Is it always true in real world? Do you think maybe the boot loader
should supply a MMIO space range so UeifPayloadPkg
> can use for option rom decoding?
Every option ROM in coreboot does have it's own memory space and can not be
provided as MMIO space range. Probably we could
add some kind of validation to verify the validity of the base address.
thanks,
Marcello
On Wed, Sep 16, 2020 at 10:28 AM Ni, Ray <ray.ni@intel.com> wrote:
> Why running it will disable the ability of PciPlatform code to scan for
> ROMs?
>
> I guess it is because the PciIoDevice->AllOpRomProcessed is set which
> causes GetPciRom() is skipped.
>
> Can you explain more in the code comment?
>
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Marcello
> > Sylvester Bauer
> > Sent: Tuesday, September 15, 2020 8:26 PM
> > To: devel@edk2.groups.io
> > Subject: [edk2-devel] [PATCH v2 0/2] Add support for scanning Option ROMs
> >
> > Fix Option ROM enumeration and support scanning.
> >
> > v2:
> > * add correct Maintainer and Reviewer to Cc
> > * PciPlatformDxe:
> > - Update description
> > - add function description
> >
> > Branch: https://github.com/9elements/edk2-1/tree/UefiPayloadPkg-
> > Option_ROMs
> > PR: https://github.com/tianocore/edk2/pull/926
> >
> > Patrick Rudolph (2):
> > MdeModulePkg: Fix OptionROM scanning
> > UefiPayloadPkg: Scan for Option ROMs
> >
> > UefiPayloadPkg/UefiPayloadPkgIa32.dsc | 1 +
> > UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc | 1 +
> > UefiPayloadPkg/UefiPayloadPkg.fdf | 1 +
> > UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf | 46 +++
> > UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h | 19 +
> > MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c | 10 +-
> > UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c | 426
> > ++++++++++++++++++++
> > 7 files changed, 500 insertions(+), 4 deletions(-)
> > create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf
> > create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h
> > create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c
> >
> > --
> > 2.28.0
> >
> >
> >
>
>
--
*[Marcello Sylvester Bauer]*
9elements Agency GmbH, Kortumstraße 19-21, 44787 Bochum, Germany
Email: [DEINE EMAIL ADDRESSE]
<https://static.9elements.com/email_signatur.html>
Phone: *+49 234 68 94 188 <+492346894188>*
Mobile: *+49 1722847618 <+491722847618>*
Sitz der Gesellschaft: Bochum
Handelsregister: Amtsgericht Bochum, HRB 17519
Geschäftsführung: Sebastian Deutsch, Eray Basar
Datenschutzhinweise nach Art. 13 DSGVO <https://9elements.com/privacy>
[-- Attachment #2: Type: text/html, Size: 6101 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH v2 0/2] Add support for scanning Option ROMs
2020-09-21 13:25 ` Marcello Sylvester Bauer
@ 2020-09-22 23:58 ` Michael D Kinney
2020-11-10 15:01 ` Marcello Sylvester Bauer
0 siblings, 1 reply; 10+ messages in thread
From: Michael D Kinney @ 2020-09-22 23:58 UTC (permalink / raw)
To: devel@edk2.groups.io, marcello.bauer@9elements.com, Ni, Ray,
Kinney, Michael D
[-- Attachment #1: Type: text/plain, Size: 3846 bytes --]
Marcello,
If the assumption in this env is that PCI enumeration has already been done, would it make
more sense for the component that performed PCI enumeration to collect the PCI Option ROM
contents and pass them into the UefiPayLoadPkg in memory buffers and have the PCI Platform Protocol
provide the PCI Option ROM images from these memory buffers?
Thanks,
Mike
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Marcello Sylvester Bauer
Sent: Monday, September 21, 2020 6:25 AM
To: Ni, Ray <ray.ni@intel.com>
Cc: devel@edk2.groups.io
Subject: Re: [edk2-devel] [PATCH v2 0/2] Add support for scanning Option ROMs
hi Ray,
> I guess it is because the PciIoDevice->AllOpRomProcessed is set which causes GetPciRom() is skipped.
exactly. Therefore we need this for the gPciPlatformProtocol implementation to work.
I will add this information as a code comment.
> In your UefiPayloadPkg change, you have an assumption that the option ROM BAR still contain the correct base address.
> Is it always true in real world? Do you think maybe the boot loader should supply a MMIO space range so UeifPayloadPkg
> can use for option rom decoding?
Every option ROM in coreboot does have it's own memory space and can not be provided as MMIO space range. Probably we could
add some kind of validation to verify the validity of the base address.
thanks,
Marcello
On Wed, Sep 16, 2020 at 10:28 AM Ni, Ray <ray.ni@intel.com<mailto:ray.ni@intel.com>> wrote:
Why running it will disable the ability of PciPlatform code to scan for ROMs?
I guess it is because the PciIoDevice->AllOpRomProcessed is set which causes GetPciRom() is skipped.
Can you explain more in the code comment?
> -----Original Message-----
> From: devel@edk2.groups.io<mailto:devel@edk2.groups.io> <devel@edk2.groups.io<mailto:devel@edk2.groups.io>> On Behalf Of Marcello
> Sylvester Bauer
> Sent: Tuesday, September 15, 2020 8:26 PM
> To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
> Subject: [edk2-devel] [PATCH v2 0/2] Add support for scanning Option ROMs
>
> Fix Option ROM enumeration and support scanning.
>
> v2:
> * add correct Maintainer and Reviewer to Cc
> * PciPlatformDxe:
> - Update description
> - add function description
>
> Branch: https://github.com/9elements/edk2-1/tree/UefiPayloadPkg-
> Option_ROMs
> PR: https://github.com/tianocore/edk2/pull/926
>
> Patrick Rudolph (2):
> MdeModulePkg: Fix OptionROM scanning
> UefiPayloadPkg: Scan for Option ROMs
>
> UefiPayloadPkg/UefiPayloadPkgIa32.dsc | 1 +
> UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc | 1 +
> UefiPayloadPkg/UefiPayloadPkg.fdf | 1 +
> UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf | 46 +++
> UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h | 19 +
> MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c | 10 +-
> UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c | 426
> ++++++++++++++++++++
> 7 files changed, 500 insertions(+), 4 deletions(-)
> create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf
> create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h
> create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c
>
> --
> 2.28.0
>
>
>
--
[Marcello Sylvester Bauer]
[http://static.9elements.com/logo-signature.png]
9elements Agency GmbH, Kortumstraße 19-21, 44787 Bochum, Germany
Email: [DEINE EMAIL ADDRESSE]<https://static.9elements.com/email_signatur.html>
Phone: +49 234 68 94 188<tel:+492346894188>
Mobile: +49 1722847618<tel:+491722847618>
Sitz der Gesellschaft: Bochum
Handelsregister: Amtsgericht Bochum, HRB 17519
Geschäftsführung: Sebastian Deutsch, Eray Basar
Datenschutzhinweise nach Art. 13 DSGVO<https://9elements.com/privacy>
[-- Attachment #2: Type: text/html, Size: 49020 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH v2 0/2] Add support for scanning Option ROMs
2020-09-22 23:58 ` Michael D Kinney
@ 2020-11-10 15:01 ` Marcello Sylvester Bauer
2024-10-09 9:11 ` Dmitry Ponamorev
0 siblings, 1 reply; 10+ messages in thread
From: Marcello Sylvester Bauer @ 2020-11-10 15:01 UTC (permalink / raw)
To: Kinney, Michael D; +Cc: devel@edk2.groups.io, Ni, Ray
[-- Attachment #1: Type: text/plain, Size: 5539 bytes --]
Hi,
> If the assumption in this env is that PCI enumeration has already been
done, would it make
more sense for the component that performed PCI enumeration to collect the
PCI Option ROM
contents and pass them into the UefiPayLoadPkg in memory buffers and have
the PCI Platform Protocol provide the PCI Option ROM images from these
memory buffers?
We did not plan to add extra memory buffers to pass PCI Option ROMs. Is
there any benefit to creating it?
> In your UefiPayloadPkg change, you have an assumption that the option ROM BAR
still contain the correct base address. Is it always true in real world? Do
you think maybe the boot loader should supply a MMIO space range so
UeifPayloadPkg can use for option rom decoding?
We could update UefiPayloadPkg/BuildAndIntegrationInstructions.txt and make
this a requirement for the boot loader to make all option ROM BARs contain
a valid base address.
Thanks,
Marcello
On Wed, Sep 23, 2020 at 1:58 AM Kinney, Michael D <
michael.d.kinney@intel.com> wrote:
> Marcello,
>
>
>
> If the assumption in this env is that PCI enumeration has already been
> done, would it make
>
> more sense for the component that performed PCI enumeration to collect the
> PCI Option ROM
>
> contents and pass them into the UefiPayLoadPkg in memory buffers and have
> the PCI Platform Protocol
>
> provide the PCI Option ROM images from these memory buffers?
>
>
>
> Thanks,
>
>
>
> Mike
>
>
>
> *From:* devel@edk2.groups.io <devel@edk2.groups.io> *On Behalf Of *Marcello
> Sylvester Bauer
> *Sent:* Monday, September 21, 2020 6:25 AM
> *To:* Ni, Ray <ray.ni@intel.com>
> *Cc:* devel@edk2.groups.io
> *Subject:* Re: [edk2-devel] [PATCH v2 0/2] Add support for scanning
> Option ROMs
>
>
>
> hi Ray,
>
> > I guess it is because the PciIoDevice->AllOpRomProcessed is set which
> causes GetPciRom() is skipped.
>
> exactly. Therefore we need this for the gPciPlatformProtocol
> implementation to work.
> I will add this information as a code comment.
>
> > In your UefiPayloadPkg change, you have an assumption that the option
> ROM BAR still contain the correct base address.
> > Is it always true in real world? Do you think maybe the boot loader
> should supply a MMIO space range so UeifPayloadPkg
> > can use for option rom decoding?
>
> Every option ROM in coreboot does have it's own memory space and can not
> be provided as MMIO space range. Probably we could
> add some kind of validation to verify the validity of the base address.
>
> thanks,
> Marcello
>
>
>
> On Wed, Sep 16, 2020 at 10:28 AM Ni, Ray <ray.ni@intel.com> wrote:
>
> Why running it will disable the ability of PciPlatform code to scan for
> ROMs?
>
> I guess it is because the PciIoDevice->AllOpRomProcessed is set which
> causes GetPciRom() is skipped.
>
> Can you explain more in the code comment?
>
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Marcello
> > Sylvester Bauer
> > Sent: Tuesday, September 15, 2020 8:26 PM
> > To: devel@edk2.groups.io
> > Subject: [edk2-devel] [PATCH v2 0/2] Add support for scanning Option ROMs
> >
> > Fix Option ROM enumeration and support scanning.
> >
> > v2:
> > * add correct Maintainer and Reviewer to Cc
> > * PciPlatformDxe:
> > - Update description
> > - add function description
> >
> > Branch: https://github.com/9elements/edk2-1/tree/UefiPayloadPkg-
> > Option_ROMs
> > PR: https://github.com/tianocore/edk2/pull/926
> >
> > Patrick Rudolph (2):
> > MdeModulePkg: Fix OptionROM scanning
> > UefiPayloadPkg: Scan for Option ROMs
> >
> > UefiPayloadPkg/UefiPayloadPkgIa32.dsc | 1 +
> > UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc | 1 +
> > UefiPayloadPkg/UefiPayloadPkg.fdf | 1 +
> > UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf | 46 +++
> > UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h | 19 +
> > MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c | 10 +-
> > UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c | 426
> > ++++++++++++++++++++
> > 7 files changed, 500 insertions(+), 4 deletions(-)
> > create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.inf
> > create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.h
> > create mode 100644 UefiPayloadPkg/PciPlatformDxe/PciPlatformDxe.c
> >
> > --
> > 2.28.0
> >
> >
> >
>
>
>
>
> --
>
> *[Marcello Sylvester Bauer]*
>
>
>
> 9elements Agency GmbH, Kortumstraße 19-21, 44787 Bochum, Germany
>
> Email: [DEINE EMAIL ADDRESSE]
> <https://static.9elements.com/email_signatur.html>
>
> Phone: *+49 234 68 94 188 <+492346894188>*
>
> Mobile: *+49 1722847618 <+491722847618>*
>
>
>
> Sitz der Gesellschaft: Bochum
>
> Handelsregister: Amtsgericht Bochum, HRB 17519
>
> Geschäftsführung: Sebastian Deutsch, Eray Basar
>
>
> Datenschutzhinweise nach Art. 13 DSGVO <https://9elements.com/privacy>
>
>
>
--
*[Marcello Sylvester Bauer]*
9elements Agency GmbH, Kortumstraße 19-21, 44787 Bochum, Germany
Email: [DEINE EMAIL ADDRESSE]
<https://static.9elements.com/email_signatur.html>
Phone: *+49 234 68 94 188 <+492346894188>*
Mobile: *+49 1722847618 <+491722847618>*
Sitz der Gesellschaft: Bochum
Handelsregister: Amtsgericht Bochum, HRB 17519
Geschäftsführung: Sebastian Deutsch, Eray Basar
Datenschutzhinweise nach Art. 13 DSGVO <https://9elements.com/privacy>
[-- Attachment #2: Type: text/html, Size: 14930 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [edk2-devel] [PATCH v2 0/2] Add support for scanning Option ROMs
2020-11-10 15:01 ` Marcello Sylvester Bauer
@ 2024-10-09 9:11 ` Dmitry Ponamorev
0 siblings, 0 replies; 10+ messages in thread
From: Dmitry Ponamorev @ 2024-10-09 9:11 UTC (permalink / raw)
To: Marcello Sylvester Bauer, devel
[-- Attachment #1: Type: text/plain, Size: 757 bytes --]
Hi.
Thank you for this solution. This is a very useful feature for me. Some devices work - they detect and load optional ROM firmware, but some do not.
The presence of optional ROM is confirmed, but 0xFFFF is read instead of signature AA55 and other rom header fields.
Apparently the base address of the optional firmware is incorrect?
How can I debug this problem?
Thanks,
Dmitry
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#120612): https://edk2.groups.io/g/devel/message/120612
Mute This Topic: https://groups.io/mt/76863515/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
[-- Attachment #2: Type: text/html, Size: 2847 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2024-10-09 9:11 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-09-15 12:26 [PATCH v2 0/2] Add support for scanning Option ROMs Marcello Sylvester Bauer
2020-09-15 12:26 ` [PATCH v2 1/2] MdeModulePkg: Fix OptionROM scanning Marcello Sylvester Bauer
2020-09-15 12:34 ` [edk2-devel] " Laszlo Ersek
2020-09-15 12:26 ` [PATCH v2 2/2] UefiPayloadPkg: Scan for Option ROMs Marcello Sylvester Bauer
2020-09-16 8:28 ` [edk2-devel] [PATCH v2 0/2] Add support for scanning " Ni, Ray
2020-09-21 13:25 ` Marcello Sylvester Bauer
2020-09-22 23:58 ` Michael D Kinney
2020-11-10 15:01 ` Marcello Sylvester Bauer
2024-10-09 9:11 ` Dmitry Ponamorev
[not found] ` <16353648FD0ACD96.16285@groups.io>
2020-09-17 1:41 ` Ni, Ray
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox