Date   

[edk2-platform PATCH v1 1/1] Platform/RaspberryPi: Make SetVariable return EFI_UNSUPPORTED at runtime

Sunny Wang
 

The RPi does not support storing UEFI NV variables at runtime. For now,
gRT->SetVariable at runtime returns EFI_OUT_OF_RESOURCES which is not a
proper error and would cause FWTS failures. Therefore, this patch is
to make gRT->SetVariable at runtime return EFI_UNSUPPORTED.

For more information, please check the issues below:
-https://github.com/pftf/RPi4/issues/6
-https://github.com/pftf/RPi4/issues/93
-https://github.com/pftf/RPi4/issues/163

I also tested this with the ACS 3.0 FWTS. All the failures
reported in issue 93 and 163 can be fixed by this patch.

Cc: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com>
Cc: Sami Mujawar <sami.mujawar@arm.com>
Cc: Jeremy Linton <jeremy.linton@arm.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Pete Batard <pete@akeo.ie>
Cc: Leif Lindholm <leif@nuviainc.com>

Signed-off-by: Sunny Wang <sunny.wang@arm.com>
---
.../Drivers/VarBlockServiceDxe/VarBlockService.c | 12 ++++++++++++
1 file changed, 12 insertions(+)

diff --git a/Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockServ=
ice.c b/Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockService.c
index 572309439a..16d4d4f178 100644
--- a/Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockService.c
+++ b/Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockService.c
@@ -2,6 +2,7 @@
*
* Copyright (c) 2018, Andrei Warkentin <andrey.warkentin@gmail.com>
* Copyright (c) 2006-2014, Intel Corporation. All rights reserved.
+ * Copyright (c) 2021, ARM Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-2-Clause-Patent
*
@@ -596,6 +597,7 @@ FvbProtocolWrite (
EFI_DEVICE_ERROR - The block device is not functioning correctl=
y and
could not be written
EFI_INVALID_PARAMETER - NumBytes or Buffer are NULL
+ EFI_UNSUPPORTED This function is not supported at runtime
=20
--*/
{
@@ -605,6 +607,16 @@ FvbProtocolWrite (
EFI_STATUS Status;
EFI_STATUS ReturnStatus;
=20
+ //
+ // The current variables support relies on modifying RPI_EFI.FD on SD
+ // card, which works fine at boot time. However, at runtime, the SD=20
+ // controller is exposed via ACPI and subsequently owned by the OS.
+ // Therefore, we need to direclty return EFI_UNSUPPORTED.
+ //
+ if (EfiAtRuntime ()) {
+ return EFI_UNSUPPORTED;
+ }
+
//
// Check for invalid conditions.
//
--=20
2.31.0.windows.1


Re: [edk2-platform][PATCH v1 1/1] EmbeddedPkg/VirtualRealTimeClockLib : Fix SetTime issues

Sunny Wang
 

Sorry, please ignore this one. I sent the patch with the wrong subject. This change is made in edk2 rather than the edk2-platform.
Please review the later one "[edk2-devel] [PATCH 1/1] EmbeddedPkg/VirtualRealTimeClockLib : Fix SetTime issues". Thanks!
https://edk2.groups.io/g/devel/topic/patch_1_1/84397263

Best Regards,
Sunny Wang

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Sunny Wang via groups.io
Sent: Friday, July 23, 2021 5:01 PM
To: devel@edk2.groups.io
Cc: Sunny Wang <Sunny.Wang@arm.com>; Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>; Sami Mujawar <Sami.Mujawar@arm.com>; Jeremy Linton <Jeremy.Linton@arm.com>; Ard Biesheuvel <ardb+tianocore@kernel.org>; Pete Batard <pete@akeo.ie>; Leif Lindholm <leif@nuviainc.com>; Sunny Wang <Sunny.Wang@arm.com>
Subject: [edk2-devel] [edk2-platform][PATCH v1 1/1] EmbeddedPkg/VirtualRealTimeClockLib : Fix SetTime issues

This patch fixes two issues below:
1. SCT SetTime_Func failures.
- https://github.com/pftf/RPi4/issues/164
2. Using shell time and date commands to set time can't work.

The problem is that gRT->SetTime always returns EFI_INVALID_PARAMETER
error status.

The root cause is that LibSetTime() sets RtcEpochSeconds variable with
inconsistent attributes. One is without EFI_VARIABLE_NON_VOLATILE,
the other one is with EFI_VARIABLE_NON_VOLATILE. That caused that the
variable driver returns EFI_INVALID_PARAMETER. Per UEFI spec, if a
preexisting variable is rewritten with different attributes,
SetVariable() shall not modify the variable and shall return
EFI_INVALID_PARAMETER.

Therefore, the solution is to add EFI_VARIABLE_NON_VOLATILE attribute
to the first EfiSetVariable() call to make two calls consistent.

By the way, this patch also fix a minor issue with a debug message.

Cc: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com>
Cc: Sami Mujawar <sami.mujawar@arm.com>
Cc: Jeremy Linton <jeremy.linton@arm.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Pete Batard <pete@akeo.ie>
Cc: Leif Lindholm <leif@nuviainc.com>

Signed-off-by: Sunny Wang <sunny.wang@arm.com>
---
.../VirtualRealTimeClockLib/VirtualRealTimeClockLib.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c b/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c
index de6fbb40e6..c10c91bc75 100644
--- a/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c
+++ b/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c
@@ -4,7 +4,7 @@
*
* Coypright (c) 2019, Pete Batard <pete@akeo.ie>
* Copyright (c) 2018, Andrei Warkentin <andrey.warkentin@gmail.com>
- * Copyright (c) 2011-2014, ARM Ltd. All rights reserved.
+ * Copyright (c) 2011-2021, ARM Ltd. All rights reserved.
* Copyright (c) 2008-2010, Apple Inc. All rights reserved.
* Copyright (c) Microsoft Corporation. All rights reserved.
*
@@ -96,7 +96,7 @@ LibGetTime (
EfiSetVariable (
(CHAR16 *)mEpochVariableName,
&gEfiCallerIdGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
sizeof (EpochSeconds),
&EpochSeconds
);
@@ -324,7 +324,7 @@ LibSetTime (
DEBUG ((
DEBUG_ERROR,
"LibSetTime: Failed to save %s variable to non-volatile storage, Status = %r\n",
- mDaylightVariableName,
+ mEpochVariableName,
Status
));
return Status;
--
2.31.0.windows.1



-=-=-=-=-=-=
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#78123): https://edk2.groups.io/g/devel/message/78123
Mute This Topic: https://groups.io/mt/84397232/5985097
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [Sunny.Wang@arm.com]
-=-=-=-=-=-=


IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.


[PATCH 1/1] EmbeddedPkg/VirtualRealTimeClockLib : Fix SetTime issues

Sunny Wang
 

This patch fixes two issues below:
1. SCT SetTime_Func failures.
- https://github.com/pftf/RPi4/issues/164
2. Using shell time and date commands to set time can't work.

The problem is that gRT->SetTime always returns EFI_INVALID_PARAMETER
error status.

The root cause is that LibSetTime() sets RtcEpochSeconds variable with
inconsistent attributes. One is without EFI_VARIABLE_NON_VOLATILE,
the other one is with EFI_VARIABLE_NON_VOLATILE. That caused that the
variable driver returns EFI_INVALID_PARAMETER. Per UEFI spec, if a
preexisting variable is rewritten with different attributes,
SetVariable() shall not modify the variable and shall return
EFI_INVALID_PARAMETER.

Therefore, the solution is to add EFI_VARIABLE_NON_VOLATILE attribute
to the first EfiSetVariable() call to make two calls consistent.

By the way, this patch also fix a minor issue with a debug message.

Cc: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com>
Cc: Sami Mujawar <sami.mujawar@arm.com>
Cc: Jeremy Linton <jeremy.linton@arm.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Pete Batard <pete@akeo.ie>
Cc: Leif Lindholm <leif@nuviainc.com>

Signed-off-by: Sunny Wang <sunny.wang@arm.com>
---
.../VirtualRealTimeClockLib/VirtualRealTimeClockLib.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeC=
lockLib.c b/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeCl=
ockLib.c
index de6fbb40e6..c10c91bc75 100644
--- a/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib=
.c
+++ b/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib=
.c
@@ -4,7 +4,7 @@
*
* Coypright (c) 2019, Pete Batard <pete@akeo.ie>
* Copyright (c) 2018, Andrei Warkentin <andrey.warkentin@gmail.com>
- * Copyright (c) 2011-2014, ARM Ltd. All rights reserved.
+ * Copyright (c) 2011-2021, ARM Ltd. All rights reserved.
* Copyright (c) 2008-2010, Apple Inc. All rights reserved.
* Copyright (c) Microsoft Corporation. All rights reserved.
*
@@ -96,7 +96,7 @@ LibGetTime (
EfiSetVariable (
(CHAR16 *)mEpochVariableName,
&gEfiCallerIdGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_=
VARIABLE_RUNTIME_ACCESS,
sizeof (EpochSeconds),
&EpochSeconds
);
@@ -324,7 +324,7 @@ LibSetTime (
DEBUG ((
DEBUG_ERROR,
"LibSetTime: Failed to save %s variable to non-volatile storage, S=
tatus =3D %r\n",
- mDaylightVariableName,
+ mEpochVariableName,
Status
));
return Status;
--=20
2.31.0.windows.1


[edk2-platform][PATCH v1 1/1] EmbeddedPkg/VirtualRealTimeClockLib : Fix SetTime issues

Sunny Wang
 

This patch fixes two issues below:
1. SCT SetTime_Func failures.
- https://github.com/pftf/RPi4/issues/164
2. Using shell time and date commands to set time can't work.

The problem is that gRT->SetTime always returns EFI_INVALID_PARAMETER
error status.

The root cause is that LibSetTime() sets RtcEpochSeconds variable with
inconsistent attributes. One is without EFI_VARIABLE_NON_VOLATILE,
the other one is with EFI_VARIABLE_NON_VOLATILE. That caused that the
variable driver returns EFI_INVALID_PARAMETER. Per UEFI spec, if a
preexisting variable is rewritten with different attributes,
SetVariable() shall not modify the variable and shall return
EFI_INVALID_PARAMETER.

Therefore, the solution is to add EFI_VARIABLE_NON_VOLATILE attribute
to the first EfiSetVariable() call to make two calls consistent.

By the way, this patch also fix a minor issue with a debug message.

Cc: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com>
Cc: Sami Mujawar <sami.mujawar@arm.com>
Cc: Jeremy Linton <jeremy.linton@arm.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Pete Batard <pete@akeo.ie>
Cc: Leif Lindholm <leif@nuviainc.com>

Signed-off-by: Sunny Wang <sunny.wang@arm.com>
---
.../VirtualRealTimeClockLib/VirtualRealTimeClockLib.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeC=
lockLib.c b/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeCl=
ockLib.c
index de6fbb40e6..c10c91bc75 100644
--- a/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib=
.c
+++ b/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib=
.c
@@ -4,7 +4,7 @@
*
* Coypright (c) 2019, Pete Batard <pete@akeo.ie>
* Copyright (c) 2018, Andrei Warkentin <andrey.warkentin@gmail.com>
- * Copyright (c) 2011-2014, ARM Ltd. All rights reserved.
+ * Copyright (c) 2011-2021, ARM Ltd. All rights reserved.
* Copyright (c) 2008-2010, Apple Inc. All rights reserved.
* Copyright (c) Microsoft Corporation. All rights reserved.
*
@@ -96,7 +96,7 @@ LibGetTime (
EfiSetVariable (
(CHAR16 *)mEpochVariableName,
&gEfiCallerIdGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_=
VARIABLE_RUNTIME_ACCESS,
sizeof (EpochSeconds),
&EpochSeconds
);
@@ -324,7 +324,7 @@ LibSetTime (
DEBUG ((
DEBUG_ERROR,
"LibSetTime: Failed to save %s variable to non-volatile storage, S=
tatus =3D %r\n",
- mDaylightVariableName,
+ mEpochVariableName,
Status
));
return Status;
--=20
2.31.0.windows.1


[PATCH v2 2/2] UefiCpuPkg: ResetVector Tool additional debug prints

Ashraf Ali S
 

REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3506

Before executing the nasm command, added print statement to know what
commands are executing.
before printing the output file need check the status of command which
is executed. if the status is 0 then only print the output file name.

Cc: Ray Ni <ray.ni@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Debkumar De <debkumar.de@intel.com>
Cc: Harry Han <harry.han@intel.com>
Cc: Catharine West <catharine.west@intel.com>
Cc: Sangeetha V <sangeetha.v@intel.com>
Signed-off-by: Ashraf Ali S <ashraf.ali.s@intel.com>
---
UefiCpuPkg/ResetVector/Vtf0/Build.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Build.py b/UefiCpuPkg/ResetVector/Vtf0/Build.py
index 55f4edd87b..b791d32762 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/Build.py
+++ b/UefiCpuPkg/ResetVector/Vtf0/Build.py
@@ -32,9 +32,12 @@ for arch in ('ia32', 'x64'):
'-o', output,
'Vtf0.nasmb',
)
+ print(f"Command : {' '.join(commandLine)}")
ret = RunCommand(commandLine)
+ if ret != 0:
+ print(f"something went wrong while executing {commandLine[-1]}")
+ sys.exit()
print('\tASM\t' + output)
- if ret != 0: sys.exit(ret)

commandLine = (
'python',
--
2.30.2.windows.1


[PATCH v2 1/2] UefiCpuPkg: ResetVector Tool Support for Python 3

Ashraf Ali S
 

REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3506

Build Scrips for Reset Vector currently based on Python 2
which is already EOL, needs to modify the build script based on
Python 3

Cc: Ray Ni <ray.ni@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Debkumar De <debkumar.de@intel.com>
Cc: Harry Han <harry.han@intel.com>
Cc: Catharine West <catharine.west@intel.com>
Cc: Sangeetha V <sangeetha.v@intel.com>

Signed-off-by: Ashraf Ali S <ashraf.ali.s@intel.com>
---
UefiCpuPkg/ResetVector/Vtf0/Build.py | 6 +++---
UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py | 4 ++--
2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Build.py b/UefiCpuPkg/ResetVector/Vtf0/Build.py
index 343c53b5ff..55f4edd87b 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/Build.py
+++ b/UefiCpuPkg/ResetVector/Vtf0/Build.py
@@ -1,7 +1,7 @@
## @file
# Automate the process of building the various reset vector types
#
-# Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -33,7 +33,7 @@ for arch in ('ia32', 'x64'):
'Vtf0.nasmb',
)
ret = RunCommand(commandLine)
- print '\tASM\t' + output
+ print('\tASM\t' + output)
if ret != 0: sys.exit(ret)

commandLine = (
@@ -41,7 +41,7 @@ for arch in ('ia32', 'x64'):
'Tools/FixupForRawSection.py',
output,
)
- print '\tFIXUP\t' + output
+ print('\tFIXUP\t' + output)
ret = RunCommand(commandLine)
if ret != 0: sys.exit(ret)

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py b/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
index c77438a0ce..de771eba22 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
+++ b/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
@@ -1,7 +1,7 @@
## @file
# Apply fixup to VTF binary image for FFS Raw section
#
-# Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2008 - 2021, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -15,6 +15,6 @@ c = ((len(d) + 4 + 7) & ~7) - 4
if c > len(d):
c -= len(d)
f = open(sys.argv[1], 'wb')
- f.write('\x90' * c)
+ f.write(b'\x90' * c)
f.write(d)
f.close()
--
2.30.2.windows.1


Re: [PATCH EDK2 v1 1/1] MdeModulePkg: Modify PCD default value

wanghuiqiang
 

Dear all,

Any comments for this change?

Thanks!

-----Original Message-----
From: wanghuiqiang
Sent: Monday, July 19, 2021 2:37 PM
To: 'devel@edk2.groups.io' <devel@edk2.groups.io>; 'ray.ni@intel.com' <ray.ni@intel.com>; xiewenyi (A) <xiewenyi2@huawei.com>; 'Wang, Jian J' <jian.j.wang@intel.com>; 'Wu, Hao A' <hao.a.wu@intel.com>; 'Ard Biesheuvel' <ardb@kernel.org>; 'Leif Lindholm' <leif@nuviainc.com>; 'sami.mujawar@arm.com' <sami.mujawar@arm.com>
Cc: Songdongkuang <songdongkuang@huawei.com>
Subject: RE: [edk2-devel] [PATCH EDK2 v1 1/1] MdeModulePkg: Modify PCD default value

+ Ard, Leif, Sami.
All OSes which use 64KB page size and the PCIe resource allocation rely on BIOS initialization will encounter VF BAR resource allocation issue.

Thanks!

-----Original Message-----
From: wanghuiqiang
Sent: Monday, July 19, 2021 2:02 PM
To: devel@edk2.groups.io; 'ray.ni@intel.com' <ray.ni@intel.com>; xiewenyi (A) <xiewenyi2@huawei.com>; Wang, Jian J <jian.j.wang@intel.com>; Wu, Hao A <hao.a.wu@intel.com>
Cc: Songdongkuang <songdongkuang@huawei.com>
Subject: RE: [edk2-devel] [PATCH EDK2 v1 1/1] MdeModulePkg: Modify PCD default value

Hi Ray,

52 bit address ranges are supported only when using the 64KB translation granule for ARM64 platform, this is another scenario using 64K page size. We need set PcdSrIovSystemPageSize to 0x10 in such case to make BIOS resource assignment still appropriate even PCI DSM#5 function set as 0 which means the operating system must preserve PCI resource assignments made by firmware at boot time.
Please let me know if you have any other concern for this patch.

Thanks!

-----Original Message-----
From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Ni, Ray
Sent: Monday, July 19, 2021 10:35 AM
To: devel@edk2.groups.io; xiewenyi (A) <xiewenyi2@huawei.com>; Wang, Jian J <jian.j.wang@intel.com>; Wu, Hao A <hao.a.wu@intel.com>
Cc: Songdongkuang <songdongkuang@huawei.com>; wanghuiqiang <wanghuiqiang@huawei.com>
Subject: Re: [edk2-devel] [PATCH EDK2 v1 1/1] MdeModulePkg: Modify PCD default value

Wenyi,
Can you explain a bit more about "if 52 bit physical address need to be supported, page size should also be set to 64KB alignment"?

Can the platform DSC override this value instead of changing the default value in MdeModulePkg.dec which impacts all platforms?

Thanks,
Ray

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of wenyi,xie via groups.io
Sent: Thursday, July 15, 2021 8:25 PM
To: devel@edk2.groups.io; Wang, Jian J <jian.j.wang@intel.com>; Wu, Hao A <hao.a.wu@intel.com>
Cc: songdongkuang@huawei.com; wanghuiqiang@huawei.com; xiewenyi2@huawei.com
Subject: [edk2-devel] [PATCH EDK2 v1 1/1] MdeModulePkg: Modify PCD default value

From: "wenyi.xie" <xiewenyi2@huawei.com>

The default value of PcdSrIovSystemPageSize is 0x1, it means the memory BAR is 4KB alignment. When page size of OS is set to 64KB, as the resource partitions are different between OS and BIOS, it will cause pcie failture. And if 52 bit physical address need to be supported, page size should also be set to 64KB alignment.
So modify the default vaule of PcdSrIovSystemPageSize to 0x10 can meet the requirement above. And even if the OS is 4KB alignment, new value of PCD is compatible for this situation.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Signed-off-by: Wenyi Xie <xiewenyi2@huawei.com>
---
MdeModulePkg/MdeModulePkg.dec | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec index ad84421cf3..426ea1b6cc 100644
--- a/MdeModulePkg/MdeModulePkg.dec
+++ b/MdeModulePkg/MdeModulePkg.dec
@@ -1853,7 +1853,7 @@
# BIT0 set indicates 4KB alignment<BR>
# BIT1 set indicates 8KB alignment<BR>
# @Prompt SRIOV system page size.
- gEfiMdeModulePkgTokenSpaceGuid.PcdSrIovSystemPageSize|0x1|UINT32|0x10000047
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSrIovSystemPageSize|0x10|UINT32|0x10
+ 000047

## SMBIOS version.
# @Prompt SMBIOS version.
--
2.20.1.windows.1


Re: [EXT] RE: [PATCH V2 3/4] NXP/LS1046aFrwyPkg: Enable ConfigurationManager on LS1046AFRWY

Vikas Singh <vikas.singh@...>
 

Sunny, Thank you for reviewing my code. Here are my remarks. PSB

-----Original Message-----
From: Sunny Wang <Sunny.Wang@arm.com>
Sent: Monday, July 12, 2021 4:08 PM
To: Vikas Singh <vikas.singh@puresoftware.com>; devel@edk2.groups.io
Cc: Sami Mujawar <Sami.Mujawar@arm.com>; leif@nuviainc.com; Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>; Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>; Varun Sethi <V.Sethi@nxp.com>; arokia.samy <arokia.samy@puresoftware.com>; kuldip dwivedi <kuldip.dwivedi@puresoftware.com>; Ard Biesheuvel <Ard.Biesheuvel@arm.com>; Vikas Singh <vikas.singh@nxp.com>; White Weng <white.weng@nxp.com>; Ran Wang <ran.wang_1@nxp.com>; Sunny Wang <Sunny.Wang@arm.com>
Subject: [EXT] RE: [PATCH V2 3/4] NXP/LS1046aFrwyPkg: Enable ConfigurationManager on LS1046AFRWY

Caution: EXT Email

Hi Vikas,

Just have two comments below. Others look good to me.
1. In LS1046aFrwyPkg.dsc, since you already include DynamicTablesPkg/DynamicTables.dsc.inc, I think we need to remove DynamicTableFactoryDxe.inf code block. Could you check this?
[[VIKAS]] No, DynamicTableFactoryDxe.inf code block Is required to override, or I would say to choose what we want for our platform from DynamicTablesPkg.
This block can expose different "inf" files for different platforms as per the need basis.

2. Remove " DEFINE DYNAMIC_ACPI_ENABLE = TRUE ". In our offline discussion, this would cause some build problems with the current CM implementation (Multiple NXP platforms share One CM folder).
[[VIKAS]] I don't think "DEFINE DYNAMIC_ACPI_ENABLE = TRUE" should cause any problem while building other platforms. In fact this flag is to avoid any build issue with other platforms. CM is common for all layer scape platforms but it will be only visible to any platform if and only if "DEFINE DYNAMIC_ACPI_ENABLE = TRUE". Else platform must be building in old native mode. Could you share any scenario or something that I have missed out, will check this implementation and try to rectify.

Best Regards,
Sunny Wang

-----Original Message-----
From: Vikas Singh <vikas.singh@puresoftware.com>
Sent: Friday, June 18, 2021 11:28 PM
To: devel@edk2.groups.io
Cc: Sami Mujawar <Sami.Mujawar@arm.com>; leif@nuviainc.com; Meenakshi Aggarwal (meenakshi.aggarwal@nxp.com) <meenakshi.aggarwal@nxp.com>; Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>; V Sethi (v.sethi@nxp.com) <v.sethi@nxp.com>; arokia.samy <arokia.samy@puresoftware.com>; kuldip.dwivedi@puresoftware.com; Ard Biesheuvel <Ard.Biesheuvel@arm.com>; vikas.singh@nxp.com; Sunny Wang <Sunny.Wang@arm.com>
Subject: [PATCH V2 3/4] NXP/LS1046aFrwyPkg: Enable ConfigurationManager on LS1046AFRWY

This patch enables the use of ConfigurationManager (CM) and its services to leverage the Dynamic ACPI support for NXP's LS1046aFrwy platform.

Signed-off-by: Vikas Singh <vikas.singh@puresoftware.com>
---
Platform/NXP/LS1046aFrwyPkg/Include/Platform.h | 152 ++++++++++++++++++++ Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.dsc | 28 ++++ Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.fdf | 13 ++
Silicon/NXP/LS1046A/LS1046A.dsc.inc | 11 ++
4 files changed, 204 insertions(+)

diff --git a/Platform/NXP/LS1046aFrwyPkg/Include/Platform.h b/Platform/NXP/LS1046aFrwyPkg/Include/Platform.h
new file mode 100644
index 0000000000..3c68d65cd3
--- /dev/null
+++ b/Platform/NXP/LS1046aFrwyPkg/Include/Platform.h
@@ -0,0 +1,152 @@
+/** @file

+ * Platform headers

+ *

+ * Copyright 2021 NXP

+ * Copyright 2021 Puresoftware Ltd

+ *

+ * SPDX-License-Identifier: BSD-2-Clause-Patent

+ *

+**/

+

+

+#ifndef LS1046AFRWY_PLATFORM_H

+#define LS1046AFRWY_PLATFORM_H

+

+#define EFI_ACPI_ARM_OEM_REVISION 0x00000000

+

+// Soc defines

+#define PLAT_SOC_NAME "LS1046AFRWY"

+

+// Gic

+#define GIC_VERSION 2

+#define GICD_BASE 0x1410000

+#define GICC_BASE 0x142f000

+#define GICH_BASE 0x1440000

+#define GICV_BASE 0x1460000

+

+// UART

+#define UART0_BASE 0x21C0500

+#define UART0_IT 86

+#define UART0_LENGTH 0x100

+#define SPCR_FLOW_CONTROL_NONE 0

+

+// Timer

+#define TIMER_BLOCK_COUNT 1

+#define TIMER_FRAME_COUNT 4

+#define TIMER_WATCHDOG_COUNT 1

+#define TIMER_BASE_ADDRESS 0x23E0000 // a.k.a CNTControlBase

+#define TIMER_READ_BASE_ADDRESS 0x23F0000 // a.k.a CNTReadBase

+#define TIMER_SEC_IT 29

+#define TIMER_NON_SEC_IT 30

+#define TIMER_VIRT_IT 27

+#define TIMER_HYP_IT 26

+#define TIMER_FRAME0_IT 78

+#define TIMER_FRAME1_IT 79

+#define TIMER_FRAME2_IT 92

+

+// Mcfg

+#define LS1046A_PCI_SEG0_CONFIG_BASE 0x4000000000

+#define LS1046A_PCI_SEG0 0x0

+#define LS1046A_PCI_SEG_BUSNUM_MIN 0x0

+#define LS1046A_PCI_SEG_BUSNUM_MAX 0xff

+#define LS1046A_PCI_SEG1_CONFIG_BASE 0x4800000000

+#define LS1046A_PCI_SEG2_CONFIG_BASE 0x5000000000

+#define LS1046A_PCI_SEG1 0x1

+#define LS1046A_PCI_SEG2 0x2

+

+// Platform specific info needed by Configuration Manager

+

+#define CFG_MGR_TABLE_ID SIGNATURE_64 ('L','S','1','0','4','6',' ','
+')

+

+// Specify the OEM defined tables

+#define OEM_ACPI_TABLES 0

+

+#define PLAT_PCI_SEG0 LS1046A_PCI_SEG0

+#define PLAT_PCI_SEG1_CONFIG_BASE LS1046A_PCI_SEG1_CONFIG_BASE

+#define PLAT_PCI_SEG1 LS1046A_PCI_SEG1

+#define PLAT_PCI_SEG_BUSNUM_MIN LS1046A_PCI_SEG_BUSNUM_MIN

+#define PLAT_PCI_SEG_BUSNUM_MAX LS1046A_PCI_SEG_BUSNUM_MAX

+#define PLAT_PCI_SEG2_CONFIG_BASE LS1046A_PCI_SEG2_CONFIG_BASE

+#define PLAT_PCI_SEG2 LS1046A_PCI_SEG2

+

+#define PLAT_GIC_VERSION GIC_VERSION

+#define PLAT_GICD_BASE GICD_BASE

+#define PLAT_GICI_BASE GICI_BASE

+#define PLAT_GICR_BASE GICR_BASE

+#define PLAT_GICR_LEN GICR_LEN

+#define PLAT_GICC_BASE GICC_BASE

+#define PLAT_GICH_BASE GICH_BASE

+#define PLAT_GICV_BASE GICV_BASE

+

+#define PLAT_CPU_COUNT 4

+#define PLAT_GTBLOCK_COUNT 0

+#define PLAT_GTFRAME_COUNT 0

+#define PLAT_PCI_CONFG_COUNT 2

+

+#define PLAT_WATCHDOG_COUNT 0

+#define PLAT_GIC_REDISTRIBUTOR_COUNT 0

+#define PLAT_GIC_ITS_COUNT 0

+

+/* GIC CPU Interface information

+ GIC_ENTRY (CPUInterfaceNumber, Mpidr, PmuIrq, VGicIrq,
+ EnergyEfficiency)

+ */

+#define PLAT_GIC_CPU_INTERFACE { \

+ GICC_ENTRY (0, GET_MPID (0, 0), 138, 0x19, 0), \

+ GICC_ENTRY (1, GET_MPID (0, 1), 139, 0x19, 0), \

+ GICC_ENTRY (2, GET_MPID (0, 2), 127, 0x19, 0), \

+ GICC_ENTRY (3, GET_MPID (0, 3), 129, 0x19, 0), \

+}

+

+#define PLAT_WATCHDOG_INFO \

+ { \

+ } \

+

+#define PLAT_TIMER_BLOCK_INFO \

+ { \

+ } \

+

+#define PLAT_TIMER_FRAME_INFO \

+ { \

+ } \

+

+#define PLAT_GIC_DISTRIBUTOR_INFO \

+ { \

+ PLAT_GICD_BASE, /* UINT64 PhysicalBaseAddress */ \

+ 0, /* UINT32 SystemVectorBase */ \

+ PLAT_GIC_VERSION /* UINT8 GicVersion */ \

+ } \

+

+#define PLAT_GIC_REDISTRIBUTOR_INFO \

+ { \

+ } \

+

+#define PLAT_GIC_ITS_INFO \

+ { \

+ } \

+

+#define PLAT_MCFG_INFO \

+ { \

+ { \

+ PLAT_PCI_SEG1_CONFIG_BASE, \

+ PLAT_PCI_SEG1, \

+ PLAT_PCI_SEG_BUSNUM_MIN, \

+ PLAT_PCI_SEG_BUSNUM_MAX, \

+ }, \

+ { \

+ PLAT_PCI_SEG2_CONFIG_BASE, \

+ PLAT_PCI_SEG2, \

+ PLAT_PCI_SEG_BUSNUM_MIN, \

+ PLAT_PCI_SEG_BUSNUM_MAX, \

+ } \

+ } \

+

+#define PLAT_SPCR_INFO \

+ { \

+ UART0_BASE, \

+ UART0_IT, \

+ 115200, \

+ 0, \

+ EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERFACE_TYPE_16550 \

+ } \

+

+#endif // LS1046AFRWY_PLATFORM_H

diff --git a/Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.dsc b/Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.dsc
index 67cf15cbe4..20111e6037 100755
--- a/Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.dsc
+++ b/Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.dsc
@@ -3,6 +3,7 @@
# LS1046AFRWY Board package.

#

# Copyright 2019-2020 NXP

+# Copyright 2021 Puresoftware Ltd

#

# SPDX-License-Identifier: BSD-2-Clause-Patent

#

@@ -22,10 +23,18 @@
OUTPUT_DIRECTORY = Build/LS1046aFrwyPkg

FLASH_DEFINITION = Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.fdf



+ # This flag controls the dynamic acpi generation

+ #

+ DEFINE DYNAMIC_ACPI_ENABLE = TRUE

+

!include Silicon/NXP/NxpQoriqLs.dsc.inc

!include MdePkg/MdeLibs.dsc.inc

!include Silicon/NXP/LS1046A/LS1046A.dsc.inc



+!if $(DYNAMIC_ACPI_ENABLE) == TRUE

+ !include DynamicTablesPkg/DynamicTables.dsc.inc

+!endif

+

[LibraryClasses.common]

ArmPlatformLib|Platform/NXP/LS1046aFrwyPkg/Library/ArmPlatformLib/ArmPlatformLib.inf

RealTimeClockLib|EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.inf

@@ -46,4 +55,23 @@


Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf



+ #

+ # Dynamic Table Factory

+ !if $(DYNAMIC_ACPI_ENABLE) == TRUE

+
+ DynamicTablesPkg/Drivers/DynamicTableFactoryDxe/DynamicTableFactoryDxe
+ .inf {

+ <LibraryClasses>

+
+ NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/AcpiFadtLibArm.i
+ nf

+
+ NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/AcpiGtdtLibArm.i
+ nf

+
+ NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/AcpiMadtLibArm.i
+ nf

+
+ NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/AcpiMcfgLibArm.i
+ nf

+
+ NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/AcpiSpcrLibArm.i
+ nf

+ }

+ !endif

+

+ #

+ # Acpi Support

+ #

+ MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf

+ MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf

+

##

diff --git a/Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.fdf b/Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.fdf
index 34c4e5a025..f3cac033bc 100755
--- a/Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.fdf
+++ b/Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.fdf
@@ -3,6 +3,7 @@
# FLASH layout file for LS1046a board.

#

# Copyright 2019-2020 NXP

+# Copyright 2021 Puresoftware Ltd

#

# SPDX-License-Identifier: BSD-2-Clause-Patent

#

@@ -99,6 +100,18 @@ READ_LOCK_STATUS = TRUE
INF MdeModulePkg/Universal/Metronome/Metronome.inf

INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf



+

+ #

+ # Acpi Support

+ #

+ INF MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf

+ INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf

+

+ !if $(DYNAMIC_ACPI_ENABLE) == TRUE

+ INF
+ Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/Configura
+ tionManagerDxe.inf

+ !include DynamicTablesPkg/DynamicTables.fdf.inc

+ !endif

+

#

# Multiple Console IO support

#

diff --git a/Silicon/NXP/LS1046A/LS1046A.dsc.inc b/Silicon/NXP/LS1046A/LS1046A.dsc.inc
index 7004533ed5..caebb321d0 100644
--- a/Silicon/NXP/LS1046A/LS1046A.dsc.inc
+++ b/Silicon/NXP/LS1046A/LS1046A.dsc.inc
@@ -2,6 +2,7 @@
# LS1046A Soc package.

#

# Copyright 2017-2020 NXP

+# Copyright 2021-2021 Puresoftware Ltd

#

# SPDX-License-Identifier: BSD-2-Clause-Patent

#

@@ -48,4 +49,14 @@
[Components.common]

MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf



+#

+# Configuration Manager

+!if $(DYNAMIC_ACPI_ENABLE) == TRUE

+
+ Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/Configura
+ tionManagerDxe.inf {

+ <BuildOptions>

+ *_*_*_PLATFORM_FLAGS =
+ -I$(WORKSPACE)/Platform/NXP/LS1046aFrwyPkg/Include

+ *_*_*_PLATFORM_FLAGS =
+ -I$(WORKSPACE)/Silicon/NXP/Chassis2/Include

+ }

+!endif

+

##

--
2.25.1

IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.


Re: [PATCH v2] MinPlatformPkg/PciHostBridgeLibSimple: Fix Mem.Limit assignment

Chiu, Chasel
 

Thanks for fixing this issue! Reviewed-by: Chasel Chiu <chasel.chiu@intel.com>

-----Original Message-----
From: Benjamin Doron <benjamin.doron00@gmail.com>
Sent: Friday, July 23, 2021 10:27 AM
To: devel@edk2.groups.io
Cc: Chiu, Chasel <chasel.chiu@intel.com>; Desimone, Nathaniel L
<nathaniel.l.desimone@intel.com>; Liming Gao
<gaoliming@byosoft.com.cn>; Dong, Eric <eric.dong@intel.com>
Subject: [PATCH v2] MinPlatformPkg/PciHostBridgeLibSimple: Fix Mem.Limit
assignment

In the case where the root bridge's Mem.Limit is the base address of PCIe
MMIO, subtract one to make a valid end address.

This fixes an issue where CpuDxe returns "Length(0x50000001) is not
aligned!" when PciHostBridgeDxe attempts to make this range uncacheable.

Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Signed-off-by: Benjamin Doron <benjamin.doron00@gmail.com>
---

Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHostB
ridgeLibSimple.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git
a/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHos
tBridgeLibSimple.c
b/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHos
tBridgeLibSimple.c
index e231f747019e..0e3fee28b5d1 100644
---
a/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHos
tBridgeLibSimple.c
+++ b/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/P
+++ ciHostBridgeLibSimple.c
@@ -90,7 +90,7 @@ PciHostBridgeGetRootBridges (
if (PcdGet32(PcdPciReservedMemLimit) != 0)
{ mRootBridgeTemplate.Mem.Limit = PcdGet32
(PcdPciReservedMemLimit); } else {- mRootBridgeTemplate.Mem.Limit =
(UINT32) PcdGet64 (PcdPciExpressBaseAddress);+
mRootBridgeTemplate.Mem.Limit = (UINT32) PcdGet64
(PcdPciExpressBaseAddress) - 1; }
mRootBridgeTemplate.MemAbove4G.Base = PcdGet64
(PcdPciReservedMemAbove4GBBase);--
2.31.1


Re: RFC: EXT4 filesystem driver

Andrew Fish
 



On Jul 22, 2021, at 7:07 PM, Desimone, Nathaniel L <nathaniel.l.desimone@...> wrote:

Hi Pedro,

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Pedro
Falcato
Sent: Thursday, July 22, 2021 9:54 AM
To: Andrew Fish <afish@...>
Cc: edk2-devel-groups-io <devel@edk2.groups.io>; mhaeuser@...;
rfc@edk2.groups.io
Subject: Re: [edk2-devel] RFC: EXT4 filesystem driver

Hi Andrew, Marvin,

RE: The package name: It doesn't sound like a bad idea to have something
like a FileSystemPkg and have a bunch of different filesystems inside of it,
but I'll defer to you and my mentors' judgement; we could also drop that
issue for now and take care of it afterwards, since it may need further
changes that are not a part of GSoC and would just delay the process.

With respect to the write capabilities of the driver, I'm not entirely sure
whether or not it's useful. I've been thinking about it today, and it seems like
there's not much that could go wrong? The write path isn't excessively
complex. Except of course in the event of an untimely power cut, but those
/should/ be easily detected by the checksums. My initial idea was to have it
up to speed with FatPkg and other filesystems by implementing all of
EFI_FILE_PROTOCOL, including the write portions. If Apple's HFS+ and APFS
drivers don't have those, it may be a decent idea to reduce the scope of the
ext4 driver as well. I don't see a big need for write support; on the other
hand, I've only worked on UEFI bootloaders before, which may be an outlier
in that regard. Further feedback is appreciated.

The most commonly used reason to for writing to the filesystem in a production environment is capsule updates. Most capsule update implementations will stage the capsule on the EFI System Partition and then reset the system to unlock flash. The second most useful is the UEFI Shell and all the many applications that run within it will write to the filesystem for a large variety of reasons. I think it would be a useful feature to have as one could conceivably start using EFI System Partitions formatted as ext4.


The EFI System Partition is defined to be FAT32 by the UEFI Spec for interoperability. It defines the file system drivers required for the firmware and OS. So changing that is not really an option. 

You can still install the UEFI Shell to a read only file system, you just need to do it from the OS :). We actually do this on Macs quite often. You just run the macOS bless command and reboot to the UEFI Shell. 

Thanks,

Andrew Fish


As for the tests, UEFI SCTs already seem to have some tests on
EFI_FILE_PROTOCOL's. Further testing may require some sort of fuzzing,
which is what I want to, although in a simplified way. With fuzzing we could
hammer the filesystem code with all sorts of different calls in different
orders, we could also mutate the disk structures to test if the driver is secure
and can handle corruption in a nice, safe way. A future (GSoC or not) project
could also attempt to use compiler-generated coverage instrumentation (see
LLVM's LibFuzzer and SanitizerCoverage for an example).

I'm not sure about all OSes, but at least Linux ext2/3/4 drivers are very robust
and can handle and work around any corrupted FS I
(accidentally) throw at them. However, running fsck is the best way to detect
corruption; note that licensing may be an issue as, for example, ext4's fsck is
GPL2 licensed.

Best Regards,
Pedro

On Thu, 22 Jul 2021 at 16:58, Andrew Fish <afish@...> wrote:



On Jul 22, 2021, at 3:24 AM, Marvin Häuser <mhaeuser@...> wrote:

On 22.07.21 01:12, Pedro Falcato wrote:

EXT4 (fourth extended filesystem) is a filesystem developed for Linux
that has been in wide use (desktops, servers, smartphones) since 2008.

The Ext4Pkg implements the Simple File System Protocol for a partition
that is formatted with the EXT4 file system. This allows UEFI Drivers,
UEFI Applications, UEFI OS Loaders, and the UEFI Shell to access files
on an EXT4 partition and supports booting a UEFI OS Loader from an
EXT4 partition.
This project is one of the TianoCore Google Summer of Code projects.

Right now, Ext4Pkg only contains a single member, Ext4Dxe, which is a
UEFI driver that consumes Block I/O, Disk I/O and (optionally) Disk
I/O 2 Protocols, and produces the Simple File System protocol. It
allows mounting ext4 filesystems exclusively.

Brief overhead of EXT4:
Layout of an EXT2/3/4 filesystem:
(note: this driver has been developed using
https://www.kernel.org/doc/html/latest/filesystems/ext4/index.html as
documentation).

An ext2/3/4 filesystem (here on out referred to as simply an ext4
filesystem, due to the similarities) is composed of various concepts:

1) Superblock
The superblock is the structure near (1024 bytes offset from the
start) the start of the partition, and describes the filesystem in general.
Here, we get to know the size of the filesystem's blocks, which
features it supports or not, whether it's been cleanly unmounted, how
many blocks we have, etc.

2) Block groups
EXT4 filesystems are divided into block groups, and each block group
covers
s_blocks_per_group(8 * Block Size) blocks. Each block group has an
associated block group descriptor; these are present directly after
the superblock. Each block group descriptor contains the location of
the inode table, and the inode and block bitmaps (note these bitmaps
are only a block long, which gets us the 8 * Block Size formula covered
previously).

3) Blocks
The ext4 filesystem is divided into blocks, of size s_log_block_size ^ 1024.
Blocks can be allocated using individual block groups's bitmaps. Note
that block 0 is invalid and its presence on extents/block tables means
it's part of a file hole, and that particular location must be read as
a block full of zeros.

4) Inodes
The ext4 filesystem divides files/directories into inodes (originally
index nodes). Each file/socket/symlink/directory/etc (here on out
referred to as a file, since there is no distinction under the ext4
filesystem) is stored as a /nameless/ inode, that is stored in some
block group's inode table. Each inode has s_inode_size size (or
GOOD_OLD_INODE_SIZE if it's an old filesystem), and holds various
metadata about the file. Since the largest inode structure right now
is ~160 bytes, the rest of the inode contains inline extended
attributes. Inodes' data is stored using either data blocks (under ext2/3) or
extents (under ext4).

5) Extents
Ext4 inodes store data in extents. These let N contiguous logical
blocks that are represented by N contiguous physical blocks be
represented by a single extent structure, which minimizes filesystem
metadata bloat and speeds up block mapping (particularly due to the
fact that high-quality
ext4 implementations like linux's try /really/ hard to make the file
contiguous, so it's common to have files with almost 0 fragmentation).
Inodes that use extents store them in a tree, and the top of the tree
is stored on i_data. The tree's leaves always start with an
EXT4_EXTENT_HEADER and contain EXT4_EXTENT_INDEX on eh_depth != 0
and
EXT4_EXTENT on eh_depth = 0; these entries are always sorted by
logical block.

6) Directories
Ext4 directories are files that store name -> inode mappings for the
logical directory; this is where files get their names, which means
ext4 inodes do not themselves have names, since they can be linked
(present) multiple times with different names. Directories can store
entries in two different ways:
1) Classical linear directories: They store entries as a mostly-linked
mostly-list of EXT4_DIR_ENTRY.
2) Hash tree directories: These are used for larger directories, with
hundreds of entries, and are designed in a backwards-compatible way.
These are not yet implemented in the Ext4Dxe driver.

7) Journal
Ext3/4 filesystems have a journal to help protect the filesystem
against system crashes. This is not yet implemented in Ext4Dxe but is
described in detail in the Linux kernel's documentation.

