Add ArmPlatformPkg from ARM Ltd. patch.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11291 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
63
ArmPlatformPkg/Include/Drivers/PL011Uart.h
Normal file
63
ArmPlatformPkg/Include/Drivers/PL011Uart.h
Normal file
@@ -0,0 +1,63 @@
|
||||
/** @file
|
||||
*
|
||||
* Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
**/
|
||||
|
||||
#ifndef __PL011_UART_H__
|
||||
#define __PL011_UART_H__
|
||||
|
||||
#define SERIAL_PORT_MAX_TIMEOUT 100000000 // 100 seconds
|
||||
|
||||
// PL011 Registers
|
||||
#define UARTDR 0x000
|
||||
#define UARTRSR 0x004
|
||||
#define UARTECR 0x004
|
||||
#define UARTFR 0x018
|
||||
#define UARTILPR 0x020
|
||||
#define UARTIBRD 0x024
|
||||
#define UARTFBRD 0x028
|
||||
#define UARTLCR_H 0x02C
|
||||
#define UARTCR 0x030
|
||||
#define UARTIFLS 0x034
|
||||
#define UARTIMSC 0x038
|
||||
#define UARTRIS 0x03C
|
||||
#define UARTMIS 0x040
|
||||
#define UARTICR 0x044
|
||||
#define UARTDMACR 0x048
|
||||
|
||||
#define UART_115200_IDIV 13 // Integer Part
|
||||
#define UART_115200_FDIV 1 // Fractional Part
|
||||
#define UART_38400_IDIV 39
|
||||
#define UART_38400_FDIV 5
|
||||
#define UART_19200_IDIV 12
|
||||
#define UART_19200_FDIV 37
|
||||
|
||||
// data status bits
|
||||
#define UART_DATA_ERROR_MASK 0x0F00
|
||||
|
||||
// status reg bits
|
||||
#define UART_STATUS_ERROR_MASK 0x0F
|
||||
|
||||
// flag reg bits
|
||||
#define UART_TX_EMPTY_FLAG_MASK 0x80
|
||||
#define UART_RX_FULL_FLAG_MASK 0x40
|
||||
#define UART_TX_FULL_FLAG_MASK 0x20
|
||||
#define UART_RX_EMPTY_FLAG_MASK 0x10
|
||||
#define UART_BUSY_FLAG_MASK 0x08
|
||||
|
||||
// control reg bits
|
||||
#define UART_CTSEN_CONTROL_MASK 0x8000
|
||||
#define UART_RTSEN_CONTROL_MASK 0x4000
|
||||
#define UART_RTS_CONTROL_MASK 0x0800
|
||||
#define UART_DTR_CONTROL_MASK 0x0400
|
||||
|
||||
#endif
|
50
ArmPlatformPkg/Include/Drivers/SP804Timer.h
Normal file
50
ArmPlatformPkg/Include/Drivers/SP804Timer.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/** @file
|
||||
*
|
||||
* Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
#ifndef _SP804_TIMER_H__
|
||||
#define _SP804_TIMER_H__
|
||||
|
||||
// SP804 Timer constants
|
||||
#define SP804_TIMER_LOAD_REG 0x00
|
||||
#define SP804_TIMER_CURRENT_REG 0x04
|
||||
#define SP804_TIMER_CONTROL_REG 0x08
|
||||
#define SP804_TIMER_INT_CLR_REG 0x0C
|
||||
#define SP804_TIMER_RAW_INT_STS_REG 0x10
|
||||
#define SP804_TIMER_MSK_INT_STS_REG 0x14
|
||||
#define SP804_TIMER_BG_LOAD_REG 0x18
|
||||
|
||||
// Timer control register bit definitions
|
||||
#define SP804_TIMER_CTRL_ONESHOT BIT0
|
||||
#define SP804_TIMER_CTRL_32BIT BIT1
|
||||
#define SP804_TIMER_CTRL_PRESCALE_MASK (BIT3|BIT2)
|
||||
#define SP804_PRESCALE_DIV_1 0
|
||||
#define SP804_PRESCALE_DIV_16 BIT2
|
||||
#define SP804_PRESCALE_DIV_256 BIT3
|
||||
#define SP804_TIMER_CTRL_INT_ENABLE BIT5
|
||||
#define SP804_TIMER_CTRL_PERIODIC BIT6
|
||||
#define SP804_TIMER_CTRL_ENABLE BIT7
|
||||
|
||||
// SP810 System Controller constants
|
||||
#define SP810_SYS_CTRL_REG 0x00
|
||||
#define SP810_SYS_CTRL_TIMER0_TIMCLK BIT15 // 0=REFCLK, 1=TIMCLK
|
||||
#define SP810_SYS_CTRL_TIMER0_EN BIT16
|
||||
#define SP810_SYS_CTRL_TIMER1_TIMCLK BIT17 // 0=REFCLK, 1=TIMCLK
|
||||
#define SP810_SYS_CTRL_TIMER1_EN BIT18
|
||||
#define SP810_SYS_CTRL_TIMER2_TIMCLK BIT19 // 0=REFCLK, 1=TIMCLK
|
||||
#define SP810_SYS_CTRL_TIMER2_EN BIT20
|
||||
#define SP810_SYS_CTRL_TIMER3_TIMCLK BIT21 // 0=REFCLK, 1=TIMCLK
|
||||
#define SP810_SYS_CTRL_TIMER3_EN BIT22
|
||||
|
||||
#endif
|
152
ArmPlatformPkg/Include/Library/ArmPlatformLib.h
Normal file
152
ArmPlatformPkg/Include/Library/ArmPlatformLib.h
Normal file
@@ -0,0 +1,152 @@
|
||||
/** @file
|
||||
*
|
||||
* Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
**/
|
||||
|
||||
#ifndef _ARMPLATFORMLIB_H_
|
||||
#define _ARMPLATFORMLIB_H_
|
||||
|
||||
//
|
||||
// The package level header files this module uses
|
||||
//
|
||||
#include <PiPei.h>
|
||||
//
|
||||
// The protocols, PPI and GUID defintions for this module
|
||||
//
|
||||
#include <Ppi/MasterBootMode.h>
|
||||
#include <Ppi/BootInRecoveryMode.h>
|
||||
#include <Guid/MemoryTypeInformation.h>
|
||||
|
||||
#include <Library/ArmLib.h>
|
||||
#include <ArmPlatform.h>
|
||||
|
||||
/**
|
||||
This structure is used by ArmVExpressGetEfiMemoryMap to describes a region of the EFI memory map
|
||||
|
||||
Every EFI regions of the system memory described by their physical start address and their size
|
||||
can have different attributes. Some regions can be tested and other untested.
|
||||
|
||||
**/
|
||||
typedef struct {
|
||||
EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute;
|
||||
EFI_PHYSICAL_ADDRESS PhysicalStart;
|
||||
UINT64 NumberOfBytes;
|
||||
} ARM_SYSTEM_MEMORY_REGION_DESCRIPTOR;
|
||||
|
||||
/**
|
||||
Called at the early stage of the Boot phase to know if the memory has already been initialized
|
||||
|
||||
Running the code from the reset vector does not mean we start from cold boot. In some case, we
|
||||
can go through this code with the memory already initialized.
|
||||
Because this function is called at the early stage, the implementation must not use the stack.
|
||||
Its implementation must probably done in assembly to ensure this requirement.
|
||||
|
||||
@return Return the condition value into the 'Z' flag
|
||||
|
||||
**/
|
||||
VOID ArmPlatformIsMemoryInitialized(VOID);
|
||||
|
||||
/**
|
||||
Initialize the memory where the initial stacks will reside
|
||||
|
||||
This memory can contain the initial stacks (Secure and Secure Monitor stacks).
|
||||
In some platform, this region is already initialized and the implementation of this function can
|
||||
do nothing. This memory can also represent the Secure RAM.
|
||||
This function is called before the satck has been set up. Its implementation must ensure the stack
|
||||
pointer is not used (probably required to use assembly language)
|
||||
|
||||
**/
|
||||
VOID ArmPlatformInitializeBootMemory(VOID);
|
||||
|
||||
/**
|
||||
Initialize the system (or sometimes called permanent) memory
|
||||
|
||||
This memory is generally represented by the DRAM.
|
||||
|
||||
**/
|
||||
VOID ArmPlatformInitializeSystemMemory(VOID);
|
||||
|
||||
/**
|
||||
Remap the memory at 0x0
|
||||
|
||||
Some platform requires or gives the ability to remap the memory at the address 0x0.
|
||||
This function can do nothing if this feature is not relevant to your platform.
|
||||
|
||||
**/
|
||||
VOID ArmPlatformBootRemapping(VOID);
|
||||
|
||||
/**
|
||||
Return if Trustzone is supported by your platform
|
||||
|
||||
A non-zero value must be returned if you want to support a Secure World on your platform.
|
||||
ArmPlatformTrustzoneInit() will later set up the secure regions.
|
||||
This function can return 0 even if Trustzone is supported by your processor. In this case,
|
||||
the platform will continue to run in Secure World.
|
||||
|
||||
@return A non-zero value if Trustzone supported.
|
||||
|
||||
**/
|
||||
UINTN ArmPlatformTrustzoneSupported(VOID);
|
||||
|
||||
/**
|
||||
Initialize the Secure peripherals and memory regions
|
||||
|
||||
If Trustzone is supported by your platform then this function makes the required initialization
|
||||
of the secure peripherals and memory regions.
|
||||
|
||||
**/
|
||||
VOID ArmPlatformTrustzoneInit(VOID);
|
||||
|
||||
/**
|
||||
Return the information about the memory region in permanent memory used by PEI
|
||||
|
||||
One of the PEI Module must install the permament memory used by PEI. This function returns the
|
||||
information about this region for your platform to this PEIM module.
|
||||
|
||||
@param[out] PeiMemoryBase Base of the memory region used by PEI core and modules
|
||||
@param[out] PeiMemorySize Size of the memory region used by PEI core and modules
|
||||
|
||||
**/
|
||||
VOID ArmPlatformGetPeiMemory (
|
||||
OUT UINTN* PeiMemoryBase,
|
||||
OUT UINTN* PeiMemorySize
|
||||
);
|
||||
|
||||
/**
|
||||
Return the Virtual Memory Map of your platform
|
||||
|
||||
This Virtual Memory Map is used by MemoryInitPei Module to initialize the MMU on your platform.
|
||||
|
||||
@param[out] VirtualMemoryMap Array of ARM_MEMORY_REGION_DESCRIPTOR describing a Physical-to-
|
||||
Virtual Memory mapping. This array must be ended by a zero-filled
|
||||
entry
|
||||
|
||||
**/
|
||||
VOID ArmPlatformGetVirtualMemoryMap (
|
||||
OUT ARM_MEMORY_REGION_DESCRIPTOR** VirtualMemoryMap
|
||||
);
|
||||
|
||||
/**
|
||||
Return the EFI Memory Map of your platform
|
||||
|
||||
This EFI Memory Map of the System Memory is used by MemoryInitPei module to create the Resource
|
||||
Descriptor HOBs used by DXE core.
|
||||
|
||||
@param[out] EfiMemoryMap Array of ARM_SYSTEM_MEMORY_REGION_DESCRIPTOR describing an
|
||||
EFI Memory region. This array must be ended by a zero-filled entry
|
||||
|
||||
**/
|
||||
VOID ArmPlatformGetEfiMemoryMap (
|
||||
OUT ARM_SYSTEM_MEMORY_REGION_DESCRIPTOR** EfiMemoryMap
|
||||
);
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user