diff options
author | andrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-05-18 01:19:01 +0000 |
---|---|---|
committer | andrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-05-18 01:19:01 +0000 |
commit | 9203284167b16a0f3ed08c679d200b8bf293d7a2 (patch) | |
tree | 432794cf900145124625efd6fe303761f42b633b /ArmEbPkg | |
parent | 4099cdc7bccef75ae59b35fdf2168d7a3fc3d2c4 (diff) | |
download | edk2-platforms-9203284167b16a0f3ed08c679d200b8bf293d7a2.tar.xz |
Get TimerDxe driver compiling.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10497 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmEbPkg')
-rw-r--r-- | ArmEbPkg/ArmEbPkg.dsc | 1 | ||||
-rwxr-xr-x | ArmEbPkg/ArmEbPkg.fdf | 3 | ||||
-rwxr-xr-x | ArmEbPkg/Include/ArmEb/ArmEb.h | 1 | ||||
-rwxr-xr-x | ArmEbPkg/Include/ArmEb/ArmEbTimer.h | 78 | ||||
-rwxr-xr-x | ArmEbPkg/TimerDxe/Timer.c | 9 | ||||
-rwxr-xr-x | ArmEbPkg/TimerDxe/TimerDxe.inf | 2 |
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 |