The EDK2 implementation of ext4 is based only on the public
documentation available at
https://www.kernel.org/doc/html/latest/filesystems/ext4/index.html
and
the FreeBSD ext2fs driver (available at
https://github.com/freebsd/freebsd-src/tree/main/sys/fs/ext2fs,
BSD-2-Clause-FreeBSD licensed). It is licensed as
SPDX-License-Identifier: BSD-2-Clause-Patent.

After a brief discussion with the community, the proposed package
location is edk2-platform/Features/Ext4Pkg (relevant discussion:
https://edk2.groups.io/g/devel/topic/83060185).

I was the main contributor and I would like to maintain the package in
the future, if possible.


While I personally don't like it's outside of the EDK II core, I kind of get it.
However I would strongly suggest to choose a more general package name,
like "LinuxFsPkg", or "NixFsPkg", or maybe even just "FileSystemPkg" (and
move FAT over some day?). Imagine someone wants to import BTRFS next
year, should it really be "BtrfsPkg"? I understand it follows the "FatPkg"
convention, but I feel like people forget FatPkg was special as to its awkward
license before Microsoft allowed a change a few years ago. Maintainers.txt
already has the concept of different Reviewers per subfolder, maybe it could
be extended a little to have a common EDK II contributor to officially maintain
the package, but have you be a Maintainer or something like a Reviewer+ to
your driver? Or you could maintain the entire package of course.


Marvin,

Good point that the FatPkg was more about license boundary than
anything else, so I’m not opposed to a more generic package name.

Current limitations:
1) The Ext4Dxe driver is, at the moment, read-only.
2) The Ext4Dxe driver at the moment cannot mount older (ext2/3)
filesystems. Ensuring compatibility with those may not be a bad idea.

