Add patches 19-24 and fedora conditionals
This commit is contained in:
		
							parent
							
								
									750d890cac
								
							
						
					
					
						commit
						2e34e081c6
					
				| @ -0,0 +1,73 @@ | |||||||
|  | From: Ruiyu Ni <ruiyu.ni@intel.com> | ||||||
|  | Subject: [PATCH] MdeModulePkg/PciBus: Fix bug that PCI BUS claims too much resource | ||||||
|  | Date: Thu, 16 Nov 2017 18:15:14 +0100 | ||||||
|  | 
 | ||||||
|  | The bug was caused by 728d74973c9262b6c7b7ef4be213223d55affec3 | ||||||
|  | "MdeModulePkg/PciBus: Count multiple hotplug resource paddings". | ||||||
|  | 
 | ||||||
|  | The patch firstly updated the Bridge->Alignment to the maximum | ||||||
|  | alignment of all devices under the bridge, then aligned the | ||||||
|  | Bridge->Length to Bridge->Alignment. | ||||||
|  | It caused too much resources were claimed. | ||||||
|  | 
 | ||||||
|  | The new patch firstly aligns Bridge->Length to Bridge->Alignment, | ||||||
|  | then updates the Bridge->Alignment to the maximum alignment of all | ||||||
|  | devices under the bridge. | ||||||
|  | Because the step to update the Bridge->Alignment is to make sure | ||||||
|  | the resource allocated to the bus under the Bridge meets all | ||||||
|  | devices alignment. But the Bridge->Length doesn't have to align | ||||||
|  | to the maximum alignment. | ||||||
|  | 
 | ||||||
|  | Contributed-under: TianoCore Contribution Agreement 1.1 | ||||||
|  | Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> | ||||||
|  | Reviewed-by: Eric Dong <eric.dong@intel.com> | ||||||
|  | (cherry picked from commit 6e3287442774c1a4bc83f127694700eeb07c18dc) | ||||||
|  | ---
 | ||||||
|  |  MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c | 24 ++++++++++---------- | ||||||
|  |  1 file changed, 12 insertions(+), 12 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c b/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
 | ||||||
|  | index 8dbe9a00380f..2f713fcee95e 100644
 | ||||||
|  | --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
 | ||||||
|  | +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
 | ||||||
|  | @@ -389,18 +389,7 @@ CalculateResourceAperture (
 | ||||||
|  |    } | ||||||
|  |   | ||||||
|  |    // | ||||||
|  | -  // Adjust the bridge's alignment to the MAX (first) alignment of all children.
 | ||||||
|  | -  //
 | ||||||
|  | -  CurrentLink = Bridge->ChildList.ForwardLink;
 | ||||||
|  | -  if (CurrentLink != &Bridge->ChildList) {
 | ||||||
|  | -    Node = RESOURCE_NODE_FROM_LINK (CurrentLink);
 | ||||||
|  | -    if (Node->Alignment > Bridge->Alignment) {
 | ||||||
|  | -      Bridge->Alignment = Node->Alignment;
 | ||||||
|  | -    }
 | ||||||
|  | -  }
 | ||||||
|  | -
 | ||||||
|  | -  //
 | ||||||
|  | -  // At last, adjust the aperture with the bridge's alignment
 | ||||||
|  | +  // Adjust the aperture with the bridge's alignment
 | ||||||
