Added DebugAgentTimerLib. Cleaned up .h files and other code.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10332 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
158
Omap35xxPkg/Library/DebugAgentTimerLib/DebugAgentTimerLib.c
Executable file
158
Omap35xxPkg/Library/DebugAgentTimerLib/DebugAgentTimerLib.c
Executable file
@@ -0,0 +1,158 @@
|
||||
/** @file
|
||||
Debug Agent timer lib for OMAP 35xx.
|
||||
|
||||
Copyright (c) 2008-2010, Apple Inc. All rights reserved.
|
||||
|
||||
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.
|
||||
|
||||
**/
|
||||
#include <Base.h>
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/IoLib.h>
|
||||
#include <Library/OmapLib.h>
|
||||
#include <Library/ArmLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
|
||||
#include <Omap3530/Omap3530.h>
|
||||
|
||||
|
||||
volatile UINT32 gVector;
|
||||
|
||||
// Cached registers
|
||||
volatile UINT32 gTISR;
|
||||
volatile UINT32 gTCLR;
|
||||
volatile UINT32 gTLDR;
|
||||
volatile UINT32 gTCRR;
|
||||
volatile UINT32 gTIER;
|
||||
|
||||
VOID
|
||||
EnableInterruptSource (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
UINTN Bank;
|
||||
UINTN Bit;
|
||||
|
||||
// Map vector to FIQ, IRQ is default
|
||||
MmioWrite32 (INTCPS_ILR (gVector), 1);
|
||||
|
||||
Bank = gVector / 32;
|
||||
Bit = 1UL << (gVector % 32);
|
||||
|
||||
MmioWrite32 (INTCPS_MIR_CLEAR(Bank), Bit);
|
||||
}
|
||||
|
||||
VOID
|
||||
DisableInterruptSource (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
UINTN Bank;
|
||||
UINTN Bit;
|
||||
|
||||
Bank = gVector / 32;
|
||||
Bit = 1UL << (gVector % 32);
|
||||
|
||||
MmioWrite32 (INTCPS_MIR_SET(Bank), Bit);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Setup all the hardware needed for the debug agents timer.
|
||||
|
||||
This function is used to set up debug enviroment. It may enable interrupts.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
DebugAgentTimerIntialize (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
UINT32 TimerBaseAddress;
|
||||
|
||||
|
||||
gVector = InterruptVectorForTimer (PcdGet32(PcdOmap35xxDebugAgentTimer));
|
||||
|
||||
// Set up the timer registers
|
||||
TimerBaseAddress = TimerBase (PcdGet32(PcdOmap35xxDebugAgentTimer));
|
||||
gTISR = TimerBaseAddress + GPTIMER_TISR;
|
||||
gTCLR = TimerBaseAddress + GPTIMER_TCLR;
|
||||
gTLDR = TimerBaseAddress + GPTIMER_TLDR;
|
||||
gTCRR = TimerBaseAddress + GPTIMER_TCRR;
|
||||
gTIER = TimerBaseAddress + GPTIMER_TIER;
|
||||
|
||||
DisableInterruptSource ();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Set the period for the debug agent timer. Zero means disable the timer.
|
||||
|
||||
@param[in] TimerPeriodMilliseconds Frequency of the debug agent timer.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
DebugAgentTimerSetPeriod (
|
||||
IN UINT32 TimerPeriodMilliseconds
|
||||
)
|
||||
{
|
||||
UINT64 TimerCount;
|
||||
INT32 LoadValue;
|
||||
|
||||
if (TimerPeriodMilliseconds == 0) {
|
||||
// Turn off GPTIMER3
|
||||
MmioWrite32 (gTCLR, TCLR_ST_OFF);
|
||||
|
||||
DisableInterruptSource ();
|
||||
} else {
|
||||
// Calculate required timer count
|
||||
TimerCount = DivU64x32(TimerPeriodMilliseconds * 1000000, PcdGet32(PcdDebugAgentTimerFreqNanoSeconds));
|
||||
|
||||
// Set GPTIMER5 Load register
|
||||
LoadValue = (INT32) -TimerCount;
|
||||
MmioWrite32 (gTLDR, LoadValue);
|
||||
MmioWrite32 (gTCRR, LoadValue);
|
||||
|
||||
// Enable Overflow interrupt
|
||||
MmioWrite32 (gTIER, TIER_TCAR_IT_DISABLE | TIER_OVF_IT_ENABLE | TIER_MAT_IT_DISABLE);
|
||||
|
||||
// Turn on GPTIMER3, it will reload at overflow
|
||||
MmioWrite32 (gTCLR, TCLR_AR_AUTORELOAD | TCLR_ST_ON);
|
||||
|
||||
EnableInterruptSource ();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Perform End Of Interrupt for the debug agent timer. This is called in the
|
||||
interrupt handler after the interrupt has been processed.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
DebugAgentTimerEndOfInterrupt (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
// Clear all timer interrupts
|
||||
MmioWrite32 (gTISR, TISR_CLEAR_ALL);
|
||||
|
||||
// Poll interrupt status bits to ensure clearing
|
||||
while ((MmioRead32 (gTISR) & TISR_ALL_INTERRUPT_MASK) != TISR_NO_INTERRUPTS_PENDING);
|
||||
|
||||
MmioWrite32 (INTCPS_CONTROL, INTCPS_CONTROL_NEWFIQAGR);
|
||||
ArmDataSyncronizationBarrier ();
|
||||
|
||||
}
|
||||
|
||||
|
47
Omap35xxPkg/Library/DebugAgentTimerLib/DebugAgentTimerLib.inf
Executable file
47
Omap35xxPkg/Library/DebugAgentTimerLib/DebugAgentTimerLib.inf
Executable file
@@ -0,0 +1,47 @@
|
||||
#/** @file
|
||||
# Component description file for Base PCI Cf8 Library.
|
||||
#
|
||||
# PCI CF8 Library that uses I/O ports 0xCF8 and 0xCFC to perform PCI Configuration cycles.
|
||||
# Layers on top of an I/O Library instance.
|
||||
# Copyright (c) 2007, Intel Corporation.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
#
|
||||
#**/
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = DebugAgentTimerLibNull
|
||||
FILE_GUID = E82F99DE-74ED-4e56-BBA1-B143FCA3F69A
|
||||
MODULE_TYPE = BASE
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = DebugAgentTimerLib|SEC BASE DXE_CORE
|
||||
|
||||
|
||||
[Sources.common]
|
||||
DebugAgentTimerLib.c
|
||||
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
EmbeddedPkg/EmbeddedPkg.dec
|
||||
Omap35xxPkg/Omap35xxPkg.dec
|
||||
ArmPkg/ArmPkg.dec
|
||||
|
||||
|
||||
[LibraryClasses]
|
||||
BaseLib
|
||||
IoLib
|
||||
OmapLib
|
||||
ArmLib
|
||||
|
||||
[Pcd]
|
||||
gOmap35xxTokenSpaceGuid.PcdOmap35xxDebugAgentTimer
|
||||
gOmap35xxTokenSpaceGuid.PcdDebugAgentTimerFreqNanoSeconds
|
||||
|
Reference in New Issue
Block a user