I intend to test the package using the UEFI SCTs present in edk2-test,
and implement any other needed unit tests myself using the already
available unit test framework. I also intend to (privately) fuzz the
UEFI driver with bad/unusual disk images, to improve the security and
reliability of the driver.

In the future, ext4 write support should be added so edk2 has a
fully-featured RW ext4 driver. There could also be a focus on
supporting the older ext4-like filesystems, as I mentioned in the
limitations, but that is open for discussion.


I may be alone, but I strongly object. One of our projects (OpenCore) has a
disgusting way of writing files because the FAT32 driver in Aptio IV firmwares
may corrupt the filesystem when resizing files. To be honest, it may corrupt
with other usages too and we never noticed, because basically we wrote the
code to require the least amount of (complex) FS operations.

The issue with EDK II is, there is a lot of own code and a lot of users, but
little testing. By that I do not mean that developers do not test their code,
but that nobody sits down and performs all sorts of FS manipulations in all
sorts of orders and closely observes the result for regression-testing. Users
will not really test it either, as UEFI to them should just somehow boot to
Windows. If at least the code was shared with a codebase that is known-
trusted (e.g. the Linux kernel itself), that'd be much easier to trust, but
realistically this is not going to happen.
My point is, if a company like AMI cannot guarantee writing does not
damage the FS for a very simple FS, how do you plan to guarantee yours
doesn't for a much more complex FS? I'd rather have only one simple FS type
that supports writing for most use-cases (e.g. logging).

At the very least I would beg you to have a PCD to turn write support
off - if it will be off by default, that'd be great of course. :) Was there any
discussion yet as to why write support is needed in the first place you could
point me to?


I think having a default PCD option of read only is a good idea.

EFI on Mac carries HFS+ and APFS EFI file system drivers and both of those
are read only for safety, security, and to avoid the need to validate them. So I
think some products may want to have the option to ship read only versions
of the file system.

Seems like having EFI base file system tests would be useful. I’d imaging
with OVMF it would be possible to implement a very robust test
infrastructure. Seems like the hard bits would be generating the test cases
and figuring out how to validate the tests did the correct thing. I’m guess the
OS based file system drivers are robust and try to work around bugs
gracefully? Maybe there is a way to turn on OS logging, or even run an OS
based fsck on the volume after the tests complete. Regardless this seems
like an interesting project, maybe we can add it to next years GSoC?

Thanks,

Andrew Fish

Thanks for your work!

Best regards,
Marvin

The driver's handling of unclean unmounting through forced shutdown is
unclear.
Is there a position in edk2 on how to handle such cases? I don't think
FAT32 has a "this filesystem is/was dirty" and even though it seems to
me that stopping a system from booting/opening the partition because
"we may find some tiny irregularities" is not the best course of
action, I can't find a clear answer.

The driver also had to add implementations of CRC32C and CRC16, and
after talking with my mentor we quickly reached the conclusion that
these may be good candidates for inclusion in MdePkg. We also
discussed moving the Ucs2 <-> Utf8 conversion library in RedfishPkg
(BaseUcs2Utf8Lib) into MdePkg as well. Any comments?

Feel free to ask any questions you may find relevant.

Best Regards,

Pedro Falcato












--
Pedro Falcato




Adding HTTP boot IO timeout programmability from PcdHttpIoTimeout

Clark-williams, Zachary <zachary.clark-williams@...>
 

Hello,

 

Please review the attached filed EDK2 tracker for feature enablement of programmable timeout of the HTTP boot IO timer.

NetworkPkg-HttpBoot: Making the HTTP IO timeout value programmable with PCD.
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3507

HTTP boot has a default set forced timeout value of 5 seconds for getting the recovery image from a remote source. This change allows the HTTP boot flow to get the IO timeout value from the PcdHttpIoTimeout. PcdHttpIoTimeout value is set in the OneClickRecovery driver from the value provided by CSME.

PcdHttpIoTimeout minimum value 0.5 seconds
PcdHttpIoTimeout maximum value 120 seconds
PcdHttpIoTimeout default value 5 seconds

 

Thank you,

Zack


Re: [PATCH] UefiCpuPkg VTF0 X64: Build page tables using 1-GByte Page Granularity

Ni, Ray
 

Ashraf,
Thanks for the summary. Can you send a V2 patch which only take cares the 1G page table assembly logic?

Thanks,
Ray

-----Original Message-----
From: S, Ashraf Ali <ashraf.ali.s@intel.com>
Sent: Friday, July 23, 2021 12:58 AM
To: Ni, Ray <ray.ni@intel.com>; Dov Murik <dovmurik@linux.ibm.com>; Ard Biesheuvel <ardb@kernel.org>; Brijesh Singh
<brijesh.singh@amd.com>; James Bottomley <jejb@linux.ibm.com>; Erdem Aktas <erdemaktas@google.com>; Tom Lendacky
<thomas.lendacky@amd.com>; Xu, Min M <min.m.xu@intel.com>
Cc: devel@edk2.groups.io; Ard Biesheuvel <ardb+tianocore@kernel.org>; Justen, Jordan L <jordan.l.justen@intel.com>;
Agyeman, Prince <prince.agyeman@intel.com>; Kumar, Rahul1 <rahul1.kumar@intel.com>; De, Debkumar
<debkumar.de@intel.com>; Han, Harry <harry.han@intel.com>; West, Catharine <catharine.west@intel.com>; V, Sangeetha
<sangeetha.v@intel.com>
Subject: RE: [PATCH] UefiCpuPkg VTF0 X64: Build page tables using 1-GByte Page Granularity

Hi. Ray
Based on Dov Murik <dovmurik@linux.ibm.com> Comments to take the python script changes separately,
I have filed the Bugzilla for that separately.
https://bugzilla.tianocore.org/show_bug.cgi?id=3506

verified the binary. More details are in Bugzilla.

Regards,
Ashraf Ali S
Intel Technology India Pvt. Ltd.

-----Original Message-----
From: Ni, Ray <ray.ni@intel.com>
Sent: Wednesday, July 21, 2021 3:00 PM
To: Dov Murik <dovmurik@linux.ibm.com>; Ard Biesheuvel <ardb@kernel.org>; Brijesh Singh <brijesh.singh@amd.com>; James
Bottomley <jejb@linux.ibm.com>; Erdem Aktas <erdemaktas@google.com>; Tom Lendacky <thomas.lendacky@amd.com>; Xu,
Min M <min.m.xu@intel.com>
Cc: S, Ashraf Ali <ashraf.ali.s@intel.com>; devel@edk2.groups.io; Ard Biesheuvel <ardb+tianocore@kernel.org>; Justen, Jordan
L <jordan.l.justen@intel.com>; Agyeman, Prince <prince.agyeman@intel.com>; Kumar, Rahul1 <rahul1.kumar@intel.com>; De,
Debkumar <debkumar.de@intel.com>; Han, Harry <harry.han@intel.com>; West, Catharine <catharine.west@intel.com>; V,
Sangeetha <sangeetha.v@intel.com>
Subject: RE: [PATCH] UefiCpuPkg VTF0 X64: Build page tables using 1-GByte Page Granularity

OVMF's ResetVector is including the UefiCpuPkg's ResetVector. So, OVMF owners please do evaluate the impact.

I think this change assumes platform owner knows which format of page table should be chosen in build time.

-----Original Message-----
From: Dov Murik <dovmurik@linux.ibm.com>
Sent: Tuesday, July 20, 2021 4:02 AM
To: Ard Biesheuvel <ardb@kernel.org>; Ni, Ray <ray.ni@intel.com>; Brijesh Singh <brijesh.singh@amd.com>; James Bottomley
<jejb@linux.ibm.com>; Erdem Aktas <erdemaktas@google.com>; Tom Lendacky <thomas.lendacky@amd.com>
Cc: S, Ashraf Ali <ashraf.ali.s@intel.com>; devel@edk2.groups.io; Ard Biesheuvel <ardb+tianocore@kernel.org>; Justen, Jordan
L <jordan.l.justen@intel.com>; Agyeman, Prince <prince.agyeman@intel.com>; Kumar, Rahul1 <rahul1.kumar@intel.com>; De,
Debkumar <debkumar.de@intel.com>; Han, Harry <harry.han@intel.com>; West, Catharine <catharine.west@intel.com>; V,
Sangeetha <sangeetha.v@intel.com>
Subject: Re: [PATCH] UefiCpuPkg VTF0 X64: Build page tables using 1-GByte Page Granularity



On 19/07/2021 10:09, Ard Biesheuvel wrote:
On Mon, 19 Jul 2021 at 05:14, Ni, Ray <ray.ni@intel.com> wrote:

This change generates the reset vector binary which only contains 1G page table. If a platform doesn't support 1G page table,
this will cause system hang.

To Ard and Jordan,
Can you evaluate whether this change impacts OVMF?
I don't have a clue, sorry, and I wouldn't know where to begin looking.

Brijesh, Dov, James, Erdem: after Laszlo's sudden departure, I will be
needing help reviewing OVMF patches that are highly specific to
SEV/SNP or x86 in general.
Adding Tom too - I think he modified the OVMF reset vector lately and might know.


Please take a look.

I'm not an expert, but I think that OVMF has its own reset vector in OvmfPkg/ResetVector, and therefore the changes in
uefiCpuPkg will not affect OVMF.


Regarding the patch itself:

(1) I suggest separating the python tooling changes to one patch, verifying that the new python scripts generate the same binary
files as the original python scripts. Then add another patch which introduces the reset vector changes.

(2) Do all x64 CPUs support 1 GB pages? Is it always enabled? Do we need to check this capability somewhere?


-Dov




To Prince,
Can you evaluate whether this change impacts SimicsOpenBoardPkg?

Thanks,
Ray

-----Original Message-----
From: S, Ashraf Ali <ashraf.ali.s@intel.com>
Sent: Friday, July 2, 2021 8:25 PM
To: devel@edk2.groups.io
Cc: S, Ashraf Ali <ashraf.ali.s@intel.com>; Ni, Ray
<ray.ni@intel.com>; Kumar, Rahul1 <rahul1.kumar@intel.com>; De,
Debkumar <debkumar.de@intel.com>; Han, Harry <harry.han@intel.com>;
West, Catharine <catharine.west@intel.com>; V, Sangeetha
<sangeetha.v@intel.com>
Subject: [PATCH] UefiCpuPkg VTF0 X64: Build page tables using 1-GByte
Page Granularity

REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3473

X64 Reset Vector Code can access the memory range till 4GB using the Linear-Address Translation to a 2-MByte Page, when
user wants to use more than 4G using 2M Page it will leads to use more number of Page table entries. using the 1-GByte Page
table user can use more than 4G Memory by reducing the page table entries using 1-GByte Page, this patch attached can access
memory range till 512GByte.
Build Scrips for Reset Vector currently based on Python 2 which is already EOL, needs to modify the build script based on
Python 3, update the Binary accordingly.

Cc: Ray Ni <ray.ni@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Debkumar De <debkumar.de@intel.com>
Cc: Harry Han <harry.han@intel.com>
Cc: Catharine West <catharine.west@intel.com>
Cc: Sangeetha V <sangeetha.v@intel.com>
Signed-off-by: Ashraf Ali S <ashraf.ali.s@intel.com>
---
.../Vtf0/Bin/ResetVector.ia32.port80.raw | Bin 516 -> 484 bytes
.../ResetVector/Vtf0/Bin/ResetVector.ia32.raw | Bin 484 -> 468 bytes
.../Vtf0/Bin/ResetVector.ia32.serial.raw | Bin 884 -> 868 bytes
.../Vtf0/Bin/ResetVector.x64.port80.raw | Bin 28676 -> 12292 bytes
.../ResetVector/Vtf0/Bin/ResetVector.x64.raw | Bin 28676 -> 12292 bytes
.../Vtf0/Bin/ResetVector.x64.serial.raw | Bin 28676 -> 12292 bytes
UefiCpuPkg/ResetVector/Vtf0/Build.py | 11 +--
.../ResetVector/Vtf0/Ia32/PageTables64.asm | 2 +-
UefiCpuPkg/ResetVector/Vtf0/ReadMe.txt | 2 +-
.../Vtf0/Tools/FixupForRawSection.py | 4 +-
UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb | 4 +-
.../ResetVector/Vtf0/X64/1GPageTables.asm | 64 ++++++++++++++++++
.../X64/{PageTables.asm => 2MPageTables.asm} | 0
13 files changed, 77 insertions(+), 10 deletions(-) create mode
100644 UefiCpuPkg/ResetVector/Vtf0/X64/1GPageTables.asm
rename UefiCpuPkg/ResetVector/Vtf0/X64/{PageTables.asm =>
2MPageTables.asm} (100%)

