From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from loongson.cn (loongson.cn [114.242.206.163]) by mx.groups.io with SMTP id smtpd.web08.9456.1664277244725425834 for ; Tue, 27 Sep 2022 04:14:07 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: loongson.cn, ip: 114.242.206.163, mailfrom: lichao@loongson.cn) Received: from code-server.gen (unknown [10.2.9.245]) by localhost.localdomain (Coremail) with SMTP id AQAAf8Cxrmv02jJjirsiAA--.49762S2; Tue, 27 Sep 2022 19:13:56 +0800 (CST) From: "Chao Li" To: devel@edk2.groups.io Cc: Ray Ni , Liming Gao , Michael D Kinney , Guomin Jiang , Wei6 Xu , Maciej Rabeda , Jiaxin Wu , Siyuan Fu , Jiewen Yao , Jian J Wang , Xiaoyu Lu , Zhiguang Liu , Zhichao Gao , Bob Feng , Yuwei Chen Subject: [PATCH v3 00/34] Add a new architecture called LoongArch in EDK II Date: Tue, 27 Sep 2022 19:13:20 +0800 Message-Id: <20220927111354.4107719-1-lichao@loongson.cn> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 X-CM-TRANSID: AQAAf8Cxrmv02jJjirsiAA--.49762S2 X-Coremail-Antispam: 1UD129KBjvJXoWfGFWUuFWrXw45uF4fKw1ftFb_yoWDZF15pa 1jkr4fGF1UKFWagw47Ka4UWFn5KFZ7GFy5GFs0vr17C3y2yF1kW3srtrWrWry3Z34ft34F 9ryfKa1DW3WDJrJanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnUUvcSsGvfC2KfnxnUUI43ZEXa7xR_UUUUUUUUU== X-CM-SenderInfo: xolfxt3r6o00pqjv00gofq/1tbiAQACCGMxll4dbgAAsi Content-Transfer-Encoding: 8bit REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4053 UEFI Spec V2.10 already supports LoongArch and all changes of this commit passwed Azure CI testing, so let's enable it in EDK2. This commit contains 35 patches, with patch 0 is the cover and the rest being the LoongArch base code. Changes from v1 to v2: 1. For patch 0008, added IANA website link in the commit message and Dhcp.h. 2. Added IANA, Microsft and UEFI specification links in every patch commit message that uses them. 3. For patch 0023, LoongArch64 supports unaligned access operations, so use the unaligned read/write generic implementation. Added Barrier.S file to provide barrier operations for LoongArch. 4. For patch 0024, convert inline assembly code to ASM code. 5. Added the BZ link in every patch commit message. Changes from v2 to v3: 1. Added all reviewer in the correspondings patches. 2. For patch 0029, converted LoongArch synchronization operations from inline assembly code to ASM code. 3. For patch 0015, 0016, 0017, changed the commit message for more clarity. 4. For patch 0034, move it to patch 0018, as it also changes the BaseTools. Please refer to this URL for the code repo of LoongArch64: https://github.com/loongson/edk2/tree/LoongArch Fore more documents of LoongArch please refer to following URL: https://loongson.github.io/LoongArch-Documentation/README-EN.html Modified modules: FatPkg, FmpDevicePkg, NetworkPkg, NetworkPkg/HttpBootDxe, CryptoPkg, MdePkg/Include, SecurityPkg, ShellPkg, UnitTestFrameworkPkg, MdePkg/DxeServicesLib, MdeModulePkg, .python/SpellCheck, BaseTools, .azurepipelines, .pytool, MdePkg, MdeModulePkg and MdePkg/MdePkg.ci.yaml. Cc: Ray Ni Cc: Liming Gao Cc: Michael D Kinney Cc: Guomin Jiang Cc: Wei6 Xu Cc: Maciej Rabeda Cc: Jiaxin Wu Cc: Siyuan Fu Cc: Jiewen Yao Cc: Jian J Wang Cc: Xiaoyu Lu Cc: Zhiguang Liu Cc: Zhichao Gao Cc: Bob Feng Cc: Yuwei Chen Chao Li (34): MdePkg: Added file of DebugSupport.h to MdePkg.ci.yaml MdePkg: Added LoongArch jump buffer register definition to MdePkg.ci.yaml FatPkg: Add LOONGARCH64 architecture for EDK2 CI. FmpDevicePkg: Add LOONGARCH64 architecture for EDK2 CI. NetworkPkg: Add LOONGARCH64 architecture for EDK2 CI. NetworkPkg/HttpBootDxe: Add LOONGARCH64 architecture for EDK2 CI. CryptoPkg: Add LOONGARCH64 architecture for EDK2 CI. MdePkg/Include: Add LOONGARCH related definitions EDK2 CI. SecurityPkg: Add LOONGARCH64 architecture for EDK2 CI. ShellPkg: Add LOONGARCH64 architecture for EDK2 CI. UnitTestFrameworkPkg: Add LOONGARCH64 architecture for EDK2 CI. MdePkg/DxeServicesLib: Add LOONGARCH64 architecture MdeModulePkg: Use LockBoxNullLib for LOONGARCH64 .python/SpellCheck: Add "Loongson" and "LOONGARCH" to "words" section BaseTools: Update GenFw/GenFv to support LoongArch platform. BaseTools: Updated for GCC5 tool chain for LoongArch platfrom. BaseTools: Updated build tools to support new LoongArch. BaseTools: Add LoongArch64 binding. BaseTools: Enable LoongArch64 architecture for LoongArch64 EDK2 CI. .azurepipelines: Add LoongArch64 architecture on LoongArch64 EDK2 CI. .pytool: Add LoongArch64 architecture on LoongArch64 EDK2 CI. MdePkg: Add LoongArch LOONGARCH64 binding MdePkg/Include: LoongArch definitions. MdePkg/BaseLib: BaseLib for LOONGARCH64 architecture. MdePkg/BaseCacheMaintenanceLib: LoongArch cache maintenance implementation. MdePkg/BaseIoLibIntrinsic: IoLibNoIo for LoongArch architecture. MdePkg/BasePeCoff: Add LoongArch PE/Coff related code. MdePkg/BaseCpuLib: LoongArch Base CPU library implementation. MdePkg/BaseSynchronizationLib: LoongArch cache related code. MdePkg/BaseSafeIntLib: Add LoongArch64 architecture for BaseSafeIntLib. MdeModulePkg/Logo: Add LoongArch64 architecture. MdeModulePkg/CapsuleRuntimeDxe: Add LoongArch64 architecture. MdeModulePkg/DxeIplPeim : LoongArch DxeIPL implementation. NetworkPkg: Add LoongArch64 architecture. .azurepipelines/Ubuntu-GCC5.yml | 3 +- .pytool/CISettings.py | 5 +- .pytool/Plugin/SpellCheck/cspell.base.yaml | 4 +- ...gcc_loongarch64_unknown_linux_ext_dep.yaml | 22 ++ BaseTools/Conf/tools_def.template | 54 +++- .../LinuxGcc5ToolChain/LinuxGcc5ToolChain.py | 31 ++ BaseTools/Source/C/Common/BasePeCoff.c | 15 +- BaseTools/Source/C/Common/PeCoffLoaderEx.c | 79 +++++ BaseTools/Source/C/GNUmakefile | 3 + BaseTools/Source/C/GenFv/GenFvInternalLib.c | 125 +++++++- BaseTools/Source/C/GenFw/Elf64Convert.c | 293 +++++++++++++++++- BaseTools/Source/C/GenFw/elf_common.h | 94 ++++++ .../C/Include/IndustryStandard/PeImage.h | 57 ++-- .../C/Include/LoongArch64/ProcessorBind.h | 80 +++++ BaseTools/Source/C/Makefiles/header.makefile | 6 + BaseTools/Source/Python/Common/DataType.py | 21 +- .../Source/Python/UPT/Library/DataType.py | 24 +- BaseTools/Source/Python/build/buildoptions.py | 3 +- CryptoPkg/CryptoPkg.dsc | 3 +- .../Library/BaseCryptLib/BaseCryptLib.inf | 6 +- .../Library/BaseCryptLib/RuntimeCryptLib.inf | 4 + .../BaseCryptLibNull/BaseCryptLibNull.inf | 3 +- .../BaseCryptLibOnProtocolPpi/DxeCryptLib.inf | 3 +- .../BaseCryptLibOnProtocolPpi/PeiCryptLib.inf | 3 +- CryptoPkg/Library/Include/CrtLibSupport.h | 3 +- CryptoPkg/Library/OpensslLib/OpensslLib.inf | 2 + .../Library/OpensslLib/OpensslLibCrypto.inf | 2 + CryptoPkg/Library/TlsLib/TlsLib.inf | 3 +- CryptoPkg/Library/TlsLibNull/TlsLibNull.inf | 3 +- FatPkg/FatPkg.dsc | 3 +- FmpDevicePkg/FmpDevicePkg.dsc | 3 +- MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf | 6 +- .../Core/DxeIplPeim/LoongArch64/DxeLoadFunc.c | 63 ++++ MdeModulePkg/Logo/Logo.inf | 3 +- MdeModulePkg/MdeModulePkg.dsc | 4 +- .../CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf | 9 +- MdePkg/Include/IndustryStandard/Dhcp.h | 45 +-- MdePkg/Include/IndustryStandard/PeImage.h | 9 + MdePkg/Include/Library/BaseLib.h | 24 ++ MdePkg/Include/LoongArch64/ProcessorBind.h | 120 +++++++ MdePkg/Include/Protocol/DebugSupport.h | 107 ++++++- MdePkg/Include/Protocol/PxeBaseCode.h | 3 + MdePkg/Include/Uefi/UefiBaseType.h | 14 + MdePkg/Include/Uefi/UefiSpec.h | 16 +- .../BaseCacheMaintenanceLib.inf | 6 +- .../BaseCacheMaintenanceLib/LoongArchCache.c | 254 +++++++++++++++ MdePkg/Library/BaseCpuLib/BaseCpuLib.inf | 7 +- MdePkg/Library/BaseCpuLib/BaseCpuLib.uni | 5 +- .../BaseCpuLib/LoongArch/CpuFlushTlb.S | 15 + .../Library/BaseCpuLib/LoongArch/CpuSleep.S | 15 + .../BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf | 10 +- MdePkg/Library/BaseIoLibIntrinsic/IoLibNoIo.c | 3 +- MdePkg/Library/BaseLib/BaseLib.inf | 16 +- MdePkg/Library/BaseLib/LoongArch64/Barrier.S | 28 ++ .../BaseLib/LoongArch64/CpuBreakpoint.S | 24 ++ MdePkg/Library/BaseLib/LoongArch64/CpuPause.S | 31 ++ .../BaseLib/LoongArch64/DisableInterrupts.S | 21 ++ .../BaseLib/LoongArch64/EnableInterrupts.S | 21 ++ .../BaseLib/LoongArch64/GetInterruptState.S | 35 +++ .../BaseLib/LoongArch64/InternalSwitchStack.c | 58 ++++ .../Library/BaseLib/LoongArch64/MemoryFence.S | 18 ++ .../BaseLib/LoongArch64/SetJumpLongJump.S | 49 +++ .../Library/BaseLib/LoongArch64/SwitchStack.S | 39 +++ MdePkg/Library/BasePeCoffLib/BasePeCoff.c | 3 +- .../Library/BasePeCoffLib/BasePeCoffLib.inf | 5 + .../Library/BasePeCoffLib/BasePeCoffLib.uni | 2 + .../BasePeCoffLib/LoongArch/PeCoffLoaderEx.c | 137 ++++++++ .../Library/BaseSafeIntLib/BaseSafeIntLib.inf | 9 +- .../BaseSynchronizationLib.inf | 6 + .../LoongArch64/AsmSynchronization.S | 122 ++++++++ .../LoongArch64/Synchronization.c | 233 ++++++++++++++ .../Library/DxeServicesLib/DxeServicesLib.inf | 4 +- MdePkg/MdePkg.ci.yaml | 13 + MdePkg/MdePkg.dec | 4 + MdePkg/MdePkg.dsc | 3 +- NetworkPkg/HttpBootDxe/HttpBootDhcp4.h | 3 + NetworkPkg/Network.dsc.inc | 3 +- NetworkPkg/NetworkPkg.dsc | 3 +- SecurityPkg/SecurityPkg.dsc | 3 +- ShellPkg/ShellPkg.dsc | 3 +- UnitTestFrameworkPkg/UnitTestFrameworkPkg.dsc | 3 +- 81 files changed, 2478 insertions(+), 119 deletions(-) create mode 100644 BaseTools/Bin/gcc_loongarch64_unknown_linux_ext_dep.yaml create mode 100644 BaseTools/Source/C/Include/LoongArch64/ProcessorBind.h create mode 100644 MdeModulePkg/Core/DxeIplPeim/LoongArch64/DxeLoadFunc.c create mode 100644 MdePkg/Include/LoongArch64/ProcessorBind.h create mode 100644 MdePkg/Library/BaseCacheMaintenanceLib/LoongArchCache.c create mode 100644 MdePkg/Library/BaseCpuLib/LoongArch/CpuFlushTlb.S create mode 100644 MdePkg/Library/BaseCpuLib/LoongArch/CpuSleep.S create mode 100644 MdePkg/Library/BaseLib/LoongArch64/Barrier.S create mode 100644 MdePkg/Library/BaseLib/LoongArch64/CpuBreakpoint.S create mode 100644 MdePkg/Library/BaseLib/LoongArch64/CpuPause.S create mode 100644 MdePkg/Library/BaseLib/LoongArch64/DisableInterrupts.S create mode 100644 MdePkg/Library/BaseLib/LoongArch64/EnableInterrupts.S create mode 100644 MdePkg/Library/BaseLib/LoongArch64/GetInterruptState.S create mode 100644 MdePkg/Library/BaseLib/LoongArch64/InternalSwitchStack.c create mode 100644 MdePkg/Library/BaseLib/LoongArch64/MemoryFence.S create mode 100644 MdePkg/Library/BaseLib/LoongArch64/SetJumpLongJump.S create mode 100644 MdePkg/Library/BaseLib/LoongArch64/SwitchStack.S create mode 100644 MdePkg/Library/BasePeCoffLib/LoongArch/PeCoffLoaderEx.c create mode 100644 MdePkg/Library/BaseSynchronizationLib/LoongArch64/AsmSynchronization.S create mode 100644 MdePkg/Library/BaseSynchronizationLib/LoongArch64/Synchronization.c -- 2.27.0