Commit 044af044 authored by Daniel Schaefer's avatar Daniel Schaefer Committed by Barton Gao
Browse files

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.Chandran@arm.com>
Cc: Barton Gao <gaojie@byosoft.com.cn>
Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>
Cc: Eric Jin <eric.jin@intel.com>
Cc: Arvin Chen <arvinx.chen@intel.com>
Cc: Leif Lindholm <leif@nuviainc.com>
Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
Cc: Abner Chang <abner.chang@hpe.com>
Signed-off-by: default avatarDaniel Schaefer <daniel.schaefer@hpe.com>
Reviewed-by: default avatarAbner Chang <abner.chang@hpe.com>
Reviewed-by: Sunny Wang's avatarSunny Wang <sunny.wang@arm.com>
parent f171d5b2
/** @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
#endif
/** @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;
}
## @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 x2
/** @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);
}
/** @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;
}
/** @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
}
/** @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));
}
/** @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