diff --git
a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.port80.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.port80.raw
index
2c6ff655ded2a5855ca8f4428d559a7727eb6983..79b23c047bdc6e552d77d5c9e9a
eae21ff04d91d 100644 GIT binary patch delta 410
zcmZo+dBQ9-0SF8a=rRZ}FxWCMF#Invo+zYJ-&~=>P<pEKFmr@L>EYMB8#X*^*s&i7
zI*-2o*Lifq#%B#L{TUe;3~zVd>wJ;c9c#dNqsaO-vqO<t>wyxZ<^$|Sx+*`qBE-KP
zRw#MZ?IF_m@c;k+44fxR?lK-MVJf=bP$9%z%Jy2m^*||G=ZV*+3=ec3YyDQrw&BCG
zhLV39>OTT4_yTke(6spG0}_@eiX$2-m<39tfuvB0QMW|nV~~MBTOFDYFc(>?{CR!5
z`2b5=qlIr&sV@Ka2ph)3jn)CK3=F06%+4CG<$;o&htnFZ!=g(0n4LMA4`}djk7m=n
z@tSo9&>Du9B|zggh&^lgwVUBX-))iIZU6Ps_!-61b|^D2IPfbSNPCqzIiFFU^R?Xs
zd4>r<#gi8>%0vL2z`!uOpJBgKz-zAkjsdS((>jm5W_tbeb@R)JfB*l#TmvLJAN+p?
a3S}hl`Z9zAvN|lpjbXxs*L#qpCjbB+6v6TU

delta 442
zcmX9)O-lk%6n)b;mb6f&NEbm;61Fgs7G?G=i3EW`h#0jTXjjt=xN`<_@e*RfKhRH@
zRthehQp<ioAq+%O48GjhrlO+Pox1Q2_nv#+{d#7P9J~e=HbTgQ&;mk;ijh-3kW;e(
z2#|b@Yi!yt8wAow*Da-71;Y*UMJdG%{oGQ>0fSK3#P_%@6n3VVmKY~2sF%gXydlkT
zz2J+}fsf;~_pRoa+J(fR`Ut;~>qat}3#muERkA!QyT~Xg^M>rg%^bM|McBYs`8V0A
zcP&Nw(O;ogKlFmCBIg5bq<OffWLb~o2jr#sf=_+23&RMToIQfL9{47AKyeO;1a)>J
zBhR=?>3OE6Mw4r>-vk>Al5t4>DR50tqp6HM5M^V1To7n?Y1=u`A{@A7c!=ymHGRlZ
zJ}anuVpcRdDYzN0P#%MY-J^!^vR_OvBRp9GvF1f*Ah$29X~lhJI8j|qcKWL;$&ORN
mb+{6FrzA&7=!a5r41gb~Ws5tejhbe+Ol`#xF!g`tAAbQ#M!vED

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.raw
index
e34780a3a2c9b22bd10a1d5a405e344faaff94f3..ce7faa502b858e99908bcdb397b
776258205e1d5 100644 GIT binary patch delta 421
zcmaFDe1%zP0uUG;&}9%{V6bIiVEA8TJW)uczPUn$q4ZSeVde;h(!;MgckBm(&ZDpY
zbsl}`&d9)Ec)Rmn=Zm!NSOdlzMb@vG9g56a50n@+A7C%iRr%2sA^z>KLdmOc50S=)
z|NsAI;5=D!m+@c;Q_=N?3L)lFw%6jV2TIvGPrN>5c%buG>$g&-l7BD10Br{v65o74
z!m|EEaYRD}vp|V7kQ6F0>XvAH3^E94n?v&f<|1pAKd)~$A7DvqwD658)#cwFVZ(U1
z(K^7DfuU5M*;(VYJW#Upa9X2vSX3z=volBY0S*4`(QKMGUbF51+Qaa&258)`-3%Z4
zZtt%9ub0NpD4w=MnSsH9U+F;FtJKNSjMDY5-6qI0OaQ6_1rZE@G=l)pF$@fo&qL_h
zFuI>%zf-_#uKkVyuUXSNkGy7j{quG6%Zz{j|G(S<Bsw4be+DxMO257gVSvmG3vpwZ
NFyZwchzJ{m0sv1?z^?!R

literal 484
zcmX9*OG_g`5Uz2YXi!K{AwfI@4Wb8^4I;k92Z}6+5k#W02QLkK9j9Rq9_&L7ZDbtq
zqIePigaaNjIzCSdixLS)RFt&2cybqA?5!~cU5~H6s_N>tZQD+`9S{Z>1OTb`GBa#G
zt*_G(GaClinx^RkGo#yGe2LyNvnlO${H9mTj3XK78TZswjJl#0BPWZ(PsE3m63x5<
zkjV2pUL={H-<6y`Ayi}y>qBYR=+mmu*E{2X*HV!;FJ=@olMU=1D<ODc<ds9CLcd-$
z>r@&PjmS*9G|11z5fTzEKTW^U3gc6Jd}Rz>i=xwezWi&|RKrFLb)7MgiLyt(A5Nap
z{K@){_&;%jkXDHiVLej|v^%t)8c;mepB%?^+SRc((Td402KNZ-pIe~y>R7ebhG=Mi
zG0>h98oCZ15CogOAHb`XKiHDrNJxngrv+CGHM`_x1(RWLh67mGTp&(0SUJnJ3Rcm&
z65UvCM_?B@w(a-w1uqM*d0DnQmyjJzmTIyi$x?vuV|+aEM~V$8raq+<d#HFpKI8Y<
TrM$1pedcB-0FmP|Qr7<gpRvyd

diff --git
a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.serial.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.serial.raw
index
6dfa68eabb48a44bc50a0b7fe678f80b5cdadfd5..6503a988abdac06f9aa88f0a65f
2525e12233b0a 100644 GIT binary patch delta 426
zcmeyu_JnPMtN<&s;Q?I+0R{$J1_p-zMaC0#Rrs4LR2WK6bslDpP$)h8+H+!>JIm{T
zoku68$xYtMs2t$H#K2&9yYpV>i?r@o1I8OgcCVQoiY!|Xl$bUjU@tOI`Oy_2{_U_r
z$*XP;k;aGr|Nm#;JXvy=@n8v4(e;K3A?8xfm(zi^wH_#C>pb!L_+($k?)of7kU&X%
z^8pFV6U7k?70d!9(m+zE#Hd@M@iE8{piK_V2bhbjRsOub-F$#0t<l0as#KSMdxQ<+
z;YRBKR|bYsd1hyg*YZHg&ckVq)?rble9X=q%?C92w@0&S-gwQr186V9%Rm4A|KIhO
z`OON2k{`Q%FmEt?H#v*RP`Ks4UK&56c-jtS1_lRyr2}cNv?s4)imrd{GC`hU0?-K)
zzyM?f2mqbLz%cndgq{tf`x*8-1-$0n?-=l!Bdznu%Ljj6Grj)ylK211_kaHXf4Teb
e|Nos2{y&2l1two#MwlBG;>Ivx!s|Uq(h~riBD@{|

delta 425
zcmaFD_JwVNtbi=D;Q?I+0R{$J1_p-zMV1qFRYV&rRDc|Y(&L?nnIjZR54`jN@+Ky@
zv%mcP|NsBaqZ1S4CZ1G|2xMYlFudJ)uk%G(cdP;9jUu;~%s_<>MRu(RN~~Dff$Sn<
zl^<OZ;@=J{l)UKn5NUh})X%_qvg9`7!4jsTs|^)G%%z+!X8~2V9w_DPJn`}nP{Cvy
z#_sxJMvz!Z5vv4H((*)cW<v$DK#2m76e_XlmS}toG6`sBAS=kuA}^IcFRuZGSXqF)
zv_=cxs8VzO?GZMNha0T}T!DVkWOmkgsRon;tLQwO)@U6TRVvKv%)zPw6y@I@&8B(d
zB`c7*1Be-zUOt;_%H$+G>%U$aKcjfs4rQRn_>~T%y|SO&#T1?W(j2HroM8dT6;J?X
zO+L>6re~jL*zXkZns2{jz-!L5&Lb~R`~e2e%P;?5ivNFk_0RwRFIW8q2IYhQ&nCRS
WJpl|r#)O5qF-(~7`Upe>LIMEmI;Oe+

diff --git
a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.port80.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.port80.raw
index
6c0bcc47ebff84830b59047790c70d96e9488296..835f8ea423437fdd8b33470ca07
b5d09e27ef5bf 100644 GIT binary patch literal 12292
zcmeI&+i#oo0mkts4Go129J)fo=$7=rD1$;94uge`K!JtR2m?x1&W9N`jtlni4!~nY
zMKVPp5;sh{V}AhViU1dVP$**DtP&R#RiF&CsHt!04FZH}-n3u#KY(6K@yE_L{>6E&
z?8q}SGc)VwyIqx+a)EMza)EMza)EMza)EMza)EMza)EMza)EMz@AU%z;;$<lUAkFl
z463KNvDDER)G|66gX*QDF{oqcXbfsO9gRWt(a{*xv2-*BwStbuppK)XF{tC|XbkEH
zbTkI_LpmCRI)RSHpiZQtF{lb1jY0L((HPW8bTkIFl8(lpendxOP^;)@4C-V$8iP88
zj>e!?)6p2z03D4%ok~YzP(P-lF{sn%Xbfr%9gRW#gpS6beo9AUP=j<d1~o)SV^C}9
zXbfr{9gRV)r=u~b4RkaHbvhl5LH&%5#-PriqcNzBbTkHaCLN7I{hW@*pw6PBF{rcY
zXbfr-9gRVqLq}s!=hD#_)Mh#wgW5tzV^G6%GzN7Z9gRVqPe)@=7tqld)P;032K5U%
z8iTrsj>e!arlT>aU((SS)Ce7oL0v*eV^CY^XbkFCbTkHaDIJYLjndH=)Ma!u26Z_d
zjX`arqcNx}=x7Y;N;(>Yx{8j*pngq9V^CvsGzN7w9gRU<Lq}s!*V54#)OB<;26a6h
zjY0i}j>e#FprbLUaXK1<x{;2?pngk7V^BBI(HPXtbTkHa3muI?ZKtC#s9Wi13~GXo
z#-M&jM`KVs=x7Y;HaZ%Ex}A>3pzfffF{nG~XbkEuIvRtzn~uhy?xCYGsC(&X4C+2Q
z8iTr@j>e#VPe)@=RXQ4jdVr3`pdO^7F{nS#(HPVp>1Yh<Avzj^dYF#JpdO*4F{nrB
zXbkExIvRs|oQ}qz{zOM(P?K~t2K59TjX~AuXbh@OM`KWbrlT>aC+TPmszFC%P=BGL
zF{r=N(HPX<=x7Y;?{qW<^%NbAK|M`JV^Gh~(U>K-6t5!tb>t;Rck;YuqrdUL=bx{4
znvGRkpIdW7{gY;6;2#&X?x}y+Y^>Qix9R=*-l@h0)!%E)^-c`c=Q<~}+Y6rEU0hmw
zI)__(+OIBn@ui;P;Qg(STL-GU?%3S3Z*rv5J34vc&eVpda_r=$4PQJrvHJ75q1wS+
zW2>6~?G_(FIPTxIk9yv!Et~wnjg`IizRuvz)cacRcHY~P);l{tulKb-TX5}g`%rQI
z*5dr)u)C%*aPhlOOt{h8UpuY1URfL7HPHNY>Ad2Xj!va_a%98To&8ferrNyd`W^L6
zmDeUN>6vSej9)3$2Ya_|><kvMHCJtpY~N8ov3J{wscfvgc3a<>`#Q^Ki+!|MD~{`I
zsSM3m-Z-$lvTpu$OQ{SO_f}LkSB6sD7_6+z!SO@g?tt3&7tinI;&HRu+wE4??d$Am
zpR(Yu-qdH)``>)|&^gsg&+6*z`r_Xy#e=E`pDiBMui4Q)sW`hmyx{8W3Qg~u&h-5B
zf$6=SYtB%+_?hCP8b>ZmPig6L<Wn0j{^zLw{MJ{v|AKa3KHfQg_hsXq<<-{Pon@Ub
z7oY4dRt|T&i}x*EomKo%v&C0;Z0$Q^Yxj(;eS54m-(8rQIeL0|T`o{AP%cm|P%cm|
pP%cm|P%cm|P%cm|@LgMA@vB4sf8V(M=BqR_v-s)J?;L$U`3*d;lz{*M

literal 28676
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
BvabLD

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.raw
index
a78d5b407c8a106c221af127216d073cf8fdb99d..80c2de6ed5ef5e8dc5d45297fb8
3e7085bce0c01 100644 GIT binary patch literal 12292
zcmeI&OK)6-0mbp-n3#mun2<IGLgPGWLcx%PHx9*+hMMw7$|IOiN}=uWei;u8kTz#z
zQfUY>BOw;3%YJ|^F=dg1Od`mpk-8udwK7GZICs-*P>WEe*U2A=&w%bop5LAMkMDTS
zYQ~yQr_)(I+wH2lR0~uKR0~uKR0~uKR0~uKR0~uKR0~uKR0~uKe6JVy3$LzpWd5+!
z7*tPrFyGM_)B-vhgX*QDF{o4MXbfs09gRWt(a{*xsdO|3wTO<!pcd277}RNWGzN7#
z9gRVqK}TayXVTFa)LC>i234b@F{pkz8iP8Uj>e#t(9sywIdn7zwUmy=pngC{V^BY&
zqcNyubTkGvKu2Rx=hD#_)OmC?26a9ijX^D^qcNxp=x7Y;M|3m>wStbupa$t^3~D7E
zjX|xVqcNz}bTkIFhK|OdE~KL|s2|hO7}Q!i8iQI#M`KVI(a{*xPv~e2>S8(?gSv!{
z#-N7iXbkF7IvRtzjE=^j*3;1#)CM{lgW5<(V^EjV(HPVfbTkHaB^`}HT}4M@P*>B@
z7}Pa%GzN7o9gRU<M@M5&!*nzTwTX_#psuH*F{q!?(HPVXbTkGvLPujzH`37<)J=3W
z2DO=v#-M&iM`KW1=x7Y;W;z;!`Z*nqL5<SU7}PCvGzRqxIvRtzm5#=sZlj|ysN3mi
z4C)R#8iU$OM`KXi=x7Y;mvl4+btfH-LES}1V^DX~(HPV{bTkIFosPz!?xmwKs4+Sk
zgSwB7#-Mi4(HPYIbTkI_D>@p3dVr3`pngq9V^9y$(HPWk=x7Y;Avzj^dYF#Jpngk7
zV^F`NqcN!8)6p1IosPz!9-*T#s7L8&4C*mD8iRVAj>e##prbLUC+TPm>M1%JgL;~d
z#-N^|qcNyw>1Yh<IXW7H8mFT%sORZu3~GXo#-JK>GzRqo9gRV~NJnE(O*$HbdWnw4
zpkAh<F{oGQXbfs69gRW#fsV$Y{zyk-P`l`8%)A@Qcai-%@fM>yetE0e-~8hB*BeEv
zx%B$imTztRyVV?c`^xr1jZa$5<-2Ew{?Rx%*<7Q>f%Z)A*kEI(SUkPAytMZf$J_hn
zcJ-7eJly_Q`$&Dy1M7PZjSm;SBjZ=?&cw#aoH{<V=D)9vE&FO_aN_8m(WR}=y5(07
z7JoGH&z|=u7L0%F=91n<U$Ja=8hz~#ivt_d-oN{+#)66CbC;CoEl={`WCpJN@cA(}
zd;2HOFRzzOY}_-@`h5O8<&%v}rgwaJ%{Rs2$(&MeU32@6#!&5@u}wWQt>JB3q{fQg
z&FhL4Wo*yXTf^ITG|uYXyl67(YVX|NchR9@;dHr&=605+D~4)=v$ek+Sy)>&`>v(b
zHkP**)z;SrQy#3St;*4nW8Ln6=H4oQXIcll-P)={#YbPir~gbHe(z7mF0I#kmer?M
zm;W{?A6!5BbouChO^@_R<vHuqi!^m;DpRvlN2U%ITh^*m_VVi(o%ugu{&M158E^jm
zq<{X_zjFHx?Y(JRaoXM+w-pQP?GK6t#s7*|=hh$ZcIS4^Uu`O1!*u!69bLJ9bmhL$
zl^=|@XS-j1=lmz1rMj*bs1~Res1~Res1~Res1~Res1~Res22FXEHL-!vH6dcCq7qh
Rzx!r&I&(88?>TXI=l^%>e!Ktx

literal 28676
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
SPx9m^JvI){eBb~48~hhX6Rzk0

diff --git
a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.serial.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.serial.raw
index
61c71349a8a599916f3eeae8c5dee92efb56db71..9a24e8a752440462541a9589e51
4770692a838e4 100644 GIT binary patch literal 12292
zcmeI&No<sL9LDjd3`;?ADxy?DDT|5=+Jc~nO9jQc<AxRYZQQpyqvQUYG{lT(ZQ{Wg
zk6gUT%~}sUrlROY5)WdCrfM_{V;Um~qGHE);A=uhqn`DB5A&J-d^7L7|KId5(@cMV
zfB(GUT21MZP9U8?I)QWo=>*aVq!UOdkWL_-KsteR0_g<O3H+xguz}qrcGmAE1{&3r
z+^KgAG-@0j1C7eiG0>>-bPP0V0v!X5nn=e$qbAWY(5PlQ1{yV)j)6u^p<|#?2hlOm
zsDtSkXw+0X1{!q;9RrQZ(lOAe7CHtRbtoMJjhaTsK%)+$W1vyf=@@9#;dBf%>Igap
z8a0ECfkw5`G0><Z=@@9#QFIJ6Y9<{6jhaQrK%<VPW1vyT&@s@c*>nsvs*R3;M$MsP
zpiy(_7--ZyItCgwpN@e>9ZSbRqmH9vpi#%uG0><5bPP1=1Ud#9bs`-DjXH^rfkvH7
z$3UYN(lOAeQ|K6I)Twj~G^(ABfkt)EG0><*bPP0VF&zVqI*pEjMlGRZpixWd7--b#
zbPP1=3_1oHwTzB|Mx9B=K%<t^G0>>9=oo0!*>nsv>Kr--8g(um1C8pWW1vyz(J|1d
z6?6<VY9$>5jXIx>fks_G$3UZ2(J|1d3+WhWR2Llsjk<`Afks_S$3UYlp<|#?m(nrN
zsLSXWXw>C&3^eKrItCiGnvQ`+T}j74qpqT3pix)TG0>=M=oo0!wR8+LY7HF&jk=DG
zfkt)HG0>>%=@@9#S~><Abpss(jk=MJfkxd#$3UZQremN{x6m=rs9Wh6Xw+?V3^eL?
zItChb2OR^Ax|5E9M%_inK%;VW3^eL)ItChb4;=%Ix|fcDM%_opK%?%bW1vwF&@s@c
z2k97S)I)R(H0ohG1{(DU9RrPel#YQ$_0TcUsK@9SXjGn#fkqYR7--bvbPP1=2|5NE
zRitB}QBTq_(5R>A7--bfbPP1=89D|U^(-9&je3rbfkr(~$3WK|{57-jg^|IZGaEHB
zxF@r*X{7$hq>;+YnU3TGW{dWH`l$6RE)`pf-@f!xp;{_VKl{a5R}{W36<c3lQogP5
zd8s&S-O$2M3tM}O^Hun`Je28fD-2aH$_@UO`Tote{7<?1nQtE%yKZk-Pi<IF85!7=
z9Occ`(emc8Pi;I^N5fP9e5%TpaZ<<j@|Wcux%D@-H*M=Vr<&>PS+>skCB2^1(>{OC
zi`_GJ54GiYuJ4*&`l^=vDq`|S`7fH@%a7~%EQ-@Ig~^rIl6kFjVPbhp^}`OAKUlZB
zuwv|m<r*&JpZAy_{rfZgi>>|GRKKkJExm4Cw&k(zC}vvnGn3nC`9<qnOW)MDlI*v$
z*O{K>^Y>P__j-J;bjD?C3k$Pvcc0ZXR9e3J0;w=NvvNUob`r}&xzh4AYYT^DRyOx~
zLH6w%CZ4dZI$<E$y()W0Yqjcw*|y>A;EoB|xx?>-<m{qk)tqh5wmG>oJ3H4qZ~n1X
zYt`7jEp3?2X$|YYc-v+sdmGT!S}i+wTeZyJ)1LaDQ^&}GtEFRBQ^%~PjQsMhe(2l&
z?v1-n$z_{n<Ob#?|IA7*GPiU5u3D`{1DzA4WG`c{c5%biEoxZ*`D$|m&Fb6M=f2^-
z9erD?S0ArOlJh4&vN_<W53zpi`_;{>pX~RIKYWYzE84VTb#>~d^Hx`zbLICd-FvI!
zs=F(rqm{e&)@qf-za=-1C-1~S^5)jM=6ujKXLHw__q)o&weJpit@_>lua@4X6G$hJ
uP9U8?I)QWo=>*aVq!UOd@PC*<WpLNNZv^$duDNEF`ui&z_CK=!i^A`|H=E!9

literal 28676
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

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Build.py
b/UefiCpuPkg/ResetVector/Vtf0/Build.py
index 343c53b5ff..29f29ff0c2 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/Build.py
+++ b/UefiCpuPkg/ResetVector/Vtf0/Build.py
@@ -1,7 +1,7 @@
## @file
# Automate the process of building the various reset vector types
# -# Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2009 - 2021, Intel Corporation. All rights
+reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -32,16 +32,19 @@ for arch in ('ia32', 'x64'):
'-o', output,
'Vtf0.nasmb',
)
+ print(f"Command : {' '.join(commandLine)}")
ret = RunCommand(commandLine)
- print '\tASM\t' + output
- if ret != 0: sys.exit(ret)
+ if ret != 0:
+ print(f"something went wrong while executing the {commandLine[-1]}")
+ sys.exit()
+ print('\tASM\t' + output)

commandLine = (
'python',
'Tools/FixupForRawSection.py',
output,
)
- print '\tFIXUP\t' + output
+ print('\tFIXUP\t' + output)
ret = RunCommand(commandLine)
if ret != 0: sys.exit(ret)

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Ia32/PageTables64.asm
b/UefiCpuPkg/ResetVector/Vtf0/Ia32/PageTables64.asm
index 87a4125d4b..9cc6f56c17 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/Ia32/PageTables64.asm
+++ b/UefiCpuPkg/ResetVector/Vtf0/Ia32/PageTables64.asm
@@ -15,7 +15,7 @@ BITS 32
SetCr3ForPageTables64:

;
- ; These pages are built into the ROM image in X64/PageTables.asm
+ ; These pages are built into the ROM image in
+ X64/1GPageTables.asm
;
mov eax, ADDR_OF(TopLevelPageDirectory)
mov cr3, eax
diff --git a/UefiCpuPkg/ResetVector/Vtf0/ReadMe.txt
b/UefiCpuPkg/ResetVector/Vtf0/ReadMe.txt
index e6e5b54243..eb9dd24ee2 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/ReadMe.txt
+++ b/UefiCpuPkg/ResetVector/Vtf0/ReadMe.txt
@@ -29,7 +29,7 @@ EBP/RBP - Pointer to the start of the Boot Firmware
Volume === HOW TO BUILD VTF0 ===

Dependencies:
-* Python 2.5~2.7
+* Python 3.0 or newer
* Nasm 2.03 or newer

To rebuild the VTF0 binaries:
diff --git a/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
b/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
index c77438a0ce..de771eba22 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
+++ b/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
@@ -1,7 +1,7 @@
## @file
# Apply fixup to VTF binary image for FFS Raw section # -#
Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2008 - 2021, Intel Corporation. All rights
+reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -15,6 +15,6 @@ c = ((len(d) + 4 + 7) & ~7) - 4 if c > len(d):
c -= len(d)
f = open(sys.argv[1], 'wb')
- f.write('\x90' * c)
+ f.write(b'\x90' * c)
f.write(d)
f.close()
diff --git a/UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb
b/UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb
index 493738c79c..0625efc456 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb
+++ b/UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb
@@ -2,7 +2,7 @@
; @file
; This file includes all other code files to assemble the reset
vector code ; -; Copyright (c) 2008 - 2013, Intel Corporation. All
rights reserved.<BR>
+; Copyright (c) 2008 - 2021, Intel Corporation. All rights
+reserved.<BR>
; SPDX-License-Identifier: BSD-2-Clause-Patent ;

;--------------------------------------------------------------------
----------
@@ -36,7 +36,7 @@
%include "PostCodes.inc"

%ifdef ARCH_X64
-%include "X64/PageTables.asm"
+%include "X64/1GPageTables.asm"
%endif

%ifdef DEBUG_PORT80
diff --git a/UefiCpuPkg/ResetVector/Vtf0/X64/1GPageTables.asm
b/UefiCpuPkg/ResetVector/Vtf0/X64/1GPageTables.asm
new file mode 100644
index 0000000000..8ae6c4c98c
--- /dev/null
+++ b/UefiCpuPkg/ResetVector/Vtf0/X64/1GPageTables.asm
@@ -0,0 +1,64 @@
+;-------------------------------------------------------------------
+---
+--------
+; @file
+; Emits Page Tables for 1:1 mapping of the addresses 0 -
+0x8000000000
+(512GB) ; ; Copyright (c) 2021, Intel Corporation. All rights
+reserved.<BR> ; SPDX-License-Identifier: BSD-2-Clause-Patent ;
+Linear-Address Translation to a 1-GByte Page ;
+;-------------------------------------------------------------------
+---
+--------
+
+BITS 64
+
+%define ALIGN_TOP_TO_4K_FOR_PAGING
+
+%define PAGE_PRESENT 0x01
+%define PAGE_READ_WRITE 0x02
+%define PAGE_USER_SUPERVISOR 0x04
+%define PAGE_WRITE_THROUGH 0x08
+%define PAGE_CACHE_DISABLE 0x010
+%define PAGE_ACCESSED 0x020
+%define PAGE_DIRTY 0x040
+%define PAGE_PAT 0x080
+%define PAGE_GLOBAL 0x0100
+%define PAGE_1G 0x80
+
+%define PAGE_PDP_ATTR (PAGE_ACCESSED + \
+ PAGE_READ_WRITE + \
+ PAGE_PRESENT)
+
+%define PAGE_PDP_1G_ATTR (PAGE_ACCESSED + \
+ PAGE_READ_WRITE + \
+ PAGE_PRESENT + \
+ PAGE_1G)
+
+%define PGTBLS_OFFSET(x) ((x) - TopLevelPageDirectory) %define
+PGTBLS_ADDR(x) (ADDR_OF(TopLevelPageDirectory) + (x))
+
+%define PDP(offset) (ADDR_OF(TopLevelPageDirectory) + (offset) + \
+ PAGE_PDP_ATTR)
+
+%define PDP_1G(x) ((x << 30) + PAGE_PDP_1G_ATTR)
+
+ALIGN 16
+
+TopLevelPageDirectory:
+
+ ;
+ ; Top level Page Directory Pointers (1 * 512GB entry)
+ ;
+ DQ PDP(0x1000)
+
+
+ TIMES 0x1000-PGTBLS_OFFSET($) DB 0
+ ;
+ ; Next level Page Directory Pointers (512 * 1GB entries => 512GB)
+ ;
+%assign i 0
+%rep 512
+ DQ PDP_1G(i)
+ %assign i i+1
+%endrep
+
+
+EndOfPageTables:
diff --git a/UefiCpuPkg/ResetVector/Vtf0/X64/PageTables.asm
b/UefiCpuPkg/ResetVector/Vtf0/X64/2MPageTables.asm
similarity index 100%
rename from UefiCpuPkg/ResetVector/Vtf0/X64/PageTables.asm
rename to UefiCpuPkg/ResetVector/Vtf0/X64/2MPageTables.asm
--
2.32.0.windows.1


Re: [PATCH V2 3/4] UefiCpuPkg/ResetVector: Add Main32 entry point in Main.asm

Ni, Ray
 

Reviewed-by: Ray Ni <ray.ni@intel.com>

-----Original Message-----
From: Xu, Min M <min.m.xu@intel.com>
Sent: Thursday, July 22, 2021 1:52 PM
To: devel@edk2.groups.io
Cc: Xu, Min M <min.m.xu@intel.com>; Dong, Eric <eric.dong@intel.com>; Ni, Ray <ray.ni@intel.com>; Yao, Jiewen
<jiewen.yao@intel.com>
Subject: [PATCH V2 3/4] UefiCpuPkg/ResetVector: Add Main32 entry point in Main.asm

RFC: https://bugzilla.tianocore.org/show_bug.cgi?id=3429

In Tdx all CPUs "reset" to run on 32-bit protected mode with flat
descriptor (paging disabled). Main32 entry point is added in
UefiCpuPkg/ResetVector/Vtf0/Main.asm so that Main.asm can support
the 32-bit protected mode.

Init32.asm is the 32-bit initialization code. It is a null stub in
UefiCpuPkg. The actual initialization can be implemented in the platform
(OvmfPkg/ResetVector/Ia32/Init32.asm is the example.)

Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Signed-off-by: Min Xu <min.m.xu@intel.com>
---
UefiCpuPkg/ResetVector/Vtf0/Ia32/Init32.asm | 13 +++++++++++++
UefiCpuPkg/ResetVector/Vtf0/Main.asm | 14 ++++++++++++++
UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb | 2 +-
3 files changed, 28 insertions(+), 1 deletion(-)
create mode 100644 UefiCpuPkg/ResetVector/Vtf0/Ia32/Init32.asm

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Ia32/Init32.asm b/UefiCpuPkg/ResetVector/Vtf0/Ia32/Init32.asm
new file mode 100644
index 000000000000..0cdae4a4a84a
--- /dev/null
+++ b/UefiCpuPkg/ResetVector/Vtf0/Ia32/Init32.asm
@@ -0,0 +1,13 @@
+;------------------------------------------------------------------------------
+; @file
+; 32-bit initialization code.
+; Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
+; SPDX-License-Identifier: BSD-2-Clause-Patent
+;
+;------------------------------------------------------------------------------
+
+BITS 32
+
+Init32:
+ nop
+ OneTimeCallRet Init32
diff --git a/UefiCpuPkg/ResetVector/Vtf0/Main.asm b/UefiCpuPkg/ResetVector/Vtf0/Main.asm
index 19d08482f831..4920c6937e1b 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/Main.asm
+++ b/UefiCpuPkg/ResetVector/Vtf0/Main.asm
@@ -36,6 +36,20 @@ Main16:

BITS 32

+%ifdef ARCH_X64
+
+ jmp SearchBfv
+
+;
+; Entry point of Main32
+;
+Main32:
+
+ OneTimeCall Init32
+
+%endif
+
+SearchBfv:
;
; Search for the Boot Firmware Volume (BFV)
;
diff --git a/UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb b/UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb
index 493738c79c1c..6493b9863c48 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb
+++ b/UefiCpuPkg/ResetVector/Vtf0/Vtf0.nasmb
@@ -51,7 +51,7 @@
%include "Ia32/SearchForSecEntry.asm"

%ifdef ARCH_X64
-%include "Ia32/Flat32ToFlat64.asm"
+%include "Ia32/Init32.asm"
%include "Ia32/PageTables64.asm"
%endif

--
2.29.2.windows.2


Re: [PATCH] UefiCpuPkg: ResetVector Tool Support for Python 3

Ni, Ray
 

Ashraf,
I assume that your previous ResetVector patch can be dropped, and we just review this one that supports python3 first, right?
Since this patch is for the feedbacks of patch separation, can you help to do it further?
1. only do minimal update to the python script to make it python3 capable. No additional printing.
2. add additional printing in 2nd patch
3. submit new .raw binary in a new patch serial because this binary update is not because of python3 but the out-of-dated binary.

To make it clear, 1 and 2 are two patches that belong to the same patch set.
3 is a separate patch.

Thanks,
Ray

-----Original Message-----
From: S, Ashraf Ali <ashraf.ali.s@intel.com>
Sent: Friday, July 23, 2021 12:41 AM
To: devel@edk2.groups.io
Cc: S, Ashraf Ali <ashraf.ali.s@intel.com>; Ni, Ray <ray.ni@intel.com>; Kumar, Rahul1 <rahul1.kumar@intel.com>; De,
Debkumar <debkumar.de@intel.com>; Han, Harry <harry.han@intel.com>; West, Catharine <catharine.west@intel.com>; V,
Sangeetha <sangeetha.v@intel.com>
Subject: [PATCH] UefiCpuPkg: ResetVector Tool Support for Python 3

[edk2-devel] [PATCH]
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3506

Build Scrips for Reset Vector currently based on Python 2
which is already EOL, needs to modify the build script based on
Python 3, update the Binary accordingly.

Change-Id: I2cfef08177951f2f29ee168ac4a9de9b10769ea1
Cc: Ray Ni <ray.ni@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Debkumar De <debkumar.de@intel.com>
Cc: Harry Han <harry.han@intel.com>
Cc: Catharine West <catharine.west@intel.com>
Cc: Sangeetha V <sangeetha.v@intel.com>
Signed-off-by: Ashraf Ali S <ashraf.ali.s@intel.com>
---
.../Vtf0/Bin/ResetVector.ia32.port80.raw | Bin 516 -> 484 bytes
.../ResetVector/Vtf0/Bin/ResetVector.ia32.raw | Bin 484 -> 468 bytes
.../Vtf0/Bin/ResetVector.ia32.serial.raw | Bin 884 -> 868 bytes
.../Vtf0/Bin/ResetVector.x64.port80.raw | Bin 28676 -> 28676 bytes
.../ResetVector/Vtf0/Bin/ResetVector.x64.raw | Bin 28676 -> 28676 bytes
.../Vtf0/Bin/ResetVector.x64.serial.raw | Bin 28676 -> 28676 bytes
UefiCpuPkg/ResetVector/Vtf0/Build.py | 11 +++++++----
.../Vtf0/Tools/FixupForRawSection.py | 4 ++--
8 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.port80.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.port80.raw
index 2c6ff655ded2a5855ca8f4428d559a7727eb6983..79b23c047bdc6e552d77d5c9e9aeae21ff04d91d 100644
GIT binary patch
delta 410
zcmZo+dBQ9-0SF8a=rRZ}FxWCMF#Invo+zYJ-&~=>P<pEKFmr@L>EYMB8#X*^*s&i7
zI*-2o*Lifq#%B#L{TUe;3~zVd>wJ;c9c#dNqsaO-vqO<t>wyxZ<^$|Sx+*`qBE-KP
zRw#MZ?IF_m@c;k+44fxR?lK-MVJf=bP$9%z%Jy2m^*||G=ZV*+3=ec3YyDQrw&BCG
zhLV39>OTT4_yTke(6spG0}_@eiX$2-m<39tfuvB0QMW|nV~~MBTOFDYFc(>?{CR!5
z`2b5=qlIr&sV@Ka2ph)3jn)CK3=F06%+4CG<$;o&htnFZ!=g(0n4LMA4`}djk7m=n
z@tSo9&>Du9B|zggh&^lgwVUBX-))iIZU6Ps_!-61b|^D2IPfbSNPCqzIiFFU^R?Xs
zd4>r<#gi8>%0vL2z`!uOpJBgKz-zAkjsdS((>jm5W_tbeb@R)JfB*l#TmvLJAN+p?
a3S}hl`Z9zAvN|lpjbXxs*L#qpCjbB+6v6TU

delta 442
zcmX9)O-lk%6n)b;mb6f&NEbm;61Fgs7G?G=i3EW`h#0jTXjjt=xN`<_@e*RfKhRH@
zRthehQp<ioAq+%O48GjhrlO+Pox1Q2_nv#+{d#7P9J~e=HbTgQ&;mk;ijh-3kW;e(
z2#|b@Yi!yt8wAow*Da-71;Y*UMJdG%{oGQ>0fSK3#P_%@6n3VVmKY~2sF%gXydlkT
zz2J+}fsf;~_pRoa+J(fR`Ut;~>qat}3#muERkA!QyT~Xg^M>rg%^bM|McBYs`8V0A
zcP&Nw(O;ogKlFmCBIg5bq<OffWLb~o2jr#sf=_+23&RMToIQfL9{47AKyeO;1a)>J
zBhR=?>3OE6Mw4r>-vk>Al5t4>DR50tqp6HM5M^V1To7n?Y1=u`A{@A7c!=ymHGRlZ
zJ}anuVpcRdDYzN0P#%MY-J^!^vR_OvBRp9GvF1f*Ah$29X~lhJI8j|qcKWL;$&ORN
mb+{6FrzA&7=!a5r41gb~Ws5tejhbe+Ol`#xF!g`tAAbQ#M!vED

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.raw b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.raw
index e34780a3a2c9b22bd10a1d5a405e344faaff94f3..ce7faa502b858e99908bcdb397b776258205e1d5 100644
GIT binary patch
delta 421
zcmaFDe1%zP0uUG;&}9%{V6bIiVEA8TJW)uczPUn$q4ZSeVde;h(!;MgckBm(&ZDpY
zbsl}`&d9)Ec)Rmn=Zm!NSOdlzMb@vG9g56a50n@+A7C%iRr%2sA^z>KLdmOc50S=)
z|NsAI;5=D!m+@c;Q_=N?3L)lFw%6jV2TIvGPrN>5c%buG>$g&-l7BD10Br{v65o74
z!m|EEaYRD}vp|V7kQ6F0>XvAH3^E94n?v&f<|1pAKd)~$A7DvqwD658)#cwFVZ(U1
z(K^7DfuU5M*;(VYJW#Upa9X2vSX3z=volBY0S*4`(QKMGUbF51+Qaa&258)`-3%Z4
zZtt%9ub0NpD4w=MnSsH9U+F;FtJKNSjMDY5-6qI0OaQ6_1rZE@G=l)pF$@fo&qL_h
zFuI>%zf-_#uKkVyuUXSNkGy7j{quG6%Zz{j|G(S<Bsw4be+DxMO257gVSvmG3vpwZ
NFyZwchzJ{m0sv1?z^?!R

literal 484
zcmX9*OG_g`5Uz2YXi!K{AwfI@4Wb8^4I;k92Z}6+5k#W02QLkK9j9Rq9_&L7ZDbtq
zqIePigaaNjIzCSdixLS)RFt&2cybqA?5!~cU5~H6s_N>tZQD+`9S{Z>1OTb`GBa#G
zt*_G(GaClinx^RkGo#yGe2LyNvnlO${H9mTj3XK78TZswjJl#0BPWZ(PsE3m63x5<
zkjV2pUL={H-<6y`Ayi}y>qBYR=+mmu*E{2X*HV!;FJ=@olMU=1D<ODc<ds9CLcd-$
z>r@&PjmS*9G|11z5fTzEKTW^U3gc6Jd}Rz>i=xwezWi&|RKrFLb)7MgiLyt(A5Nap
z{K@){_&;%jkXDHiVLej|v^%t)8c;mepB%?^+SRc((Td402KNZ-pIe~y>R7ebhG=Mi
zG0>h98oCZ15CogOAHb`XKiHDrNJxngrv+CGHM`_x1(RWLh67mGTp&(0SUJnJ3Rcm&
z65UvCM_?B@w(a-w1uqM*d0DnQmyjJzmTIyi$x?vuV|+aEM~V$8raq+<d#HFpKI8Y<
TrM$1pedcB-0FmP|Qr7<gpRvyd

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.serial.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.serial.raw
index 6dfa68eabb48a44bc50a0b7fe678f80b5cdadfd5..6503a988abdac06f9aa88f0a65f2525e12233b0a 100644
GIT binary patch
delta 426
zcmeyu_JnPMtN<&s;Q?I+0R{$J1_p-zMaC0#Rrs4LR2WK6bslDpP$)h8+H+!>JIm{T
zoku68$xYtMs2t$H#K2&9yYpV>i?r@o1I8OgcCVQoiY!|Xl$bUjU@tOI`Oy_2{_U_r
z$*XP;k;aGr|Nm#;JXvy=@n8v4(e;K3A?8xfm(zi^wH_#C>pb!L_+($k?)of7kU&X%
z^8pFV6U7k?70d!9(m+zE#Hd@M@iE8{piK_V2bhbjRsOub-F$#0t<l0as#KSMdxQ<+
z;YRBKR|bYsd1hyg*YZHg&ckVq)?rble9X=q%?C92w@0&S-gwQr186V9%Rm4A|KIhO
z`OON2k{`Q%FmEt?H#v*RP`Ks4UK&56c-jtS1_lRyr2}cNv?s4)imrd{GC`hU0?-K)
zzyM?f2mqbLz%cndgq{tf`x*8-1-$0n?-=l!Bdznu%Ljj6Grj)ylK211_kaHXf4Teb
e|Nos2{y&2l1two#MwlBG;>Ivx!s|Uq(h~riBD@{|

delta 425
zcmaFD_JwVNtbi=D;Q?I+0R{$J1_p-zMV1qFRYV&rRDc|Y(&L?nnIjZR54`jN@+Ky@
zv%mcP|NsBaqZ1S4CZ1G|2xMYlFudJ)uk%G(cdP;9jUu;~%s_<>MRu(RN~~Dff$Sn<
zl^<OZ;@=J{l)UKn5NUh})X%_qvg9`7!4jsTs|^)G%%z+!X8~2V9w_DPJn`}nP{Cvy
z#_sxJMvz!Z5vv4H((*)cW<v$DK#2m76e_XlmS}toG6`sBAS=kuA}^IcFRuZGSXqF)
zv_=cxs8VzO?GZMNha0T}T!DVkWOmkgsRon;tLQwO)@U6TRVvKv%)zPw6y@I@&8B(d
zB`c7*1Be-zUOt;_%H$+G>%U$aKcjfs4rQRn_>~T%y|SO&#T1?W(j2HroM8dT6;J?X
zO+L>6re~jL*zXkZns2{jz-!L5&Lb~R`~e2e%P;?5ivNFk_0RwRFIW8q2IYhQ&nCRS
WJpl|r#)O5qF-(~7`Upe>LIMEmI;Oe+

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.port80.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.port80.raw
index 6c0bcc47ebff84830b59047790c70d96e9488296..0e53a574fab74db6973d7ea41a6a495266a4d0ae 100644
GIT binary patch
literal 28676
zcmeI*`@iM)RoC&AhK2&t38m6#D@l_eMJzNyu#grOl$OXfa;c#Re7Fq?-biQcc!M>B
z0MnLqpei@Tk5z7pGAP<W)h<X=OGPQ55UAjS(Ae~-G@un~>A2H8;eP=3=kb{H+-GK9
z-+lIbe)vB2JRWoA;>C*>Z`hYF$MGB&I4*Ep;JCnXf#U+l1&#|G7dS3(T;RCCae?Ck
zzo!?t;nJh;|8Ho%fph$Of#1`A@W&T-T;RCCae?Ck#|4fH92Yn)a9rTHz;S`&0>7^o
zc)+WDAg+7YqX#0nSlnz5<BCTf9C{`fi<`}1JVwvtVsW!Mj4Sm_E*3YN!+1A6lZ(a8
z<}e<sXL7N)*&N1IdL|c(o6TXoyPnC#;%0LgkJB@`Slnz5<303DE*3YN!+1|UlZ(a8
z<}lt%&*WlpvpI}Epl5QixY-=Wd+V88EN(W3@pwIxi^a|6Fiz>2Tr6%jhjF!@$;IMk
za~SWVXL7N)*&N0b^h_=mH=DzFUp<qH#m(k0o~UPXvAEeB#vjx(xmet64&(jwOfD8T
zo5OgLp2@}HW^)+V=$TwBZZ?PUhxAM?7B`#2_``Z87mJ(CVLVyS<YIBNIgF?1nOrPx
zHiz*?^h_=mH=DzFe?60n#m(k0uGKTSSlnz5<2pT)i^a|6FrFHRbGZLAxmet64&!<~
zlZ(a8<}hy1Gr3sYY!2f_J(G*Y&E_yZK+oi2akDv$KdNVPvAEeB#s}(|Tr6%jhw(H$
zlZ(a8<}f};&*WlpvpI}Ere|`oxY-=W2kV(!EN(W3@yGQ{E*3YN!+5%$$;IMka~L0@
zXL7N)*&N1)>X}?DZZ?PU3_X*J#m(k0ZqhTkSlnz5<7PdRi^a|6Fg{Gr<YIBNIgCG{
zXL7N)*&N1)>zQ0EZZ?PU5qc&Ui<`}1{7F5Ni^a|6FrKMra<RDC9L7iLnOrPxHiz+1
zdL|c(o6TX|qGxikxY-=Wv-C_Z7B`#2c($I&#o}gj7$2=?a<RDC9LC4!nOrPxHiwaV
zCKrpF&0&0O9M0kX&*WlpvpI~9(=)kP+-wfxIeI1+i<`}1e7v5?#o}gj7|+!+xmet6
z4&!-xCKrpF&0&0kp2@}HW^)*~>X}?DZZ?PUr}RuN7B`#2_(VOEi^a|6Fg{7o<YIBN
zIgC%%Gr3sYY!2g7^h_=mH=D!wR6Uc6#m(k0K26W$VsW!MjN9}~E*3YN!}!yBCKrpF
z&0&1Hp2@}HW^)*yp=WZjxY-=WXX=?;EN(W3@mYE%7mJ(CVLV^Y<YIBNIgCG}XL7N)
z*&N30dL|c(o6TW-ww}qw;%0LgFVHi&Slnz5<8$;(E*3YN!}zm$CKrpF&0&15p2@}H
zW^)*yr)P4pxY-=W=j)kVEN(W3vGhzX7B`#2_<}f`!~LJh#o}gj7+<Joa<RDC9L5*v
znOrPxHiz-WdL|c(o6TW-iJr;D;%0Lgr}a!O7B`#2_)<NSi^a|6F#epL$;IMka~OYK
z&*WlpvpI|}(=)kP+-wfx%k@ky7B`#2_zQX_7mJ(CVf;lslZ(a8<}m(}p2@}HW^)*S
zS<mERakDv$zoKVyvAEeB##iW>Tr6%jhjE9V$;IMka~LnwGr3sYY!2g$p2@}HW^)*4
z^-L}nH=D!wt9m9Ei<`}1yhzXFVsW!MjB|P>7mJ(CVf-~clZ(a8<}m)cp2@}HW^)*S
zL(k-5akDv$zo}<(vAEeB#^2I2xmet64&y8JOfD8To5T1jJ(G*Y&E_yl&*WlpvpJ0O
zaX1gebxbZ6H=D!wYCV&S#m(k0?$k56Slnz5<7@OxE*3YN!?;V&<YIBNIgGE>Gr3sY
zY!2h=^h_=mH=D!wdOeei#m(k0F6fzDEN(W3@nSubi^a|6FkYf(a<RDC9L7uaOfD8T
zo5T19J(G*Y&E_!f)-$<S+-wfxWqKwTi<`}1T+}nUSlnz5;~Vu%E*3YN!}umWlZ(a8
z<}hBaXL7N)*&N2-)-$<S+-wfx@93FaEN(W3@ptu1E*3YN!}w-BlZ(a8<}kiR&*Wlp
zvpI}!)ib$R+-wfx+w@E>7B`#2_;x*$i^a|6F#evN$;IMka~OYL&*WlpvpJ0K&@;JM
z+-wfxALyA}EN(W3vGq(Y7B`#2_=j;ghx<R1i^a|6FkYc&a<RDC9L7J=Gr3sYY!2fe
z>zQ0EZZ?PUoq8r0i<`}1e3zcd#o}gj7~idDa<RDC9LD$PnOrPxHiz-OdL|c(o6TYT
z6FrlQ#m(k0{;8hH#o}gj7~iL7a<RDC9L7J>Gr3sYY!2g}>zQ0EZZ?PU{dy)Bi<`}1
zT+%bSSlnz5;|KIiE*3YN!}u3^CKrpF&0+jYJ(G*Y&E_zEP|xIIakDv$f2C(~vAEeB
z#=q7xxmet64&#-2CKrpF&0*Z5XL7N)*&N0X>6u(CZZ?PU!+Itci<`}1yh_jHVsW!M
zjDMqNa<RDC9LB%ZGr3sYY!2h!>6u(CZZ?PUYCV&S#m(k0TF>NSakDv$ABn>`-2a(e
zEN(W3@uPYs7mJ(CVce@{a<RDC9L8((OfD8To5Q$I&*WlpvpI~{>X}?DZZ?PU@AXVB
z7B`#2c%7cf#o}gj7(b?Ga<RDC9LDSQOfD8To5T1IdL|c(o6TYTxSq+y;%0Lg|54B6
zVsW!MjQ^x(a<RDC9L7)RnOrPxHiz*BJ(G*Y&E_zEQqSaKakDv$pVBkASlnz5<EQmZ
zE*3YN!}!m7CKrpF&0+i(J(G*Y&E_zEM$hD8akDv$pVc$DSlnz5<9<Dpi^a|6Fn&(Y
z<YIBNIgFpzGr3sYY!2g%dL|c(o6TYTS3Q%9#m(k0enHRVVsW!Mj9=6<xmet64&%S+
znOrPxHit2KCKrpF&0+jf9M0kX&*WlpvpI}k)-$<S+-wdHPyOigGr3sYY!2gB^h_=m
zH=DzFlb*@N;%0Lg59*m*EN(W3@!$1KE*3YN!+5iv$;IMka~KclnOrPxHiz*RJ(G*Y
z&E_yp^h_=mH=D!wA9^Mii<`}1{7*fTi^a|6F#eaG$;IMka~Qv>XL7N)*&N1O^-L}n
zH=DzFSkL5QakDv$U(++WSlnz5<Ja{}E*3YN!}#BNCKrpF&0+i>J(G*Y&E_!Pre|`o
zxY-=W|J5_OSlnz5<2Uq7E*3YN!}v`-lZ(a8<}lu_XL7N)*&N3I(=)kP+-wfx9eO4g
zi<`}1{Fa`{#o}gj81K|Gxmet64&$<($;IMkbKd1mhkuTAb;Pp|*SLJghn+un^|?2_
z^rdG{&YyeYvtRs_Pdod|=g(d9tsj2j3(o%B`EyUX>)xmT^w~GudG5wI`}zy_UU~a<
zXYW0E?@N~+tb1O4I2Z0adFO@uF8#oR_0YFm5pmNSFZ|+#H=lmV=RV_#`|r5r<jTC`
zBkt-mH{aRse#g^q{EZji{-n3vd)=A0yyVs=p8uuGhi^6b9zS;G7q0k`Gmp9BXY1S(
zt~`6y$+dU&*{d$R?&S41^@Z2o^|rHDU3%+-b>^Ly9zI<E*@x>NF829%_B9{*x)<JF
z=dQf^%##lvpK#{pmt1rHfk&=)c+$MHue{@y8{cvA#yk7nPM?3~r@Y|o(@(wf_Gevj
z@A+G9dv3(pYp;CH(@w5E{NjasPoKZ#`7b#8_$#0DxI6o4r(XFvSAEd^Cy%}7kzpS?
zbGY2eO{cD#Q$PIX$DX==eyAe))Xj&_9(U>)r>^V6gKJM+-*36?;men=iA!I6`1)RP
z=<bP&moJ~X{{EBuF1_D__4ZfATkn43t6uT&hnzlj#gk6ob3;TPqSJ5r+Cz19+>=*D
z9Ik!o<_GKaJ&%jK@4vh6p1a?C_Zv<=@dM-1;rAT=tA=--N4}&-&bz)l<I8{IQNR7S
z{eGXnEMEO_x1GG_t3UR(lgFOE@S2myoc!iPFS`8Dsdrw!{LmLY^5KIIFY2DdkIT0{
z^|iM?^}bu5`kGrW%;g6!UVQZG$B)Majtd+YI4*Ep;JCnXf#U+l1&#|G7dS5PyKRAo
b-v03Kyl;H|XFe}3UVP|*M}Owg_mlr0pwq8e

literal 28676
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
BvabLD

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.raw b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.raw
index a78d5b407c8a106c221af127216d073cf8fdb99d..865846da42a45c16b69746f16963d47a6c6e71b0 100644
GIT binary patch
literal 28676
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

literal 28676
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
SPx9m^JvI){eBb~48~hhX6Rzk0

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.serial.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.serial.raw
index 61c71349a8a599916f3eeae8c5dee92efb56db71..f1d6536cec924d0e167cf1ee4e9309ed5fd7ad60 100644
GIT binary patch
literal 28676
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
Fe*tvrwzvQQ

literal 28676
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

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Build.py b/UefiCpuPkg/ResetVector/Vtf0/Build.py
index 343c53b5ff..29f29ff0c2 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/Build.py
+++ b/UefiCpuPkg/ResetVector/Vtf0/Build.py
@@ -1,7 +1,7 @@
## @file
# Automate the process of building the various reset vector types
#
-# Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -32,16 +32,19 @@ for arch in ('ia32', 'x64'):
'-o', output,
'Vtf0.nasmb',
)
+ print(f"Command : {' '.join(commandLine)}")
ret = RunCommand(commandLine)
- print '\tASM\t' + output
- if ret != 0: sys.exit(ret)
+ if ret != 0:
+ print(f"something went wrong while executing the {commandLine[-1]}")
+ sys.exit()
+ print('\tASM\t' + output)

commandLine = (
'python',
'Tools/FixupForRawSection.py',
output,
)
- print '\tFIXUP\t' + output
+ print('\tFIXUP\t' + output)
ret = RunCommand(commandLine)
if ret != 0: sys.exit(ret)

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
b/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
index c77438a0ce..de771eba22 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
+++ b/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
@@ -1,7 +1,7 @@
## @file
# Apply fixup to VTF binary image for FFS Raw section
#
-# Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2008 - 2021, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -15,6 +15,6 @@ c = ((len(d) + 4 + 7) & ~7) - 4
if c > len(d):
c -= len(d)
f = open(sys.argv[1], 'wb')
- f.write('\x90' * c)
+ f.write(b'\x90' * c)
f.write(d)
f.close()
--
2.30.2.windows.1


[PATCH v2] MinPlatformPkg/PciHostBridgeLibSimple: Fix Mem.Limit assignment

Benjamin Doron
 

In the case where the root bridge's Mem.Limit is the base address of
PCIe MMIO, subtract one to make a valid end address.

This fixes an issue where CpuDxe returns "Length(0x50000001) is not
aligned!" when PciHostBridgeDxe attempts to make this range uncacheable.

Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Signed-off-by: Benjamin Doron <benjamin.doron00@gmail.com>
---
Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHostBr=
idgeLibSimple.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimp=
le/PciHostBridgeLibSimple.c b/Platform/Intel/MinPlatformPkg/Pci/Library/Pci=
HostBridgeLibSimple/PciHostBridgeLibSimple.c
index e231f747019e..0e3fee28b5d1 100644
--- a/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciH=
ostBridgeLibSimple.c
+++ b/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciH=
ostBridgeLibSimple.c
@@ -90,7 +90,7 @@ PciHostBridgeGetRootBridges (
if (PcdGet32(PcdPciReservedMemLimit) !=3D 0) {=0D
mRootBridgeTemplate.Mem.Limit =3D PcdGet32 (PcdPciReservedMemLimit);=0D
} else {=0D
- mRootBridgeTemplate.Mem.Limit =3D (UINT32) PcdGet64 (PcdPciExpressBase=
Address);=0D
+ mRootBridgeTemplate.Mem.Limit =3D (UINT32) PcdGet64 (PcdPciExpressBase=
Address) - 1;=0D
}=0D
=0D
mRootBridgeTemplate.MemAbove4G.Base =3D PcdGet64 (PcdPciReservedMemAbove=
4GBBase);=0D
--=20
2.31.1


Re: RFC: EXT4 filesystem driver

Nate DeSimone
 

Hi Pedro,

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Pedro
Falcato
Sent: Thursday, July 22, 2021 9:54 AM
To: Andrew Fish <afish@apple.com>
Cc: edk2-devel-groups-io <devel@edk2.groups.io>; mhaeuser@posteo.de;
rfc@edk2.groups.io
Subject: Re: [edk2-devel] RFC: EXT4 filesystem driver

Hi Andrew, Marvin,

RE: The package name: It doesn't sound like a bad idea to have something
like a FileSystemPkg and have a bunch of different filesystems inside of it,
but I'll defer to you and my mentors' judgement; we could also drop that
issue for now and take care of it afterwards, since it may need further
changes that are not a part of GSoC and would just delay the process.

With respect to the write capabilities of the driver, I'm not entirely sure
whether or not it's useful. I've been thinking about it today, and it seems like
there's not much that could go wrong? The write path isn't excessively
complex. Except of course in the event of an untimely power cut, but those
/should/ be easily detected by the checksums. My initial idea was to have it
up to speed with FatPkg and other filesystems by implementing all of
EFI_FILE_PROTOCOL, including the write portions. If Apple's HFS+ and APFS
drivers don't have those, it may be a decent idea to reduce the scope of the
ext4 driver as well. I don't see a big need for write support; on the other
hand, I've only worked on UEFI bootloaders before, which may be an outlier
in that regard. Further feedback is appreciated.
The most commonly used reason to for writing to the filesystem in a production environment is capsule updates. Most capsule update implementations will stage the capsule on the EFI System Partition and then reset the system to unlock flash. The second most useful is the UEFI Shell and all the many applications that run within it will write to the filesystem for a large variety of reasons. I think it would be a useful feature to have as one could conceivably start using EFI System Partitions formatted as ext4.


As for the tests, UEFI SCTs already seem to have some tests on
EFI_FILE_PROTOCOL's. Further testing may require some sort of fuzzing,
which is what I want to, although in a simplified way. With fuzzing we could
hammer the filesystem code with all sorts of different calls in different
orders, we could also mutate the disk structures to test if the driver is secure
and can handle corruption in a nice, safe way. A future (GSoC or not) project
could also attempt to use compiler-generated coverage instrumentation (see
LLVM's LibFuzzer and SanitizerCoverage for an example).

I'm not sure about all OSes, but at least Linux ext2/3/4 drivers are very robust
and can handle and work around any corrupted FS I
(accidentally) throw at them. However, running fsck is the best way to detect
corruption; note that licensing may be an issue as, for example, ext4's fsck is
GPL2 licensed.

Best Regards,
Pedro

On Thu, 22 Jul 2021 at 16:58, Andrew Fish <afish@apple.com> wrote:



On Jul 22, 2021, at 3:24 AM, Marvin Häuser <mhaeuser@posteo.de> wrote:

On 22.07.21 01:12, Pedro Falcato wrote:

EXT4 (fourth extended filesystem) is a filesystem developed for Linux
that has been in wide use (desktops, servers, smartphones) since 2008.

The Ext4Pkg implements the Simple File System Protocol for a partition
that is formatted with the EXT4 file system. This allows UEFI Drivers,
UEFI Applications, UEFI OS Loaders, and the UEFI Shell to access files
on an EXT4 partition and supports booting a UEFI OS Loader from an
EXT4 partition.
This project is one of the TianoCore Google Summer of Code projects.

Right now, Ext4Pkg only contains a single member, Ext4Dxe, which is a
UEFI driver that consumes Block I/O, Disk I/O and (optionally) Disk
I/O 2 Protocols, and produces the Simple File System protocol. It
allows mounting ext4 filesystems exclusively.

Brief overhead of EXT4:
Layout of an EXT2/3/4 filesystem:
(note: this driver has been developed using
https://www.kernel.org/doc/html/latest/filesystems/ext4/index.html as
documentation).

An ext2/3/4 filesystem (here on out referred to as simply an ext4
filesystem, due to the similarities) is composed of various concepts:

1) Superblock
The superblock is the structure near (1024 bytes offset from the
start) the start of the partition, and describes the filesystem in general.
Here, we get to know the size of the filesystem's blocks, which
features it supports or not, whether it's been cleanly unmounted, how
many blocks we have, etc.

2) Block groups
EXT4 filesystems are divided into block groups, and each block group
covers
s_blocks_per_group(8 * Block Size) blocks. Each block group has an
associated block group descriptor; these are present directly after
the superblock. Each block group descriptor contains the location of
the inode table, and the inode and block bitmaps (note these bitmaps
are only a block long, which gets us the 8 * Block Size formula covered
previously).

3) Blocks
The ext4 filesystem is divided into blocks, of size s_log_block_size ^ 1024.
Blocks can be allocated using individual block groups's bitmaps. Note
that block 0 is invalid and its presence on extents/block tables means
it's part of a file hole, and that particular location must be read as
a block full of zeros.

4) Inodes
The ext4 filesystem divides files/directories into inodes (originally
index nodes). Each file/socket/symlink/directory/etc (here on out
referred to as a file, since there is no distinction under the ext4
filesystem) is stored as a /nameless/ inode, that is stored in some
block group's inode table. Each inode has s_inode_size size (or
GOOD_OLD_INODE_SIZE if it's an old filesystem), and holds various
metadata about the file. Since the largest inode structure right now
is ~160 bytes, the rest of the inode contains inline extended
attributes. Inodes' data is stored using either data blocks (under ext2/3) or
extents (under ext4).

5) Extents
Ext4 inodes store data in extents. These let N contiguous logical
blocks that are represented by N contiguous physical blocks be
represented by a single extent structure, which minimizes filesystem
metadata bloat and speeds up block mapping (particularly due to the
fact that high-quality
ext4 implementations like linux's try /really/ hard to make the file
contiguous, so it's common to have files with almost 0 fragmentation).
Inodes that use extents store them in a tree, and the top of the tree
is stored on i_data. The tree's leaves always start with an
EXT4_EXTENT_HEADER and contain EXT4_EXTENT_INDEX on eh_depth != 0
and
EXT4_EXTENT on eh_depth = 0; these entries are always sorted by
logical block.

6) Directories
Ext4 directories are files that store name -> inode mappings for the
logical directory; this is where files get their names, which means
ext4 inodes do not themselves have names, since they can be linked
(present) multiple times with different names. Directories can store
entries in two different ways:
1) Classical linear directories: They store entries as a mostly-linked
mostly-list of EXT4_DIR_ENTRY.
2) Hash tree directories: These are used for larger directories, with
hundreds of entries, and are designed in a backwards-compatible way.
These are not yet implemented in the Ext4Dxe driver.

7) Journal
Ext3/4 filesystems have a journal to help protect the filesystem
against system crashes. This is not yet implemented in Ext4Dxe but is
described in detail in the Linux kernel's documentation.

The EDK2 implementation of ext4 is based only on the public
documentation available at
https://www.kernel.org/doc/html/latest/filesystems/ext4/index.html
and
the FreeBSD ext2fs driver (available at
https://github.com/freebsd/freebsd-src/tree/main/sys/fs/ext2fs,
BSD-2-Clause-FreeBSD licensed). It is licensed as
SPDX-License-Identifier: BSD-2-Clause-Patent.

After a brief discussion with the community, the proposed package
location is edk2-platform/Features/Ext4Pkg (relevant discussion:
https://edk2.groups.io/g/devel/topic/83060185).

I was the main contributor and I would like to maintain the package in
the future, if possible.


While I personally don't like it's outside of the EDK II core, I kind of get it.
However I would strongly suggest to choose a more general package name,
like "LinuxFsPkg", or "NixFsPkg", or maybe even just "FileSystemPkg" (and
move FAT over some day?). Imagine someone wants to import BTRFS next
year, should it really be "BtrfsPkg"? I understand it follows the "FatPkg"
convention, but I feel like people forget FatPkg was special as to its awkward
license before Microsoft allowed a change a few years ago. Maintainers.txt
already has the concept of different Reviewers per subfolder, maybe it could
be extended a little to have a common EDK II contributor to officially maintain
the package, but have you be a Maintainer or something like a Reviewer+ to
your driver? Or you could maintain the entire package of course.


Marvin,

Good point that the FatPkg was more about license boundary than
anything else, so I’m not opposed to a more generic package name.

Current limitations:
1) The Ext4Dxe driver is, at the moment, read-only.
2) The Ext4Dxe driver at the moment cannot mount older (ext2/3)
filesystems. Ensuring compatibility with those may not be a bad idea.

