<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Sep 24, 2021, at 8:57 PM, Guo Dong <<a href="mailto:guo.dong@intel.com" class="">guo.dong@intel.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">From: Guo Dong <<a href="mailto:guo.dong@intel.com" class="">guo.dong@intel.com</a>><br class=""><br class="">From the universal scalable firmware payload requirement V0.75,<br class="">Payload must have Universal Payload Information Section ".upld_info"<br class="">So update the build tool to add this section.<br class=""><br class="">Cc: Ray Ni <<a href="mailto:ray.ni@intel.com" class="">ray.ni@intel.com</a>><br class="">Cc: Maurice Ma <<a href="mailto:maurice.ma@intel.com" class="">maurice.ma@intel.com</a>><br class="">Cc: Benjamin You <<a href="mailto:benjamin.you@intel.com" class="">benjamin.you@intel.com</a>><br class="">Signed-off-by: Guo Dong <<a href="mailto:guo.dong@intel.com" class="">guo.dong@intel.com</a>><br class="">---<br class=""> UefiPayloadPkg/UniversalPayloadBuild.py | 42 +++++++++++++++++++++++++++++++++++++++---<br class=""> 1 file changed, 39 insertions(+), 3 deletions(-)<br class=""><br class="">diff --git a/UefiPayloadPkg/UniversalPayloadBuild.py b/UefiPayloadPkg/UniversalPayloadBuild.py<br class="">index b78c6a7620..842f92ac1a 100644<br class="">--- a/UefiPayloadPkg/UniversalPayloadBuild.py<br class="">+++ b/UefiPayloadPkg/UniversalPayloadBuild.py<br class="">@@ -10,6 +10,31 @@ import subprocess<br class=""> import os<br class=""> import shutil<br class=""> import sys<br class="">+from   ctypes import *<br class="">+<br class="">+sys.dont_write_bytecode = True<br class="">+<br class="">+class UPLD_INFO_HEADER(Structure):<br class=""></div></div></blockquote><div><br class=""></div><div>Guo,</div><div><br class=""></div><div>Structure is the endian of the machine running Python which might not be correct. It would be more correct to use LittleEndianStructure vs Structure. This is probably good practice like using “<“ vs “=“ or “@“ with struct.pack format strings. </div><div><br class=""></div><div>I don’t remember us requiring the edk2 build machine to be little endian? </div><div><br class=""></div><div>My M1 Mac mini is little endian like a lot of ARM machines, but big endian machines do exist. </div><div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">>>> import sys; sys.byteorder</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">'little'</span></div><div class=""><br class=""></div></div><div>Thanks,</div><div><br class=""></div><div>Andrew Fish</div><br class=""><blockquote type="cite" class=""><div class=""><div class="">+    _pack_ = 1<br class="">+    _fields_ = [<br class="">+        ('Identifier',           ARRAY(c_char, 4)),<br class="">+        ('HeaderLength',         c_uint32),<br class="">+        ('SpecRevision',         c_uint16),<br class="">+        ('Reserved',             c_uint16),<br class="">+        ('Revision',             c_uint32),<br class="">+        ('Attribute',            c_uint32),<br class="">+        ('Capability',           c_uint32),<br class="">+        ('ProducerId',           ARRAY(c_char, 16)),<br class="">+        ('ImageId',              ARRAY(c_char, 16)),<br class="">+        ]<br class="">+<br class="">+    def __init__(self):<br class="">+        self.Identifier     =  b'UPLD'<br class="">+        self.HeaderLength   = sizeof(UPLD_INFO_HEADER)<br class="">+        self.HeaderRevision = 0x0075<br class="">+        self.Revision       = 0x0000010105<br class="">+        self.ImageId        = b'UEFI'<br class="">+        self.ProducerId     = b'INTEL'<br class=""><br class=""> def RunCommand(cmd):<br class="">     print(cmd)<br class="">@@ -37,6 +62,7 @@ def BuildUniversalPayload(Args, MacroList):<br class="">     EntryOutputDir = os.path.join(BuildDir, f"{BuildTarget}_{ElfToolChain}", os.path.normpath("X64/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry/DEBUG/UniversalPayloadEntry.dll"))<br class="">     PayloadReportPath = os.path.join(BuildDir, "UefiUniversalPayload.txt")<br class="">     ModuleReportPath = os.path.join(BuildDir, "UefiUniversalPayloadEntry.txt")<br class="">+    UpldInfoFile = os.path.join(BuildDir, "UniversalPayloadInfo.bin")<br class=""><br class="">     if "CLANG_BIN" in os.environ:<br class="">         LlvmObjcopyPath = os.path.join(os.environ["CLANG_BIN"], "llvm-objcopy")<br class="">@@ -65,12 +91,21 @@ def BuildUniversalPayload(Args, MacroList):<br class="">     BuildModule += Defines<br class="">     RunCommand(BuildModule)<br class=""><br class="">+    #<br class="">+    # Buid Universal Payload Information Section ".upld_info"<br class="">+    #<br class="">+    upld_info_hdr = UPLD_INFO_HEADER()<br class="">+    upld_info_hdr.ImageId = Args.ImageId.encode()[:16]<br class="">+    fp = open(UpldInfoFile, 'wb')<br class="">+    fp.write(bytearray(upld_info_hdr))<br class="">+    fp.close()<br class="">+<br class="">     #<br class="">     # Copy the DXEFV as a section in elf format Universal Payload entry.<br class="">     #<br class="">-    remove_section = '"%s" -I elf64-x86-64 -O elf64-x86-64 --remove-section .upld.uefi_fv %s'%(LlvmObjcopyPath, EntryOutputDir)<br class="">-    add_section = '"%s" -I elf64-x86-64 -O elf64-x86-64 --add-section .upld.uefi_fv=%s %s'%(LlvmObjcopyPath, FvOutputDir, EntryOutputDir)<br class="">-    set_section = '"%s" -I elf64-x86-64 -O elf64-x86-64 --set-section-alignment .upld.uefi_fv=16 %s'%(LlvmObjcopyPath, EntryOutputDir)<br class="">+    remove_section = '"%s" -I elf64-x86-64 -O elf64-x86-64 --remove-section .upld_info --remove-section .upld.uefi_fv %s'%(LlvmObjcopyPath, EntryOutputDir)<br class="">+    add_section    = '"%s" -I elf64-x86-64 -O elf64-x86-64 --add-section .upld_info=%s --add-section .upld.uefi_fv=%s %s'%(LlvmObjcopyPath, UpldInfoFile, FvOutputDir, EntryOutputDir)<br class="">+    set_section    = '"%s" -I elf64-x86-64 -O elf64-x86-64 --set-section-alignment .upld.upld_info=16 --set-section-alignment .upld.uefi_fv=16 %s'%(LlvmObjcopyPath, EntryOutputDir)<br class="">     RunCommand(remove_section)<br class="">     RunCommand(add_section)<br class="">     RunCommand(set_section)<br class="">@@ -82,6 +117,7 @@ def main():<br class="">     parser.add_argument('-t', '--ToolChain')<br class="">     parser.add_argument('-b', '--Target', default='DEBUG')<br class="">     parser.add_argument("-D", "--Macro", action="append", default=["UNIVERSAL_PAYLOAD=TRUE"])<br class="">+    parser.add_argument('-i', '--ImageId', type=str, help='Specify payload ID (16 bytes maximal).', default ='UEFI')<br class="">     MacroList = {}<br class="">     args = parser.parse_args()<br class="">     if args.Macro is not None:<br class="">-- <br class="">2.32.0.windows.2<br class=""><br class=""><br class=""><br class=""><br class=""><br class=""><br class=""></div></div></blockquote></div><br class=""></body></html>


 <div width="1" style="color:white;clear:both">_._,_._,_</div> <hr>   Groups.io Links:<p>   You receive all messages sent to this group.    <p> <a target="_blank" href="https://edk2.groups.io/g/devel/message/81119">View/Reply Online (#81119)</a> |    |  <a target="_blank" href="https://groups.io/mt/85855009/1813853">Mute This Topic</a>  | <a href="https://edk2.groups.io/g/devel/post">New Topic</a><br>    <a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> | <a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |  <a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>  [edk2-devel-archive@redhat.com]<br> <div width="1" style="color:white;clear:both">_._,_._,_</div>