]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Get TimerDxe driver compiling.
authorandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 18 May 2010 01:19:01 +0000 (01:19 +0000)
committerandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 18 May 2010 01:19:01 +0000 (01:19 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10497 6f19259b-4bc3-4df7-8a09-765794883524

ArmEbPkg/ArmEbPkg.dsc
ArmEbPkg/ArmEbPkg.fdf
ArmEbPkg/Include/ArmEb/ArmEb.h
ArmEbPkg/Include/ArmEb/ArmEbTimer.h [new file with mode: 0755]
ArmEbPkg/TimerDxe/Timer.c
ArmEbPkg/TimerDxe/TimerDxe.inf

index c17e72979aff41a44efe8880e328a9326a5ff643..41ff7426dd3d36e95621738e6da61ccaadfce9de 100644 (file)
   EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
 
   ArmEbPkg/InterruptDxe/InterruptDxe.inf
+  ArmEbPkg/TimerDxe/TimerDxe.inf
 
   #
   # Semi-hosting filesystem
index d461871e29f2a48c0636f9a99baa4231f4dab66b..e5051e03b8ebd64553eeb012efca25068b5951ad 100755 (executable)
@@ -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
   #
index 3084091681a6c370631d281af53fcecbacbe2a84..0018e84eba2d1a77157f939bcc98a6876b072976 100755 (executable)
@@ -15,5 +15,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #define __ARM_EB_H__\r
 \r
 #include <ArmEb\ArmEbUart.h>\r
+#include <ArmEb\ArmEbTimer.h>\r
 \r
 #endif \r
diff --git a/ArmEbPkg/Include/ArmEb/ArmEbTimer.h b/ArmEbPkg/Include/ArmEb/ArmEbTimer.h
new file mode 100755 (executable)
index 0000000..413bc85
--- /dev/null
@@ -0,0 +1,78 @@
+/*++\r
+\r
+Copyright (c) 2009, Hewlett-Packard Company                                                         \r
+All rights reserved. This program and the accompanying materials                          \r
+are licensed and made available under the terms and conditions of the BSD License         \r
+which accompanies this distribution.  The full text of the license may be found at        \r
+http://opensource.org/licenses/bsd-license.php                                            \r
+                                                                                          \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.  \r
+\r
+Module Name:\r
+\r
+  Timer.h\r
+\r
+Abstract:\r
+\r
+  Driver implementing the EFI 2.0 timer protocol using the ARM SP804 timer.\r
+\r
+--*/\r
+\r
+#ifndef _TIMER_SP804_H__\r
+#define _TIMER_SP804_H__\r
+\r
+\r
+\r
+// EB board constants\r
+#define EB_SP810_CTRL_BASE            0x10001000\r
+#define EB_SP804_TIMER0_BASE          0x10011000\r
+#define EB_SP804_TIMER1_BASE          0x10011020\r
+#define EB_SP804_TIMER2_BASE          0x10012000\r
+#define EB_SP804_TIMER3_BASE          0x10012020\r
+\r
+#define EB_TIMER01_INTERRUPT_NUM      36\r
+#define EB_TIMER23_INTERRUPT_NUM      37\r
+\r
+// SP804 Timer constants\r
+#define SP804_TIMER_LOAD_REG          0x00\r
+#define SP804_TIMER_CURRENT_REG       0x04\r
+#define SP804_TIMER_CONTROL_REG       0x08\r
+#define SP804_TIMER_INT_CLR_REG       0x0C\r
+#define SP804_TIMER_RAW_INT_STS_REG   0x10\r
+#define SP804_TIMER_MSK_INT_STS_REG   0x14\r
+#define SP804_TIMER_BG_LOAD_REG       0x18\r
+\r
+// Timer control register bit definitions\r
+#define SP804_TIMER_CTRL_ONESHOT        BIT0\r
+#define SP804_TIMER_CTRL_32BIT          BIT1\r
+#define SP804_TIMER_CTRL_PRESCALE_MASK  (BIT3|BIT2)\r
+#define SP804_PRESCALE_DIV_1            0\r
+#define SP804_PRESCALE_DIV_16           BIT2\r
+#define SP804_PRESCALE_DIV_256          BIT3\r
+#define SP804_TIMER_CTRL_INT_ENABLE     BIT5\r
+#define SP804_TIMER_CTRL_PERIODIC       BIT6\r
+#define SP804_TIMER_CTRL_ENABLE         BIT7\r
+\r
+// SP810 System Controller constants\r
+#define SP810_SYS_CTRL_REG              0x00\r
+#define SP810_SYS_CTRL_TIMER0_TIMCLK    BIT15 // 0=REFCLK, 1=TIMCLK\r
+#define SP810_SYS_CTRL_TIMER0_EN        BIT16\r
+#define SP810_SYS_CTRL_TIMER1_TIMCLK    BIT17 // 0=REFCLK, 1=TIMCLK\r
+#define SP810_SYS_CTRL_TIMER1_EN        BIT18\r
+#define SP810_SYS_CTRL_TIMER2_TIMCLK    BIT19 // 0=REFCLK, 1=TIMCLK\r
+#define SP810_SYS_CTRL_TIMER2_EN        BIT20\r
+#define SP810_SYS_CTRL_TIMER3_TIMCLK    BIT21 // 0=REFCLK, 1=TIMCLK\r
+#define SP810_SYS_CTRL_TIMER3_EN        BIT22\r
+\r
+// default timer tick period - 1ms, or 10000 units of 100ns\r
+//#define TIMER_DEFAULT_PERIOD            10000\r
+\r
+// default timer tick period - 50ms, or 500000 units of 100ns\r
+#define TIMER_DEFAULT_PERIOD            500000\r
+\r
+// default timer tick period - 500ms, or 5000000 units of 100ns\r
+//#define TIMER_DEFAULT_PERIOD            5000000\r
+\r
+#endif\r
+\r
index 397f05362b3838fd9c6a3104166d77909ff0a1c9..a034eef0f242b974704b953f7e49e7b3ad7ee836 100755 (executable)
@@ -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)\r
-    TimerTicks = DivU64x32 (TimerPeriod, 10, NULL);\r
+    TimerTicks = DivU64x32 (TimerPeriod, 10);\r
    \r
     // if it's larger than 32-bits, pin to highest value\r
     if (TimerTicks > 0xffffffff) {\r
@@ -352,10 +353,6 @@ TimerInitialize (
   // Disable the timer
   Status = TimerDriverSetTimerPeriod (&gTimer, 0);
   ASSERT_EFI_ERROR (Status);
-\r
-  // Install interrupt handler for SP804 timer 0/1 interrupts\r
-  Status = mGic->RegisterInterruptHandler(mGic, EB_TIMER01_INTERRUPT_NUM, TimerInterruptHandler);\r
-  ASSERT_EFI_ERROR (Status);\r
 
   // Install interrupt handler
   gVector = EB_TIMER01_INTERRUPT_NUM;
index 033ef5716a9293a87a4fecbee1d68259b7f904f5..49ee0377be64800519bd39b5e186fb57a5408b64 100755 (executable)
@@ -28,7 +28,7 @@
 [Packages]
   MdePkg/MdePkg.dec
   EmbeddedPkg/EmbeddedPkg.dec
-  ArmPkg/ArmPkg.dec
+  ArmEbPkg/ArmEbPkg.dec
 
 [LibraryClasses]
   BaseLib