I intend to test the package using the UEFI SCTs present in edk2-test,
and implement any other needed unit tests myself using the already
available unit test framework. I also intend to (privately) fuzz the
UEFI driver with bad/unusual disk images, to improve the security and
reliability of the driver.

In the future, ext4 write support should be added so edk2 has a
fully-featured RW ext4 driver. There could also be a focus on
supporting the older ext4-like filesystems, as I mentioned in the
limitations, but that is open for discussion.


I may be alone, but I strongly object. One of our projects (OpenCore) has a
disgusting way of writing files because the FAT32 driver in Aptio IV firmwares
may corrupt the filesystem when resizing files. To be honest, it may corrupt
with other usages too and we never noticed, because basically we wrote the
code to require the least amount of (complex) FS operations.

The issue with EDK II is, there is a lot of own code and a lot of users, but
little testing. By that I do not mean that developers do not test their code,
but that nobody sits down and performs all sorts of FS manipulations in all
sorts of orders and closely observes the result for regression-testing. Users
will not really test it either, as UEFI to them should just somehow boot to
Windows. If at least the code was shared with a codebase that is known-
trusted (e.g. the Linux kernel itself), that'd be much easier to trust, but
realistically this is not going to happen.
My point is, if a company like AMI cannot guarantee writing does not
damage the FS for a very simple FS, how do you plan to guarantee yours
doesn't for a much more complex FS? I'd rather have only one simple FS type
that supports writing for most use-cases (e.g. logging).

At the very least I would beg you to have a PCD to turn write support
off - if it will be off by default, that'd be great of course. :) Was there any
discussion yet as to why write support is needed in the first place you could
point me to?


I think having a default PCD option of read only is a good idea.

EFI on Mac carries HFS+ and APFS EFI file system drivers and both of those
are read only for safety, security, and to avoid the need to validate them. So I
think some products may want to have the option to ship read only versions
of the file system.

Seems like having EFI base file system tests would be useful. I’d imaging
with OVMF it would be possible to implement a very robust test
infrastructure. Seems like the hard bits would be generating the test cases
and figuring out how to validate the tests did the correct thing. I’m guess the
OS based file system drivers are robust and try to work around bugs
gracefully? Maybe there is a way to turn on OS logging, or even run an OS
based fsck on the volume after the tests complete. Regardless this seems
like an interesting project, maybe we can add it to next years GSoC?

Thanks,

Andrew Fish

Thanks for your work!

Best regards,
Marvin

The driver's handling of unclean unmounting through forced shutdown is
unclear.
Is there a position in edk2 on how to handle such cases? I don't think
FAT32 has a "this filesystem is/was dirty" and even though it seems to
me that stopping a system from booting/opening the partition because
"we may find some tiny irregularities" is not the best course of
action, I can't find a clear answer.

The driver also had to add implementations of CRC32C and CRC16, and
after talking with my mentor we quickly reached the conclusion that
these may be good candidates for inclusion in MdePkg. We also
discussed moving the Ucs2 <-> Utf8 conversion library in RedfishPkg
(BaseUcs2Utf8Lib) into MdePkg as well. Any comments?

Feel free to ask any questions you may find relevant.

Best Regards,

Pedro Falcato










--
Pedro Falcato




[RFC] MemoryProtectionLib for Dynamic Memory Guard Settings

Taylor Beebe
 

Current memory protection settings rely on FixedAtBuild PCD values (minus PcdSetNxForStack). Because of this, the memory protection configuration interface is fixed in nature. Cases arise in which memory protections might need to be adjusted between boots (if platform design allows) to avoid disabling a system. For example, platforms might choose to allow the user to control their protection policies such as allow execution of critical 3rd party software that might violate memory protections.

This RFC seeks your feedback regarding introducing an interface that allows dynamic configuration of memory protection settings.

I would like to propose two options:
1. Describing the memory protection setting configuration in a HOB that is produced by the platform.
2. Introducing a library class (e.g. MemoryProtectionLib) that allows abstraction of the memory protection setting configuration data source.

In addition, I would like to know if the memory protection FixedAtBuild PCDs currently in MdeModulePkg can be removed so we can move the configuration interface entirely to an option above.

In any case, I would like the settings to be visible to environments such as Standalone MM where dynamic PCDs are not accessible.

I am seeking your feedback on this proposal in preparation for sending an edk2 patch series.

--
Taylor Beebe
Software Engineer @ Microsoft


[PATCH v1] MinPlatformPkg/PciHostBridgeLibSimple: Fix Mem.Limit assignment

Benjamin Doron
 

In the case where the root bridge's Mem.Limit is the base address of
PCIe MMIO, subtract one to make a valid end address.

This fixes an issue where CpuDxe returns "Length(0x50000001) is not
aligned!" when PciHostBridgeDxe attempts to make this range uncacheable.

Signed-off-by: Benjamin Doron <benjamin.doron00@gmail.com>
---
Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciHostBr=
idgeLibSimple.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimp=
le/PciHostBridgeLibSimple.c b/Platform/Intel/MinPlatformPkg/Pci/Library/Pci=
HostBridgeLibSimple/PciHostBridgeLibSimple.c
index e231f747019e..0e3fee28b5d1 100644
--- a/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciH=
ostBridgeLibSimple.c
+++ b/Platform/Intel/MinPlatformPkg/Pci/Library/PciHostBridgeLibSimple/PciH=
ostBridgeLibSimple.c
@@ -90,7 +90,7 @@ PciHostBridgeGetRootBridges (
if (PcdGet32(PcdPciReservedMemLimit) !=3D 0) {=0D
mRootBridgeTemplate.Mem.Limit =3D PcdGet32 (PcdPciReservedMemLimit);=0D
} else {=0D
- mRootBridgeTemplate.Mem.Limit =3D (UINT32) PcdGet64 (PcdPciExpressBase=
Address);=0D
+ mRootBridgeTemplate.Mem.Limit =3D (UINT32) PcdGet64 (PcdPciExpressBase=
Address) - 1;=0D
}=0D
=0D
mRootBridgeTemplate.MemAbove4G.Base =3D PcdGet64 (PcdPciReservedMemAbove=
4GBBase);=0D
--=20
2.31.1


Re: [PATCH V2 4/4] OvmfPkg/ResetVector: Update ResetVector to support Tdx

Min Xu
 

On July 23, 2021 1:08 AM, Tom Lendacky wrote:
On 7/22/21 12:52 AM, Min Xu wrote:
RFC: https://bugzilla.tianocore.org/show_bug.cgi?id=3429

diff --git a/OvmfPkg/ResetVector/Ia32/Flat32ToFlat64.asm
b/OvmfPkg/ResetVector/Ia32/Flat32ToFlat64.asm
index c6d0d898bcd1..2206ca719593 100644
--- a/OvmfPkg/ResetVector/Ia32/Flat32ToFlat64.asm
+++ b/OvmfPkg/ResetVector/Ia32/Flat32ToFlat64.asm
@@ -17,6 +17,9 @@ Transition32FlatTo64Flat:

OneTimeCall SetCr3ForPageTables64

+ cmp dword[TDX_WORK_AREA], 0x47584454 ; 'TDXG'
+ jz TdxTransition32FlatTo64Flat
+
Is the memory area guaranteed to be zeroed for legacy guests? Hopefully,
this won't trip up a non-TDX guest with a false match (highly unlikely, though).
TDX_WORK_AREA is piece of TdxMailbox which is located in the MEMFD started
from PcdOvmfSecGhcbBackupBase. In Td guest, this memory region is initialized
to all-0 by host VMM. In legacy guests, I am not sure what's the initialized value
it is. So 'TDXG' is checked to guarantee it is Td-guest or not.
Since Tdx re-use the memory region (PcdOvmfSecGhcbBackupBase) as the
TDX_WORK_AREA, and @Tom Lendacky you should be the original owner of
PcdOvmfSecGhcbBackupBase, can this area be cleared in the beginning of
ResetVector in legacy guests? Or I should better create a TDX specific work
area in MEMFD to guarantee the Td And Non-Td check?


mov eax, cr4
bts eax, 5 ; enable PAE
mov cr4, eax
@@ -65,10 +68,54 @@ EnablePaging:
bts eax, 31 ; set PG
mov cr0, eax ; enable paging

+ jmp _jumpTo64Bit
+
+;
+; Tdx Transition from 32Flat to 64Flat ;
+TdxTransition32FlatTo64Flat:
+
+ mov eax, cr4
+ bts eax, 5 ; enable PAE
+
+ ;
+ ; byte[TDX_WORK_AREA_PAGELEVEL5] holds the indicator whether
52bit is supported.
+ ; if it is the case, need to set LA57 and use 5-level paging
+ ;
+ cmp byte[TDX_WORK_AREA_PAGELEVEL5], 0
+ jz .set_cr4
+ bts eax, 12
+.set_cr4:
+ mov cr4, eax
+ mov ebx, cr3
+
+ ;
+ ; if la57 is not set, we are ok
+ ; if using 5-level paging, adjust top-level page directory
+ ;
+ bt eax, 12
+ jnc .set_cr3
+ mov ebx, TDX_PT_ADDR (0)
+.set_cr3:
+ mov cr3, ebx
+
+ mov eax, cr0
+ bts eax, 31 ; set PG
+ mov cr0, eax ; enable paging
If you clear ebx here...

+
+_jumpTo64Bit:
jmp LINEAR_CODE64_SEL:ADDR_OF(jumpTo64BitAndLandHere)
+
BITS 64
jumpTo64BitAndLandHere:

+ ;
+ ; For Td guest we are done and jump to the end
+ ;
+ mov eax, TDX_WORK_AREA
+ cmp dword [eax], 0x47584454 ; 'TDXG'
+ jz GoodCompare
+
... you can remove these instructions. You'll jump to InsnCompare and that
check should succeed, right?
Ah, I see. Thanks for reminder. I will update it in next version.

Thanks,
Tom

;
; Check if the second step of the SEV-ES mitigation is to be performed.
;


Re: [PATCH] UefiCpuPkg: ResetVector Tool Support for Python 3

Michael D Kinney
 

According to the logs, the .raw file binaries were committed 10 years ago.

This commit in 2014 make a change to how the build defines are processed. It also switches from using ASM to NASM for the assembler.

https://github.com/tianocore/edk2/commit/5a1f324d946cb1be2dc1226752b1965d6633232f#

I think one interesting test to make sure the binaries produced before and after your change produce the same binaries.

That would at least confirm that the Python script changes are not introducing any changes and allow this update to move forward without the binary files.

A detailed review and testing of the binary differences needs to be done before committing any new .raw file.

Mike

-----Original Message-----
From: S, Ashraf Ali <ashraf.ali.s@intel.com>
Sent: Thursday, July 22, 2021 10:10 AM
To: Kinney, Michael D <michael.d.kinney@intel.com>; devel@edk2.groups.io
Cc: Ni, Ray <ray.ni@intel.com>; Kumar, Rahul1 <rahul1.kumar@intel.com>; De, Debkumar <debkumar.de@intel.com>; Han, Harry
<harry.han@intel.com>; West, Catharine <catharine.west@intel.com>; V, Sangeetha <sangeetha.v@intel.com>
Subject: RE: [edk2-devel] [PATCH] UefiCpuPkg: ResetVector Tool Support for Python 3

Hi., Michael

Even If we generate the binaries using the Python2 also, it's getting changed.

Can you confirm from your end by generating the binaries using the build.py in Python2


Regards,
Ashraf Ali S
Intel Technology India Pvt. Ltd.

-----Original Message-----
From: Kinney, Michael D <michael.d.kinney@intel.com>
Sent: Thursday, July 22, 2021 10:15 PM
To: devel@edk2.groups.io; S, Ashraf Ali <ashraf.ali.s@intel.com>
Cc: Ni, Ray <ray.ni@intel.com>; Kumar, Rahul1 <rahul1.kumar@intel.com>; De, Debkumar <debkumar.de@intel.com>; Han, Harry
<harry.han@intel.com>; West, Catharine <catharine.west@intel.com>; V, Sangeetha <sangeetha.v@intel.com>
Subject: RE: [edk2-devel] [PATCH] UefiCpuPkg: ResetVector Tool Support for Python 3

Hi Ashraf,

Why would an update to the Python script to Python3 cause any changes to the binary images the script produces.

If they are different, then that would seem to imply that the change was not compatible from a behavior perspective.

Mike

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Ashraf
Ali S
Sent: Thursday, July 22, 2021 9:41 AM
To: devel@edk2.groups.io
Cc: S, Ashraf Ali <ashraf.ali.s@intel.com>; Ni, Ray
<ray.ni@intel.com>; Kumar, Rahul1 <rahul1.kumar@intel.com>; De,
Debkumar <debkumar.de@intel.com>; Han, Harry <harry.han@intel.com>;
West, Catharine <catharine.west@intel.com>; V, Sangeetha
<sangeetha.v@intel.com>
Subject: [edk2-devel] [PATCH] UefiCpuPkg: ResetVector Tool Support for
Python 3

[edk2-devel] [PATCH]
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3506

Build Scrips for Reset Vector currently based on Python 2 which is
already EOL, needs to modify the build script based on Python 3,
update the Binary accordingly.

Change-Id: I2cfef08177951f2f29ee168ac4a9de9b10769ea1
Cc: Ray Ni <ray.ni@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Debkumar De <debkumar.de@intel.com>
Cc: Harry Han <harry.han@intel.com>
Cc: Catharine West <catharine.west@intel.com>
Cc: Sangeetha V <sangeetha.v@intel.com>
Signed-off-by: Ashraf Ali S <ashraf.ali.s@intel.com>
---
.../Vtf0/Bin/ResetVector.ia32.port80.raw | Bin 516 -> 484 bytes
.../ResetVector/Vtf0/Bin/ResetVector.ia32.raw | Bin 484 -> 468 bytes
.../Vtf0/Bin/ResetVector.ia32.serial.raw | Bin 884 -> 868 bytes
.../Vtf0/Bin/ResetVector.x64.port80.raw | Bin 28676 -> 28676 bytes
.../ResetVector/Vtf0/Bin/ResetVector.x64.raw | Bin 28676 -> 28676 bytes
.../Vtf0/Bin/ResetVector.x64.serial.raw | Bin 28676 -> 28676 bytes
UefiCpuPkg/ResetVector/Vtf0/Build.py | 11 +++++++----
.../Vtf0/Tools/FixupForRawSection.py | 4 ++--
8 files changed, 9 insertions(+), 6 deletions(-)

diff --git
a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.port80.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.port80.raw
index
2c6ff655ded2a5855ca8f4428d559a7727eb6983..79b23c047bdc6e552d77d5c9e9ae
ae21ff04d91d 100644 GIT binary patch delta 410
zcmZo+dBQ9-0SF8a=rRZ}FxWCMF#Invo+zYJ-&~=>P<pEKFmr@L>EYMB8#X*^*s&i7
zI*-2o*Lifq#%B#L{TUe;3~zVd>wJ;c9c#dNqsaO-vqO<t>wyxZ<^$|Sx+*`qBE-KP
zRw#MZ?IF_m@c;k+44fxR?lK-MVJf=bP$9%z%Jy2m^*||G=ZV*+3=ec3YyDQrw&BCG
zhLV39>OTT4_yTke(6spG0}_@eiX$2-m<39tfuvB0QMW|nV~~MBTOFDYFc(>?{CR!5
z`2b5=qlIr&sV@Ka2ph)3jn)CK3=F06%+4CG<$;o&htnFZ!=g(0n4LMA4`}djk7m=n
z@tSo9&>Du9B|zggh&^lgwVUBX-))iIZU6Ps_!-61b|^D2IPfbSNPCqzIiFFU^R?Xs
zd4>r<#gi8>%0vL2z`!uOpJBgKz-zAkjsdS((>jm5W_tbeb@R)JfB*l#TmvLJAN+p?
a3S}hl`Z9zAvN|lpjbXxs*L#qpCjbB+6v6TU

delta 442
zcmX9)O-lk%6n)b;mb6f&NEbm;61Fgs7G?G=i3EW`h#0jTXjjt=xN`<_@e*RfKhRH@
zRthehQp<ioAq+%O48GjhrlO+Pox1Q2_nv#+{d#7P9J~e=HbTgQ&;mk;ijh-3kW;e(
z2#|b@Yi!yt8wAow*Da-71;Y*UMJdG%{oGQ>0fSK3#P_%@6n3VVmKY~2sF%gXydlkT
zz2J+}fsf;~_pRoa+J(fR`Ut;~>qat}3#muERkA!QyT~Xg^M>rg%^bM|McBYs`8V0A
zcP&Nw(O;ogKlFmCBIg5bq<OffWLb~o2jr#sf=_+23&RMToIQfL9{47AKyeO;1a)>J
zBhR=?>3OE6Mw4r>-vk>Al5t4>DR50tqp6HM5M^V1To7n?Y1=u`A{@A7c!=ymHGRlZ
zJ}anuVpcRdDYzN0P#%MY-J^!^vR_OvBRp9GvF1f*Ah$29X~lhJI8j|qcKWL;$&ORN
mb+{6FrzA&7=!a5r41gb~Ws5tejhbe+Ol`#xF!g`tAAbQ#M!vED

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.raw
index
e34780a3a2c9b22bd10a1d5a405e344faaff94f3..ce7faa502b858e99908bcdb397b7
76258205e1d5 100644 GIT binary patch delta 421
zcmaFDe1%zP0uUG;&}9%{V6bIiVEA8TJW)uczPUn$q4ZSeVde;h(!;MgckBm(&ZDpY
zbsl}`&d9)Ec)Rmn=Zm!NSOdlzMb@vG9g56a50n@+A7C%iRr%2sA^z>KLdmOc50S=)
z|NsAI;5=D!m+@c;Q_=N?3L)lFw%6jV2TIvGPrN>5c%buG>$g&-l7BD10Br{v65o74
z!m|EEaYRD}vp|V7kQ6F0>XvAH3^E94n?v&f<|1pAKd)~$A7DvqwD658)#cwFVZ(U1
z(K^7DfuU5M*;(VYJW#Upa9X2vSX3z=volBY0S*4`(QKMGUbF51+Qaa&258)`-3%Z4
zZtt%9ub0NpD4w=MnSsH9U+F;FtJKNSjMDY5-6qI0OaQ6_1rZE@G=l)pF$@fo&qL_h
zFuI>%zf-_#uKkVyuUXSNkGy7j{quG6%Zz{j|G(S<Bsw4be+DxMO257gVSvmG3vpwZ
NFyZwchzJ{m0sv1?z^?!R

literal 484
zcmX9*OG_g`5Uz2YXi!K{AwfI@4Wb8^4I;k92Z}6+5k#W02QLkK9j9Rq9_&L7ZDbtq
zqIePigaaNjIzCSdixLS)RFt&2cybqA?5!~cU5~H6s_N>tZQD+`9S{Z>1OTb`GBa#G
zt*_G(GaClinx^RkGo#yGe2LyNvnlO${H9mTj3XK78TZswjJl#0BPWZ(PsE3m63x5<
zkjV2pUL={H-<6y`Ayi}y>qBYR=+mmu*E{2X*HV!;FJ=@olMU=1D<ODc<ds9CLcd-$
z>r@&PjmS*9G|11z5fTzEKTW^U3gc6Jd}Rz>i=xwezWi&|RKrFLb)7MgiLyt(A5Nap
z{K@){_&;%jkXDHiVLej|v^%t)8c;mepB%?^+SRc((Td402KNZ-pIe~y>R7ebhG=Mi
zG0>h98oCZ15CogOAHb`XKiHDrNJxngrv+CGHM`_x1(RWLh67mGTp&(0SUJnJ3Rcm&
z65UvCM_?B@w(a-w1uqM*d0DnQmyjJzmTIyi$x?vuV|+aEM~V$8raq+<d#HFpKI8Y<
TrM$1pedcB-0FmP|Qr7<gpRvyd

diff --git
a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.serial.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.ia32.serial.raw
index
6dfa68eabb48a44bc50a0b7fe678f80b5cdadfd5..6503a988abdac06f9aa88f0a65f2
525e12233b0a 100644 GIT binary patch delta 426
zcmeyu_JnPMtN<&s;Q?I+0R{$J1_p-zMaC0#Rrs4LR2WK6bslDpP$)h8+H+!>JIm{T
zoku68$xYtMs2t$H#K2&9yYpV>i?r@o1I8OgcCVQoiY!|Xl$bUjU@tOI`Oy_2{_U_r
z$*XP;k;aGr|Nm#;JXvy=@n8v4(e;K3A?8xfm(zi^wH_#C>pb!L_+($k?)of7kU&X%
z^8pFV6U7k?70d!9(m+zE#Hd@M@iE8{piK_V2bhbjRsOub-F$#0t<l0as#KSMdxQ<+
z;YRBKR|bYsd1hyg*YZHg&ckVq)?rble9X=q%?C92w@0&S-gwQr186V9%Rm4A|KIhO
z`OON2k{`Q%FmEt?H#v*RP`Ks4UK&56c-jtS1_lRyr2}cNv?s4)imrd{GC`hU0?-K)
zzyM?f2mqbLz%cndgq{tf`x*8-1-$0n?-=l!Bdznu%Ljj6Grj)ylK211_kaHXf4Teb
e|Nos2{y&2l1two#MwlBG;>Ivx!s|Uq(h~riBD@{|

delta 425
zcmaFD_JwVNtbi=D;Q?I+0R{$J1_p-zMV1qFRYV&rRDc|Y(&L?nnIjZR54`jN@+Ky@
zv%mcP|NsBaqZ1S4CZ1G|2xMYlFudJ)uk%G(cdP;9jUu;~%s_<>MRu(RN~~Dff$Sn<
zl^<OZ;@=J{l)UKn5NUh})X%_qvg9`7!4jsTs|^)G%%z+!X8~2V9w_DPJn`}nP{Cvy
z#_sxJMvz!Z5vv4H((*)cW<v$DK#2m76e_XlmS}toG6`sBAS=kuA}^IcFRuZGSXqF)
zv_=cxs8VzO?GZMNha0T}T!DVkWOmkgsRon;tLQwO)@U6TRVvKv%)zPw6y@I@&8B(d
zB`c7*1Be-zUOt;_%H$+G>%U$aKcjfs4rQRn_>~T%y|SO&#T1?W(j2HroM8dT6;J?X
zO+L>6re~jL*zXkZns2{jz-!L5&Lb~R`~e2e%P;?5ivNFk_0RwRFIW8q2IYhQ&nCRS
WJpl|r#)O5qF-(~7`Upe>LIMEmI;Oe+

diff --git
a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.port80.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.port80.raw
index
6c0bcc47ebff84830b59047790c70d96e9488296..0e53a574fab74db6973d7ea41a6a
495266a4d0ae 100644 GIT binary patch literal 28676
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
b-v03Kyl;H|XFe}3UVP|*M}Owg_mlr0pwq8e

