]> Zhao Yanbai Git Server - minix.git/commitdiff
arm:timer changes. 34/834/2
authorKees Jongenburger <kees.jongenburger@gmail.com>
Tue, 27 Aug 2013 12:23:34 +0000 (14:23 +0200)
committerGerrit Code Review <gerrit@gerrit>
Thu, 26 Sep 2013 07:05:44 +0000 (09:05 +0200)
* Allow to change the timer frequency using the hz paramter.
* Unmask the interrupt only after registering the handler.
* Pass the hz parameter in the command line.

kernel/arch/earm/omap_timer.c
releasetools/gen_cmdline.txt.sh

index 7486353683154846a93afbb2d6af3c19fa292714..06567413285caa63bce1eacc19588656b06ecba8 100644 (file)
@@ -138,6 +138,8 @@ int omap3_register_timer_handler(const irq_handler_t handler)
        omap3_timer_hook.irq = timer.irq_nr;
 
        put_irq_handler(&omap3_timer_hook, timer.irq_nr, handler);
+       /* only unmask interrupts after registering */
+       omap3_irq_unmask(timer.irq_nr);
 
        return 0;
 }
@@ -211,6 +213,7 @@ void omap3_frclock_stop()
 
 void omap3_timer_init(unsigned freq)
 {
+    /* we only support 1ms resolution */
     u32_t tisr;
     kern_phys_map_ptr(timer.base,ARM_PAGE_SIZE,
                &timer_phys_map, (vir_bytes) &timer.base);
@@ -239,15 +242,15 @@ void omap3_timer_init(unsigned freq)
     /* Use 1-ms tick mode for GPTIMER1 TRM 16.2.4.2.1 */
     mmio_write(timer.base + timer.regs->TPIR, 232000);
     mmio_write(timer.base + timer.regs->TNIR, -768000);
-    mmio_write(timer.base + timer.regs->TLDR, 0xffffffe0);
-    mmio_write(timer.base + timer.regs->TCRR, 0xffffffe0);
+    mmio_write(timer.base + timer.regs->TLDR, 0xffffffff - (32768 / freq) +1);
+    mmio_write(timer.base + timer.regs->TCRR, 0xffffffff - (32768 / freq) +1);
+
 
     /* Set up overflow interrupt */
     tisr = OMAP3_TISR_MAT_IT_FLAG | OMAP3_TISR_OVF_IT_FLAG |
           OMAP3_TISR_TCAR_IT_FLAG;
     mmio_write(timer.base + timer.regs->TISR, tisr); /* Clear interrupt status */
     mmio_write(timer.base + timer.regs->TIER, OMAP3_TIER_OVF_IT_ENA);
-    omap3_irq_unmask(timer.irq_nr);
 
     /* Start timer */
     mmio_set(timer.base + timer.regs->TCLR,
index f258c2411360f439673a958e5c4d38d91fe9f1a8..31c3c215d4d7809a09be0dadfda785683589c38c 100755 (executable)
@@ -3,6 +3,7 @@
 CONSOLE=tty02 
 #verbosity
 VERBOSE=3 
+HZ=1000
 while getopts "c:v:?" c
 do
         case "$c" in
@@ -18,8 +19,12 @@ do
                 # genrate netbooting uEnv.txt
                 VERBOSE=$OPTARG
                ;;
+        h)
+                # system hz
+               HZ=$OPTARG
+               ;;
         esac
 done
 
 
-echo console=$CONSOLE rootdevname=c0d0p1s0 verbose=$VERBOSE
+echo console=$CONSOLE rootdevname=c0d0p1s0 verbose=$VERBOSE hz=$HZ