|  |    // | ||||||
|  |    Aperture[PciResUsageTypical] = ALIGN_VALUE (Aperture[PciResUsageTypical], Bridge->Alignment + 1); | ||||||
|  |    Aperture[PciResUsagePadding] = ALIGN_VALUE (Aperture[PciResUsagePadding], Bridge->Alignment + 1); | ||||||
|  | @@ -410,6 +399,17 @@ CalculateResourceAperture (
 | ||||||
|  |    // Use the larger one between the padding resource and actual occupied resource. | ||||||
|  |    // | ||||||
|  |    Bridge->Length = MAX (Aperture[PciResUsageTypical], Aperture[PciResUsagePadding]); | ||||||
|  | +
 | ||||||
|  | +  //
 | ||||||
|  | +  // Adjust the bridge's alignment to the MAX (first) alignment of all children.
 | ||||||
|  | +  //
 | ||||||
|  | +  CurrentLink = Bridge->ChildList.ForwardLink;
 | ||||||
|  | +  if (CurrentLink != &Bridge->ChildList) {
 | ||||||
|  | +    Node = RESOURCE_NODE_FROM_LINK (CurrentLink);
 | ||||||
|  | +    if (Node->Alignment > Bridge->Alignment) {
 | ||||||
|  | +      Bridge->Alignment = Node->Alignment;
 | ||||||
|  | +    }
 | ||||||
|  | +  }
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  /** | ||||||
|  | -- 
 | ||||||
|  | 2.14.1.3.gb7cf6e02401b | ||||||
|  | 
 | ||||||
							
								
								
									
										34
									
								
								0020-MdeModulePkg-Bds-Remove-assertion-in-BmCharToUint.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								0020-MdeModulePkg-Bds-Remove-assertion-in-BmCharToUint.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | |||||||
|  | From: Ruiyu Ni <ruiyu.ni@intel.com> | ||||||
|  | Subject: [PATCH] MdeModulePkg/Bds: Remove assertion in BmCharToUint | ||||||
|  | Date: Thu, 16 Nov 2017 18:04:42 +0100 | ||||||
|  | 
 | ||||||
|  | BmCharToUint() could be called using external data and it | ||||||
|  | already contains logic to return -1 when data is invalid, | ||||||
|  | so removing unnecessary assertion to avoid system hang. | ||||||
|  | 
 | ||||||
|  | Contributed-under: TianoCore Contribution Agreement 1.1 | ||||||
|  | Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> | ||||||
|  | Reviewed-by: Laszlo Ersek <lersek@redhat.com> | ||||||
|  | Reviewed-by: Star Zeng <star.zeng@intel.com> | ||||||
|  | Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> | ||||||
|  | (cherry picked from commit 618ef6f9bae14e1543d61993ab7ab8992063e4cc) | ||||||
|  | ---
 | ||||||
|  |  MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c | 1 - | ||||||
|  |  1 file changed, 1 deletion(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c b/MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c
 | ||||||
|  | index 11ab86792a52..a3fa25424592 100644
 | ||||||
|  | --- a/MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c
 | ||||||
|  | +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c
 | ||||||
|  | @@ -420,7 +420,6 @@ BmCharToUint (
 | ||||||
|  |      return (Char - L'A' + 0xA); | ||||||
|  |    } | ||||||
|  |   | ||||||
|  | -  ASSERT (FALSE);
 | ||||||
|  |    return (UINTN) -1; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -- 
 | ||||||
|  | 2.14.1.3.gb7cf6e02401b | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,105 @@ | |||||||
|  | From: Ruiyu Ni <ruiyu.ni@intel.com> | ||||||
|  | Subject: [PATCH] MdeModulePkg/Bds: Check variable name even *if* OptionNumber is NULL | ||||||
|  | Date: Thu, 16 Nov 2017 18:04:43 +0100 | ||||||
|  | 
 | ||||||
|  | Current implementation skips to check whether the last four | ||||||
|  | characters are digits when the OptionNumber is NULL. | ||||||
|  | Even worse, it may incorrectly return FALSE when OptionNumber is | ||||||
|  | NULL. | ||||||
|  | 
 | ||||||
|  | The patch fixes it to always check the variable name even | ||||||
|  | OptionNumber is NULL. | ||||||
|  | 
 | ||||||
|  | Contributed-under: TianoCore Contribution Agreement 1.1 | ||||||
|  | Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> | ||||||
|  | Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> | ||||||
|  | Reviewed-by: Laszlo Ersek <lersek@redhat.com> | ||||||
|  | (cherry picked from commit 5e6e2dcc380dcd841f6f979fea8c302c80a87ec3) | ||||||
|  | ---
 | ||||||
|  |  MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c | 45 +++++++++++++------- | ||||||
|  |  1 file changed, 30 insertions(+), 15 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c b/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c
 | ||||||
|  | index b0a35058d02b..32918caf324c 100644
 | ||||||
|  | --- a/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c
 | ||||||
|  | +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c
 | ||||||
|  | @@ -785,6 +785,8 @@ EfiBootManagerIsValidLoadOptionVariableName (
 | ||||||
|  |    UINTN                             VariableNameLen; | ||||||
|  |    UINTN                             Index; | ||||||
|  |    UINTN                             Uint; | ||||||
|  | +  EFI_BOOT_MANAGER_LOAD_OPTION_TYPE LocalOptionType;
 | ||||||
|  | +  UINT16                            LocalOptionNumber;
 | ||||||
|  |   | ||||||
|  |    if (VariableName == NULL) { | ||||||
|  |      return FALSE; | ||||||
|  | @@ -792,39 +794,52 @@ EfiBootManagerIsValidLoadOptionVariableName (
 | ||||||
|  |   | ||||||
|  |    VariableNameLen = StrLen (VariableName); | ||||||
|  |   | ||||||
|  | +  //
 | ||||||
|  | +  // Return FALSE when the variable name length is too small.
 | ||||||
|  | +  //
 | ||||||
|  |    if (VariableNameLen <= 4) { | ||||||
|  |      return FALSE; | ||||||
|  |    } | ||||||
|  |   | ||||||
|  | -  for (Index = 0; Index < ARRAY_SIZE (mBmLoadOptionName); Index++) {
 | ||||||
|  | -    if ((VariableNameLen - 4 == StrLen (mBmLoadOptionName[Index])) &&
 | ||||||
|  | -        (StrnCmp (VariableName, mBmLoadOptionName[Index], VariableNameLen - 4) == 0)
 | ||||||
|  | +  //
 | ||||||
|  | +  // Return FALSE when the variable name doesn't start with Driver/SysPrep/Boot/PlatformRecovery.
 | ||||||
|  | +  //
 | ||||||
|  | +  for (LocalOptionType = 0; LocalOptionType < ARRAY_SIZE (mBmLoadOptionName); LocalOptionType++) {
 | ||||||
|  | +    if ((VariableNameLen - 4 == StrLen (mBmLoadOptionName[LocalOptionType])) &&
 | ||||||
|  | +        (StrnCmp (VariableName, mBmLoadOptionName[LocalOptionType], VariableNameLen - 4) == 0)
 | ||||||
|  |          ) { | ||||||
|  |        break; | ||||||
|  |      } | ||||||
|  |    } | ||||||
|  | +  if (LocalOptionType == ARRAY_SIZE (mBmLoadOptionName)) {
 | ||||||
|  | +    return FALSE;
 | ||||||
|  | +  }
 | ||||||
|  |   | ||||||
|  | -  if (Index == ARRAY_SIZE (mBmLoadOptionName)) {
 | ||||||
|  | +  //
 | ||||||
|  | +  // Return FALSE when the last four characters are not hex digits.
 | ||||||
|  | +  //
 | ||||||
|  | +  LocalOptionNumber = 0;
 | ||||||
|  | +  for (Index = VariableNameLen - 4; Index < VariableNameLen; Index++) {
 | ||||||
|  | +    Uint = BmCharToUint (VariableName[Index]);
 | ||||||
|  | +    if (Uint == -1) {
 | ||||||
|  | +      break;
 | ||||||
|  | +    } else {
 | ||||||
|  | +      LocalOptionNumber = (UINT16) Uint + LocalOptionNumber * 0x10;
 | ||||||
|  | +    }
 | ||||||
|  | +  }
 | ||||||
|  | +  if (Index != VariableNameLen) {
 | ||||||
|  |      return FALSE; | ||||||
|  |    } | ||||||
|  |   | ||||||
|  |    if (OptionType != NULL) { | ||||||
|  | -    *OptionType = (EFI_BOOT_MANAGER_LOAD_OPTION_TYPE) Index;
 | ||||||
|  | +    *OptionType = LocalOptionType;
 | ||||||
|  |    } | ||||||
|  |   | ||||||
|  |    if (OptionNumber != NULL) { | ||||||
|  | -    *OptionNumber = 0;
 | ||||||
|  | -    for (Index = VariableNameLen - 4; Index < VariableNameLen; Index++) {
 | ||||||
|  | -      Uint = BmCharToUint (VariableName[Index]);
 | ||||||
|  | -      if (Uint == -1) {
 | ||||||
|  | -        break;
 | ||||||
|  | -      } else {
 | ||||||
|  | -        *OptionNumber = (UINT16) Uint + *OptionNumber * 0x10;
 | ||||||
|  | -      }
 | ||||||
|  | -    }
 | ||||||
|  | +    *OptionNumber = LocalOptionNumber;
 | ||||||
|  |    } | ||||||
|  |   | ||||||
|  | -  return (BOOLEAN) (Index == VariableNameLen);
 | ||||||
|  | +  return TRUE;
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  /** | ||||||
|  | -- 
 | ||||||
|  | 2.14.1.3.gb7cf6e02401b | ||||||
|  | 
 | ||||||
							
								
								
									
										50
									
								
								0022-OvmfPkg-make-it-a-proper-BASE-library.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								0022-OvmfPkg-make-it-a-proper-BASE-library.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | |||||||
|  | From d9edd0b560db7d32b8b93e82d7051d5cf58e9744 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Paolo Bonzini <pbonzini@redhat.com> | ||||||
|  | Date: Thu, 16 Nov 2017 20:52:57 +0100 | ||||||
|  | Subject: [PATCH 1/3] OvmfPkg: make it a proper BASE library | ||||||
|  | 
 | ||||||
|  | Remove Uefi.h, which includes UefiSpec.h, and change the | ||||||
|  | return value to match RETURN_STATUS. | ||||||
|  | 
 | ||||||
|  | Contributed-under: TianoCore Contribution Agreement 1.1 | ||||||
|  | Cc: Laszlo Ersek <lersek@redhat.com> | ||||||
|  | Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> | ||||||
|  | Cc: Jordan Justen (Intel address) <jordan.l.justen@intel.com> | ||||||
|  | Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> | ||||||
|  | ---
 | ||||||
|  |  OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c | 5 ++--- | ||||||
|  |  1 file changed, 2 insertions(+), 3 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c
 | ||||||
|  | index 5435767c1c..74f4d9c2d6 100644
 | ||||||
|  | --- a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c
 | ||||||
|  | +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c
 | ||||||
|  | @@ -15,7 +15,6 @@
 | ||||||
|  |  **/ | ||||||
|  |   | ||||||
|  |  #include <Base.h> | ||||||
|  | -#include <Uefi.h>
 | ||||||
|  |  #include <Library/DebugLib.h> | ||||||
|  |  #include <Library/BaseLib.h> | ||||||
|  |  #include <Library/IoLib.h> | ||||||
|  | @@ -32,7 +31,7 @@
 | ||||||
|  |  /** | ||||||
|  |    This constructor function does not have to do anything. | ||||||
|  |   | ||||||
|  | -  @retval EFI_SUCCESS   The constructor always returns RETURN_SUCCESS.
 | ||||||
|  | +  @retval RETURN_SUCCESS   The constructor always returns RETURN_SUCCESS.
 | ||||||
|  |   | ||||||
|  |  **/ | ||||||
|  |  RETURN_STATUS | ||||||
|  | @@ -41,7 +40,7 @@ PlatformDebugLibIoPortConstructor (
 | ||||||
|  |    VOID | ||||||
|  |    ) | ||||||
|  |  { | ||||||
|  | -  return EFI_SUCCESS;
 | ||||||
|  | +  return RETURN_SUCCESS;
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  /** | ||||||
|  | -- 
 | ||||||
|  | 2.14.3 | ||||||
|  | 
 | ||||||
							
								
								
									
										254
									
								
								0023-OvmfPkg-create-a-separate-PlatformDebugLibIoPort-ins.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										254
									
								
								0023-OvmfPkg-create-a-separate-PlatformDebugLibIoPort-ins.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,254 @@ | |||||||
|  | From ba774b89b5a206c71a2ce0db8184747fac0f6af7 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Paolo Bonzini <pbonzini@redhat.com> | ||||||
|  | Date: Thu, 16 Nov 2017 10:33:29 +0100 | ||||||
|  | Subject: [PATCH 2/3] OvmfPkg: create a separate PlatformDebugLibIoPort | ||||||
|  |  instance for SEC | ||||||
|  | 
 | ||||||
|  | The next patch will want to add a global variable to | ||||||
|  | PlatformDebugLibIoPort, but this is not suitable for the SEC | ||||||
|  | phase, because SEC runs from read-only flash.  The solution is | ||||||
|  | to have two library instances, one for SEC and another | ||||||
|  | for all other firmware phases.  This patch adds the "plumbing" | ||||||
|  | for the SEC library instance, separating the INF files and | ||||||
|  | moving the constructor to a separate C source file. | ||||||
|  | 
 | ||||||
|  | Contributed-under: TianoCore Contribution Agreement 1.1 | ||||||
|  | Cc: Laszlo Ersek <lersek@redhat.com> | ||||||
|  | Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> | ||||||
|  | Cc: Jordan Justen (Intel address) <jordan.l.justen@intel.com> | ||||||
|  | Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> | ||||||
|  | ---
 | ||||||
|  |  OvmfPkg/OvmfPkgIa32.dsc                            |  2 +- | ||||||
|  |  OvmfPkg/OvmfPkgIa32X64.dsc                         |  2 +- | ||||||
|  |  OvmfPkg/OvmfPkgX64.dsc                             |  2 +- | ||||||
|  |  .../PlatformDebugLibIoPort.inf                     |  3 +- | ||||||
|  |  .../PlatformRomDebugLibIoPort.inf                  | 52 ++++++++++++++++++++++ | ||||||
|  |  OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c  | 15 ------- | ||||||
|  |  .../PlatformDebugLibIoPort/DebugLibDetect.c        | 31 +++++++++++++ | ||||||
|  |  .../PlatformDebugLibIoPort/DebugLibDetectRom.c     | 31 +++++++++++++ | ||||||
|  |  8 files changed, 119 insertions(+), 19 deletions(-) | ||||||
|  |  create mode 100644 OvmfPkg/Library/PlatformDebugLibIoPort/PlatformRomDebugLibIoPort.inf | ||||||
|  |  create mode 100644 OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.c | ||||||
|  |  create mode 100644 OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetectRom.c | ||||||
|  | 
 | ||||||
|  | diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
 | ||||||
|  | index c2f534fdbf..7ccb61147f 100644
 | ||||||
|  | --- a/OvmfPkg/OvmfPkgIa32.dsc
 | ||||||
|  | +++ b/OvmfPkg/OvmfPkgIa32.dsc
 | ||||||
|  | @@ -207,7 +207,7 @@ [LibraryClasses.common.SEC]
 | ||||||
|  |  !ifdef $(DEBUG_ON_SERIAL_PORT) | ||||||
|  |    DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf | ||||||
|  |  !else | ||||||
|  | -  DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf
 | ||||||
|  | +  DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformRomDebugLibIoPort.inf
 | ||||||
|  |  !endif | ||||||
|  |    ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf | ||||||
|  |    ExtractGuidedSectionLib|MdePkg/Library/BaseExtractGuidedSectionLib/BaseExtractGuidedSectionLib.inf | ||||||
|  | diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
 | ||||||
|  | index 9f300a2e6f..237ec71b5e 100644
 | ||||||
|  | --- a/OvmfPkg/OvmfPkgIa32X64.dsc
 | ||||||
|  | +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
 | ||||||
|  | @@ -212,7 +212,7 @@ [LibraryClasses.common.SEC]
 | ||||||
|  |  !ifdef $(DEBUG_ON_SERIAL_PORT) | ||||||
|  |    DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf | ||||||
|  |  !else | ||||||
|  | -  DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf
 | ||||||
|  | +  DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformRomDebugLibIoPort.inf
 | ||||||
|  |  !endif | ||||||
|  |    ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf | ||||||
|  |    ExtractGuidedSectionLib|MdePkg/Library/BaseExtractGuidedSectionLib/BaseExtractGuidedSectionLib.inf | ||||||
|  | diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
 | ||||||
|  | index 1ffcf37f8b..a5047fa38e 100644
 | ||||||
|  | --- a/OvmfPkg/OvmfPkgX64.dsc
 | ||||||
|  | +++ b/OvmfPkg/OvmfPkgX64.dsc
 | ||||||
|  | @@ -212,7 +212,7 @@ [LibraryClasses.common.SEC]
 | ||||||
|  |  !ifdef $(DEBUG_ON_SERIAL_PORT) | ||||||
|  |    DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf | ||||||
|  |  !else | ||||||
|  | -  DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf
 | ||||||
|  | +  DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformRomDebugLibIoPort.inf
 | ||||||
|  |  !endif | ||||||
|  |    ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf | ||||||
|  |    ExtractGuidedSectionLib|MdePkg/Library/BaseExtractGuidedSectionLib/BaseExtractGuidedSectionLib.inf | ||||||
|  | diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf b/OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf
 | ||||||
|  | index 0e74fe94cb..de3c2f542b 100644
 | ||||||
|  | --- a/OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf
 | ||||||
|  | +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf
 | ||||||
|  | @@ -21,7 +21,7 @@ [Defines]
 | ||||||
|  |    FILE_GUID                      = DF934DA3-CD31-49FE-AF50-B3C87C79325F | ||||||
|  |    MODULE_TYPE                    = BASE | ||||||
|  |    VERSION_STRING                 = 1.0 | ||||||
|  | -  LIBRARY_CLASS                  = DebugLib
 | ||||||
|  | +  LIBRARY_CLASS                  = DebugLib|PEI_CORE PEIM DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER SMM_CORE DXE_SMM_DRIVER UEFI_DRIVER UEFI_APPLICATION
 | ||||||
|  |    CONSTRUCTOR                    = PlatformDebugLibIoPortConstructor | ||||||
|  |   | ||||||
|  |  # | ||||||
|  | @@ -30,6 +30,7 @@ [Defines]
 | ||||||
|  |   | ||||||
|  |  [Sources] | ||||||
|  |    DebugLib.c | ||||||
|  | +  DebugLibDetect.c
 | ||||||
|  |   | ||||||
|  |  [Packages] | ||||||
|  |    MdePkg/MdePkg.dec | ||||||
|  | diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/PlatformRomDebugLibIoPort.inf b/OvmfPkg/Library/PlatformDebugLibIoPort/PlatformRomDebugLibIoPort.inf
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000000..491c0318de
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/PlatformRomDebugLibIoPort.inf
 | ||||||
|  | @@ -0,0 +1,52 @@
 | ||||||
|  | +## @file
 | ||||||
|  | +#  Instance of Debug Library for the QEMU debug console port.
 | ||||||
|  | +#  It uses Print Library to produce formatted output strings.
 | ||||||
|  | +#
 | ||||||
|  | +#  Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
 | ||||||
|  | +#  Copyright (c) 2017, Red Hat, Inc.<BR>
 | ||||||
|  | +#
 | ||||||
|  | +#  This program and the accompanying materials
 | ||||||
|  | +#  are licensed and made available under the terms and conditions of the BSD License
 | ||||||
|  | +#  which accompanies this distribution. The full text of the license may be found at
 | ||||||
|  | +#  http://opensource.org/licenses/bsd-license.php.
 | ||||||
|  | +#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | ||||||
|  | +#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | ||||||
|  | +#
 | ||||||
|  | +#
 | ||||||
|  | +##
 | ||||||
|  | +
 | ||||||
|  | +[Defines]
 | ||||||
|  | +  INF_VERSION                    = 0x00010005
 | ||||||
|  | +  BASE_NAME                      = PlatformRomDebugLibIoPort
 | ||||||
|  | +  FILE_GUID                      = CEB0D9D3-328F-4C24-8C02-28FA1986AE1B
 | ||||||
|  | +  MODULE_TYPE                    = BASE
 | ||||||
|  | +  VERSION_STRING                 = 1.0
 | ||||||
|  | +  LIBRARY_CLASS                  = DebugLib|SEC
 | ||||||
|  | +  CONSTRUCTOR                    = PlatformRomDebugLibIoPortConstructor
 | ||||||
|  | +
 | ||||||
|  | +#
 | ||||||
|  | +#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
 | ||||||
|  | +#
 | ||||||
|  | +
 | ||||||
|  | +[Sources]
 | ||||||
|  | +  DebugLib.c
 | ||||||
|  | +  DebugLibDetectRom.c
 | ||||||
|  | +
 | ||||||
|  | +[Packages]
 | ||||||
|  | +  MdePkg/MdePkg.dec
 | ||||||
|  | +  OvmfPkg/OvmfPkg.dec
 | ||||||
|  | +
 | ||||||
|  | +[LibraryClasses]
 | ||||||
|  | +  BaseMemoryLib
 | ||||||
|  | +  IoLib
 | ||||||
|  | +  PcdLib
 | ||||||
|  | +  PrintLib
 | ||||||
|  | +  BaseLib
 | ||||||
|  | +  DebugPrintErrorLevelLib
 | ||||||
|  | +
 | ||||||
|  | +[Pcd]
 | ||||||
|  | +  gUefiOvmfPkgTokenSpaceGuid.PcdDebugIoPort                ## CONSUMES
 | ||||||
|  | +  gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue        ## CONSUMES
 | ||||||
|  | +  gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask            ## CONSUMES
 | ||||||
|  | +  gEfiMdePkgTokenSpaceGuid.PcdFixedDebugPrintErrorLevel    ## CONSUMES
 | ||||||
|  | +
 | ||||||
|  | diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c
 | ||||||
|  | index 74f4d9c2d6..5a1c86f2c3 100644
 | ||||||
|  | --- a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c
 | ||||||
|  | +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c
 | ||||||
|  | @@ -28,21 +28,6 @@
 | ||||||
|  |  // | ||||||
|  |  #define MAX_DEBUG_MESSAGE_LENGTH  0x200 | ||||||
|  |   | ||||||
|  | -/**
 | ||||||
|  | -  This constructor function does not have to do anything.
 | ||||||
|  | -
 | ||||||
|  | -  @retval RETURN_SUCCESS   The constructor always returns RETURN_SUCCESS.
 | ||||||
|  | -
 | ||||||
|  | -**/
 | ||||||
|  | -RETURN_STATUS
 | ||||||
|  | -EFIAPI
 | ||||||
|  | -PlatformDebugLibIoPortConstructor (
 | ||||||
|  | -  VOID
 | ||||||
|  | -  )
 | ||||||
|  | -{
 | ||||||
|  | -  return RETURN_SUCCESS;
 | ||||||
|  | -}
 | ||||||
|  | -
 | ||||||
|  |  /** | ||||||
|  |    Prints a debug message to the debug output device if the specified error level is enabled. | ||||||
|  |   | ||||||
|  | diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.c b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.c
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000000..bad054f286
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.c
 | ||||||
|  | @@ -0,0 +1,31 @@
 | ||||||
|  | +/** @file
 | ||||||
|  | +  Constructor code for QEMU debug port library.
 | ||||||
|  | +  Non-SEC instance.
 | ||||||
|  | +
 | ||||||
|  | +  Copyright (c) 2017, Red Hat, Inc.<BR>
 | ||||||
|  | +  This program and the accompanying materials
 | ||||||
|  | +  are licensed and made available under the terms and conditions of the BSD License
 | ||||||
|  | +  which accompanies this distribution.  The full text of the license may be found at
 | ||||||
|  | +  http://opensource.org/licenses/bsd-license.php.
 | ||||||
|  | +
 | ||||||
|  | +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | ||||||
|  | +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | ||||||
|  | +
 | ||||||
|  | +**/
 | ||||||
|  | +
 | ||||||
|  | +#include <Base.h>
 | ||||||
|  | +
 | ||||||
|  | +/**
 | ||||||
|  | +  This constructor function does not have anything to do.
 | ||||||
|  | +
 | ||||||
|  | +  @retval RETURN_SUCCESS   The constructor always returns RETURN_SUCCESS.
 | ||||||
|  | +
 | ||||||
|  | +**/
 | ||||||
|  | +RETURN_STATUS
 | ||||||
|  | +EFIAPI
 | ||||||
|  | +PlatformDebugLibIoPortConstructor (
 | ||||||
|  | +  VOID
 | ||||||
|  | +  )
 | ||||||
|  | +{
 | ||||||
|  | +  return RETURN_SUCCESS;
 | ||||||
|  | +}
 | ||||||
|  | diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetectRom.c b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetectRom.c
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000000..83a118a0f7
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetectRom.c
 | ||||||
|  | @@ -0,0 +1,31 @@
 | ||||||
|  | +/** @file
 | ||||||
|  | +  Constructor code for QEMU debug port library.
 | ||||||
|  | +  SEC instance.
 | ||||||
|  | +
 | ||||||
|  | +  Copyright (c) 2017, Red Hat, Inc.<BR>
 | ||||||
|  | +  This program and the accompanying materials
 | ||||||
|  | +  are licensed and made available under the terms and conditions of the BSD License
 | ||||||
|  | +  which accompanies this distribution.  The full text of the license may be found at
 | ||||||
|  | +  http://opensource.org/licenses/bsd-license.php.
 | ||||||
|  | +
 | ||||||
|  | +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | ||||||
|  | +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | ||||||
|  | +
 | ||||||
|  | +**/
 | ||||||
|  | +
 | ||||||
|  | +#include <Base.h>
 | ||||||
|  | +
 | ||||||
|  | +/**
 | ||||||
|  | +  This constructor function does not have anything to do.
 | ||||||
|  | +
 | ||||||
|  | +  @retval RETURN_SUCCESS   The constructor always returns RETURN_SUCCESS.
 | ||||||
|  | +
 | ||||||
|  | +**/
 | ||||||
|  | +RETURN_STATUS
 | ||||||
|  | +EFIAPI
 | ||||||
|  | +PlatformRomDebugLibIoPortConstructor (
 | ||||||
|  | +  VOID
 | ||||||
|  | +  )
 | ||||||
|  | +{
 | ||||||
|  | +  return RETURN_SUCCESS;
 | ||||||
|  | +}
 | ||||||
|  | -- 
 | ||||||
|  | 2.14.3 | ||||||
|  | 
 | ||||||
							
								
								
									
										270
									
								
								0024-OvmfPkg-save-on-I-O-port-accesses-when-the-debug-por.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										270
									
								
								0024-OvmfPkg-save-on-I-O-port-accesses-when-the-debug-por.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,270 @@ | |||||||
|  | From b23853af6eb71e4c9b2e2d235b1db80541d33116 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Paolo Bonzini <pbonzini@redhat.com> | ||||||
|  | Date: Wed, 15 Nov 2017 18:01:00 +0100 | ||||||
|  | Subject: [PATCH 3/3] OvmfPkg: save on I/O port accesses when the debug port is | ||||||
|  |  not in use | ||||||
|  | 
 | ||||||
|  | When SEV is enabled, every debug message printed by OVMF to the | ||||||
|  | QEMU debug port traps from the guest to QEMU character by character | ||||||
|  | because "REP OUTSB" cannot be used by IoWriteFifo8.  Furthermore, | ||||||
|  | when OVMF is built with the DEBUG_VERBOSE bit (value 0x00400000) | ||||||
|  | enabled in "gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel", then the | ||||||
|  | OvmfPkg/IoMmuDxe driver, and the OvmfPkg/Library/BaseMemEncryptSevLib | ||||||
|  | library instance that is built into it, produce a huge amount of | ||||||
|  | log messages.  Therefore, in SEV guests, the boot time impact is huge | ||||||
|  | (about 45 seconds _additional_ time spent writing to the debug port). | ||||||
|  | 
 | ||||||
|  | While these messages are very useful for analyzing guest behavior, | ||||||
|  | most of the time the user won't be capturing the OVMF debug log. | ||||||
|  | In fact libvirt does not provide a method for configuring log capture; | ||||||
|  | users that wish to do this (or are instructed to do this) have to resort | ||||||
|  | to <qemu:arg>. | ||||||
|  | 
 | ||||||
|  | The debug console device provides a handy detection mechanism; when read, | ||||||
|  | it returns 0xE9 (which is very much unlike the 0xFF that is returned by | ||||||
|  | an unused port).  Use it to skip the possibly expensive OUT instructions | ||||||
|  | when the debug I/O port isn't plugged anywhere. | ||||||
|  | 
 | ||||||
|  | For SEC, the debug port has to be read before each full message. | ||||||
|  | However: | ||||||
|  | 
 | ||||||
|  | - if the debug port is available, then reading one byte before writing
 | ||||||
|  | a full message isn't tragic, especially because SEC doesn't print many | ||||||
|  | messages | ||||||
|  | 
 | ||||||
|  | - if the debug port is not available, then reading one byte instead of
 | ||||||
|  | writing a full message is still a win. | ||||||
|  | 
 | ||||||
|  | Contributed-under: TianoCore Contribution Agreement 1.0 | ||||||
|  | Cc: Laszlo Ersek <lersek@redhat.com> | ||||||
|  | Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> | ||||||
|  | Cc: Jordan Justen (Intel address) <jordan.l.justen@intel.com> | ||||||
|  | Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> | ||||||
|  | ---
 | ||||||
|  |  .../PlatformDebugLibIoPort/DebugLibDetect.h        | 57 ++++++++++++++++++++++ | ||||||
|  |  OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c  | 28 +++++++++-- | ||||||
|  |  .../PlatformDebugLibIoPort/DebugLibDetect.c        | 30 ++++++++++-- | ||||||
|  |  .../PlatformDebugLibIoPort/DebugLibDetectRom.c     | 21 +++++++- | ||||||
|  |  4 files changed, 127 insertions(+), 9 deletions(-) | ||||||
|  |  create mode 100644 OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.h | ||||||
|  | 
 | ||||||
|  | diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.h b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.h
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000000..1f739b55d8
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.h
 | ||||||
|  | @@ -0,0 +1,57 @@
 | ||||||
|  | +/** @file
 | ||||||
|  | +  Base Debug library instance for QEMU debug port.
 | ||||||
|  | +  It uses PrintLib to send debug messages to a fixed I/O port.
 | ||||||
|  | +
 | ||||||
|  | +  Copyright (c) 2017, Red Hat, Inc.<BR>
 | ||||||
|  | +  This program and the accompanying materials
 | ||||||
|  | +  are licensed and made available under the terms and conditions of the BSD License
 | ||||||
|  | +  which accompanies this distribution.  The full text of the license may be found at
 | ||||||
|  | +  http://opensource.org/licenses/bsd-license.php.
 | ||||||
|  | +
 | ||||||
|  | +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | ||||||
|  | +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | ||||||
|  | +
 | ||||||
|  | +**/
 | ||||||
|  | +
 | ||||||
|  | +#ifndef __DEBUG_IO_PORT_DETECT_H__
 | ||||||
|  | +#define __DEBUG_IO_PORT_DETECT_H__
 | ||||||
|  | +
 | ||||||
|  | +#include <Base.h>
 | ||||||
|  | +
 | ||||||
|  | +//
 | ||||||
|  | +// The constant value that is read from the debug I/O port
 | ||||||
|  | +//
 | ||||||
|  | +#define BOCHS_DEBUG_PORT_MAGIC    0xE9
 | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  | +/**
 | ||||||
|  | +  Helper function to return whether the virtual machine has a debug I/O port.
 | ||||||
|  | +  PlatformDebugLibIoPortFound can call this function directly or cache the
 | ||||||
|  | +  result.
 | ||||||
|  | +
 | ||||||
|  | +  @retval TRUE   if the debug I/O port device was detected.
 | ||||||
|  | +  @retval FALSE  otherwise
 | ||||||
|  | +
 | ||||||
|  | +**/
 | ||||||
|  | +BOOLEAN
 | ||||||
|  | +EFIAPI
 | ||||||
|  | +PlatformDebugLibIoPortDetect (
 | ||||||
|  | +  VOID
 | ||||||
|  | +  );
 | ||||||
|  | +
 | ||||||
|  | +/**
 | ||||||
|  | +  Return whether the virtual machine has a debug I/O port.  DebugLib.c
 | ||||||
|  | +  calls this function instead of PlatformDebugLibIoPortDetect, to allow
 | ||||||
|  | +  caching if possible.
 | ||||||
|  | +
 | ||||||
|  | +  @retval TRUE   if the debug I/O port device was detected.
 | ||||||
|  | +  @retval FALSE  otherwise
 | ||||||
|  | +
 | ||||||
|  | +**/
 | ||||||
|  | +BOOLEAN
 | ||||||
|  | +EFIAPI
 | ||||||
|  | +PlatformDebugLibIoPortFound (
 | ||||||
|  | +  VOID
 | ||||||
|  | +  );
 | ||||||
|  | +
 | ||||||
|  | +#endif
 | ||||||
|  | diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c
 | ||||||
|  | index 5a1c86f2c3..36cde54976 100644
 | ||||||
|  | --- a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c
 | ||||||
|  | +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c
 | ||||||
|  | @@ -22,6 +22,7 @@
 | ||||||
|  |  #include <Library/PcdLib.h> | ||||||
|  |  #include <Library/BaseMemoryLib.h> | ||||||
|  |  #include <Library/DebugPrintErrorLevelLib.h> | ||||||
|  | +#include "DebugLibDetect.h"
 | ||||||
|  |   | ||||||
|  |  // | ||||||
|  |  // Define the maximum debug and assert message length that this library supports | ||||||
|  | @@ -61,9 +62,10 @@ DebugPrint (
 | ||||||
|  |    ASSERT (Format != NULL); | ||||||
|  |   | ||||||
|  |    // | ||||||
|  | -  // Check driver debug mask value and global mask
 | ||||||
|  | +  // Check if the global mask disables this message or the device is inactive
 | ||||||
|  |    // | ||||||
|  | -  if ((ErrorLevel & GetDebugPrintErrorLevel ()) == 0) {
 | ||||||
|  | +  if ((ErrorLevel & GetDebugPrintErrorLevel ()) == 0 ||
 | ||||||
|  | +      !PlatformDebugLibIoPortFound ()) {
 | ||||||
|  |      return; | ||||||
|  |    } | ||||||
|  |   | ||||||
|  | @@ -120,9 +122,11 @@ DebugAssert (
 | ||||||
|  |               FileName, (UINT64)LineNumber, Description); | ||||||
|  |   | ||||||
|  |    // | ||||||
|  | -  // Send the print string to the debug I/O port
 | ||||||
|  | +  // Send the print string to the debug I/O port, if present
 | ||||||
|  |    // | ||||||
|  | -  IoWriteFifo8 (PcdGet16 (PcdDebugIoPort), Length, Buffer);
 | ||||||
|  | +  if (PlatformDebugLibIoPortFound ()) {
 | ||||||
|  | +    IoWriteFifo8 (PcdGet16 (PcdDebugIoPort), Length, Buffer);
 | ||||||
|  | +  }
 | ||||||
|  |   | ||||||
|  |    // | ||||||
|  |    // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings | ||||||
|  | @@ -265,3 +269,19 @@ DebugPrintLevelEnabled (
 | ||||||
|  |  { | ||||||
|  |    return (BOOLEAN) ((ErrorLevel & PcdGet32(PcdFixedDebugPrintErrorLevel)) != 0); | ||||||
|  |  } | ||||||
|  | +
 | ||||||
|  | +/**
 | ||||||
|  | +  Return the result of detecting the debug I/O port device.
 | ||||||
|  | +
 | ||||||
|  | +  @retval TRUE   if the debug I/O port device was detected.
 | ||||||
|  | +  @retval FALSE  otherwise
 | ||||||
|  | +
 | ||||||
|  | +**/
 | ||||||
|  | +BOOLEAN
 | ||||||
|  | +EFIAPI
 | ||||||
|  | +PlatformDebugLibIoPortDetect (
 | ||||||
|  | +  VOID
 | ||||||
|  | +  )
 | ||||||
|  | +{
 | ||||||
|  | +  return IoRead8 (PcdGet16 (PcdDebugIoPort)) == BOCHS_DEBUG_PORT_MAGIC;
 | ||||||
|  | +}
 | ||||||
|  | diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.c b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.c
 | ||||||
|  | index bad054f286..81c44eece9 100644
 | ||||||
|  | --- a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.c
 | ||||||
|  | +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.c
 | ||||||
|  | @@ -1,6 +1,6 @@
 | ||||||
|  |  /** @file | ||||||
|  | -  Constructor code for QEMU debug port library.
 | ||||||
|  | -  Non-SEC instance.
 | ||||||
|  | +  Detection code for QEMU debug port.
 | ||||||
|  | +  Non-SEC instance, caches the result of detection.
 | ||||||
|  |   | ||||||
|  |    Copyright (c) 2017, Red Hat, Inc.<BR> | ||||||
|  |    This program and the accompanying materials | ||||||
|  | @@ -14,9 +14,16 @@
 | ||||||
|  |  **/ | ||||||
|  |   | ||||||
|  |  #include <Base.h> | ||||||
|  | +#include "DebugLibDetect.h"
 | ||||||
|  | +
 | ||||||
|  | +//
 | ||||||
|  | +// Set to TRUE if the debug I/O port is enabled
 | ||||||
|  | +//
 | ||||||
|  | +STATIC BOOLEAN mDebugIoPortFound = FALSE;
 | ||||||
|  |   | ||||||
|  |  /** | ||||||
|  | -  This constructor function does not have anything to do.
 | ||||||
|  | +  This constructor function checks if the debug I/O port device is present,
 | ||||||
|  | +  caching the result for later use.
 | ||||||
|  |   | ||||||
|  |    @retval RETURN_SUCCESS   The constructor always returns RETURN_SUCCESS. | ||||||
|  |   | ||||||
|  | @@ -27,5 +34,22 @@ PlatformDebugLibIoPortConstructor (
 | ||||||
|  |    VOID | ||||||
|  |    ) | ||||||
|  |  { | ||||||
|  | +  mDebugIoPortFound = PlatformDebugLibIoPortDetect();
 | ||||||
|  |    return RETURN_SUCCESS; | ||||||
|  |  } | ||||||
|  | +
 | ||||||
|  | +/**
 | ||||||
|  | +  Return the cached result of detecting the debug I/O port device.
 | ||||||
|  | +
 | ||||||
|  | +  @retval TRUE   if the debug I/O port device was detected.
 | ||||||
|  | +  @retval FALSE  otherwise
 | ||||||
|  | +
 | ||||||
|  | +**/
 | ||||||
|  | +BOOLEAN
 | ||||||
|  | +EFIAPI
 | ||||||
|  | +PlatformDebugLibIoPortFound (
 | ||||||
|  | +  VOID
 | ||||||
|  | +  )
 | ||||||
|  | +{
 | ||||||
|  | +  return mDebugIoPortFound;
 | ||||||
|  | +}
 | ||||||
|  | diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetectRom.c b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetectRom.c
 | ||||||
|  | index 83a118a0f7..b950919675 100644
 | ||||||
|  | --- a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetectRom.c
 | ||||||
|  | +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetectRom.c
 | ||||||
|  | @@ -1,6 +1,6 @@
 | ||||||
|  |  /** @file | ||||||
|  | -  Constructor code for QEMU debug port library.
 | ||||||
|  | -  SEC instance.
 | ||||||
|  | +  Detection code for QEMU debug port.
 | ||||||
|  | +  SEC instance, cannot cache the result of detection.
 | ||||||
|  |   | ||||||
|  |    Copyright (c) 2017, Red Hat, Inc.<BR> | ||||||
|  |    This program and the accompanying materials | ||||||
|  | @@ -14,6 +14,7 @@
 | ||||||
|  |  **/ | ||||||
|  |   | ||||||
|  |  #include <Base.h> | ||||||
|  | +#include "DebugLibDetect.h"
 | ||||||
|  |   | ||||||
|  |  /** | ||||||
|  |    This constructor function does not have anything to do. | ||||||
|  | @@ -29,3 +30,19 @@ PlatformRomDebugLibIoPortConstructor (
 | ||||||
|  |  { | ||||||
|  |    return RETURN_SUCCESS; | ||||||
|  |  } | ||||||
|  | +
 | ||||||
|  | +/**
 | ||||||
|  | +  Return the result of detecting the debug I/O port device.
 | ||||||
|  | +
 | ||||||
|  | +  @retval TRUE   if the debug I/O port device was detected.
 | ||||||
|  | +  @retval FALSE  otherwise
 | ||||||
|  | +
 | ||||||
|  | +**/
 | ||||||
|  | +BOOLEAN
 | ||||||
|  | +EFIAPI
 | ||||||
|  | +PlatformDebugLibIoPortFound (
 | ||||||
|  | +  VOID
 | ||||||
|  | +  )
 | ||||||
|  | +{
 | ||||||
|  | +  return PlatformDebugLibIoPortDetect ();
 | ||||||
|  | +}
 | ||||||
|  | -- 
 | ||||||
|  | 2.14.3 | ||||||
|  | 
 | ||||||
							
								
								
									
										29
									
								
								edk2.spec
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								edk2.spec
									
									
									
									
									
								
							| @ -2,10 +2,14 @@ | |||||||
| %global edk2_githash     92d07e4 | %global edk2_githash     92d07e4 | ||||||
| %global openssl_version  1.1.0e | %global openssl_version  1.1.0e | ||||||
| 
 | 
 | ||||||
|  | %if 0%{?fedora:1} | ||||||
| %define cross 1 | %define cross 1 | ||||||
|  | %endif | ||||||
| 
 | 
 | ||||||
| %ifarch %{ix86} x86_64 | %ifarch %{ix86} x86_64 | ||||||
|  | %if 0%{?fedora:1} | ||||||
| %define build_ovmf_ia32 1 | %define build_ovmf_ia32 1 | ||||||
|  | %endif | ||||||
| %ifarch x86_64 | %ifarch x86_64 | ||||||
| %define build_ovmf_x64 1 | %define build_ovmf_x64 1 | ||||||
| %endif | %endif | ||||||
| @ -25,7 +29,7 @@ | |||||||
| 
 | 
 | ||||||
| Name:           edk2 | Name:           edk2 | ||||||
| Version:        %{edk2_date}git%{edk2_githash} | Version:        %{edk2_date}git%{edk2_githash} | ||||||
| Release:        1%{dist} | Release:        2%{dist} | ||||||
| Summary:        EFI Development Kit II | Summary:        EFI Development Kit II | ||||||
| 
 | 
 | ||||||
| Group:          Applications/Emulators | Group:          Applications/Emulators | ||||||
| @ -39,6 +43,7 @@ Source11:       build-iso.sh | |||||||
| Source12:       update-tarball.sh | Source12:       update-tarball.sh | ||||||
| Source13:       openssl-patch-to-tarball.sh | Source13:       openssl-patch-to-tarball.sh | ||||||
| 
 | 
 | ||||||
|  | # non-upstream patches | ||||||
| Patch0001: 0001-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch | Patch0001: 0001-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-NvmExpre.patch | ||||||
| Patch0002: 0002-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-the-DXE-.patch | Patch0002: 0002-OvmfPkg-silence-EFI_D_VERBOSE-0x00400000-in-the-DXE-.patch | ||||||
| Patch0003: 0003-OvmfPkg-enable-DEBUG_VERBOSE.patch | Patch0003: 0003-OvmfPkg-enable-DEBUG_VERBOSE.patch | ||||||
| @ -57,13 +62,23 @@ Patch0016: 0016-ArmPlatformPkg-introduce-fixed-PCD-for-early-hello-m.patch | |||||||
| Patch0017: 0017-ArmPlatformPkg-PrePeiCore-write-early-hello-message-.patch | Patch0017: 0017-ArmPlatformPkg-PrePeiCore-write-early-hello-message-.patch | ||||||
| Patch0018: 0018-ArmVirtPkg-set-early-hello-message.patch | Patch0018: 0018-ArmVirtPkg-set-early-hello-message.patch | ||||||
| 
 | 
 | ||||||
|  | # upstream backports | ||||||
|  | Patch0019: 0019-MdeModulePkg-PciBus-Fix-bug-that-PCI-BUS-claims-too-much-resource.patch | ||||||
|  | Patch0020: 0020-MdeModulePkg-Bds-Remove-assertion-in-BmCharToUint.patch | ||||||
|  | Patch0021: 0021-MdeModulePkg-Bds-Check-variable-name-even-if-OptionNumber-is-NULL.patch | ||||||
|  | 
 | ||||||
|  | # submitted upstream | ||||||
|  | Patch0022: 0022-OvmfPkg-make-it-a-proper-BASE-library.patch | ||||||
|  | Patch0023: 0023-OvmfPkg-create-a-separate-PlatformDebugLibIoPort-ins.patch | ||||||
|  | Patch0024: 0024-OvmfPkg-save-on-I-O-port-accesses-when-the-debug-por.patch | ||||||
| 
 | 
 | ||||||
| %if 0%{?cross:1} | %if 0%{?cross:1} | ||||||
| # Tweak the tools_def to support cross-compiling. | # Tweak the tools_def to support cross-compiling. | ||||||
| # These files are meant for customization, so this is not upstream. | # These files are meant for customization, so this is not upstream too. | ||||||
| Patch0099: 0099-Tweak-the-tools_def-to-support-cross-compiling.patch | Patch0099: 0099-Tweak-the-tools_def-to-support-cross-compiling.patch | ||||||
| %endif | %endif | ||||||
| 
 | 
 | ||||||
|  | %if 0%{?fedora:1} | ||||||
| # | # | ||||||
| # actual firmware builds support cross-compiling.  edk2-tools | # actual firmware builds support cross-compiling.  edk2-tools | ||||||
| # in theory should build everywhere without much trouble, but | # in theory should build everywhere without much trouble, but | ||||||
| @ -71,6 +86,9 @@ Patch0099: 0099-Tweak-the-tools_def-to-support-cross-compiling.patch | |||||||
| # (such as ppc), so lets limit things to the known-good ones. | # (such as ppc), so lets limit things to the known-good ones. | ||||||
| # | # | ||||||
| ExclusiveArch:  %{ix86} x86_64 %{arm} aarch64 | ExclusiveArch:  %{ix86} x86_64 %{arm} aarch64 | ||||||
|  | %else | ||||||
|  | ExclusiveArch:  x86_64 aarch64 | ||||||
|  | %endif | ||||||
| 
 | 
 | ||||||
| BuildRequires:  python | BuildRequires:  python | ||||||
| BuildRequires:  libuuid-devel | BuildRequires:  libuuid-devel | ||||||
| @ -421,7 +439,12 @@ ln -sf ../%{name}/arm/QEMU_EFI-pflash.raw          %{buildroot}/usr/share/AAVMF/ | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
| * Tue Nov 14 2017 Paolo Bonzini <pbonzini@redhat.com> - 20170209git296153c5-6 | * Fri Nov 17 2017 Paolo Bonzini <pbonzini@redhat.com> - 20170209git296153c5-2 | ||||||
|  | - Backport patches 19-21 from RHEL | ||||||
|  | - Add patches 22-24 to fix SEV slowness | ||||||
|  | - Add fedora conditionals | ||||||
|  | 
 | ||||||
|  | * Tue Nov 14 2017 Paolo Bonzini <pbonzini@redhat.com> - 20171011git92d07e4-1 | ||||||
| - Import source and patches from RHEL version | - Import source and patches from RHEL version | ||||||
| - Update OpenSSL to 1.1.0e | - Update OpenSSL to 1.1.0e | ||||||
| - Refresh 0099-Tweak-the-tools_def-to-support-cross-compiling.patch | - Refresh 0099-Tweak-the-tools_def-to-support-cross-compiling.patch | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user