Reviewed-by: Abner Chang <abner.ch...@hpe.com> > -----Original Message----- > From: Schaefer, Daniel > Sent: Tuesday, February 9, 2021 11:44 PM > To: devel@edk2.groups.io > Cc: G Edhaya Chandran <edhaya.chand...@arm.com>; Barton Gao > <gao...@byosoft.com.cn>; Samer El-Haj-Mahmoud <Samer.El-Haj- > mahm...@arm.com>; Eric Jin <eric....@intel.com>; Arvin Chen > <arvinx.c...@intel.com>; Leif Lindholm <l...@nuviainc.com>; Heinrich > Schuchardt <xypron.g...@gmx.de>; Chang, Abner (HPS SW/FW Technologist) > <abner.ch...@hpe.com> > Subject: [edk2-test PATCHv2 1/5] SctPkg: Add RISCV64 support by using > Aarch64 sources > > The sources were copied from Aarch64. Follow-up commit will adapt them > for Riscv64. > > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3042 > > Cc: G Edhaya Chandran <edhaya.chand...@arm.com> > Cc: Barton Gao <gao...@byosoft.com.cn> > Cc: Samer El-Haj-Mahmoud <samer.el-haj-mahm...@arm.com> > Cc: Eric Jin <eric....@intel.com> > Cc: Arvin Chen <arvinx.c...@intel.com> > Cc: Leif Lindholm <l...@nuviainc.com> > Cc: Heinrich Schuchardt <xypron.g...@gmx.de> > Cc: Abner Chang <abner.ch...@hpe.com> > Signed-off-by: Daniel Schaefer <daniel.schae...@hpe.com> > --- > uefi-sct/SctPkg/Library/SctLib/Riscv64/SctLibPlat.h > | 32 +++ > uefi-sct/SctPkg/Library/SctLib/Riscv64/initplat.c > | 45 ++++ > uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/GoVirtual.S > | 44 ++++ > uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/VirtualMemory.c > | 182 +++++++++++++ > uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Debug.c > | 88 +++++++ > uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Dump.c > | 68 +++++ > uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.c > | 134 ++++++++++ > uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.h > | 48 ++++ > uefi- > sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64 > /DebugSupportBBTestCacheFunction.c | 137 ++++++++++ > uefi- > sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64 > /DebugSupportBBTestExceptionCallbackFunction.c | 276 > ++++++++++++++++++++ > uefi- > sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64 > /PlatformIsa.c | 30 +++ > uefi- > sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/EntsLib > Plat.h | 55 ++++ > uefi- > sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/InitPlat. > c | 55 ++++ > 13 files changed, 1194 insertions(+) > > diff --git a/uefi-sct/SctPkg/Library/SctLib/Riscv64/SctLibPlat.h b/uefi- > sct/SctPkg/Library/SctLib/Riscv64/SctLibPlat.h > new file mode 100644 > index 00000000..ee7c656b > --- /dev/null > +++ b/uefi-sct/SctPkg/Library/SctLib/Riscv64/SctLibPlat.h > @@ -0,0 +1,32 @@ > +/** @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:++ SctLibPlat.h++Abstract:++ AArch64 specific > +defines++--*/++#ifndef _EFI_LIB_PLAT_H_+#define > +_EFI_LIB_PLAT_H_++#define MIN_ALIGNMENT_SIZE 8++#endifdiff --git > +a/uefi-sct/SctPkg/Library/SctLib/Riscv64/initplat.c > +b/uefi-sct/SctPkg/Library/SctLib/Riscv64/initplat.c > new file mode 100644 > index 00000000..a48bb2f3 > --- /dev/null > +++ b/uefi-sct/SctPkg/Library/SctLib/Riscv64/initplat.c > @@ -0,0 +1,45 @@ > +/** @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:++ 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/Riscv64/GoVirtual.S > b/uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/GoVirtual.S > new file mode 100644 > index 00000000..d223b36b > --- /dev/null > +++ b/uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/GoVirtual.S > @@ -0,0 +1,44 @@ > +## @file+#+# Copyright 2010 - 2012 Unified EFI, Inc.<BR>+# Copyright (c) > 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:+#+# GoVirtual.S+#+#-- > */+#start of the code section+.text+/* FIXME: Should alignment be different > on Aarch64? */+.align 3++.global JumpToTestFunc+.type JumpToTestFunc, > %function++#---------------------------------------------------------------------------- > --+# VOID+# JumpToTestFunc (+# IN UINTN FuncPointer,+# IN UNITN > ConfigInfo+# )+#+JumpToTestFunc:+ mov x2, x0+ mov x0, x1++ // > Jump to Virtual function+ blr x2diff --git a/uefi- > sct/SctPkg/SCRT/SCRTApp/Riscv64/VirtualMemory.c b/uefi- > sct/SctPkg/SCRT/SCRTApp/Riscv64/VirtualMemory.c > new file mode 100644 > index 00000000..397b3514 > --- /dev/null > +++ b/uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/VirtualMemory.c > @@ -0,0 +1,182 @@ > +/** @file++ Copyright 2006 - 2012 Unified EFI, Inc.<BR>+ Copyright (c) > 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:++ VirtualMemory.c++-- > */++#include "SCRTApp.h"++#define VIRT_TO_PHYS_OFFSET > (0x80000000) //2G++BOOLEAN HighAddress = FALSE;+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 ARM v5, V6 and V7 architectures+ * the MMU is configured and > enabled in PEI phase. As VirtualFunc+ * is already mapped to virtual > memory, don't have to do anything here.+ */+ /* FIXME: Is it the same > on ARM v8? */+}+++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 ARM platforms+ // based on ARM > v5 v6 and v7 architecture.+ //+ /* FIXME: Is it the same on ARM v8? */+ > JumpToTestFunc(VirtualFunc, HandOffAddr);+}diff --git a/uefi- > sct/SctPkg/SCRT/SCRTDriver/Riscv64/Debug.c b/uefi- > sct/SctPkg/SCRT/SCRTDriver/Riscv64/Debug.c > new file mode 100644 > index 00000000..6161d596 > --- /dev/null > +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Debug.c > @@ -0,0 +1,88 @@ > +/** @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:++ Debug.c++--*/++#include > "SCRTDriver.h"++UINTN mHandOffPtr = > 0;+EFI_PHYSICAL_ADDRESS mIoPortSpaceAddress = > 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;++ if (!HandOffPtr->DebuggerInfo.MmioFlag){+ //+ // > >If > debug port is I/O mapped, fix IoBase Address.+ //+ > FixAddress(&HandOffPtr->DebuggerInfo.IoBase);+ mIoPortSpaceAddress > = HandOffPtr->DebuggerInfo.IoBase;+ } else {+ //+ // If debug port > is > MMIO, fix MmioBase Address.+ //+ FixAddress(&HandOffPtr- > >DebuggerInfo.MmioBase);+ }++ return > EFI_SUCCESS;+}+++EFI_STATUS+Send2UART (+ CHAR8 *String+ )+{+ > //+ // TODO: On ARM 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/Riscv64/Dump.c b/uefi- > sct/SctPkg/SCRT/SCRTDriver/Riscv64/Dump.c > new file mode 100644 > index 00000000..cc8d9869 > --- /dev/null > +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/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()+{+ SctAPrint > ("\n================Dump Runtime Table===============\n");+ > SctAPrint ("Header Signature = 0x%x\n", VRT->Hdr.Signature);++ SctAPrint > ("\n================GetTime Service==============\n");+ SctAPrint > ("GetTime @ 0x%x\n", VRT->GetTime);++ SctAPrint > ("\n================SetTime Service==============\n");+ SctAPrint > ("SetTime @ 0x%x\n", VRT->SetTime);++ SctAPrint > ("\n================GetWakeupTime Service==============\n");+ > SctAPrint ("GetWakeupTime @ 0x%x\n", VRT->GetWakeupTime);++ > SctAPrint ("\n================SetWakeupTime > Service==============\n");+ SctAPrint ("SetWakeupTime @ 0x%x\n", > VRT->SetWakeupTime);++ SctAPrint ("\n================GetVariable > Service==============\n");+ SctAPrint ("GetVariable @ 0x%x\n", VRT- > >GetVariable);++ SctAPrint ("\n================GetNextVariableName > Service==============\n");+ SctAPrint ("GetNextVariableName @ > 0x%x\n", VRT->GetNextVariableName);++ SctAPrint > ("\n================SetVariable Service==============\n");+ > SctAPrint ("SetVariable @ 0x%x\n", VRT->SetVariable);++ SctAPrint > ("\n================GetNextHighMonotonicCount > Service==============\n");+ SctAPrint ("GetNextHighMonotonicCount @ > 0x%x\n", VRT->GetNextHighMonotonicCount);++ SctAPrint > ("\n================ResetSystem Service==============\n");+ > SctAPrint ("ResetSystem @ 0x%x\n", VRT->ResetSystem);+#if 0+ SctAPrint > ("\n================UpdateCapsule Service==============\n");+ > SctAPrint ("UpdateCapsule @ 0x%x\n", VRT->UpdateCapsule);++ SctAPrint > ("\n================QueryCapsuleCapabilities > Service==============\n");+ SctAPrint ("QueryCapsuleCapabilities @ > 0x%x\n", VRT->QueryCapsuleCapabilities);++ SctAPrint > ("\n================QueryVariableInfo Service==============\n");+ > SctAPrint ("QueryVariableInfo @ 0x%x\n", VRT- > >QueryVariableInfo);+#endif+}diff --git a/uefi- > sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.c b/uefi- > sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.c > new file mode 100644 > index 00000000..b925e151 > --- /dev/null > +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.c > @@ -0,0 +1,134 @@ > +/** @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:++ Io.c++--*/++#include > "Io.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 ARM platforms > don't have to do this as all the functions are virtually mapped.+ > //+}++// Quick port to ARM++VOID+Port80 (+ UINT8 Number+ )+{+ > //EFI_SCT_DEBUG ((EFI_SCT_D_ERROR, L"Port80 %02x", Number));+}diff -- > git a/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.h b/uefi- > sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.h > new file mode 100644 > index 00000000..1e78b3e4 > --- /dev/null > +++ b/uefi-sct/SctPkg/SCRT/SCRTDriver/Riscv64/Io.h > @@ -0,0 +1,48 @@ > +/** @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:++ Debug.h++--*/++#ifndef > _IA32_IO_ACCESS_H+#define _IA32_IO_ACCESS_H++#include > "SCRTDriver.h"++#define IA32_MAX_IO_ADDRESS 0xFFFF++#define > IA32API+++typedef union {+ UINT8 VOLATILE *buf;+ UINT8 VOLATILE > *ui8;+ UINT16 VOLATILE *ui16;+ UINT32 VOLATILE *ui32;+ UINT64 > VOLATILE *ui64;+ UINTN VOLATILE ui;+} PTR;++// This address is assuming > a pure PC architecture. Not required?+#define VIRT_TO_PHYS_OFFSET > (0x80000000) //2G++++#endifdiff --git a/uefi- > sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64 > /DebugSupportBBTestCacheFunction.c b/uefi- > sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64 > /DebugSupportBBTestCacheFunction.c > new file mode 100644 > index 00000000..96ee7b57 > --- /dev/null > +++ b/uefi- > sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTe > +++ st/Riscv64/DebugSupportBBTestCacheFunction.c > @@ -0,0 +1,137 @@ > +/** @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/Riscv64 > /DebugSupportBBTestExceptionCallbackFunction.c b/uefi- > sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64 > /DebugSupportBBTestExceptionCallbackFunction.c > new file mode 100644 > index 00000000..c27c0c0c > --- /dev/null > +++ b/uefi- > sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTe > +++ st/Riscv64/DebugSupportBBTestExceptionCallbackFunction.c > @@ -0,0 +1,276 @@ > +/** @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:++ > 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 ARM > 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;+ // FIXME: Is it normal that we use > EXCEPT_IA32_BREAKPOINT here?+ // Shouldn't we define proper constants > for ARM exceptions in DebugSupportProtocol.h file?+ Status = > DebugSupport->RegisterExceptionCallback (DebugSupport, 0, > ExceptionCallback, EXCEPT_IA32_BREAKPOINT);++ 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_IA32_BREAKPOINT);++ 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_IA32_BREAKPOINT);++ 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/Riscv64 > /PlatformIsa.c b/uefi- > sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTest/Riscv64 > /PlatformIsa.c > new file mode 100644 > index 00000000..8334f601 > --- /dev/null > +++ b/uefi- > sct/SctPkg/TestCase/UEFI/EFI/Protocol/DebugSupport/BlackBoxTe > +++ st/Riscv64/PlatformIsa.c > @@ -0,0 +1,30 @@ > +/** @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:++ PlatformIsa.c++Abstract:++ Platform > related > +Isa definition.++--*/++#include > +"DebugSupportBBTestMain.h"++EFI_INSTRUCTION_SET_ARCHITECTURE > +PlatformIsa = IsaAArch64;+diff --git > +a/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/ > +EntsLibPlat.h > +b/uefi- > sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/ > +EntsLibPlat.h > new file mode 100644 > index 00000000..ff781aee > --- /dev/null > +++ b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv > +++ 64/EntsLibPlat.h > @@ -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:++ EntsLibPlat.h++Abstract:++ > AArch64 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.++-- > */+;++#endifdiff --git a/uefi- > sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/InitPlat. > c b/uefi- > sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/InitPlat. > c > new file mode 100644 > index 00000000..70a509a4 > --- /dev/null > +++ b/uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv > +++ 64/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.30.0
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#72171): https://edk2.groups.io/g/devel/message/72171 Mute This Topic: https://groups.io/mt/80507443/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-