Index: arch/sparc64/include/asm.h
===================================================================
--- arch/sparc64/include/asm.h	(revision 39494010cd29538c76268953cc313e6c622f06d5)
+++ arch/sparc64/include/asm.h	(revision 1120276ccc8b05501c44caedc58016ff6f503729)
@@ -123,4 +123,15 @@
 }
 
+/** Write CLEAR_SOFTINT Register.
+ *
+ * Bits set in CLEAR_SOFTINT register will be cleared in SOFTINT register.
+ *
+ * @param New value of CLEAR_SOFTINT register.
+ */
+static inline void clear_softint_write(__u64 v)
+{
+	__asm__ volatile ("wr %0, %1, %%clear_softint\n" : : "r" (v), "i" (0));
+}
+
 /** Enable interrupts.
  *
Index: arch/sparc64/include/drivers/tick.h
===================================================================
--- arch/sparc64/include/drivers/tick.h	(revision 39494010cd29538c76268953cc313e6c622f06d5)
+++ arch/sparc64/include/drivers/tick.h	(revision 1120276ccc8b05501c44caedc58016ff6f503729)
@@ -30,5 +30,5 @@
 #define __sparc64_TICK_H__
 
-#define TICK_DELTA        100000
+#define TICK_DELTA        500000
 
 extern void tick_init(void);
Index: arch/sparc64/src/drivers/tick.c
===================================================================
--- arch/sparc64/src/drivers/tick.c	(revision 39494010cd29538c76268953cc313e6c622f06d5)
+++ arch/sparc64/src/drivers/tick.c	(revision 1120276ccc8b05501c44caedc58016ff6f503729)
@@ -32,6 +32,7 @@
 #include <arch/register.h>
 #include <debug.h>
-#include <print.h>
+#include <time/clock.h>
 
+/** Initialize tick interrupt. */
 void tick_init(void)
 {
@@ -45,6 +46,37 @@
 }
 
+/** Process tick interrupt.
+ *
+ * @param n Interrupt Level, 14,  (can be ignored)
+ * @param stack Stack pointer of the interrupted context.
+ */
 void tick_interrupt(int n, void *stack)
 {
-	panic("Unserviced %s.\n", __FUNCTION__);
+	softint_reg_t softint, clear;
+	
+	softint.value = softint_read();
+	
+	/*
+	 * Make sure we are servicing interrupt_level_14
+	 */
+	ASSERT(n == 14);
+	
+	/*
+	 * Make sure we are servicing TICK_INT.
+	 */
+	ASSERT(softint.tick_int);
+
+	/*
+	 * Clear tick interrupt.
+	 */
+	clear.value = 0;
+	clear.tick_int = 1;
+	clear_softint_write(clear.value);
+	
+	/*
+	 * Restart counter.
+	 */
+	tick_write(0);
+	
+	clock();
 }
