public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Heinrich Schuchardt" <xypron.glpk@gmx.de>
To: Daniel Schaefer <daniel.schaefer@hpe.com>,
	Leif Lindholm <leif@nuviainc.com>,
	devel@edk2.groups.io
Cc: Abner Chang <abner.chang@hpe.com>,
	Gilbert Chen <gilbert.chen@hpe.com>,
	Eric Jin <eric.jin@intel.com>,
	G Edhaya Chandran <Edhaya.Chandran@arm.com>,
	Barton Gao <gaojie@byosoft.com.cn>,
	Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>
Subject: Re: [edk2-devel] [edk2-test PATCH v1 2/2] SctPkg: Enable RISCV64 support using AARCH64 sources
Date: Mon, 8 Feb 2021 18:04:45 +0100	[thread overview]
Message-ID: <7741f08d-efeb-e959-7118-fb74474e3424@gmx.de> (raw)
In-Reply-To: <a155349b-a845-2d56-9568-b70fcbe3def4@hpe.com>

On 08.02.21 16:09, Daniel Schaefer wrote:
> Hi Leif,
>
> thanks very much for the review!
> I've cleaned up the patchset and addressed the issues. I'll send out
> another set soon.
> See comments below.
>
> Thanks,
> Daniel
>
> On 12/2/20 8:04 PM, Leif Lindholm wrote:
>> On Wed, Dec 02, 2020 at 00:17:52 +0800, Daniel Schaefer wrote:
>>> REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3042
>>>
>>> TODO: Need to check whether we can avoid copying Aarch64 sources.
>>>
>>> Cc: Leif Lindholm <leif@nuviainc.com>
>>> Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
>>> Cc: Abner Chang <abner.chang@hpe.com>
>>> Cc: Gilbert Chen <gilbert.chen@hpe.com>
>>> Cc: Eric Jin <eric.jin@intel.com>
>>> Cc: G Edhaya Chandran <Edhaya.Chandran@arm.com>
>>> Cc: Barton Gao <gaojie@byosoft.com.cn>
>>> Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>
>>> Signed-off-by: Daniel Schaefer <daniel.schaefer@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                                                                          
>>> |  45 ++++
>>>  
>>> 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/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/Riscv64/TimerInterrupt.c                                    
>>> |  51 ++++
>>>  
>>> uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/EntsLibPlat.h                                        
>>> |  55 ++++
>>>  
>>> uefi-sct/SctPkg/TestInfrastructure/SCT/Framework/ENTS/EasLib/Riscv64/InitPlat.c                                           
>>> |  55 ++++
>>>   14 files changed, 1246 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
>>
>> *cough*
>
> For the next patch series I went through everything and made sure that
> there's no Aarch64 or ARM anymore.
>
>>> +
>>> +--*/
>>> +
>>> +#ifndef _EFI_LIB_PLAT_H_
>>> +#define _EFI_LIB_PLAT_H_
>>
>> No leading _ in macros.
>
> This is a common pattern in the code. Even in EDK2.
>
>>> +
>>> +#define MIN_ALIGNMENT_SIZE  8
>>> +
>>> +#endif
>>> diff --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..8bc2c624
>>> --- /dev/null
>>> +++ b/uefi-sct/SctPkg/SCRT/SCRTApp/Riscv64/GoVirtual.S
>>> @@ -0,0 +1,45 @@
>>> +## @file
>>> +#
>>> +#  Copyright 2010 - 2012 Unified EFI, Inc.<BR>
>>> +#  Copyright (c) 2012, ARM Ltd. All rights reserved.<BR>
>>> +#  Copyright (c) 2020, Hewlett Packard Enterprise Development LP.<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? */
>>
>> 1) FIXME
>> 2) Aarch64.
>
> I have no idea why the alignment would be 3 on other platforms, so I
> don't know how to fix it.
> If anyone knows more, please let me know. I'll just change the comment
> to say Riscv64.
>
>>> +.align 3

Both on Aarch64 and on RISC-V an odd alignment value makes no sense.

.align 8 should do no harm. But is it needed?

Best regards

Heinrich


