Index: kernel/arch/arm32/src/mach/beagleboardxm/beagleboardxm.c
===================================================================
--- kernel/arch/arm32/src/mach/beagleboardxm/beagleboardxm.c	(revision b8e56d9beb214e0249dfe55d7aedaf8d5a177b14)
+++ kernel/arch/arm32/src/mach/beagleboardxm/beagleboardxm.c	(revision 590ce3527c7e162ec44505a60af15990b12de366)
@@ -37,4 +37,5 @@
 #include <genarch/drivers/amdm37x_irc/amdm37x_irc.h>
 #include <genarch/drivers/amdm37x_uart/amdm37x_uart.h>
+#include <genarch/drivers/amdm37x_gpt/amdm37x_gpt.h>
 #include <interrupt.h>
 #include <mm/km.h>
@@ -59,17 +60,18 @@
 	amdm37x_irc_regs_t *irc_addr;
 	amdm37x_uart_t uart;
+	amdm37x_gpt_t timer;
 } beagleboard;
 
 struct arm_machine_ops bbxm_machine_ops = {
-	bbxm_init,
-	bbxm_timer_irq_start,
-	bbxm_cpu_halt,
-	bbxm_get_memory_extents,
-	bbxm_irq_exception,
-	bbxm_frame_init,
-	bbxm_output_init,
-	bbxm_input_init,
-	bbxm_get_irq_count,
-	bbxm_get_platform_name
+	.machine_init = bbxm_init,
+	.machine_timer_irq_start = bbxm_timer_irq_start,
+	.machine_cpu_halt = bbxm_cpu_halt,
+	.machine_get_memory_extents = bbxm_get_memory_extents,
+	.machine_irq_exception = bbxm_irq_exception,
+	.machine_frame_init = bbxm_frame_init,
+	.machine_output_init = bbxm_output_init,
+	.machine_input_init = bbxm_input_init,
+	.machine_get_irq_count = bbxm_get_irq_count,
+	.machine_get_platform_name = bbxm_get_platform_name
 };
 
@@ -98,5 +100,10 @@
 	amdm37x_irc_init(beagleboard.irc_addr);
 
-	//initialize timer here
+	// TODO: setup 32kHz clock source for timer1
+
+	/* Initialize timer, pick timer1, beacues it is in always power domain
+	 * and has special capabilities for regular ticks */
+	amdm37x_gpt_timer_ticks_init(&beagleboard.timer,
+	    AMDM37x_GPT1_BASE_ADDRESS, AMDM37x_GPT1_SIZE, 100);
 }
 
@@ -107,13 +114,16 @@
 	irq_initialize(&timer_irq);
 	timer_irq.devno = device_assign_devno();
-	timer_irq.inr = 0;//BB_TIMER_IRQ;
+	timer_irq.inr = AMDM37x_GPT1_IRQ;
 	timer_irq.claim = bb_timer_irq_claim;
 	timer_irq.handler = bb_timer_irq_handler;
 	irq_register(&timer_irq);
-	// start timer here
+
+	/* Start timer here */
+	amdm37x_gpt_timer_ticks_start(&beagleboard.timer);
 }
 
 static void bbxm_cpu_halt(void)
 {
+	while (1);
 }
 
@@ -125,5 +135,4 @@
 static void bbxm_get_memory_extents(uintptr_t *start, size_t *size)
 {
-	// FIXME: This is just a guess...
 	*start = BBXM_MEMORY_START;
 	*size = BBXM_MEMORY_SIZE;
@@ -156,5 +165,4 @@
 #error "Frame buffer is not yet supported!"
 #endif
-
 	/* UART3 is wired to external RS232 connector */
 	const bool ok = amdm37x_uart_init(&beagleboard.uart,
