summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>2010-05-18 01:19:01 +0000
committerandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>2010-05-18 01:19:01 +0000
commit9203284167b16a0f3ed08c679d200b8bf293d7a2 (patch)
tree432794cf900145124625efd6fe303761f42b633b
parent4099cdc7bccef75ae59b35fdf2168d7a3fc3d2c4 (diff)
downloadedk2-9203284167b16a0f3ed08c679d200b8bf293d7a2.tar.gz
edk2-9203284167b16a0f3ed08c679d200b8bf293d7a2.tar.bz2
edk2-9203284167b16a0f3ed08c679d200b8bf293d7a2.zip
Get TimerDxe driver compiling.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10497 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r--ArmEbPkg/ArmEbPkg.dsc1
-rwxr-xr-xArmEbPkg/ArmEbPkg.fdf3
-rwxr-xr-xArmEbPkg/Include/ArmEb/ArmEb.h1
-rwxr-xr-xArmEbPkg/Include/ArmEb/ArmEbTimer.h78
-rwxr-xr-xArmEbPkg/TimerDxe/Timer.c9
-rwxr-xr-xArmEbPkg/TimerDxe/TimerDxe.inf2
6 files changed, 87 insertions, 7 deletions
diff --git a/ArmEbPkg/ArmEbPkg.dsc b/ArmEbPkg/ArmEbPkg.dsc
index c17e72979a..41ff7426dd 100644
--- a/ArmEbPkg/ArmEbPkg.dsc
+++ b/ArmEbPkg/ArmEbPkg.dsc
@@ -351,6 +351,7 @@
EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
ArmEbPkg/InterruptDxe/InterruptDxe.inf
+ ArmEbPkg/TimerDxe/TimerDxe.inf
#
# Semi-hosting filesystem
diff --git a/ArmEbPkg/ArmEbPkg.fdf b/ArmEbPkg/ArmEbPkg.fdf
index d461871e29..e5051e03b8 100755
--- a/ArmEbPkg/ArmEbPkg.fdf
+++ b/ArmEbPkg/ArmEbPkg.fdf
@@ -108,6 +108,9 @@ READ_LOCK_STATUS = TRUE
INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
+ INF ArmEbPkg/InterruptDxe/InterruptDxe.inf
+ INF ArmEbPkg/TimerDxe/TimerDxe.inf
+
#
# Semi-hosting filesystem
#
diff --git a/ArmEbPkg/Include/ArmEb/ArmEb.h b/ArmEbPkg/Include/ArmEb/ArmEb.h
index 3084091681..0018e84eba 100755
--- a/ArmEbPkg/Include/ArmEb/ArmEb.h
+++ b/ArmEbPkg/Include/ArmEb/ArmEb.h
@@ -15,5 +15,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#define __ARM_EB_H__
#include <ArmEb\ArmEbUart.h>
+#include <ArmEb\ArmEbTimer.h>
#endif
diff --git a/ArmEbPkg/Include/ArmEb/ArmEbTimer.h b/ArmEbPkg/Include/ArmEb/ArmEbTimer.h
new file mode 100755
index 0000000000..413bc85773
--- /dev/null
+++ b/ArmEbPkg/Include/ArmEb/ArmEbTimer.h
@@ -0,0 +1,78 @@
+/*++
+
+Copyright (c) 2009, Hewlett-Packard Company
+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.
+
+Module Name:
+
+ Timer.h
+
+Abstract:
+
+ Driver implementing the EFI 2.0 timer protocol using the ARM SP804 timer.
+
+--*/
+
+#ifndef _TIMER_SP804_H__
+#define _TIMER_SP804_H__
+
+
+
+// EB board constants
+#define EB_SP810_CTRL_BASE 0x10001000
+#define EB_SP804_TIMER0_BASE 0x10011000
+#define EB_SP804_TIMER1_BASE 0x10011020
+#define EB_SP804_TIMER2_BASE 0x10012000
+#define EB_SP804_TIMER3_BASE 0x10012020
+
+#define EB_TIMER01_INTERRUPT_NUM 36
+#define EB_TIMER23_INTERRUPT_NUM 37
+
+// 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
+
+// default timer tick period - 1ms, or 10000 units of 100ns
+//#define TIMER_DEFAULT_PERIOD 10000
+
+// default timer tick period - 50ms, or 500000 units of 100ns
+#define TIMER_DEFAULT_PERIOD 500000
+
+// default timer tick period - 500ms, or 5000000 units of 100ns
+//#define TIMER_DEFAULT_PERIOD 5000000
+
+#endif
+
diff --git a/ArmEbPkg/TimerDxe/Timer.c b/ArmEbPkg/TimerDxe/Timer.c
index 397f05362b..a034eef0f2 100755
--- a/ArmEbPkg/TimerDxe/Timer.c
+++ b/ArmEbPkg/TimerDxe/Timer.c
@@ -23,7 +23,6 @@
#include <Library/UefiLib.h>
#include <Library/PcdLib.h>
#include <Library/IoLib.h>
-#include <Library/OmapLib.h>
#include <Protocol/Timer.h>
#include <Protocol/HardwareInterrupt.h>
@@ -44,6 +43,8 @@ EFI_HARDWARE_INTERRUPT_PROTOCOL *gInterrupt = NULL;
// Cached interrupt vector
UINTN gVector;
+UINT32 mLastTickCount;
+
/**
@@ -184,7 +185,7 @@ TimerDriverSetTimerPeriod (
Status = gInterrupt->DisableInterruptSource (gInterrupt, gVector);
} else {
// Convert TimerPeriod into 1MHz clock counts (us units = 100ns units / 10)
- TimerTicks = DivU64x32 (TimerPeriod, 10, NULL);
+ TimerTicks = DivU64x32 (TimerPeriod, 10);
// if it's larger than 32-bits, pin to highest value
if (TimerTicks > 0xffffffff) {
@@ -352,10 +353,6 @@ TimerInitialize (
// Disable the timer
Status = TimerDriverSetTimerPeriod (&gTimer, 0);
ASSERT_EFI_ERROR (Status);
-
- // Install interrupt handler for SP804 timer 0/1 interrupts
- Status = mGic->RegisterInterruptHandler(mGic, EB_TIMER01_INTERRUPT_NUM, TimerInterruptHandler);
- ASSERT_EFI_ERROR (Status);
// Install interrupt handler
gVector = EB_TIMER01_INTERRUPT_NUM;
diff --git a/ArmEbPkg/TimerDxe/TimerDxe.inf b/ArmEbPkg/TimerDxe/TimerDxe.inf
index 033ef5716a..49ee0377be 100755
--- a/ArmEbPkg/TimerDxe/TimerDxe.inf
+++ b/ArmEbPkg/TimerDxe/TimerDxe.inf
@@ -28,7 +28,7 @@
[Packages]
MdePkg/MdePkg.dec
EmbeddedPkg/EmbeddedPkg.dec
- ArmPkg/ArmPkg.dec
+ ArmEbPkg/ArmEbPkg.dec
[LibraryClasses]
BaseLib