literal 28676
zcmeI*_qU~IRlxBbLjs685mBO|gop|%NU?wvx1boY0V*O`9^2Sk%;?zns8I(n#xB;!
z-gT@5QP~<mte{w;Shg)@hy_KlGoB<L*YZzL*Ll{O^Evn2_j}Hn=e~EpYwrATufP8K
z>t7jntXIYrx8HeXBo~XD&0$=0+nqzt<YIBNIgHoPGr3sYY!2gMJ(G*Y&E_!fq-S!m
zxY-=WC3+?oi<`}1T&ibsvAEeB#+~&{E*3YN!?=r{$;IMka~OBkGr3sYY!2f!^-L}n
zH=Dz_o1V$V;%0Lgucc>lvAEeB#%t@DTr6%jhw(akCKrpF&0(C-Gr3sYY!2fxJ(G*Y
z&E_y(SI^{PakDv$yX%=;EN(W3@p^hD7mJ(CVcbK{<YIBNIgHoWGr3sYY!2fM^h_=m
zH=Dz_r=H2h;%0Lgm+P5aEN(W3@rHUP7mJ(CVZ4!^$;IMka~N-|XL7N)*&N2b^h_=m
zH=DzF6FrlQ#m(k0-c--zVsW!MjC<>uTr6%jhjE3T$;IMka~SuD!#Z65nOrPxHivPg
zp2@}HW^)*Cre|`oxY-=Wef3N(7B`#2cym3Ii^a|6Fy2DX<YIBNIgGc|Gr3sYY!2go
zdL|c(o6TX|U(e)XakDv$x6(7YSlnz5<E`~fE*3YN!+0A#lZ(a8<}e<hXL7N)*&N0L
z^-L}nH=DzFTRoGD#m(k09;9b-vAEeB#)I`tE*3YN!+40E$;IMka~KcRGr3sYY!2h?
z^h_=mH=DzFdp(nj#m(k0-a*ggVsW!MjCa&Cxmet64&z~ZCKrpF&0#!T&*WlpvpI}+
z(lfbO+-wfx5qc&Ui<`}1JW|i(VsW!Mj7RC2Tr6%jhw*4VlZ(a8<}lt_&*WlpvpI~^
zGr3sYY!2gH;;;_ae<l};o6TW7M$hD8akDv$$Lg6}EN(W3@veF%7mJ(CVZ583$;IMk
za~O})Gr3sYY!2hy^-L}nH=Dz_O3&nCakDv$_s}!BSlnz5<MDbX7mJ(CVZ5iF$;IMk
za~SWXXL7N)*&N1u>zQ0EZZ?PUK6)k>i<`}1ysw_g#o}gj7*EhMxmet64&#Y>CKrpF
z&0#!A&*WlpvpJ0S(=)kP+-wfx{q;;P7B`#2_y9eVi^a|6FrKVua<RDC9L5LgnOrPx
zHiz*PJ(G*Y&E_yZNYCVAakDv$r|OwpEN(W3@iaY?i^a|6Fg{q%<YIBNIgAg{Gr3sY
zY!2f?^-L}nH=D!wFg=rt#m(k0mY&JQ;%0LgA0CHwxc)P_Slnz5<0JG;E*3YN!}v%&
zlZ(a8<}f}=&*WlpvpI~9)-$<S+-wfxq@Kye;%0LgAERe-vAEeB#>eWJTr6%jhw*WG
zCKrpF&0&1Jp2@}HW^)*ypl5QixY-=WC+eA8EN(W3@kx3n7mJ(CVSKWl$;IMka~PkZ
zXL7N)*&N2F>X}?DZZ?PUX?i9Xi<`}1T&-tvvAEeB#;5C<Tr6%jhjERb$;IMka~P-e
zOfD8To5T1FJ(G*Y&E_yZQ_tjLakDv$(|RTsi<`}1e3qWc#o}gj7@w_Ya<RDC9LDG9
znOrPxHiz-KdL|c(o6TW-o}S6Y;%0LgpRZ?fvAEeB#uw<BTr6%jhf#Va7mJ(CVVsG>
zI$ZymTr6%jhw+7aCKrpF&0&0zp2@}HW^)){tY>nuxY-=WwR$EOi<`}1e2JdP#o}gj
z7+<Pqa<RDC9LAUFnOrPxHivOm&*WlpvpI~X>zQ0EZZ?PU3_X*J#m(k0o~dVYvAEeB
z#+U1vTr6%jhjE>r$;IMka~NNtXL7N)*&N38dL|c(o6TW-rJl*f;%0LgU!`YqvAEeB
z##if^Tr6%jhw(LfCKrpF&0&14p2@}HW^)){r)P4pxY-=W*Xx;FEN(W3@eO(=7mJ(C
zVLVIE<YIBNIgD@AGr3sYY!2g_^h_=mH=D!wW<8UO#m(k0zD3XEVsW!MjBnL5xmet6
z4&&SOOfD8To5R?8CKrpF&0&0d9M<9b&*WlpvpJ0K&@;JM+-wfxJM~O17B`#2_%1z@
zi^a|6Fuq&Q<YIBNIgIboGr3sYY!2gl^-L}nH=D!wK0T9*#m(k0zF*JeVsW!Mj33Z5
zxmet64&w*)OfD8To5T1aJ(G*Y&E_zESkL5QakDv$AJH?pSlnz5<45&OE*3YN!#JmB
za<RDC9LA67nOrPxHiz-!dL|c(o6TYTgr3R8;%0LgKdEPOvAEeB#!u;)Tr6%jhw;;T
zCKrpF&0#!S&*WlpvpI|#^h_=mH=DzFj-JWI;%0LgKci=IvAEeB#&h*dE*3YN!}wV}
zlZ(a8<}iLv&*WlpvpI~P*E6|T+-wfxd3q)ni<`}1w4TYu;%0LgzYvFYxc)P_Slnz5
z;}`WzE*3YN!?;n;<YIBNIgID)nOrPxHiz*7J(G*Y&E_y(sAqDqxY-=WFX@?FEN(W3
z@ghBwi^a|6Fn(Fj<YIBNIgDS?Gr3sYY!2gB^-L}nH=D!wH9eDy#m(k0eqGPxVsW!M
zjNi~Rxmet64&%joCKrpF&0)Mm&*WlpvpJ04)HAtQ+-wfxxAaUd7B`#2c&VPr#o}gj
z7{9G&a<RDC9LDeHnOrPxHiz-MdL|c(o6TYTo}S6Y;%0LgH|d#NEN(W3@%wrv7mJ(C
zVf=xf$;IMka~LnvGr3sYY!2fO^-L}nH=D!wBR!Lg#m(k0{#eiCVsW!Mj6cycxmet6
z4rBC8E*3YN!}!xUti$!6$;IMka~OZ7XL7N)*&N27>zQ0EZZ?PU7kVZai<`}1{H31B
z#o}gj7&q&gTr6%jhw)c>CKrpF&0*Z4XL7N)*&N1sJ(G*Y&E_y(u4i(wxY-=Wt$HRG
zi<`}1{I#CR#o}gj7=NQ@a<RDC9LC@3nOrPxHiz+ddL|c(o6TXoLeJ!4akDv$zt=Ol
zSlnz5;~(@)E*3YN!^7w~ti$|aa<RDC9L7KDnOrPxHiz*~dL|c(o6TXoO3&nCakDv$
zf7Ua(Slnz5<6rblE*3YN!}wP{lZ(a8<}m(E&*WlpvpI}^*E6|T+-wfxKlDs47B`#2
z_)k5Pi^a|6FkY=^a<RDC9L5DblZ(a8=G^W>ufK4Io9Ea^Z`;?09{1sn^W(S=$9*_{
zKOE=5aSj~kz;O;7=fH6e9OuAs4jkveaSr_7o&zuO@BE{8d>xPbaNLL6u4~8h;CLP!
z&x7Ol!Ep{8=fH6e9OuAs4jkveaSj~k!2h#3aQGDf$93F+;|?5m;J5?F9XRg5aR-h&
zaNL384jgyjxC8$Sci_Q?UmtN<#G?*Binws~!_S<)?DStg^O>h^J#+dVk9zvO-uKj>
zojHB^v)=yfhoAcWGpFx$?Trt3>8Y2TIep*5!Ex%B&fa+OQ?5AG=MQ<DJ9l&4@Vvu1
z`-1cTe&ND}voARJV>j3N@4qPG!7n@e$7gRj`HT;F&_y?0{kZcNACAteAAN0K^G=uC
z`EdX0hu-&Jp8k}3zUsy+uDRtISKZ^xpC0PC>n~sPvWtG<n%B7cck1-rFFtkG^H&~@
zytYr>_3Vqz|Kj0*2lv?*Ui+$3m!5mY&2`PI&;9-3r5<~Dsl$_AeaYpALm&R4Pye_&
zeeq@2TyeO)`!$bz#^q=J{I=&kyn`oRa@#w&`tkSukMqBKc<7Ql9X>jF=3(#s)Kl+x
z;@MAm<V820dBhXm?eN#T|HY5J-}$#VeDd}q&fa+P%p;!s)Kjl_@ni3D$^8zGo_O}t
zF1`Ov=Px<jz2WdD&VT6P$!>_baN)$2H=Vd*PW;R*mz=nAo>LKh;vt8R?sDQmC$8wj
zoqM0SvS0py!_k+=xsN)$@vk`4=icDv`nTuCE3SLlb5CD*;K>sg-SgxPZ+6(H!=Wc%
z{y~RhFN+)U(!;A>Ip-d7bDg~5E^*yW*Y$OC-7VL><ou%#&v5Uk!(rE7f4F=5y8VCQ
zzxu^-yWjNR{%Ab!F;BSlZqIv{C)|4J$+OQtd@;`d^M&(u;ru`S=Y<RBpY-a(&BG2)
zbJY!po7;apch!Afc-4JgaMgXDf7RK!aP#5(z4gXBPU72M<jL><xHvrWL;v%%{x6Nr
BvabLD

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.raw
index
a78d5b407c8a106c221af127216d073cf8fdb99d..865846da42a45c16b69746f16963
d47a6c6e71b0 100644 GIT binary patch literal 28676
zcmeI*_qU~YRmbriA`xs85hW^0AgEZPfZc#@MKpG77_ohAV{b8|qoVFHMjgO7_O4%h
z?}aETTLTE#ut%|MjfLUbuwZ9ANnWny-+<>?YtHN3d+z%=b3XTnXPvv&+_`Y!!i8)0
zrAu)<jtd+YI4*Ep;JCnXf#U+l1&#|G7dS3(T;RCCae<fW1+Mwgd*1(F(|jK1_;Z1m
z>Tmq<#T^$oE^u7nxWI9N;{wM8jtd+YI4*Ep;JCp5s|D`#YVVAz@4k0uBo~XD&0$=2
z*PTPp<YIBNIgEShnOrPxHivP!p2@}HW^))Xqi1rlxY-=Wz4c5k7B`#2xI)k5VsW!M
zjF;6jxmet64&y$0CKrpF&0*YE&*WlpvpI~H(=)kP+-wfx<@HQ17B`#2cm+L^i^a|6
zFkVs5<YIBNIgD4*Gr3sYY!2g;p2@}HW^))<>X}?DZZ?PU%6cXji<`}1+)vNsVsW!M
zj91Y!xmet64&(lMCKrpF&0)N%p2@}HW^)*?re|`oxY-=W1N2NT7B`#2xJu9DVsW!M
zj91q)xmet64&ycSOfD8To5OfbJ(G*Y&E_y3sAqDqxY-=WYw4L>EN(W3@!EPO7mJ(C
zVLV9B<YIBNIgG3IOfD8To5Of;9FD{FpUK7IW^))1(KESN+-wfx8a<PX#m(k09;#<@
zvAEeB#_Q;rTr6%jhw-|4CKrpF&0)Nrp2@}HW^))1(=)kP+-wfx_4Q0H7B`#2cmq9?
zi^a|6Fy2tl<YIBNIgB^bGr3sYY!2gEJ(G*Y&E_!PSkL5QakDv$H_<b>Slnz5<KcQH
z7mJ(CVLU?5<YIBNIgCf@nOrPxHiz-1dL|c(o6TXonV!kT;%0LgZ?0!@vAEeB##`u_
zTr6%jhw+wrCKrpF&0)Nip2@}HW^)*Ct!HwvxY-=W+vu5GEN(W3ah;yY#o}gj7?093
zxmet64&%{!CKrpF&0)N)p2@}HW^)*Cr)P4pxY-;=>X}?DZZ?PU_Hj54*MBA#i<`}1
zyn~*}#o}gj7?062xmet64&xp5OfD8To5Oglp2@}HW^)+tq-S!mxY-=WJL{QTEN(W3
zalM|&#o}gj81JHIa<RDC9LBrqnOrPxHiz+UdL|c(o6TXoyPnC#;%0Lg@1bXMvAEeB
z#(V0STr6%jhw)x|CKrpF&0#!F&*WlpvpJ0S)-$<S+-wfxee_H&7B`#2cwaq}i^a|6
zFy2qk<YIBNIgIz$Gr3sYY!2h`dL|c(o6TW-fS$?4;%0LgH|UvMEN(W3@qv0K7mJ(C
zVLU<4<YIBNIgAg|Gr3sYY!2gt^-L}nH=D!w5IvKN#m(k0K2*=-VsW!Mj1SW@xmet6
z4rA$=Tr6%jhw<TYI1bl;CKrpF&0&0mp2@}HW^))Hsb_MrxY-=WN9mbdEN(W3@zHuF
z7mJ(CVVu@8xmet64&!6=OfD8To5T26J(G*Y&E_yZPS50GakDv$kJmG~Slnz5;}i5u
zE*3YN!}vr!lZ(a8<}f}<&*WlpvpI}U)-$<S+-wfxQ}j$O7B`#2_*6ZUi^a|6Fg{Js
z<YIBNIgA_iOfD8To5T2YJ(G*Y&E_y}(lfbO+-wfxjGoEG;%0LgpP^@RvAEeB#%Jo8
zTr6%jhjCWV<YIBNIgHQJGr3sYY!2hI^-L}nH=D!w96ghZ#m(k0o~UPXvAEeB#^>sp
zTr6%jhw*uOCKrpF&0&1Lp2@}HW^)*&XL7N)*&N2XI2?Dz)l4oHH=D!w0zH$9#m(k0
zZq_roSlnz5;|ujnE*3YN!?;Dy<YIBNIgBsTGr3sYY!2g#^-L}nH=D!w5<QcP#m(k0
z&g+?6EN(W3@gzNyi^a|6FrKVua<RDC9L7`hOfD8To5T20J(G*Y&E_y})ib$R+-wfx
z%k)ex7B`#2xS(fpvAEeB#+U1vTr6%jhw&A9CKrpF&0&0{p2@}HW^)){rDt-nxY-=W
zSL>NvEN(W3@ilrT7mJ(CVSKHg$;IMka~NNzXL7N)*&N2#>zQ0EZZ?PU4SFUQi<`}1
ze50Pp#o}gj7~iC4a<RDC9L6{6nOrPxHiz*odL|c(o6TW-tDecl;%0LgThHWTakDv$
zZ;Qimxc)P_Slnz5<J<L2E*3YN!}tz8lZ(a8<}kif&*WlpvpJ0K(lfbO+-wfxyY);i
z7B`#2_#Qozi^a|6FuqsM<YIBNIgIbqGr3sYY!2i5^-L}nH=D!w0X>t8#m(k0eo)Wk
zVsW!Mj33f7xmet64&#UQOfD8To5T1KJ(G*Y&E_zERL|sMakDv$AJa3rSlnz5<Hz+(
zE*3YN!}tk3lZ(a8<}iLz&*WlpvpI~P(lfbO+-wfxr}a!O7B`#2c&eVs#o}gj7`N$}
zTr6%jhw(FdCKrpF&0+kkp2@}HW^))%(=)kP+-wfx=k!c27B`#2_<22(i^a|6Fn&SL
z<YIBNIgF?4nOrPxHiyxACKrpF&0+jv9FD{FpUK7IW^)+7q-S!mxY-=W?Rq8`i<`}1
zJVVdqVsW!MjA!bZTr6%jhw&^ulZ(a8<}iL)&*WlpvpI}s>zQ0EZZ?PU96ghZ#m(k0
zo~vhavAEeB#;@p^Tr6%jhw-a=CKrpF&0+kSp2@}HW^)+7u4i(wxY-=WZ|Ip^EN(W3
z@jN|~i^a|6Fn&|d<YIBNIgH=ZGr3sYY!2hM^-L}nH=D!w9X*qa#m(k0epk=rVsW!M
zjNj8Uxmet64&(RrOfD8To5Q$6&*WlpvpI}E&@;JM+-wfx5A{qg7B`#2c)p&=#o}gj
z7=NT^a<RDC9L68(nOrPxHiz*idL|c(o6TYTsh-Kj;%0Lgqi1rlxY-=WpT*%gT>qI|
zEN(W3@#lIb7mJ(C;o+(8d447ri<`}1{Dq#$#o}gj7=Ni}a<RDC9L8VinOrPxHiz-o
zdL|c(o6TXoK+oi2akDv$i+Uy(i<`}1yim{NVsW!Mj1xVRi^a|6F#bl*<YIBNIgG#6
zGr3sYY!2h^^h_=mH=D!wdp(nj#m(k0{z1>=VsW!Mj2G#dTr6%jhw+bkCKrpF&0+kL
zp2@}HW^)+-tY>nuxY-=Wzv!7<EN(W3@nSubi^a|6F#c7~<YIBNIgEePGr3sYY!2h!
z^-L}nH=D!w4?UBM#m(k0{!`E7VsW!MjQ`Rzxmet64&%S|OfD8To5OgCp2@}HW^)*q
z^h_=mH=A>}k2w5uq$?vHeK^OZ8{hQY*(=Zf<x`$==H%Sj`#<_g4}7mPe}3-lRbT(+
z=Rf?+ADlb;z*}y=_P5VG@8+`)jWf?ZfBWS(Tz%&Dll$KG^uuxfnI|tf|ICY@e_6yM
zo`3#N&cERFlRxC)m)&vWbtjkSjc;*F-}K0v`(<yu_M!jwq#GXa;@hvj>4i_e{{H9w
z?9$;^4Bq!SH~sNtzj)KVZv6c^d%w%iTygS%Tl&lu=bwG@+(-2JXWjDRGxxgbB^Tf5
zaNfg7KJ4bc>aCys={MBb%dfoYH4nG<yXlcnzUthacb(_(WO;L6e&cly{jZbf-`p>A
z`rKQ+#}m$6d+Mn-JnFLB&t3Pp$3~oa(B+SL*vW$q51zmM^ttOE|AaHIbopcMb8|oJ
z)Kfp`ir2s6<leX4HRQ!79!__1?WwEh)X%=)-lrZiKT{EX>XC<!?sMwlr>^e9od=zI
zNWU;&bm`Jnaq+7U&24ev(xp=mx#Q$H|M9f=hg+Zjv@d$m8=pRP*#l1Bc1=VczWDSD
zKl$+0SH^95Ma1Epr*FGY+<M2Yee2x%f?J<=^4Qml3x~%K{~g1HyZ#Dy9e4ls#jpI0
zd;G@#^+$aCW%2ZPc-+a$J^k$;cXIF3=bv$Muakd2`NE42f61jw7oT|7&7%&l;kLt{
zOV>a6S=T@Knb$w~8P}hmOMmr$&VSFd9B+>c92Yn)a9rTHz;S`&0>=f83mg|XE^u7n
irDcJOfB2%i-d5iIzVh+!_fB!)!o}O~`OMv)zVJWS51Etz

literal 28676
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
SPx9m^JvI){eBb~48~hhX6Rzk0

diff --git
a/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.serial.raw
b/UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.x64.serial.raw
index
61c71349a8a599916f3eeae8c5dee92efb56db71..f1d6536cec924d0e167cf1ee4e93
09ed5fd7ad60 100644 GIT binary patch literal 28676
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
Fe*tvrwzvQQ

literal 28676
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

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Build.py
b/UefiCpuPkg/ResetVector/Vtf0/Build.py
index 343c53b5ff..29f29ff0c2 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/Build.py
+++ b/UefiCpuPkg/ResetVector/Vtf0/Build.py
@@ -1,7 +1,7 @@
## @file
# Automate the process of building the various reset vector types #
-# Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2009 - 2021, Intel Corporation. All rights
+reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -32,16 +32,19
@@ for arch in ('ia32', 'x64'):
'-o', output,
'Vtf0.nasmb',
)
+ print(f"Command : {' '.join(commandLine)}")
ret = RunCommand(commandLine)
- print '\tASM\t' + output
- if ret != 0: sys.exit(ret)
+ if ret != 0:
+ print(f"something went wrong while executing the {commandLine[-1]}")
+ sys.exit()
+ print('\tASM\t' + output)

commandLine = (
'python',
'Tools/FixupForRawSection.py',
output,
)
- print '\tFIXUP\t' + output
+ print('\tFIXUP\t' + output)
ret = RunCommand(commandLine)
if ret != 0: sys.exit(ret)

diff --git a/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
b/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
index c77438a0ce..de771eba22 100644
--- a/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
+++ b/UefiCpuPkg/ResetVector/Vtf0/Tools/FixupForRawSection.py
@@ -1,7 +1,7 @@
## @file
# Apply fixup to VTF binary image for FFS Raw section # -#
Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2008 - 2021, Intel Corporation. All rights
+reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -15,6 +15,6 @@
c = ((len(d) + 4 + 7) & ~7) - 4 if c > len(d):
c -= len(d)
f = open(sys.argv[1], 'wb')
- f.write('\x90' * c)
+ f.write(b'\x90' * c)
f.write(d)
f.close()
--
2.30.2.windows.1




5981 - 6000 of 84031