>>> +
>>> +.global JumpToTestFunc
>>> +.type JumpToTestFunc, %function
>>> +
>>> +#------------------------------------------------------------------------------
>>>
>>> +# VOID
>>> +# JumpToTestFunc (
>>> +#   IN  UINTN  FuncPointer,
>>> +#   IN  UNITN  ConfigInfo
>>> +#   )
>>> +# TODO: Make sure this code is correct
>>
>> No TODO.
>> Should this set really be called an RFC?
>
> Yes, sorry, it's more of an RFC. I wanted to get it out before
> Heinrich's talk at OSFC, so he could mention it.
> The code works as confirmed by Heinrich, I just hadn't cleaned it up yet.
>
>>> +JumpToTestFunc:
>>> +    mv x2, x0
>>> +    mv x0, x1
>>> +
>>> +    // Jump to Virtual function
>>> +    jalr x2
>>> diff --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? */
>>
>> FIXME?
>> (Even if it's copied, it's wrong :)
>> ARM in general.
>
> Fixed. Even in Riscv64 we enabled identity mapped MMU before PEI.
>
>>> +}
>>> +
>>> +
>>> +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);
>>
>> Again.
>
> Same.
>
>>> +}
>>> 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;
>>
>> Looks redundant on !x86
>>
>>> +   } 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.
>>> +  //
>>
>> Ye gods...
>
> Reminder that this is copied from the ARM sources.
> In this case I'll just replace ARM by RISC-V.
>
>>> +  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
>>
>> Better to delete if not usable, but why disabled for AArch64 in the
>> first place?
>
> Not sure. It's also commented out in the X86 and IPF source files.
> I'll keep it. I think it would be more confusing if RISC-V was the only
> platform
> that didn't have this.
>
>>> +  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>
>>
>> More trailing spaces than usual in line above.
>> (The below block has 3 of them in every copy.)
>
> This pattern is present in almost all files in the repo.
> Should we follow up with a second patch series to fix that?
> In this repo there are tons of things to clean up...
> Some files have CRLF and an additional LF at the end of every line.
>
>>> +
>>> +  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.
>>> +        //
>>
>> ARM
>>
>>> +}
>>> +
>>> +// Quick port to ARM
>>> +
>>> +VOID
>>> +Port80 (
>>> +  UINT8 Number
>>> +  )
>>> +{
>>> +  //EFI_SCT_DEBUG ((EFI_SCT_D_ERROR, L"Port80 %02x", Number));
>>
>> Eew.
>
> That function is used in some tests, that's why it's here and in both ARMs.
>
>>> +}
>>> 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.
>>> +
>>
>> Trailing spaces.
>>
>>> +**/
>>> +
>>> +/*++
>>> +
>>> +Module Name:
>>> +
>>> +  Debug.h
>>> +
>>> +--*/
>>> +
>>> +#ifndef _IA32_IO_ACCESS_H
>>> +#define _IA32_IO_ACCESS_H
>>
>> Srsly?
>
> Reminder again, that this is a file that I copied ;)
> This header wasn't necessary so I removed in in my next patch series.
>
>>> +
>>> +#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
>>> +
>>> +
>>> +
>>> +#endif
>>> diff --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/BlackBoxTest/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/BlackBoxTest/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
>>
>> Eew.
>>
>>> +  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/BlackBoxTest/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/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/Riscv64/TimerInterrupt.c
>>> b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/Riscv64/TimerInterrupt.c
>>>
>>> new file mode 100644
>>> index 00000000..1c1940e5
>>> --- /dev/null
>>> +++
>>> b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/UsbHc/BlackBoxTest/Riscv64/TimerInterrupt.c
>>>
>>> @@ -0,0 +1,51 @@
>>> +/** @file
>>> +
>>> +  Copyright 2006 - 2010 Unified EFI, Inc.<BR>
>>> +  Copyright (c) 2010, Intel Corporation. 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.
>>> +
>>> +**/
>>> +/**
>>> + *  Ipf Source file for Mask/Unmask TimerInterrupt.
>>> + */
>>> +/*++
>>> +
>>> +Module Name:
>>> +  TimerInterrupt.c
>>> +
>>> +Abstract:
>>> +  Ipf Source file for Mask/Unmask TimerInterrupt.
>>> +
>>> +Author(s):
>>> +
>>> +
>>> +References:
>>> +  EFI Specification 1.10
>>> +  EFI/Tiano DXE Test Case Writer's Guide
>>> +
>>> +Revision History:
>>> +  Initial 10-20-2002
>>> +  Version 0.01
>>> +
>>> +--*/
>>> +
>>> +#include "UsbHcTest.h"
>>> +
>>> +VOID MaskTimerInterrupt()
>>> +{
>>> +  // TBD
>>> +  return;
>>> +}
>>> +
>>> +VOID UnmaskTimerInterrupt()
>>> +{
>>> +  // TBD
>>> +  return;
>>> +}
>>> 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/Riscv64/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_
>>
>> No leading _.
>>
>> /
>>      Leif
>>
>>> +
>>> +#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/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/Riscv64/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.28.0
>>>
>>>
>>>
>>> 
>>>
>>>


  reply	other threads:[~2021-02-08 17:05 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-01 16:17 [edk2-test PATCH v1 0/2] Add RISCV64 support to SctPkg Daniel Schaefer
2020-12-01 16:17 ` [edk2-test PATCH v1 1/2] SctPkg: Add RISCV64 support Daniel Schaefer
2020-12-02 11:44   ` [edk2-devel] " Leif Lindholm
2021-02-08 15:09     ` Daniel Schaefer
2020-12-01 16:17 ` [edk2-test PATCH v1 2/2] SctPkg: Enable RISCV64 support using AARCH64 sources Daniel Schaefer
2020-12-02 12:04   ` [edk2-devel] " Leif Lindholm
2021-02-08 15:09     ` Daniel Schaefer
2021-02-08 17:04       ` Heinrich Schuchardt [this message]
2021-02-09 12:42         ` Leif Lindholm
2021-02-09 13:47           ` Heinrich Schuchardt
2021-02-09 14:58             ` Leif Lindholm
2021-02-09 15:11               ` Daniel Schaefer
2020-12-01 16:59 ` [edk2-test PATCH v1 0/2] Add RISCV64 support to SctPkg Heinrich Schuchardt
2020-12-01 17:11   ` Daniel Schaefer
2020-12-01 17:37     ` Heinrich Schuchardt
2021-02-08 14:30       ` Daniel Schaefer
2021-02-08 15:50         ` Heinrich Schuchardt
2020-12-02 12:07 ` Leif Lindholm

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7741f08d-efeb-e959-7118-fb74474e3424@gmx.de \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox