* [PATCH v1 0/2] Enable LoongArch64 in uefi-sct @ 2022-12-14 8:36 Chao Li 2022-12-14 8:36 ` [PATCH v1 1/2] uefi-sct/SctPkg: Add LoongArch64 platform support Chao Li 2022-12-14 8:36 ` [PATCH v1 2/2] uefi-sct/SctPkg: Enable LoongArch64 building Chao Li 0 siblings, 2 replies; 9+ messages in thread From: Chao Li @ 2022-12-14 8:36 UTC (permalink / raw) To: devel Cc: G Edhaya Chandran, Barton Gao, Carolyn Gjertsen, Samer El-Haj-Mahmoud, Eric Jin, Supreeth Venkatesh LoongArch64 support was merged into edk2 and edk2-platforms, enable it in edk2-test now. BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4192 Cc: G Edhaya Chandran <Edhaya.Chandran@arm.com> Cc: Barton Gao <gaojie@byosoft.com.cn> Cc: Carolyn Gjertsen <Carolyn.Gjertsen@amd.com> Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com> Cc: Eric Jin <eric.jin@intel.com> Cc: Supreeth Venkatesh <Supreeth.Venkatesh@amd.com> Signed-off-by: Chao Li <lichao@loongson.cn> Chao Li (2): uefi-sct/SctPkg: Add LoongArch64 platform support uefi-sct/SctPkg: Enable LoongArch64 building .../Application/InstallSct/InstallSctDef.h | 4 + .../Library/SctLib/LoongArch64/SctLibPlat.h | 32 ++ .../Library/SctLib/LoongArch64/initplat.c | 45 +++ uefi-sct/SctPkg/Library/SctLib/SctLib.inf | 6 + .../SCRT/SCRTApp/LoongArch64/GoVirtual.S | 41 +++ .../SCRT/SCRTApp/LoongArch64/VirtualMemory.c | 177 ++++++++++++ uefi-sct/SctPkg/SCRT/SCRTApp/SCRTApp.inf | 5 + .../SCRT/SCRTDriver/LoongArch64/Debug.c | 81 ++++++ .../SctPkg/SCRT/SCRTDriver/LoongArch64/Dump.c | 68 +++++ .../SctPkg/SCRT/SCRTDriver/LoongArch64/Io.c | 136 +++++++++ .../SctPkg/SCRT/SCRTDriver/SCRTDriver.inf | 6 + .../BlackBoxTest/DebugSupportBBTest.inf | 6 + .../DebugSupportBBTestCacheFunction.c | 136 +++++++++ ...ugSupportBBTestExceptionCallbackFunction.c | 273 ++++++++++++++++++ .../BlackBoxTest/LoongArch64/PlatformIsa.c | 29 ++ .../Usb2Hc/BlackBoxTest/Usb2HcTest.inf | 4 + .../BlackBoxTest/LoongArch64/TimerInterrupt.c | 38 +++ .../Protocol/UsbHc/BlackBoxTest/UsbHcTest.inf | 4 + .../SCT/Framework/ENTS/EasLib/EntsLib.inf | 5 + .../ENTS/EasLib/LoongArch64/EntsLibPlat.h | 56 ++++ .../ENTS/EasLib/LoongArch64/InitPlat.c | 55 ++++ .../SctPkg/Tools/Source/GenBin/GNUmakefile | 4 + uefi-sct/SctPkg/UEFI/IHV_SCT.dsc | 12 +- uefi-sct/SctPkg/UEFI/Protocol/DebugSupport.h | 101 ++++++- uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc | 15 +- uefi-sct/SctPkg/build.sh | 10 +- 26 files changed, 1343 insertions(+), 6 deletions(-) create mode 100644 uefi-sct/SctPkg/Library/SctLib/LoongArch64/SctLibPlat.h create mode 100644 uefi-sct/SctPkg/Library/SctLib/LoongArch64/initplat.c create mode 100644 uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/GoVirtual.S create mode 100644 uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/VirtualMemory.c create mode 100644 uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Debug.c create mode 100644 uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Dump.c create mode 100644 uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Io.c create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/DebugSupportBBTestCacheFunction.c create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/DebugSupportBBTestExceptionCallbackFunction.c create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/PlatformIsa.c create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/LoongArch64/TimerInterrupt.c create mode 100644 uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/EntsLibPlat.h create mode 100644 uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/InitPlat.c -- 2.27.0 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v1 1/2] uefi-sct/SctPkg: Add LoongArch64 platform support 2022-12-14 8:36 [PATCH v1 0/2] Enable LoongArch64 in uefi-sct Chao Li @ 2022-12-14 8:36 ` Chao Li 2023-01-03 5:31 ` 回复: " Gao Jie 2023-02-28 14:03 ` [edk2-devel] " G Edhaya Chandran 2022-12-14 8:36 ` [PATCH v1 2/2] uefi-sct/SctPkg: Enable LoongArch64 building Chao Li 1 sibling, 2 replies; 9+ messages in thread From: Chao Li @ 2022-12-14 8:36 UTC (permalink / raw) To: devel Cc: G Edhaya Chandran, Barton Gao, Carolyn Gjertsen, Samer El-Haj-Mahmoud, Eric Jin, Supreeth Venkatesh Code referenced from Aarch64 and Risc-V. Added three test case for LoongArch64. BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4192 Cc: G Edhaya Chandran <Edhaya.Chandran@arm.com> Cc: Barton Gao <gaojie@byosoft.com.cn> Cc: Carolyn Gjertsen <Carolyn.Gjertsen@amd.com> Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com> Cc: Eric Jin <eric.jin@intel.com> Cc: Supreeth Venkatesh <Supreeth.Venkatesh@amd.com> Signed-off-by: Chao Li <lichao@loongson.cn> --- .../Library/SctLib/LoongArch64/SctLibPlat.h | 32 ++ .../Library/SctLib/LoongArch64/initplat.c | 45 +++ .../SCRT/SCRTApp/LoongArch64/GoVirtual.S | 41 +++ .../SCRT/SCRTApp/LoongArch64/VirtualMemory.c | 177 ++++++++++++ .../SCRT/SCRTDriver/LoongArch64/Debug.c | 81 ++++++ .../SctPkg/SCRT/SCRTDriver/LoongArch64/Dump.c | 68 +++++ .../SctPkg/SCRT/SCRTDriver/LoongArch64/Io.c | 136 +++++++++ .../DebugSupportBBTestCacheFunction.c | 136 +++++++++ ...ugSupportBBTestExceptionCallbackFunction.c | 273 ++++++++++++++++++ .../BlackBoxTest/LoongArch64/PlatformIsa.c | 29 ++ .../BlackBoxTest/LoongArch64/TimerInterrupt.c | 38 +++ .../ENTS/EasLib/LoongArch64/EntsLibPlat.h | 56 ++++ .../ENTS/EasLib/LoongArch64/InitPlat.c | 55 ++++ 13 files changed, 1167 insertions(+) create mode 100644 uefi-sct/SctPkg/Library/SctLib/LoongArch64/SctLibPlat.h create mode 100644 uefi-sct/SctPkg/Library/SctLib/LoongArch64/initplat.c create mode 100644 uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/GoVirtual.S create mode 100644 uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/VirtualMemory.c create mode 100644 uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Debug.c create mode 100644 uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Dump.c create mode 100644 uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Io.c create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/DebugSupportBBTestCacheFunction.c create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/DebugSupportBBTestExceptionCallbackFunction.c create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/PlatformIsa.c create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/LoongArch64/TimerInterrupt.c create mode 100644 uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/EntsLibPlat.h create mode 100644 uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/InitPlat.c diff --git a/uefi-sct/SctPkg/Library/SctLib/LoongArch64/SctLibPlat.h b/uefi-sct/SctPkg/Library/SctLib/LoongArch64/SctLibPlat.h new file mode 100644 index 00000000..553767df --- /dev/null +++ b/uefi-sct/SctPkg/Library/SctLib/LoongArch64/SctLibPlat.h @@ -0,0 +1,32 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + SctLibPlat.h + +Abstract: + + LoongArch64 specific defines + +--*/ + +#ifndef _EFI_LIB_PLAT_H_ +#define _EFI_LIB_PLAT_H_ + +#define MIN_ALIGNMENT_SIZE 8 + +#endif diff --git a/uefi-sct/SctPkg/Library/SctLib/LoongArch64/initplat.c b/uefi-sct/SctPkg/Library/SctLib/LoongArch64/initplat.c new file mode 100644 index 00000000..2cfff099 --- /dev/null +++ b/uefi-sct/SctPkg/Library/SctLib/LoongArch64/initplat.c @@ -0,0 +1,45 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + initplat.c + +Abstract: + + Math routines for compatibility with native EFI library routines. + +--*/ + +#include "SctLibInternal.h" + +VOID +InitializeLibPlatform ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) + +{ + // No platform-specific initializations +} + +UINT64 +SctReadTsc ( + VOID + ) +{ + return 0; +} diff --git a/uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/GoVirtual.S b/uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/GoVirtual.S new file mode 100644 index 00000000..b6455024 --- /dev/null +++ b/uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/GoVirtual.S @@ -0,0 +1,41 @@ +## @file +# +# Copyright 2010 - 2012 Unified EFI, Inc.<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> +# +# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +## +# +# +#/*++ +# +# Module Name: +# +# GoVirtual.S +# +#--*/ +#start of the code section + +ASM_GLOBAL ASM_PFX(JumpToTestFunc) + +#------------------------------------------------------------------------------ +# VOID +# JumpToTestFunc ( +# IN UINTN FuncPointer, +# IN UNITN ConfigInfo +# ) +# +ASM_PFX(JumpToTestFunc): + move $ra, $a0 + move $a0, $a1 + + // Jump to Virtual function + jirl $zero, $ra, 0 + .end diff --git a/uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/VirtualMemory.c b/uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/VirtualMemory.c new file mode 100644 index 00000000..6ae41a85 --- /dev/null +++ b/uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/VirtualMemory.c @@ -0,0 +1,177 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + VirtualMemory.c + +--*/ + +#include "SCRTApp.h" + +UINTN PageTable = 0; + + +VOID +ConvertRuntimeFuncPtr ( + IN OUT UINTN *VirtualFunc + ) +/*++ + +Routine Description: + + Change RuntimeTestFunc physical address to virtual address + +Arguments: + + VirtualFunc - On input, RuntimeTestFunc physical address. + On output, RuntimeTest virtual address. + +Returns: + + NONE + +--*/ +{ + /*Note: It is presumed that on LoongArch architecture the MMU is + * configured and enabled in PEI phase. As VirtualFunc is already + * mapped to virtual memory, don't have to do anything here. + */ +} + + +EFI_STATUS +DoMemoryAllocation ( + IN UINTN PhysicalFunc + ) +/*++ + +Routine Description: + + Allocate memory and create the PageTable to set up physical-virtual map. + +Arguments: + + PhysicalFunc - Physical address where RuntimeTestFunc locates. + +Returns: + + EFI_STATUS + +--*/ +{ + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS AllocateMemory; + + //create new page tables or use existing page tables. + // + // Allocate PageTable memory close to this Application image location in + // the system memory. In this way, it is safe for page table memory. + // + AllocateMemory = PhysicalFunc; + + Status = tBS->AllocatePages ( + AllocateMaxAddress, + EfiRuntimeServicesData, + 1, + &AllocateMemory + ); + + if (EFI_ERROR(Status)) { + return Status; + } + + PageTable = (UINTN)AllocateMemory; + return EFI_SUCCESS; +} + + +VOID +PrepareVirtualAddressMap ( + IN UINTN MemoryMapSize, + IN UINTN DescriptorSize, + IN EFI_MEMORY_DESCRIPTOR *MemoryMap, + IN EFI_MEMORY_DESCRIPTOR *VirtualMemoryMap, + IN OUT UINTN *VirtualMapSize + ) +/*++ + +Routine Description: + + Construct VirtualAddressMap from physical address to virtual address + +Arguments: + + MemoryMapSize - The size, in bytes, of the MemoryMap buffer + DescriptorSize - The size, in bytes, of an individual EFI_MEMORY_DESCRIPTOR + MemoryMap - A pointer to the current memory map + VirtualMemoryMap - A pointer to the modified virtual memory map + VirtualMapSize - A pointer to the size, in bytes, of the VirtualMemoryMap buffer + +Returns: + + NONE + +--*/ +{ + UINTN Index; + *VirtualMapSize = 0; + + // + // Copy entries that need runtime mapping to construct virtualMemoryMap + // + for (Index = 0; Index < (MemoryMapSize / DescriptorSize); Index++) { + if ((MemoryMap->Attribute & EFI_MEMORY_RUNTIME) == EFI_MEMORY_RUNTIME) { + SctCopyMem ((VOID *) VirtualMemoryMap, (VOID *) MemoryMap, DescriptorSize); + VirtualMemoryMap->VirtualStart = VirtualMemoryMap->PhysicalStart; + *VirtualMapSize += DescriptorSize; + VirtualMemoryMap = NextMemoryDescriptor (VirtualMemoryMap, DescriptorSize); + } + + MemoryMap = NextMemoryDescriptor (MemoryMap, DescriptorSize); + } +} + + + +VOID +JumpVirtualMode( + IN UINTN VirtualFunc, + IN UINTN HandOffAddr + ) +/*++ + +Routine Description: + + Enable virtual addressing mode, and jump to RuntimeTestFunc in virtual address + +Arguments: + + VirtualFunc - RuntimeTestFunc virtual address + HandOffAddr - Configuration Data Address + +Returns: + + NONE + +--*/ +{ + // + // Note: It is assumed that the MMU and page tables are configured on LoongArch + // platforms. + // + JumpToTestFunc(VirtualFunc, HandOffAddr); +} diff --git a/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Debug.c b/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Debug.c new file mode 100644 index 00000000..b117c456 --- /dev/null +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Debug.c @@ -0,0 +1,81 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2011 - 2012 ARM Ltd. All rights reserved.<BR> + Copyright (c) 2021 Hewlett Packard Enterprise Development LP. All rights reserved.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +/*++ + +Module Name: + + Debug.c + +--*/ + +#include "SCRTDriver.h" + +UINTN mHandOffPtr = 0; + + +EFI_STATUS +ConsumeHandOff ( + IN UINTN HandOffAddr, + OUT CONF_INFO *ConfigData + ) +{ + RUNTIME_HANDOFF *HandOffPtr; + // + // First fix the memory address of hand off data. + // + FixAddress(&HandOffAddr); + mHandOffPtr = HandOffAddr; + HandOffPtr = (RUNTIME_HANDOFF*)mHandOffPtr; + *ConfigData = HandOffPtr->ConfigureInfo; + + // + // Fix MmioBase Address. + // + FixAddress(&HandOffPtr->DebuggerInfo.MmioBase); + + return EFI_SUCCESS; +} + + +EFI_STATUS +Send2UART ( + CHAR8 *String + ) +{ + // + // TODO: On LoongArch platforms use platform specific functions to + // write the data to UART. + // + return EFI_SUCCESS; +} + + + +EFI_STATUS +DebugWorker ( + IN CHAR8 *String + ) +{ + EFI_STATUS Status; + + // + // Send text message to registered UART. + // + Status = Send2UART(String); + return Status; +} diff --git a/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Dump.c b/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Dump.c new file mode 100644 index 00000000..cec73e37 --- /dev/null +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Dump.c @@ -0,0 +1,68 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2011 - 2012 ARM Ltd. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +/*++ + +Module Name: + + Dump.c + +--*/ + +#include "SCRTDriver.h" + +VOID +DumpRuntimeTable() +{ + Printf ("\n================Dump Runtime Table===============\n"); + Printf ("Header Signature = 0x%x\n", VRT->Hdr.Signature); + + Printf ("\n================GetTime Service==============\n"); + Printf ("GetTime @ 0x%x\n", VRT->GetTime); + + Printf ("\n================SetTime Service==============\n"); + Printf ("SetTime @ 0x%x\n", VRT->SetTime); + + Printf ("\n================GetWakeupTime Service==============\n"); + Printf ("GetWakeupTime @ 0x%x\n", VRT->GetWakeupTime); + + Printf ("\n================SetWakeupTime Service==============\n"); + Printf ("SetWakeupTime @ 0x%x\n", VRT->SetWakeupTime); + + Printf ("\n================GetVariable Service==============\n"); + Printf ("GetVariable @ 0x%x\n", VRT->GetVariable); + + Printf ("\n================GetNextVariableName Service==============\n"); + Printf ("GetNextVariableName @ 0x%x\n", VRT->GetNextVariableName); + + Printf ("\n================SetVariable Service==============\n"); + Printf ("SetVariable @ 0x%x\n", VRT->SetVariable); + + Printf ("\n================GetNextHighMonotonicCount Service==============\n"); + Printf ("GetNextHighMonotonicCount @ 0x%x\n", VRT->GetNextHighMonotonicCount); + + Printf ("\n================ResetSystem Service==============\n"); + Printf ("ResetSystem @ 0x%x\n", VRT->ResetSystem); +#if 0 + Printf ("\n================UpdateCapsule Service==============\n"); + Printf ("UpdateCapsule @ 0x%x\n", VRT->UpdateCapsule); + + Printf ("\n================QueryCapsuleCapabilities Service==============\n"); + Printf ("QueryCapsuleCapabilities @ 0x%x\n", VRT->QueryCapsuleCapabilities); + + Printf ("\n================QueryVariableInfo Service==============\n"); + Printf ("QueryVariableInfo @ 0x%x\n", VRT->QueryVariableInfo); +#endif +} diff --git a/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Io.c b/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Io.c new file mode 100644 index 00000000..ce7c271f --- /dev/null +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Io.c @@ -0,0 +1,136 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2011 - 2012 ARM Ltd. All rights reserved.<BR> + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +/*++ + +Module Name: + + Io.c + +--*/ + +#include "SCRTDriver.h" + +EFI_STATUS +EFIAPI +CpuIoServiceWrite ( + IN EFI_PEI_CPU_IO_PPI_WIDTH Width, + IN UINT64 UserAddress, + IN UINTN Count, + IN VOID *UserBuffer + ) +/*++ + +Routine Description: + + Perform the port I/O write service + +Arguments: + + Width - Width of the port I/O operation + Address - Base address of the port I/O operation + Count - Count of the number of accesses to perform + Buffer - Pointer to the source buffer from which to write data + +Returns: + + EFI_SUCCESS - The data was written. + EFI_INVALID_PARAMETER - Width is invalid. + EFI_INVALID_PARAMETER - Buffer is NULL. + EFI_UNSUPPORTED - The Buffer is not aligned for the given Width. + EFI_UNSUPPORTED - The address range specified by Address, Width, + and Count is not valid. + +--*/ +{ + return EFI_UNSUPPORTED; +} + + +EFI_STATUS +EfiIoWrite ( + IN EFI_PEI_CPU_IO_PPI_WIDTH Width, + IN UINT64 Address, + IN UINTN Count, + IN OUT VOID *Buffer + ) +/*++ + +Routine Description: + Perform an IO write into Buffer. + +Arguments: + Width - Width of write transaction, and repeat operation to use + Address - IO address to write + Count - Number of times to write the IO address. + Buffer - Buffer to write data from. size is Width * Count + +Returns: + Status code + +--*/ +{ + return CpuIoServiceWrite(Width, Address, Count, Buffer); +} + + +EFI_STATUS +EfiIoRead ( + IN EFI_PEI_CPU_IO_PPI_WIDTH Width, + IN UINT64 Address, + IN UINTN Count, + IN OUT VOID *Buffer + ) +/*++ + +Routine Description: + Perform an IO read into Buffer. + +Arguments: + Width - Width of read transaction, and repeat operation to use + Address - IO address to read + Count - Number of times to read the IO address. + Buffer - Buffer to read data into. size is Width * Count + +Returns: + Status code + +--*/ +{ + return EFI_UNSUPPORTED; +} + + +VOID +FixAddress ( + IN UINTN *PhyAddress + ) +{ + // + //Note: On LoongArch platforms don't have to do this as all the functions are virtually mapped. + // +} + +// Quick port to LoongArch. It doesn't have traditional I/O-Port 80h POST Codes + +VOID +Port80 ( + UINT8 Number + ) +{ + //EFI_SCT_DEBUG ((EFI_SCT_D_ERROR, L"Port80 %02x", Number)); +} diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/DebugSupportBBTestCacheFunction.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/DebugSupportBBTestCacheFunction.c new file mode 100644 index 00000000..f2e3e3dc --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/DebugSupportBBTestCacheFunction.c @@ -0,0 +1,136 @@ +/** @file + + Copyright 2006 - 2016 Unified EFI, Inc.<BR> + Copyright (c) 2011 - 2016, ARM Ltd. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + DebugSupportBBTestCacheFunction.c + +Abstract: + + Interface Function Test Cases of Debug Support Protocol + +--*/ + + +#include "DebugSupportBBTestMain.h" + +/** + * Entrypoint for EFI_DEBUG_SUPPORT_PROTOCOL.InvalidateInstructionCache() Function Test. + * @param This a pointer of EFI_BB_TEST_PROTOCOL. + * @param ClientInterface a pointer to the interface to be tested. + * @param TestLevel test "thoroughness" control. + * @param SupportHandle a handle containing protocols required. + * @return EFI_SUCCESS Finish the test successfully. + */ +// +// TDS 3.5 +// +EFI_STATUS +BBTestInvalidateInstructionCacheFunctionAutoTest ( + IN EFI_BB_TEST_PROTOCOL *This, + IN VOID *ClientInterface, + IN EFI_TEST_LEVEL TestLevel, + IN EFI_HANDLE SupportHandle + ) +{ + EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib; + EFI_STATUS Status; + EFI_DEBUG_SUPPORT_PROTOCOL *DebugSupport; + EFI_TEST_ASSERTION AssertionType; + UINT64 Start; + UINT64 Length; + UINTN MaxProcessorIndex; + UINTN ProcessorIndex; + + // + // Get the Standard Library Interface + // + Status = gtBS->HandleProtocol ( + SupportHandle, + &gEfiStandardTestLibraryGuid, + (VOID **) &StandardLib + ); + + if (EFI_ERROR(Status)) { + StandardLib->RecordAssertion ( + StandardLib, + EFI_TEST_ASSERTION_FAILED, + gTestGenericFailureGuid, + L"BS.HandleProtocol - Handle standard test library", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + return Status; + } + + DebugSupport = (EFI_DEBUG_SUPPORT_PROTOCOL *)ClientInterface; + + if (DebugSupport->Isa != PlatformIsa) { + return EFI_SUCCESS; + } + + Status = DebugSupport->GetMaximumProcessorIndex (DebugSupport, &MaxProcessorIndex); + if (EFI_ERROR(Status)) { + StandardLib->RecordAssertion ( + StandardLib, + EFI_TEST_ASSERTION_FAILED, + gTestGenericFailureGuid, + L"EFI_DEBUG_SUPPORT_PROTOCOL.GetMaximumProcessorIndex", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + return Status; + } + + for (ProcessorIndex = 0; ProcessorIndex <= MaxProcessorIndex; ProcessorIndex++) { + + // + // Assertion Point 3.5.2.1 + // Invoke InvalidateInstructionCache and verify interface correctness. + // + + // The Physical base of the memory range to be invalidated. + Start = 0x0; + + // The minimum number of bytes in the processor's instruction cache to be invalidated. + Length = 0x0; + + Status = DebugSupport->InvalidateInstructionCache (DebugSupport, ProcessorIndex, (VOID*)&Start, Length); + + if (EFI_ERROR(Status)) { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid015, + L"EFI_DEBUG_SUPPORT_PROTOCOL.InvalidateInstructionCache - Invoke this function and verify interface correctness", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + } + + return EFI_SUCCESS; +} diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/DebugSupportBBTestExceptionCallbackFunction.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/DebugSupportBBTestExceptionCallbackFunction.c new file mode 100644 index 00000000..add7941a --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/DebugSupportBBTestExceptionCallbackFunction.c @@ -0,0 +1,273 @@ +/** @file + + Copyright 2006 - 2016 Unified EFI, Inc.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + DebugSupportBBExceptionCallbackFunction.c + +Abstract: + + Interface Function Test Cases of Debug Support Protocol + +--*/ + + +#include "DebugSupportBBTestMain.h" + +extern volatile UINTN InvokedExceptionCallback; +extern volatile UINTN InvokedPeriodicCallback; + +extern EFI_INSTRUCTION_SET_ARCHITECTURE PlatformIsa; + +void +SoftwareBreak ( + void + ) +{ + // Not ported to LoongArch yet + ASSERT (FALSE); +} + +/** + * Entrypoint for EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback() Function Test. + * @param This a pointer of EFI_BB_TEST_PROTOCOL. + * @param ClientInterface a pointer to the interface to be tested. + * @param TestLevel test "thoroughness" control. + * @param SupportHandle a handle containing protocols required. + * @return EFI_SUCCESS Finish the test successfully. + */ +// +// TDS 3.4 +// +EFI_STATUS +BBTestRegisterExceptionCallbackFunctionManualTest ( + IN EFI_BB_TEST_PROTOCOL *This, + IN VOID *ClientInterface, + IN EFI_TEST_LEVEL TestLevel, + IN EFI_HANDLE SupportHandle + ) +{ + EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib; + EFI_STATUS Status; + EFI_DEBUG_SUPPORT_PROTOCOL *DebugSupport; + EFI_TEST_ASSERTION AssertionType; + + DebugSupport = (EFI_DEBUG_SUPPORT_PROTOCOL *)ClientInterface; + + if (DebugSupport->Isa != PlatformIsa) { + return EFI_SUCCESS; + } + + // + // Get the Standard Library Interface + // + Status = gtBS->HandleProtocol ( + SupportHandle, + &gEfiStandardTestLibraryGuid, + (VOID **) &StandardLib + ); + + if (EFI_ERROR(Status)) { + StandardLib->RecordAssertion ( + StandardLib, + EFI_TEST_ASSERTION_FAILED, + gTestGenericFailureGuid, + L"BS.HandleProtocol - Handle standard test library", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + return Status; + } + + // + // Assertion Point 3.4.2.1 + // Invoke RegisterExceptionCallback() to install an interrupt handler function. + // + InvokedExceptionCallback = FALSE; + Status = DebugSupport->RegisterExceptionCallback (DebugSupport, 0, ExceptionCallback, EXCEPT_LOONGARCH_BRK); + + if ((Status == EFI_SUCCESS) || (Status == EFI_ALREADY_STARTED)) { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } else { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid009, + L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Invoke this function and verify interface correctness", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // + // If the callback function is already registed, return + // + if (EFI_ERROR(Status)) { + return EFI_SUCCESS; + } + + // + // Test the callback function registed. + // + + // + // Call SoftwareBreak to invoke the interrupt handler function. + // + SoftwareBreak (); + + if (InvokedExceptionCallback == FALSE) { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid010, + L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Verify the callback function was invoked.", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // + // Assertion Point 3.4.2.2 + // Invoke RegisterPeriodicCallback() to install the Periodic interrupt handler function. + // Verify the two callback functions can be both invoked. + // + InvokedExceptionCallback = FALSE; + InvokedPeriodicCallback = FALSE; + + Status = DebugSupport->RegisterPeriodicCallback (DebugSupport, 0, PeriodicCallback); + if (EFI_ERROR(Status)) { + return Status; + } + + // + // Wait the PeriodicCallback to be invoked. + // + gtBS->Stall (500000); + + // + // Call SoftwareBreak to invoke the interrupt handler function. + // + SoftwareBreak (); + + if ((InvokedExceptionCallback == TRUE) && (InvokedPeriodicCallback == TRUE)) { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } else { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid011, + L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Verify the two callback functions can be both invoked.", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // + // Uninstall the Periodic callback function. + // + Status = DebugSupport->RegisterPeriodicCallback (DebugSupport, 0, NULL); + if (EFI_ERROR(Status)) { + return Status; + } + + // + // Assertion Point 3.4.2.3 + // Invoke RegisterExceptionCallback() to install another interrupt handler function. + // + Status = DebugSupport->RegisterExceptionCallback (DebugSupport, 0, ExceptionCallback1, EXCEPT_LOONGARCH_BRK); + + if (Status != EFI_ALREADY_STARTED) { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid012, + L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Register another callback function.", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // + // Assertion Point 3.4.2.4 + // Invoke RegisterExceptionCallback() to unstall the interrupt handler function. + // + Status = DebugSupport->RegisterExceptionCallback (DebugSupport, 0, NULL, EXCEPT_LOONGARCH_BRK); + + if (EFI_ERROR(Status)) { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid013, + L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Invoke this function to uninstall the interrupt handler function", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + InvokedExceptionCallback = FALSE; + + // + // Call SoftwareBreak to invoke the interrupt handler function. + // + SoftwareBreak (); + + if (InvokedExceptionCallback != FALSE) { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid014, + L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Verify the callback function wasn't invoked", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + return EFI_SUCCESS; +} diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/PlatformIsa.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/PlatformIsa.c new file mode 100644 index 00000000..ca61cbe4 --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongArch64/PlatformIsa.c @@ -0,0 +1,29 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + PlatformIsa.c + +Abstract: + + Platform related Isa definition. + +--*/ + +#include "DebugSupportBBTestMain.h" + +EFI_INSTRUCTION_SET_ARCHITECTURE PlatformIsa = IsaLoongArch64; diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/LoongArch64/TimerInterrupt.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/LoongArch64/TimerInterrupt.c new file mode 100644 index 00000000..39701257 --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/LoongArch64/TimerInterrupt.c @@ -0,0 +1,38 @@ +/** @file + + Copyright 2006 - 2010 Unified EFI, Inc.<BR> + Copyright (c) 2010, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + TimerInterrupt.c + +Abstract: + Ipf Source file for Mask/Unmask TimerInterrupt. + +--*/ + +#include "UsbHcTest.h" + +VOID MaskTimerInterrupt() +{ + // TBD + return; +} + +VOID UnmaskTimerInterrupt() +{ + // TBD + return; +} diff --git a/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/EntsLibPlat.h b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/EntsLibPlat.h new file mode 100644 index 00000000..3762eb15 --- /dev/null +++ b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/EntsLibPlat.h @@ -0,0 +1,56 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2010 - 2012, ARM Ltd. All rights reserved.<BR> + Copyright (c) 2021 Hewlett Packard Enterprise Development LP. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + EntsLibPlat.h + +Abstract: + + LoongArch64 specific defines + +--*/ + +#ifndef _EFI_LIB_PLAT_H_ +#define _EFI_LIB_PLAT_H_ + +#define MIN_ALIGNMENT_SIZE 8 + +VOID +EntsInitializeLibPlatform ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +/*++ + +Routine Description: + + Initialize platform. + +Arguments: + + ImageHandle - The image handle. + SystemTable - The system table. + +Returns: + + None. + +--*/ +; + +#endif diff --git a/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/InitPlat.c b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/InitPlat.c new file mode 100644 index 00000000..360e3296 --- /dev/null +++ b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/InitPlat.c @@ -0,0 +1,55 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2010 - 2012, ARM Ltd. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + InitPlat.c + +Abstract: + + Math routines for compatibility with native EFI library routines. + +--*/ + +#include "Efi.h" +#include "EntsLibPlat.h" + +VOID +EntsInitializeLibPlatform ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +/*++ + +Routine Description: + + Initialize platform. + +Arguments: + + ImageHandle - The image handle. + SystemTable - The system table. + +Returns: + + None. + +--*/ +{ + // + // No platform-specific initializations + // +} -- 2.27.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* 回复: [PATCH v1 1/2] uefi-sct/SctPkg: Add LoongArch64 platform support 2022-12-14 8:36 ` [PATCH v1 1/2] uefi-sct/SctPkg: Add LoongArch64 platform support Chao Li @ 2023-01-03 5:31 ` Gao Jie 2023-02-28 14:03 ` [edk2-devel] " G Edhaya Chandran 1 sibling, 0 replies; 9+ messages in thread From: Gao Jie @ 2023-01-03 5:31 UTC (permalink / raw) To: 'Chao Li', devel Cc: 'G Edhaya Chandran', 'Carolyn Gjertsen', 'Samer El-Haj-Mahmoud', 'Eric Jin', 'Supreeth Venkatesh' Reviewed-by: Barton Gao <gaojie@byosoft.com.cn> Thanks Barton -----邮件原件----- 发件人: Chao Li <lichao@loongson.cn> 发送时间: 2022年12月14日 16:37 收件人: devel@edk2.groups.io 抄送: G Edhaya Chandran <Edhaya.Chandran@arm.com>; Barton Gao <gaojie@byosoft.com.cn>; Carolyn Gjertsen <Carolyn.Gjertsen@amd.com>; Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>; Eric Jin <eric.jin@intel.com>; Supreeth Venkatesh <Supreeth.Venkatesh@amd.com> 主题: [PATCH v1 1/2] uefi-sct/SctPkg: Add LoongArch64 platform support Code referenced from Aarch64 and Risc-V. Added three test case for LoongArch64. BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4192 Cc: G Edhaya Chandran <Edhaya.Chandran@arm.com> Cc: Barton Gao <gaojie@byosoft.com.cn> Cc: Carolyn Gjertsen <Carolyn.Gjertsen@amd.com> Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com> Cc: Eric Jin <eric.jin@intel.com> Cc: Supreeth Venkatesh <Supreeth.Venkatesh@amd.com> Signed-off-by: Chao Li <lichao@loongson.cn> --- .../Library/SctLib/LoongArch64/SctLibPlat.h | 32 ++ .../Library/SctLib/LoongArch64/initplat.c | 45 +++ .../SCRT/SCRTApp/LoongArch64/GoVirtual.S | 41 +++ .../SCRT/SCRTApp/LoongArch64/VirtualMemory.c | 177 ++++++++++++ .../SCRT/SCRTDriver/LoongArch64/Debug.c | 81 ++++++ .../SctPkg/SCRT/SCRTDriver/LoongArch64/Dump.c | 68 +++++ .../SctPkg/SCRT/SCRTDriver/LoongArch64/Io.c | 136 +++++++++ .../DebugSupportBBTestCacheFunction.c | 136 +++++++++ ...ugSupportBBTestExceptionCallbackFunction.c | 273 ++++++++++++++++++ .../BlackBoxTest/LoongArch64/PlatformIsa.c | 29 ++ .../BlackBoxTest/LoongArch64/TimerInterrupt.c | 38 +++ .../ENTS/EasLib/LoongArch64/EntsLibPlat.h | 56 ++++ .../ENTS/EasLib/LoongArch64/InitPlat.c | 55 ++++ 13 files changed, 1167 insertions(+) create mode 100644 uefi-sct/SctPkg/Library/SctLib/LoongArch64/SctLibPlat.h create mode 100644 uefi-sct/SctPkg/Library/SctLib/LoongArch64/initplat.c create mode 100644 uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/GoVirtual.S create mode 100644 uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/VirtualMemory.c create mode 100644 uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Debug.c create mode 100644 uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Dump.c create mode 100644 uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Io.c create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongAr ch64/DebugSupportBBTestCacheFunction.c create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongAr ch64/DebugSupportBBTestExceptionCallbackFunction.c create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/LoongAr ch64/PlatformIsa.c create mode 100644 uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/LoongArch64/Ti merInterrupt.c create mode 100644 uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/Ent sLibPlat.h create mode 100644 uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/Ini tPlat.c diff --git a/uefi-sct/SctPkg/Library/SctLib/LoongArch64/SctLibPlat.h b/uefi-sct/SctPkg/Library/SctLib/LoongArch64/SctLibPlat.h new file mode 100644 index 00000000..553767df --- /dev/null +++ b/uefi-sct/SctPkg/Library/SctLib/LoongArch64/SctLibPlat.h @@ -0,0 +1,32 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + SctLibPlat.h + +Abstract: + + LoongArch64 specific defines + +--*/ + +#ifndef _EFI_LIB_PLAT_H_ +#define _EFI_LIB_PLAT_H_ + +#define MIN_ALIGNMENT_SIZE 8 + +#endif diff --git a/uefi-sct/SctPkg/Library/SctLib/LoongArch64/initplat.c b/uefi-sct/SctPkg/Library/SctLib/LoongArch64/initplat.c new file mode 100644 index 00000000..2cfff099 --- /dev/null +++ b/uefi-sct/SctPkg/Library/SctLib/LoongArch64/initplat.c @@ -0,0 +1,45 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + initplat.c + +Abstract: + + Math routines for compatibility with native EFI library routines. + +--*/ + +#include "SctLibInternal.h" + +VOID +InitializeLibPlatform ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) + +{ + // No platform-specific initializations +} + +UINT64 +SctReadTsc ( + VOID + ) +{ + return 0; +} diff --git a/uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/GoVirtual.S b/uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/GoVirtual.S new file mode 100644 index 00000000..b6455024 --- /dev/null +++ b/uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/GoVirtual.S @@ -0,0 +1,41 @@ +## @file +# +# Copyright 2010 - 2012 Unified EFI, Inc.<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> +# +# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +## +# +# +#/*++ +# +# Module Name: +# +# GoVirtual.S +# +#--*/ +#start of the code section + +ASM_GLOBAL ASM_PFX(JumpToTestFunc) + +#-------------------------------------------------------------------------- ---- +# VOID +# JumpToTestFunc ( +# IN UINTN FuncPointer, +# IN UNITN ConfigInfo +# ) +# +ASM_PFX(JumpToTestFunc): + move $ra, $a0 + move $a0, $a1 + + // Jump to Virtual function + jirl $zero, $ra, 0 + .end diff --git a/uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/VirtualMemory.c b/uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/VirtualMemory.c new file mode 100644 index 00000000..6ae41a85 --- /dev/null +++ b/uefi-sct/SctPkg/SCRT/SCRTApp/LoongArch64/VirtualMemory.c @@ -0,0 +1,177 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + VirtualMemory.c + +--*/ + +#include "SCRTApp.h" + +UINTN PageTable = 0; + + +VOID +ConvertRuntimeFuncPtr ( + IN OUT UINTN *VirtualFunc + ) +/*++ + +Routine Description: + + Change RuntimeTestFunc physical address to virtual address + +Arguments: + + VirtualFunc - On input, RuntimeTestFunc physical address. + On output, RuntimeTest virtual address. + +Returns: + + NONE + +--*/ +{ + /*Note: It is presumed that on LoongArch architecture the MMU is + * configured and enabled in PEI phase. As VirtualFunc is already + * mapped to virtual memory, don't have to do anything here. + */ +} + + +EFI_STATUS +DoMemoryAllocation ( + IN UINTN PhysicalFunc + ) +/*++ + +Routine Description: + + Allocate memory and create the PageTable to set up physical-virtual map. + +Arguments: + + PhysicalFunc - Physical address where RuntimeTestFunc locates. + +Returns: + + EFI_STATUS + +--*/ +{ + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS AllocateMemory; + + //create new page tables or use existing page tables. + // + // Allocate PageTable memory close to this Application image location in + // the system memory. In this way, it is safe for page table memory. + // + AllocateMemory = PhysicalFunc; + + Status = tBS->AllocatePages ( + AllocateMaxAddress, + EfiRuntimeServicesData, + 1, + &AllocateMemory + ); + + if (EFI_ERROR(Status)) { + return Status; + } + + PageTable = (UINTN)AllocateMemory; + return EFI_SUCCESS; +} + + +VOID +PrepareVirtualAddressMap ( + IN UINTN MemoryMapSize, + IN UINTN DescriptorSize, + IN EFI_MEMORY_DESCRIPTOR *MemoryMap, + IN EFI_MEMORY_DESCRIPTOR *VirtualMemoryMap, + IN OUT UINTN *VirtualMapSize + ) +/*++ + +Routine Description: + + Construct VirtualAddressMap from physical address to virtual address + +Arguments: + + MemoryMapSize - The size, in bytes, of the MemoryMap buffer + DescriptorSize - The size, in bytes, of an individual EFI_MEMORY_DESCRIPTOR + MemoryMap - A pointer to the current memory map + VirtualMemoryMap - A pointer to the modified virtual memory map + VirtualMapSize - A pointer to the size, in bytes, of the VirtualMemoryMap buffer + +Returns: + + NONE + +--*/ +{ + UINTN Index; + *VirtualMapSize = 0; + + // + // Copy entries that need runtime mapping to construct virtualMemoryMap + // + for (Index = 0; Index < (MemoryMapSize / DescriptorSize); Index++) { + if ((MemoryMap->Attribute & EFI_MEMORY_RUNTIME) == EFI_MEMORY_RUNTIME) { + SctCopyMem ((VOID *) VirtualMemoryMap, (VOID *) MemoryMap, DescriptorSize); + VirtualMemoryMap->VirtualStart = VirtualMemoryMap->PhysicalStart; + *VirtualMapSize += DescriptorSize; + VirtualMemoryMap = NextMemoryDescriptor (VirtualMemoryMap, DescriptorSize); + } + + MemoryMap = NextMemoryDescriptor (MemoryMap, DescriptorSize); + } +} + + + +VOID +JumpVirtualMode( + IN UINTN VirtualFunc, + IN UINTN HandOffAddr + ) +/*++ + +Routine Description: + + Enable virtual addressing mode, and jump to RuntimeTestFunc in virtual address + +Arguments: + + VirtualFunc - RuntimeTestFunc virtual address + HandOffAddr - Configuration Data Address + +Returns: + + NONE + +--*/ +{ + // + // Note: It is assumed that the MMU and page tables are configured on LoongArch + // platforms. + // + JumpToTestFunc(VirtualFunc, HandOffAddr); +} diff --git a/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Debug.c b/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Debug.c new file mode 100644 index 00000000..b117c456 --- /dev/null +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Debug.c @@ -0,0 +1,81 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2011 - 2012 ARM Ltd. All rights reserved.<BR> + Copyright (c) 2021 Hewlett Packard Enterprise Development LP. All rights reserved.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +/*++ + +Module Name: + + Debug.c + +--*/ + +#include "SCRTDriver.h" + +UINTN mHandOffPtr = 0; + + +EFI_STATUS +ConsumeHandOff ( + IN UINTN HandOffAddr, + OUT CONF_INFO *ConfigData + ) +{ + RUNTIME_HANDOFF *HandOffPtr; + // + // First fix the memory address of hand off data. + // + FixAddress(&HandOffAddr); + mHandOffPtr = HandOffAddr; + HandOffPtr = (RUNTIME_HANDOFF*)mHandOffPtr; + *ConfigData = HandOffPtr->ConfigureInfo; + + // + // Fix MmioBase Address. + // + FixAddress(&HandOffPtr->DebuggerInfo.MmioBase); + + return EFI_SUCCESS; +} + + +EFI_STATUS +Send2UART ( + CHAR8 *String + ) +{ + // + // TODO: On LoongArch platforms use platform specific functions to + // write the data to UART. + // + return EFI_SUCCESS; +} + + + +EFI_STATUS +DebugWorker ( + IN CHAR8 *String + ) +{ + EFI_STATUS Status; + + // + // Send text message to registered UART. + // + Status = Send2UART(String); + return Status; +} diff --git a/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Dump.c b/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Dump.c new file mode 100644 index 00000000..cec73e37 --- /dev/null +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Dump.c @@ -0,0 +1,68 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2011 - 2012 ARM Ltd. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +/*++ + +Module Name: + + Dump.c + +--*/ + +#include "SCRTDriver.h" + +VOID +DumpRuntimeTable() +{ + Printf ("\n================Dump Runtime Table===============\n"); + Printf ("Header Signature = 0x%x\n", VRT->Hdr.Signature); + + Printf ("\n================GetTime Service==============\n"); + Printf ("GetTime @ 0x%x\n", VRT->GetTime); + + Printf ("\n================SetTime Service==============\n"); + Printf ("SetTime @ 0x%x\n", VRT->SetTime); + + Printf ("\n================GetWakeupTime Service==============\n"); + Printf ("GetWakeupTime @ 0x%x\n", VRT->GetWakeupTime); + + Printf ("\n================SetWakeupTime Service==============\n"); + Printf ("SetWakeupTime @ 0x%x\n", VRT->SetWakeupTime); + + Printf ("\n================GetVariable Service==============\n"); + Printf ("GetVariable @ 0x%x\n", VRT->GetVariable); + + Printf ("\n================GetNextVariableName Service==============\n"); + Printf ("GetNextVariableName @ 0x%x\n", VRT->GetNextVariableName); + + Printf ("\n================SetVariable Service==============\n"); + Printf ("SetVariable @ 0x%x\n", VRT->SetVariable); + + Printf ("\n================GetNextHighMonotonicCount Service==============\n"); + Printf ("GetNextHighMonotonicCount @ 0x%x\n", VRT->GetNextHighMonotonicCount); + + Printf ("\n================ResetSystem Service==============\n"); + Printf ("ResetSystem @ 0x%x\n", VRT->ResetSystem); +#if 0 + Printf ("\n================UpdateCapsule Service==============\n"); + Printf ("UpdateCapsule @ 0x%x\n", VRT->UpdateCapsule); + + Printf ("\n================QueryCapsuleCapabilities Service==============\n"); + Printf ("QueryCapsuleCapabilities @ 0x%x\n", VRT->QueryCapsuleCapabilities); + + Printf ("\n================QueryVariableInfo Service==============\n"); + Printf ("QueryVariableInfo @ 0x%x\n", VRT->QueryVariableInfo); +#endif +} diff --git a/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Io.c b/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Io.c new file mode 100644 index 00000000..ce7c271f --- /dev/null +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/LoongArch64/Io.c @@ -0,0 +1,136 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2011 - 2012 ARM Ltd. All rights reserved.<BR> + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +/*++ + +Module Name: + + Io.c + +--*/ + +#include "SCRTDriver.h" + +EFI_STATUS +EFIAPI +CpuIoServiceWrite ( + IN EFI_PEI_CPU_IO_PPI_WIDTH Width, + IN UINT64 UserAddress, + IN UINTN Count, + IN VOID *UserBuffer + ) +/*++ + +Routine Description: + + Perform the port I/O write service + +Arguments: + + Width - Width of the port I/O operation + Address - Base address of the port I/O operation + Count - Count of the number of accesses to perform + Buffer - Pointer to the source buffer from which to write data + +Returns: + + EFI_SUCCESS - The data was written. + EFI_INVALID_PARAMETER - Width is invalid. + EFI_INVALID_PARAMETER - Buffer is NULL. + EFI_UNSUPPORTED - The Buffer is not aligned for the given Width. + EFI_UNSUPPORTED - The address range specified by Address, Width, + and Count is not valid. + +--*/ +{ + return EFI_UNSUPPORTED; +} + + +EFI_STATUS +EfiIoWrite ( + IN EFI_PEI_CPU_IO_PPI_WIDTH Width, + IN UINT64 Address, + IN UINTN Count, + IN OUT VOID *Buffer + ) +/*++ + +Routine Description: + Perform an IO write into Buffer. + +Arguments: + Width - Width of write transaction, and repeat operation to use + Address - IO address to write + Count - Number of times to write the IO address. + Buffer - Buffer to write data from. size is Width * Count + +Returns: + Status code + +--*/ +{ + return CpuIoServiceWrite(Width, Address, Count, Buffer); +} + + +EFI_STATUS +EfiIoRead ( + IN EFI_PEI_CPU_IO_PPI_WIDTH Width, + IN UINT64 Address, + IN UINTN Count, + IN OUT VOID *Buffer + ) +/*++ + +Routine Description: + Perform an IO read into Buffer. + +Arguments: + Width - Width of read transaction, and repeat operation to use + Address - IO address to read + Count - Number of times to read the IO address. + Buffer - Buffer to read data into. size is Width * Count + +Returns: + Status code + +--*/ +{ + return EFI_UNSUPPORTED; +} + + +VOID +FixAddress ( + IN UINTN *PhyAddress + ) +{ + // + //Note: On LoongArch platforms don't have to do this as all the functions are virtually mapped. + // +} + +// Quick port to LoongArch. It doesn't have traditional I/O-Port 80h POST Codes + +VOID +Port80 ( + UINT8 Number + ) +{ + //EFI_SCT_DEBUG ((EFI_SCT_D_ERROR, L"Port80 %02x", Number)); +} diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Loong Arch64/DebugSupportBBTestCacheFunction.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Loong Arch64/DebugSupportBBTestCacheFunction.c new file mode 100644 index 00000000..f2e3e3dc --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Loong Arch64/DebugSupportBBTestCacheFunction.c @@ -0,0 +1,136 @@ +/** @file + + Copyright 2006 - 2016 Unified EFI, Inc.<BR> + Copyright (c) 2011 - 2016, ARM Ltd. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + DebugSupportBBTestCacheFunction.c + +Abstract: + + Interface Function Test Cases of Debug Support Protocol + +--*/ + + +#include "DebugSupportBBTestMain.h" + +/** + * Entrypoint for EFI_DEBUG_SUPPORT_PROTOCOL.InvalidateInstructionCache() Function Test. + * @param This a pointer of EFI_BB_TEST_PROTOCOL. + * @param ClientInterface a pointer to the interface to be tested. + * @param TestLevel test "thoroughness" control. + * @param SupportHandle a handle containing protocols required. + * @return EFI_SUCCESS Finish the test successfully. + */ +// +// TDS 3.5 +// +EFI_STATUS +BBTestInvalidateInstructionCacheFunctionAutoTest ( + IN EFI_BB_TEST_PROTOCOL *This, + IN VOID *ClientInterface, + IN EFI_TEST_LEVEL TestLevel, + IN EFI_HANDLE SupportHandle + ) +{ + EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib; + EFI_STATUS Status; + EFI_DEBUG_SUPPORT_PROTOCOL *DebugSupport; + EFI_TEST_ASSERTION AssertionType; + UINT64 Start; + UINT64 Length; + UINTN MaxProcessorIndex; + UINTN ProcessorIndex; + + // + // Get the Standard Library Interface + // + Status = gtBS->HandleProtocol ( + SupportHandle, + &gEfiStandardTestLibraryGuid, + (VOID **) &StandardLib + ); + + if (EFI_ERROR(Status)) { + StandardLib->RecordAssertion ( + StandardLib, + EFI_TEST_ASSERTION_FAILED, + gTestGenericFailureGuid, + L"BS.HandleProtocol - Handle standard test library", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + return Status; + } + + DebugSupport = (EFI_DEBUG_SUPPORT_PROTOCOL *)ClientInterface; + + if (DebugSupport->Isa != PlatformIsa) { + return EFI_SUCCESS; + } + + Status = DebugSupport->GetMaximumProcessorIndex (DebugSupport, &MaxProcessorIndex); + if (EFI_ERROR(Status)) { + StandardLib->RecordAssertion ( + StandardLib, + EFI_TEST_ASSERTION_FAILED, + gTestGenericFailureGuid, + L"EFI_DEBUG_SUPPORT_PROTOCOL.GetMaximumProcessorIndex", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + return Status; + } + + for (ProcessorIndex = 0; ProcessorIndex <= MaxProcessorIndex; ProcessorIndex++) { + + // + // Assertion Point 3.5.2.1 + // Invoke InvalidateInstructionCache and verify interface correctness. + // + + // The Physical base of the memory range to be invalidated. + Start = 0x0; + + // The minimum number of bytes in the processor's instruction cache to be invalidated. + Length = 0x0; + + Status = DebugSupport->InvalidateInstructionCache (DebugSupport, ProcessorIndex, (VOID*)&Start, Length); + + if (EFI_ERROR(Status)) { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid015, + L"EFI_DEBUG_SUPPORT_PROTOCOL.InvalidateInstructionCache - Invoke this function and verify interface correctness", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + } + + return EFI_SUCCESS; +} diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Loong Arch64/DebugSupportBBTestExceptionCallbackFunction.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Loong Arch64/DebugSupportBBTestExceptionCallbackFunction.c new file mode 100644 index 00000000..add7941a --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Loong Arch64/DebugSupportBBTestExceptionCallbackFunction.c @@ -0,0 +1,273 @@ +/** @file + + Copyright 2006 - 2016 Unified EFI, Inc.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + DebugSupportBBExceptionCallbackFunction.c + +Abstract: + + Interface Function Test Cases of Debug Support Protocol + +--*/ + + +#include "DebugSupportBBTestMain.h" + +extern volatile UINTN InvokedExceptionCallback; +extern volatile UINTN InvokedPeriodicCallback; + +extern EFI_INSTRUCTION_SET_ARCHITECTURE PlatformIsa; + +void +SoftwareBreak ( + void + ) +{ + // Not ported to LoongArch yet + ASSERT (FALSE); +} + +/** + * Entrypoint for EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback() Function Test. + * @param This a pointer of EFI_BB_TEST_PROTOCOL. + * @param ClientInterface a pointer to the interface to be tested. + * @param TestLevel test "thoroughness" control. + * @param SupportHandle a handle containing protocols required. + * @return EFI_SUCCESS Finish the test successfully. + */ +// +// TDS 3.4 +// +EFI_STATUS +BBTestRegisterExceptionCallbackFunctionManualTest ( + IN EFI_BB_TEST_PROTOCOL *This, + IN VOID *ClientInterface, + IN EFI_TEST_LEVEL TestLevel, + IN EFI_HANDLE SupportHandle + ) +{ + EFI_STANDARD_TEST_LIBRARY_PROTOCOL *StandardLib; + EFI_STATUS Status; + EFI_DEBUG_SUPPORT_PROTOCOL *DebugSupport; + EFI_TEST_ASSERTION AssertionType; + + DebugSupport = (EFI_DEBUG_SUPPORT_PROTOCOL *)ClientInterface; + + if (DebugSupport->Isa != PlatformIsa) { + return EFI_SUCCESS; + } + + // + // Get the Standard Library Interface + // + Status = gtBS->HandleProtocol ( + SupportHandle, + &gEfiStandardTestLibraryGuid, + (VOID **) &StandardLib + ); + + if (EFI_ERROR(Status)) { + StandardLib->RecordAssertion ( + StandardLib, + EFI_TEST_ASSERTION_FAILED, + gTestGenericFailureGuid, + L"BS.HandleProtocol - Handle standard test library", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + return Status; + } + + // + // Assertion Point 3.4.2.1 + // Invoke RegisterExceptionCallback() to install an interrupt handler function. + // + InvokedExceptionCallback = FALSE; + Status = DebugSupport->RegisterExceptionCallback (DebugSupport, 0, ExceptionCallback, EXCEPT_LOONGARCH_BRK); + + if ((Status == EFI_SUCCESS) || (Status == EFI_ALREADY_STARTED)) { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } else { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid009, + L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Invoke this function and verify interface correctness", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // + // If the callback function is already registed, return + // + if (EFI_ERROR(Status)) { + return EFI_SUCCESS; + } + + // + // Test the callback function registed. + // + + // + // Call SoftwareBreak to invoke the interrupt handler function. + // + SoftwareBreak (); + + if (InvokedExceptionCallback == FALSE) { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid010, + L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Verify the callback function was invoked.", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // + // Assertion Point 3.4.2.2 + // Invoke RegisterPeriodicCallback() to install the Periodic interrupt handler function. + // Verify the two callback functions can be both invoked. + // + InvokedExceptionCallback = FALSE; + InvokedPeriodicCallback = FALSE; + + Status = DebugSupport->RegisterPeriodicCallback (DebugSupport, 0, PeriodicCallback); + if (EFI_ERROR(Status)) { + return Status; + } + + // + // Wait the PeriodicCallback to be invoked. + // + gtBS->Stall (500000); + + // + // Call SoftwareBreak to invoke the interrupt handler function. + // + SoftwareBreak (); + + if ((InvokedExceptionCallback == TRUE) && (InvokedPeriodicCallback == TRUE)) { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } else { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid011, + L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Verify the two callback functions can be both invoked.", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // + // Uninstall the Periodic callback function. + // + Status = DebugSupport->RegisterPeriodicCallback (DebugSupport, 0, NULL); + if (EFI_ERROR(Status)) { + return Status; + } + + // + // Assertion Point 3.4.2.3 + // Invoke RegisterExceptionCallback() to install another interrupt handler function. + // + Status = DebugSupport->RegisterExceptionCallback (DebugSupport, 0, ExceptionCallback1, EXCEPT_LOONGARCH_BRK); + + if (Status != EFI_ALREADY_STARTED) { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid012, + L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Register another callback function.", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + // + // Assertion Point 3.4.2.4 + // Invoke RegisterExceptionCallback() to unstall the interrupt handler function. + // + Status = DebugSupport->RegisterExceptionCallback (DebugSupport, 0, NULL, EXCEPT_LOONGARCH_BRK); + + if (EFI_ERROR(Status)) { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid013, + L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Invoke this function to uninstall the interrupt handler function", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + InvokedExceptionCallback = FALSE; + + // + // Call SoftwareBreak to invoke the interrupt handler function. + // + SoftwareBreak (); + + if (InvokedExceptionCallback != FALSE) { + AssertionType = EFI_TEST_ASSERTION_FAILED; + } else { + AssertionType = EFI_TEST_ASSERTION_PASSED; + } + + StandardLib->RecordAssertion ( + StandardLib, + AssertionType, + gDebugSupportBBTestFunctionAssertionGuid014, + L"EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback - Verify the callback function wasn't invoked", + L"%a:%d:Status - %r", + __FILE__, + (UINTN)__LINE__, + Status + ); + + return EFI_SUCCESS; +} diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Loong Arch64/PlatformIsa.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Loong Arch64/PlatformIsa.c new file mode 100644 index 00000000..ca61cbe4 --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Loong Arch64/PlatformIsa.c @@ -0,0 +1,29 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + PlatformIsa.c + +Abstract: + + Platform related Isa definition. + +--*/ + +#include "DebugSupportBBTestMain.h" + +EFI_INSTRUCTION_SET_ARCHITECTURE PlatformIsa = IsaLoongArch64; diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/LoongArch64/ TimerInterrupt.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/LoongArch64/ TimerInterrupt.c new file mode 100644 index 00000000..39701257 --- /dev/null +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/LoongArch64/ TimerInterrupt.c @@ -0,0 +1,38 @@ +/** @file + + Copyright 2006 - 2010 Unified EFI, Inc.<BR> + Copyright (c) 2010, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + TimerInterrupt.c + +Abstract: + Ipf Source file for Mask/Unmask TimerInterrupt. + +--*/ + +#include "UsbHcTest.h" + +VOID MaskTimerInterrupt() +{ + // TBD + return; +} + +VOID UnmaskTimerInterrupt() +{ + // TBD + return; +} diff --git a/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/E ntsLibPlat.h b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/E ntsLibPlat.h new file mode 100644 index 00000000..3762eb15 --- /dev/null +++ b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/E ntsLibPlat.h @@ -0,0 +1,56 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2010 - 2012, ARM Ltd. All rights reserved.<BR> + Copyright (c) 2021 Hewlett Packard Enterprise Development LP. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + EntsLibPlat.h + +Abstract: + + LoongArch64 specific defines + +--*/ + +#ifndef _EFI_LIB_PLAT_H_ +#define _EFI_LIB_PLAT_H_ + +#define MIN_ALIGNMENT_SIZE 8 + +VOID +EntsInitializeLibPlatform ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +/*++ + +Routine Description: + + Initialize platform. + +Arguments: + + ImageHandle - The image handle. + SystemTable - The system table. + +Returns: + + None. + +--*/ +; + +#endif diff --git a/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/I nitPlat.c b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/I nitPlat.c new file mode 100644 index 00000000..360e3296 --- /dev/null +++ b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/LoongArch64/I nitPlat.c @@ -0,0 +1,55 @@ +/** @file + + Copyright 2006 - 2012 Unified EFI, Inc.<BR> + Copyright (c) 2010 - 2012, ARM Ltd. All rights reserved.<BR> + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +/*++ + +Module Name: + + InitPlat.c + +Abstract: + + Math routines for compatibility with native EFI library routines. + +--*/ + +#include "Efi.h" +#include "EntsLibPlat.h" + +VOID +EntsInitializeLibPlatform ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +/*++ + +Routine Description: + + Initialize platform. + +Arguments: + + ImageHandle - The image handle. + SystemTable - The system table. + +Returns: + + None. + +--*/ +{ + // + // No platform-specific initializations + // +} -- 2.27.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [edk2-devel] [PATCH v1 1/2] uefi-sct/SctPkg: Add LoongArch64 platform support 2022-12-14 8:36 ` [PATCH v1 1/2] uefi-sct/SctPkg: Add LoongArch64 platform support Chao Li 2023-01-03 5:31 ` 回复: " Gao Jie @ 2023-02-28 14:03 ` G Edhaya Chandran 2023-03-03 10:19 ` G Edhaya Chandran 1 sibling, 1 reply; 9+ messages in thread From: G Edhaya Chandran @ 2023-02-28 14:03 UTC (permalink / raw) To: Chao Li, devel [-- Attachment #1: Type: text/plain, Size: 58 bytes --] Reviewed-by: G Edhaya Chandran <edhaya.chandran@arm.com> [-- Attachment #2: Type: text/html, Size: 64 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [edk2-devel] [PATCH v1 1/2] uefi-sct/SctPkg: Add LoongArch64 platform support 2023-02-28 14:03 ` [edk2-devel] " G Edhaya Chandran @ 2023-03-03 10:19 ` G Edhaya Chandran 0 siblings, 0 replies; 9+ messages in thread From: G Edhaya Chandran @ 2023-03-03 10:19 UTC (permalink / raw) To: G Edhaya Chandran, devel [-- Attachment #1: Type: text/plain, Size: 133 bytes --] The patch is upstreamed through the commit: https://github.com/tianocore/edk2-test/commit/09b7d056d43da01b3abe772946879e3ed5b5eebe [-- Attachment #2: Type: text/html, Size: 137 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v1 2/2] uefi-sct/SctPkg: Enable LoongArch64 building 2022-12-14 8:36 [PATCH v1 0/2] Enable LoongArch64 in uefi-sct Chao Li 2022-12-14 8:36 ` [PATCH v1 1/2] uefi-sct/SctPkg: Add LoongArch64 platform support Chao Li @ 2022-12-14 8:36 ` Chao Li 2023-01-03 5:31 ` 回复: [edk2-devel] " Gao Jie 2023-02-28 14:04 ` G Edhaya Chandran 1 sibling, 2 replies; 9+ messages in thread From: Chao Li @ 2022-12-14 8:36 UTC (permalink / raw) To: devel Cc: G Edhaya Chandran, Barton Gao, Carolyn Gjertsen, Samer El-Haj-Mahmoud, Eric Jin, Supreeth Venkatesh BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4192 Cc: G Edhaya Chandran <Edhaya.Chandran@arm.com> Cc: Barton Gao <gaojie@byosoft.com.cn> Cc: Carolyn Gjertsen <Carolyn.Gjertsen@amd.com> Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com> Cc: Eric Jin <eric.jin@intel.com> Cc: Supreeth Venkatesh <Supreeth.Venkatesh@amd.com> Signed-off-by: Chao Li <lichao@loongson.cn> --- .../Application/InstallSct/InstallSctDef.h | 4 + uefi-sct/SctPkg/Library/SctLib/SctLib.inf | 6 ++ uefi-sct/SctPkg/SCRT/SCRTApp/SCRTApp.inf | 5 + .../SctPkg/SCRT/SCRTDriver/SCRTDriver.inf | 6 ++ .../BlackBoxTest/DebugSupportBBTest.inf | 6 ++ .../Usb2Hc/BlackBoxTest/Usb2HcTest.inf | 4 + .../Protocol/UsbHc/BlackBoxTest/UsbHcTest.inf | 4 + .../SCT/Framework/ENTS/EasLib/EntsLib.inf | 5 + .../SctPkg/Tools/Source/GenBin/GNUmakefile | 4 + uefi-sct/SctPkg/UEFI/IHV_SCT.dsc | 12 ++- uefi-sct/SctPkg/UEFI/Protocol/DebugSupport.h | 101 +++++++++++++++++- uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc | 15 ++- uefi-sct/SctPkg/build.sh | 10 +- 13 files changed, 176 insertions(+), 6 deletions(-) diff --git a/uefi-sct/SctPkg/Application/InstallSct/InstallSctDef.h b/uefi-sct/SctPkg/Application/InstallSct/InstallSctDef.h index 02f0283e..f7974bf6 100644 --- a/uefi-sct/SctPkg/Application/InstallSct/InstallSctDef.h +++ b/uefi-sct/SctPkg/Application/InstallSct/InstallSctDef.h @@ -4,6 +4,7 @@ Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR> Portions copyright (c) 2014, ARM Ltd. All rights reserved.<BR> (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -36,6 +37,9 @@ #elif defined(EFIRISCV64) #define INSTALL_SCT_PLATFORM_SHORT_NAME L"riscv64" #define INSTALL_SCT_PLATFORM_NAME L"RISCV64" +#elif defined(EFILOONGARCH64) + #define INSTALL_SCT_PLATFORM_SHORT_NAME L"loongarch64" + #define INSTALL_SCT_PLATFORM_NAME L"LOONGARCH64" #else #error "Architecture not supported" #endif diff --git a/uefi-sct/SctPkg/Library/SctLib/SctLib.inf b/uefi-sct/SctPkg/Library/SctLib/SctLib.inf index 7527b203..44cb6357 100644 --- a/uefi-sct/SctPkg/Library/SctLib/SctLib.inf +++ b/uefi-sct/SctPkg/Library/SctLib/SctLib.inf @@ -4,6 +4,7 @@ # Copyright (c) 2013 - 2014, ARM Ltd. All rights reserved.<BR> # Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -68,6 +69,11 @@ Riscv64/initplat.c Math.c +[sources.LOONGARCH64] + LoongArch64/SctLibPlat.h + LoongArch64/initplat.c + Math.c + [sources.ia32] ia32/SctLibPlat.h ia32/initplat.c diff --git a/uefi-sct/SctPkg/SCRT/SCRTApp/SCRTApp.inf b/uefi-sct/SctPkg/SCRT/SCRTApp/SCRTApp.inf index 8104a4ef..fc46f3a1 100644 --- a/uefi-sct/SctPkg/SCRT/SCRTApp/SCRTApp.inf +++ b/uefi-sct/SctPkg/SCRT/SCRTApp/SCRTApp.inf @@ -3,6 +3,7 @@ # Copyright 2006 - 2016 Unified EFI, Inc.<BR> # Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -44,6 +45,10 @@ Riscv64/VirtualMemory.c Riscv64/GoVirtual.S | GCC +[sources.LOONGARCH64] + LoongArch64/VirtualMemory.c + LoongArch64/GoVirtual.S | GCC + [sources.ia32] ia32/VirtualMemory.c ia32/GoVirtual.asm | MSFT diff --git a/uefi-sct/SctPkg/SCRT/SCRTDriver/SCRTDriver.inf b/uefi-sct/SctPkg/SCRT/SCRTDriver/SCRTDriver.inf index a3ef454e..fe905508 100644 --- a/uefi-sct/SctPkg/SCRT/SCRTDriver/SCRTDriver.inf +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/SCRTDriver.inf @@ -3,6 +3,7 @@ # Copyright 2006 - 2016 Unified EFI, Inc.<BR> # Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -75,6 +76,11 @@ Riscv64/Dump.c Riscv64/Debug.c +[sources.LOONGARCH64] + LoongArch64/Io.c + LoongArch64/Dump.c + LoongArch64/Debug.c + [sources.common] Guid.h Guid.c diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/DebugSupportBBTest.inf b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/DebugSupportBBTest.inf index 03bf7ccf..9127ee5f 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/DebugSupportBBTest.inf +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/DebugSupportBBTest.inf @@ -4,6 +4,7 @@ # Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2019, ARM Ltd. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -73,6 +74,11 @@ Riscv64/DebugSupportBBTestExceptionCallbackFunction.c Riscv64/DebugSupportBBTestCacheFunction.c +[sources.LOONGARCH64] + LoongArch64/PlatformIsa.c + LoongArch64/DebugSupportBBTestExceptionCallbackFunction.c + LoongArch64/DebugSupportBBTestCacheFunction.c + [Packages] SctPkg/SctPkg.dec SctPkg/UEFI/UEFI.dec diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/Usb2Hc/BlackBoxTest/Usb2HcTest.inf b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/Usb2Hc/BlackBoxTest/Usb2HcTest.inf index 95ae593e..451c41c9 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/Usb2Hc/BlackBoxTest/Usb2HcTest.inf +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/Usb2Hc/BlackBoxTest/Usb2HcTest.inf @@ -3,6 +3,7 @@ # Copyright 2006 - 2016 Unified EFI, Inc.<BR> # Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -59,6 +60,9 @@ #[sources.Riscv64] # IPF/TimerInterrupt.c +#[sources.LOONGARCH64] +# IPF/TimerInterrupt.c + [Packages] MdePkg/MdePkg.dec SctPkg/SctPkg.dec diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/UsbHcTest.inf b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/UsbHcTest.inf index d3bcd5ce..8ec6ef3b 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/UsbHcTest.inf +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/UsbHcTest.inf @@ -3,6 +3,7 @@ # Copyright 2006 - 2012 Unified EFI, Inc.<BR> # Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -59,6 +60,9 @@ [sources.RISCV64] Riscv64/TimerInterrupt.c +[sources.LOONGARCH64] + LoongArch64/TimerInterrupt.c + [Packages] MdePkg/MdePkg.dec SctPkg/SctPkg.dec diff --git a/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/EntsLib.inf b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/EntsLib.inf index b60e90b2..9165bc1f 100644 --- a/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/EntsLib.inf +++ b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/EntsLib.inf @@ -4,6 +4,7 @@ # Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2019, ARM Ltd. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -71,6 +72,10 @@ Riscv64/EntsLibPlat.h Riscv64/InitPlat.c +[sources.LOONGARCH64] + LoongArch64/EntsLibPlat.h + LoongArch64/InitPlat.c + [Packages] MdePkg/MdePkg.dec SctPkg/SctPkg.dec diff --git a/uefi-sct/SctPkg/Tools/Source/GenBin/GNUmakefile b/uefi-sct/SctPkg/Tools/Source/GenBin/GNUmakefile index c492d441..44089903 100644 --- a/uefi-sct/SctPkg/Tools/Source/GenBin/GNUmakefile +++ b/uefi-sct/SctPkg/Tools/Source/GenBin/GNUmakefile @@ -2,6 +2,7 @@ # Copyright 2006 - 2010 Unified EFI, Inc.<BR> # Copyright (c) 2010 Intel Corporation. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -35,6 +36,9 @@ ifndef ARCH ifneq (,$(findstring riscv64,$(uname_m))) ARCH=RISCV64 endif + ifneq (,$(findstring loongarch64,$(uname_m))) + ARCH=LOONGARCH64 + endif ifndef ARCH $(info Could not detected ARCH from uname results) $(error ARCH is not defined!) diff --git a/uefi-sct/SctPkg/UEFI/IHV_SCT.dsc b/uefi-sct/SctPkg/UEFI/IHV_SCT.dsc index 7a4393e0..ce55c35f 100644 --- a/uefi-sct/SctPkg/UEFI/IHV_SCT.dsc +++ b/uefi-sct/SctPkg/UEFI/IHV_SCT.dsc @@ -4,6 +4,7 @@ # Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2019,Microchip Technology Inc.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -43,7 +44,7 @@ PLATFORM_VERSION = 0.1 DSC_SPECIFICATION = 0x00010005 OUTPUT_DIRECTORY = Build/IhvSct - SUPPORTED_ARCHITECTURES = IA32|X64|ARM|AARCH64|RISCV64 + SUPPORTED_ARCHITECTURES = IA32|X64|ARM|AARCH64|RISCV64|LOONGARCH64 BUILD_TARGETS = DEBUG|RELEASE SKUID_IDENTIFIER = DEFAULT @@ -116,6 +117,12 @@ *_*_RISCV64_APP_FLAGS = -D EFIRISCV64 $(GCC_VER_MACRO) *_*_RISCV64_PP_FLAGS = -D EFIRISCV64 $(GCC_VER_MACRO) + *_*_LOONGARCH64_CC_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + GCC:*_*_LOONGARCH64_CC_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) -ffreestanding -nostdinc -nostdlib -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error + *_*_LOONGARCH64_VFRPP_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + *_*_LOONGARCH64_APP_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + *_*_LOONGARCH64_PP_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + DEBUG_*_*_CC_FLAGS = -DEFI_DEBUG RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG @@ -134,6 +141,9 @@ [Libraries.RISCV64] ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf +[Libraries.LOONGARCH64] + ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf + [Libraries.IA32,Libraries.X64] !include MdePkg/MdeLibs.dsc.inc diff --git a/uefi-sct/SctPkg/UEFI/Protocol/DebugSupport.h b/uefi-sct/SctPkg/UEFI/Protocol/DebugSupport.h index 1963d619..1793f27d 100644 --- a/uefi-sct/SctPkg/UEFI/Protocol/DebugSupport.h +++ b/uefi-sct/SctPkg/UEFI/Protocol/DebugSupport.h @@ -662,6 +662,98 @@ typedef struct { UINT64 X31; } EFI_SYSTEM_CONTEXT_RISCV64; +// +// LoongArch processor exception types. +// +#define EXCEPT_LOONGARCH_INT 0 +#define EXCEPT_LOONGARCH_PIL 1 +#define EXCEPT_LOONGARCH_PIS 2 +#define EXCEPT_LOONGARCH_PIF 3 +#define EXCEPT_LOONGARCH_PME 4 +#define EXCEPT_LOONGARCH_PNR 5 +#define EXCEPT_LOONGARCH_PNX 6 +#define EXCEPT_LOONGARCH_PPI 7 +#define EXCEPT_LOONGARCH_ADE 8 +#define EXCEPT_LOONGARCH_ALE 9 +#define EXCEPT_LOONGARCH_BCE 10 +#define EXCEPT_LOONGARCH_SYS 11 +#define EXCEPT_LOONGARCH_BRK 12 +#define EXCEPT_LOONGARCH_INE 13 +#define EXCEPT_LOONGARCH_IPE 14 +#define EXCEPT_LOONGARCH_FPD 15 +#define EXCEPT_LOONGARCH_SXD 16 +#define EXCEPT_LOONGARCH_ASXD 17 +#define EXCEPT_LOONGARCH_FPE 18 +#define EXCEPT_LOONGARCH_TBR 64 // For code only, there is no such type in the ISA spec, the TLB refill is defined for an independent exception. + +// +// LoongArch processor Interrupt types. +// +#define EXCEPT_LOONGARCH_INT_SIP0 0 +#define EXCEPT_LOONGARCH_INT_SIP1 1 +#define EXCEPT_LOONGARCH_INT_IP0 2 +#define EXCEPT_LOONGARCH_INT_IP1 3 +#define EXCEPT_LOONGARCH_INT_IP2 4 +#define EXCEPT_LOONGARCH_INT_IP3 5 +#define EXCEPT_LOONGARCH_INT_IP4 6 +#define EXCEPT_LOONGARCH_INT_IP5 7 +#define EXCEPT_LOONGARCH_INT_IP6 8 +#define EXCEPT_LOONGARCH_INT_IP7 9 +#define EXCEPT_LOONGARCH_INT_PMC 10 +#define EXCEPT_LOONGARCH_INT_TIMER 11 +#define EXCEPT_LOONGARCH_INT_IPI 12 + +// +// For coding convenience, define the maximum valid +// LoongArch interrupt. +// +#define MAX_LOONGARCH_INTERRUPT 14 + +typedef struct { + UINT64 R0; + UINT64 R1; + UINT64 R2; + UINT64 R3; + UINT64 R4; + UINT64 R5; + UINT64 R6; + UINT64 R7; + UINT64 R8; + UINT64 R9; + UINT64 R10; + UINT64 R11; + UINT64 R12; + UINT64 R13; + UINT64 R14; + UINT64 R15; + UINT64 R16; + UINT64 R17; + UINT64 R18; + UINT64 R19; + UINT64 R20; + UINT64 R21; + UINT64 R22; + UINT64 R23; + UINT64 R24; + UINT64 R25; + UINT64 R26; + UINT64 R27; + UINT64 R28; + UINT64 R29; + UINT64 R30; + UINT64 R31; + + UINT64 CRMD; // CuRrent MoDe information + UINT64 PRMD; // PRe-exception MoDe information + UINT64 EUEN; // Extended component Unit ENable + UINT64 MISC; // MISCellaneous controller + UINT64 ECFG; // Exception ConFiGuration + UINT64 ESTAT; // Exception STATus + UINT64 ERA; // Exception Return Address + UINT64 BADV; // BAD Virtual address + UINT64 BADI; // BAD Instruction +} EFI_SYSTEM_CONTEXT_LOONGARCH64; + // // Universal EFI_SYSTEM_CONTEXT definition // @@ -674,6 +766,7 @@ union { EFI_SYSTEM_CONTEXT_ARM *SystemContextArm; EFI_SYSTEM_CONTEXT_AARCH64 *SystemContextAArch64; EFI_SYSTEM_CONTEXT_RISCV64 *SystemContextRiscV64; + EFI_SYSTEM_CONTEXT_LOONGARCH64 *SystemContextLoongArch64; } EFI_SYSTEM_CONTEXT; // @@ -702,6 +795,7 @@ VOID #define IMAGE_FILE_MACHINE_ARMTHUMB_MIXED 0x01c2 #define IMAGE_FILE_MACHINE_ARM64 0xAA64 #define IMAGE_FILE_MACHINE_RISCV64 0x5064 +#define IMAGE_FILE_MACHINE_LOONGARCH64 0x6264 typedef @@ -710,9 +804,10 @@ enum { IsaX64 = IMAGE_FILE_MACHINE_X64, IsaIpf = IMAGE_FILE_MACHINE_IA64, IsaEbc = IMAGE_FILE_MACHINE_EBC, - IsaArm = IMAGE_FILE_MACHINE_ARMTHUMB_MIXED, ///< 0x01c2 - IsaAArch64 = IMAGE_FILE_MACHINE_ARM64, ///< 0xAA64 - IsaRiscv64 = IMAGE_FILE_MACHINE_RISCV64 ///< 0x5064 + IsaArm = IMAGE_FILE_MACHINE_ARMTHUMB_MIXED, ///< 0x01c2 + IsaAArch64 = IMAGE_FILE_MACHINE_ARM64, ///< 0xAA64 + IsaRiscv64 = IMAGE_FILE_MACHINE_RISCV64, ///< 0x5064 + IsaLoongArch64 = IMAGE_FILE_MACHINE_LOONGARCH64 ///< 0x6264 } EFI_INSTRUCTION_SET_ARCHITECTURE; typedef struct _EFI_DEBUG_SUPPORT_PROTOCOL EFI_DEBUG_SUPPORT_PROTOCOL;; diff --git a/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc b/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc index 88d7a317..58f35ce4 100644 --- a/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc +++ b/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc @@ -3,6 +3,7 @@ # Copyright 2006 - 2017 Unified EFI, Inc.<BR> # Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2017 - 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -42,7 +43,7 @@ PLATFORM_VERSION = 0.1 DSC_SPECIFICATION = 0x00010005 OUTPUT_DIRECTORY = Build/UefiSct - SUPPORTED_ARCHITECTURES = IA32|X64|ARM|AARCH64|RISCV64 + SUPPORTED_ARCHITECTURES = IA32|X64|ARM|AARCH64|RISCV64|LOONGARCH64 BUILD_TARGETS = DEBUG|RELEASE SKUID_IDENTIFIER = DEFAULT @@ -118,6 +119,12 @@ *_*_RISCV64_APP_FLAGS = -D EFIRISCV64 $(GCC_VER_MACRO) *_*_RISCV64_PP_FLAGS = -D EFIRISCV64 $(GCC_VER_MACRO) + *_*_LOONGARCH64_CC_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + GCC:*_*_LOONGARCH64_CC_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) -ffreestanding -nostdinc -nostdlib -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error + *_*_LOONGARCH64_VFRPP_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + *_*_LOONGARCH64_APP_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + *_*_LOONGARCH64_PP_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + DEBUG_*_*_CC_FLAGS = -DEFI_DEBUG RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG @@ -138,6 +145,9 @@ [Libraries.RISCV64] ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf +[Libraries.LOONGARCH64] + ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf + !include MdePkg/MdeLibs.dsc.inc [LibraryClasses.common] @@ -171,6 +181,9 @@ [LibraryClasses.RISCV64] NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf +[LibraryClasses.LOONGARCH64] + NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf + ############################################################################### # # These are the components that will be built by the master makefile diff --git a/uefi-sct/SctPkg/build.sh b/uefi-sct/SctPkg/build.sh index 79cb69c0..901bdc06 100755 --- a/uefi-sct/SctPkg/build.sh +++ b/uefi-sct/SctPkg/build.sh @@ -25,6 +25,8 @@ function get_build_arch BUILD_ARCH=AARCH64;; riscv64*) BUILD_ARCH=RISCV64;; + loongarch64*) + BUILD_ARCH=LOONGARCH64;; *) BUILD_ARCH=other;; esac @@ -56,6 +58,12 @@ function set_cross_compile else TEMP_CROSS_COMPILE=riscv64-unknown-elf- fi + elif [ "$SCT_TARGET_ARCH" == "LOONGARCH64" ]; then + if [ X"$CROSS_COMPILE_64" != X"" ]; then + TEMP_CROSS_COMPILE="$CROSS_COMPILE_64" + else + TEMP_CROSS_COMPILE=loongarch64-unknown-linux-gnu- + fi else echo "Unsupported target architecture '$SCT_TARGET_ARCH'!" >&2 fi @@ -119,7 +127,7 @@ PrintUsage() { #Print Help # echo "Usage:" - echo " $0 <architecture (ARM, AARCH64, X64, RISCV64, etc)> \ + echo " $0 <architecture (ARM, AARCH64, X64, RISCV64, LOONGARCH64, etc)> \ <toolchain name (RVCT or ARMGCC or GCC*)> \ [build type (RELEASE OR DEBUG, DEFAULT: DEBUG)]" } -- 2.27.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* 回复: [edk2-devel] [PATCH v1 2/2] uefi-sct/SctPkg: Enable LoongArch64 building 2022-12-14 8:36 ` [PATCH v1 2/2] uefi-sct/SctPkg: Enable LoongArch64 building Chao Li @ 2023-01-03 5:31 ` Gao Jie 2023-02-28 14:04 ` G Edhaya Chandran 1 sibling, 0 replies; 9+ messages in thread From: Gao Jie @ 2023-01-03 5:31 UTC (permalink / raw) To: devel, lichao Cc: 'G Edhaya Chandran', 'Carolyn Gjertsen', 'Samer El-Haj-Mahmoud', 'Eric Jin', 'Supreeth Venkatesh' Reviewed-by: Barton Gao <gaojie@byosoft.com.cn> Thanks Barton -----邮件原件----- 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Chao Li 发送时间: 2022年12月14日 16:37 收件人: devel@edk2.groups.io 抄送: G Edhaya Chandran <Edhaya.Chandran@arm.com>; Barton Gao <gaojie@byosoft.com.cn>; Carolyn Gjertsen <Carolyn.Gjertsen@amd.com>; Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>; Eric Jin <eric.jin@intel.com>; Supreeth Venkatesh <Supreeth.Venkatesh@amd.com> 主题: [edk2-devel] [PATCH v1 2/2] uefi-sct/SctPkg: Enable LoongArch64 building BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4192 Cc: G Edhaya Chandran <Edhaya.Chandran@arm.com> Cc: Barton Gao <gaojie@byosoft.com.cn> Cc: Carolyn Gjertsen <Carolyn.Gjertsen@amd.com> Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com> Cc: Eric Jin <eric.jin@intel.com> Cc: Supreeth Venkatesh <Supreeth.Venkatesh@amd.com> Signed-off-by: Chao Li <lichao@loongson.cn> --- .../Application/InstallSct/InstallSctDef.h | 4 + uefi-sct/SctPkg/Library/SctLib/SctLib.inf | 6 ++ uefi-sct/SctPkg/SCRT/SCRTApp/SCRTApp.inf | 5 + .../SctPkg/SCRT/SCRTDriver/SCRTDriver.inf | 6 ++ .../BlackBoxTest/DebugSupportBBTest.inf | 6 ++ .../Usb2Hc/BlackBoxTest/Usb2HcTest.inf | 4 + .../Protocol/UsbHc/BlackBoxTest/UsbHcTest.inf | 4 + .../SCT/Framework/ENTS/EasLib/EntsLib.inf | 5 + .../SctPkg/Tools/Source/GenBin/GNUmakefile | 4 + uefi-sct/SctPkg/UEFI/IHV_SCT.dsc | 12 ++- uefi-sct/SctPkg/UEFI/Protocol/DebugSupport.h | 101 +++++++++++++++++- uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc | 15 ++- uefi-sct/SctPkg/build.sh | 10 +- 13 files changed, 176 insertions(+), 6 deletions(-) diff --git a/uefi-sct/SctPkg/Application/InstallSct/InstallSctDef.h b/uefi-sct/SctPkg/Application/InstallSct/InstallSctDef.h index 02f0283e..f7974bf6 100644 --- a/uefi-sct/SctPkg/Application/InstallSct/InstallSctDef.h +++ b/uefi-sct/SctPkg/Application/InstallSct/InstallSctDef.h @@ -4,6 +4,7 @@ Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR> Portions copyright (c) 2014, ARM Ltd. All rights reserved.<BR> (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> + Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -36,6 +37,9 @@ #elif defined(EFIRISCV64) #define INSTALL_SCT_PLATFORM_SHORT_NAME L"riscv64" #define INSTALL_SCT_PLATFORM_NAME L"RISCV64" +#elif defined(EFILOONGARCH64) + #define INSTALL_SCT_PLATFORM_SHORT_NAME L"loongarch64" + #define INSTALL_SCT_PLATFORM_NAME L"LOONGARCH64" #else #error "Architecture not supported" #endif diff --git a/uefi-sct/SctPkg/Library/SctLib/SctLib.inf b/uefi-sct/SctPkg/Library/SctLib/SctLib.inf index 7527b203..44cb6357 100644 --- a/uefi-sct/SctPkg/Library/SctLib/SctLib.inf +++ b/uefi-sct/SctPkg/Library/SctLib/SctLib.inf @@ -4,6 +4,7 @@ # Copyright (c) 2013 - 2014, ARM Ltd. All rights reserved.<BR> # Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -68,6 +69,11 @@ Riscv64/initplat.c Math.c +[sources.LOONGARCH64] + LoongArch64/SctLibPlat.h + LoongArch64/initplat.c + Math.c + [sources.ia32] ia32/SctLibPlat.h ia32/initplat.c diff --git a/uefi-sct/SctPkg/SCRT/SCRTApp/SCRTApp.inf b/uefi-sct/SctPkg/SCRT/SCRTApp/SCRTApp.inf index 8104a4ef..fc46f3a1 100644 --- a/uefi-sct/SctPkg/SCRT/SCRTApp/SCRTApp.inf +++ b/uefi-sct/SctPkg/SCRT/SCRTApp/SCRTApp.inf @@ -3,6 +3,7 @@ # Copyright 2006 - 2016 Unified EFI, Inc.<BR> # Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -44,6 +45,10 @@ Riscv64/VirtualMemory.c Riscv64/GoVirtual.S | GCC +[sources.LOONGARCH64] + LoongArch64/VirtualMemory.c + LoongArch64/GoVirtual.S | GCC + [sources.ia32] ia32/VirtualMemory.c ia32/GoVirtual.asm | MSFT diff --git a/uefi-sct/SctPkg/SCRT/SCRTDriver/SCRTDriver.inf b/uefi-sct/SctPkg/SCRT/SCRTDriver/SCRTDriver.inf index a3ef454e..fe905508 100644 --- a/uefi-sct/SctPkg/SCRT/SCRTDriver/SCRTDriver.inf +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/SCRTDriver.inf @@ -3,6 +3,7 @@ # Copyright 2006 - 2016 Unified EFI, Inc.<BR> # Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -75,6 +76,11 @@ Riscv64/Dump.c Riscv64/Debug.c +[sources.LOONGARCH64] + LoongArch64/Io.c + LoongArch64/Dump.c + LoongArch64/Debug.c + [sources.common] Guid.h Guid.c diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Debug SupportBBTest.inf b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Debug SupportBBTest.inf index 03bf7ccf..9127ee5f 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Debug SupportBBTest.inf +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Debug SupportBBTest.inf @@ -4,6 +4,7 @@ # Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2019, ARM Ltd. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -73,6 +74,11 @@ Riscv64/DebugSupportBBTestExceptionCallbackFunction.c Riscv64/DebugSupportBBTestCacheFunction.c +[sources.LOONGARCH64] + LoongArch64/PlatformIsa.c + LoongArch64/DebugSupportBBTestExceptionCallbackFunction.c + LoongArch64/DebugSupportBBTestCacheFunction.c + [Packages] SctPkg/SctPkg.dec SctPkg/UEFI/UEFI.dec diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/Usb2Hc/BlackBoxTest/Usb2HcTest. inf b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/Usb2Hc/BlackBoxTest/Usb2HcTest. inf index 95ae593e..451c41c9 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/Usb2Hc/BlackBoxTest/Usb2HcTest. inf +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/Usb2Hc/BlackBoxTest/Usb2HcTest. inf @@ -3,6 +3,7 @@ # Copyright 2006 - 2016 Unified EFI, Inc.<BR> # Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -59,6 +60,9 @@ #[sources.Riscv64] # IPF/TimerInterrupt.c +#[sources.LOONGARCH64] +# IPF/TimerInterrupt.c + [Packages] MdePkg/MdePkg.dec SctPkg/SctPkg.dec diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/UsbHcTest.in f b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/UsbHcTest. inf index d3bcd5ce..8ec6ef3b 100644 --- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/UsbHcTest.in f +++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/UsbHcTest.in f @@ -3,6 +3,7 @@ # Copyright 2006 - 2012 Unified EFI, Inc.<BR> # Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -59,6 +60,9 @@ [sources.RISCV64] Riscv64/TimerInterrupt.c +[sources.LOONGARCH64] + LoongArch64/TimerInterrupt.c + [Packages] MdePkg/MdePkg.dec SctPkg/SctPkg.dec diff --git a/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/EntsLib.inf b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/EntsLib.inf index b60e90b2..9165bc1f 100644 --- a/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/EntsLib.inf +++ b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/EntsLib.inf @@ -4,6 +4,7 @@ # Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2019, ARM Ltd. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -71,6 +72,10 @@ Riscv64/EntsLibPlat.h Riscv64/InitPlat.c +[sources.LOONGARCH64] + LoongArch64/EntsLibPlat.h + LoongArch64/InitPlat.c + [Packages] MdePkg/MdePkg.dec SctPkg/SctPkg.dec diff --git a/uefi-sct/SctPkg/Tools/Source/GenBin/GNUmakefile b/uefi-sct/SctPkg/Tools/Source/GenBin/GNUmakefile index c492d441..44089903 100644 --- a/uefi-sct/SctPkg/Tools/Source/GenBin/GNUmakefile +++ b/uefi-sct/SctPkg/Tools/Source/GenBin/GNUmakefile @@ -2,6 +2,7 @@ # Copyright 2006 - 2010 Unified EFI, Inc.<BR> # Copyright (c) 2010 Intel Corporation. All rights reserved.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -35,6 +36,9 @@ ifndef ARCH ifneq (,$(findstring riscv64,$(uname_m))) ARCH=RISCV64 endif + ifneq (,$(findstring loongarch64,$(uname_m))) + ARCH=LOONGARCH64 + endif ifndef ARCH $(info Could not detected ARCH from uname results) $(error ARCH is not defined!) diff --git a/uefi-sct/SctPkg/UEFI/IHV_SCT.dsc b/uefi-sct/SctPkg/UEFI/IHV_SCT.dsc index 7a4393e0..ce55c35f 100644 --- a/uefi-sct/SctPkg/UEFI/IHV_SCT.dsc +++ b/uefi-sct/SctPkg/UEFI/IHV_SCT.dsc @@ -4,6 +4,7 @@ # Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2019,Microchip Technology Inc.<BR> # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -43,7 +44,7 @@ PLATFORM_VERSION = 0.1 DSC_SPECIFICATION = 0x00010005 OUTPUT_DIRECTORY = Build/IhvSct - SUPPORTED_ARCHITECTURES = IA32|X64|ARM|AARCH64|RISCV64 + SUPPORTED_ARCHITECTURES = IA32|X64|ARM|AARCH64|RISCV64|LOONGARCH64 BUILD_TARGETS = DEBUG|RELEASE SKUID_IDENTIFIER = DEFAULT @@ -116,6 +117,12 @@ *_*_RISCV64_APP_FLAGS = -D EFIRISCV64 $(GCC_VER_MACRO) *_*_RISCV64_PP_FLAGS = -D EFIRISCV64 $(GCC_VER_MACRO) + *_*_LOONGARCH64_CC_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + GCC:*_*_LOONGARCH64_CC_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) -ffreestanding -nostdinc -nostdlib -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error + *_*_LOONGARCH64_VFRPP_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + *_*_LOONGARCH64_APP_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + *_*_LOONGARCH64_PP_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + DEBUG_*_*_CC_FLAGS = -DEFI_DEBUG RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG @@ -134,6 +141,9 @@ [Libraries.RISCV64] ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf +[Libraries.LOONGARCH64] + ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf + [Libraries.IA32,Libraries.X64] !include MdePkg/MdeLibs.dsc.inc diff --git a/uefi-sct/SctPkg/UEFI/Protocol/DebugSupport.h b/uefi-sct/SctPkg/UEFI/Protocol/DebugSupport.h index 1963d619..1793f27d 100644 --- a/uefi-sct/SctPkg/UEFI/Protocol/DebugSupport.h +++ b/uefi-sct/SctPkg/UEFI/Protocol/DebugSupport.h @@ -662,6 +662,98 @@ typedef struct { UINT64 X31; } EFI_SYSTEM_CONTEXT_RISCV64; +// +// LoongArch processor exception types. +// +#define EXCEPT_LOONGARCH_INT 0 +#define EXCEPT_LOONGARCH_PIL 1 +#define EXCEPT_LOONGARCH_PIS 2 +#define EXCEPT_LOONGARCH_PIF 3 +#define EXCEPT_LOONGARCH_PME 4 +#define EXCEPT_LOONGARCH_PNR 5 +#define EXCEPT_LOONGARCH_PNX 6 +#define EXCEPT_LOONGARCH_PPI 7 +#define EXCEPT_LOONGARCH_ADE 8 +#define EXCEPT_LOONGARCH_ALE 9 +#define EXCEPT_LOONGARCH_BCE 10 +#define EXCEPT_LOONGARCH_SYS 11 +#define EXCEPT_LOONGARCH_BRK 12 +#define EXCEPT_LOONGARCH_INE 13 +#define EXCEPT_LOONGARCH_IPE 14 +#define EXCEPT_LOONGARCH_FPD 15 +#define EXCEPT_LOONGARCH_SXD 16 +#define EXCEPT_LOONGARCH_ASXD 17 +#define EXCEPT_LOONGARCH_FPE 18 +#define EXCEPT_LOONGARCH_TBR 64 // For code only, there is no such type in the ISA spec, the TLB refill is defined for an independent exception. + +// +// LoongArch processor Interrupt types. +// +#define EXCEPT_LOONGARCH_INT_SIP0 0 +#define EXCEPT_LOONGARCH_INT_SIP1 1 +#define EXCEPT_LOONGARCH_INT_IP0 2 +#define EXCEPT_LOONGARCH_INT_IP1 3 +#define EXCEPT_LOONGARCH_INT_IP2 4 +#define EXCEPT_LOONGARCH_INT_IP3 5 +#define EXCEPT_LOONGARCH_INT_IP4 6 +#define EXCEPT_LOONGARCH_INT_IP5 7 +#define EXCEPT_LOONGARCH_INT_IP6 8 +#define EXCEPT_LOONGARCH_INT_IP7 9 +#define EXCEPT_LOONGARCH_INT_PMC 10 +#define EXCEPT_LOONGARCH_INT_TIMER 11 +#define EXCEPT_LOONGARCH_INT_IPI 12 + +// +// For coding convenience, define the maximum valid +// LoongArch interrupt. +// +#define MAX_LOONGARCH_INTERRUPT 14 + +typedef struct { + UINT64 R0; + UINT64 R1; + UINT64 R2; + UINT64 R3; + UINT64 R4; + UINT64 R5; + UINT64 R6; + UINT64 R7; + UINT64 R8; + UINT64 R9; + UINT64 R10; + UINT64 R11; + UINT64 R12; + UINT64 R13; + UINT64 R14; + UINT64 R15; + UINT64 R16; + UINT64 R17; + UINT64 R18; + UINT64 R19; + UINT64 R20; + UINT64 R21; + UINT64 R22; + UINT64 R23; + UINT64 R24; + UINT64 R25; + UINT64 R26; + UINT64 R27; + UINT64 R28; + UINT64 R29; + UINT64 R30; + UINT64 R31; + + UINT64 CRMD; // CuRrent MoDe information + UINT64 PRMD; // PRe-exception MoDe information + UINT64 EUEN; // Extended component Unit ENable + UINT64 MISC; // MISCellaneous controller + UINT64 ECFG; // Exception ConFiGuration + UINT64 ESTAT; // Exception STATus + UINT64 ERA; // Exception Return Address + UINT64 BADV; // BAD Virtual address + UINT64 BADI; // BAD Instruction +} EFI_SYSTEM_CONTEXT_LOONGARCH64; + // // Universal EFI_SYSTEM_CONTEXT definition // @@ -674,6 +766,7 @@ union { EFI_SYSTEM_CONTEXT_ARM *SystemContextArm; EFI_SYSTEM_CONTEXT_AARCH64 *SystemContextAArch64; EFI_SYSTEM_CONTEXT_RISCV64 *SystemContextRiscV64; + EFI_SYSTEM_CONTEXT_LOONGARCH64 *SystemContextLoongArch64; } EFI_SYSTEM_CONTEXT; // @@ -702,6 +795,7 @@ VOID #define IMAGE_FILE_MACHINE_ARMTHUMB_MIXED 0x01c2 #define IMAGE_FILE_MACHINE_ARM64 0xAA64 #define IMAGE_FILE_MACHINE_RISCV64 0x5064 +#define IMAGE_FILE_MACHINE_LOONGARCH64 0x6264 typedef @@ -710,9 +804,10 @@ enum { IsaX64 = IMAGE_FILE_MACHINE_X64, IsaIpf = IMAGE_FILE_MACHINE_IA64, IsaEbc = IMAGE_FILE_MACHINE_EBC, - IsaArm = IMAGE_FILE_MACHINE_ARMTHUMB_MIXED, ///< 0x01c2 - IsaAArch64 = IMAGE_FILE_MACHINE_ARM64, ///< 0xAA64 - IsaRiscv64 = IMAGE_FILE_MACHINE_RISCV64 ///< 0x5064 + IsaArm = IMAGE_FILE_MACHINE_ARMTHUMB_MIXED, ///< 0x01c2 + IsaAArch64 = IMAGE_FILE_MACHINE_ARM64, ///< 0xAA64 + IsaRiscv64 = IMAGE_FILE_MACHINE_RISCV64, ///< 0x5064 + IsaLoongArch64 = IMAGE_FILE_MACHINE_LOONGARCH64 ///< 0x6264 } EFI_INSTRUCTION_SET_ARCHITECTURE; typedef struct _EFI_DEBUG_SUPPORT_PROTOCOL EFI_DEBUG_SUPPORT_PROTOCOL;; diff --git a/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc b/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc index 88d7a317..58f35ce4 100644 --- a/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc +++ b/uefi-sct/SctPkg/UEFI/UEFI_SCT.dsc @@ -3,6 +3,7 @@ # Copyright 2006 - 2017 Unified EFI, Inc.<BR> # Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2017 - 2021 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -42,7 +43,7 @@ PLATFORM_VERSION = 0.1 DSC_SPECIFICATION = 0x00010005 OUTPUT_DIRECTORY = Build/UefiSct - SUPPORTED_ARCHITECTURES = IA32|X64|ARM|AARCH64|RISCV64 + SUPPORTED_ARCHITECTURES = IA32|X64|ARM|AARCH64|RISCV64|LOONGARCH64 BUILD_TARGETS = DEBUG|RELEASE SKUID_IDENTIFIER = DEFAULT @@ -118,6 +119,12 @@ *_*_RISCV64_APP_FLAGS = -D EFIRISCV64 $(GCC_VER_MACRO) *_*_RISCV64_PP_FLAGS = -D EFIRISCV64 $(GCC_VER_MACRO) + *_*_LOONGARCH64_CC_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + GCC:*_*_LOONGARCH64_CC_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) -ffreestanding -nostdinc -nostdlib -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error + *_*_LOONGARCH64_VFRPP_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + *_*_LOONGARCH64_APP_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + *_*_LOONGARCH64_PP_FLAGS = -D EFILOONGARCH64 $(GCC_VER_MACRO) + DEBUG_*_*_CC_FLAGS = -DEFI_DEBUG RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG @@ -138,6 +145,9 @@ [Libraries.RISCV64] ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf +[Libraries.LOONGARCH64] + ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf + !include MdePkg/MdeLibs.dsc.inc [LibraryClasses.common] @@ -171,6 +181,9 @@ [LibraryClasses.RISCV64] NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf +[LibraryClasses.LOONGARCH64] + NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf + ############################################################################ ### # # These are the components that will be built by the master makefile diff --git a/uefi-sct/SctPkg/build.sh b/uefi-sct/SctPkg/build.sh index 79cb69c0..901bdc06 100755 --- a/uefi-sct/SctPkg/build.sh +++ b/uefi-sct/SctPkg/build.sh @@ -25,6 +25,8 @@ function get_build_arch BUILD_ARCH=AARCH64;; riscv64*) BUILD_ARCH=RISCV64;; + loongarch64*) + BUILD_ARCH=LOONGARCH64;; *) BUILD_ARCH=other;; esac @@ -56,6 +58,12 @@ function set_cross_compile else TEMP_CROSS_COMPILE=riscv64-unknown-elf- fi + elif [ "$SCT_TARGET_ARCH" == "LOONGARCH64" ]; then + if [ X"$CROSS_COMPILE_64" != X"" ]; then + TEMP_CROSS_COMPILE="$CROSS_COMPILE_64" + else + TEMP_CROSS_COMPILE=loongarch64-unknown-linux-gnu- + fi else echo "Unsupported target architecture '$SCT_TARGET_ARCH'!" >&2 fi @@ -119,7 +127,7 @@ PrintUsage() { #Print Help # echo "Usage:" - echo " $0 <architecture (ARM, AARCH64, X64, RISCV64, etc)> \ + echo " $0 <architecture (ARM, AARCH64, X64, RISCV64, LOONGARCH64, etc)> \ <toolchain name (RVCT or ARMGCC or GCC*)> \ [build type (RELEASE OR DEBUG, DEFAULT: DEBUG)]" } -- 2.27.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [edk2-devel] [PATCH v1 2/2] uefi-sct/SctPkg: Enable LoongArch64 building 2022-12-14 8:36 ` [PATCH v1 2/2] uefi-sct/SctPkg: Enable LoongArch64 building Chao Li 2023-01-03 5:31 ` 回复: [edk2-devel] " Gao Jie @ 2023-02-28 14:04 ` G Edhaya Chandran 2023-03-03 10:18 ` G Edhaya Chandran 1 sibling, 1 reply; 9+ messages in thread From: G Edhaya Chandran @ 2023-02-28 14:04 UTC (permalink / raw) To: Chao Li, devel [-- Attachment #1: Type: text/plain, Size: 58 bytes --] Reviewed-by: G Edhaya Chandran <edhaya.chandran@arm.com> [-- Attachment #2: Type: text/html, Size: 64 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [edk2-devel] [PATCH v1 2/2] uefi-sct/SctPkg: Enable LoongArch64 building 2023-02-28 14:04 ` G Edhaya Chandran @ 2023-03-03 10:18 ` G Edhaya Chandran 0 siblings, 0 replies; 9+ messages in thread From: G Edhaya Chandran @ 2023-03-03 10:18 UTC (permalink / raw) To: G Edhaya Chandran, devel [-- Attachment #1: Type: text/plain, Size: 129 bytes --] The patch is upstreamed through commit: https://github.com/tianocore/edk2-test/commit/39f27f233aeab16f71fc8f5ed6b287eb9f884ec6 [-- Attachment #2: Type: text/html, Size: 133 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2023-03-03 10:19 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-12-14 8:36 [PATCH v1 0/2] Enable LoongArch64 in uefi-sct Chao Li 2022-12-14 8:36 ` [PATCH v1 1/2] uefi-sct/SctPkg: Add LoongArch64 platform support Chao Li 2023-01-03 5:31 ` 回复: " Gao Jie 2023-02-28 14:03 ` [edk2-devel] " G Edhaya Chandran 2023-03-03 10:19 ` G Edhaya Chandran 2022-12-14 8:36 ` [PATCH v1 2/2] uefi-sct/SctPkg: Enable LoongArch64 building Chao Li 2023-01-03 5:31 ` 回复: [edk2-devel] " Gao Jie 2023-02-28 14:04 ` G Edhaya Chandran 2023-03-03 10:18 ` G Edhaya Chandran
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox