socsvn commit: r237621 - in soc2012/aleek/beaglexm-armv6/sys/arm/ti: . am37x

aleek at FreeBSD.org aleek at FreeBSD.org
Wed Jun 13 18:01:46 UTC 2012


Author: aleek
Date: Wed Jun 13 18:01:43 2012
New Revision: 237621
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=237621

Log:
  fixed problem with FDT Interrupt decoding

Modified:
  soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer.c
  soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer.h
  soc2012/aleek/beaglexm-armv6/sys/arm/ti/common.c

Modified: soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer.c
==============================================================================
--- soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer.c	Wed Jun 13 17:45:38 2012	(r237620)
+++ soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer.c	Wed Jun 13 18:01:43 2012	(r237621)
@@ -42,7 +42,7 @@
 #include <sys/rman.h>
 #include <sys/timetc.h>
 #include <sys/lock.h>
-#include "sys/gpio.h""
+#include <sys/gpio.h>
 #include <sys/mutex.h>
 
 #include <machine/bus.h>
@@ -120,7 +120,12 @@
 	oldirqstate = disable_interrupts(I32_bit);
 
 	start = omap3_gptimer_tc_get_timecount(tc);
-	__omap3_delay(10240);
+	//__omap3_delay(10240);
+		for (int usec=10240; usec > 0; usec--)
+			for (int32_t counts = 200; counts > 0; counts--)
+				/* Prevent gcc from optimizing  out the loop */
+				cpufunc_nullop();
+	
 	end = omap3_gptimer_tc_get_timecount(tc);
 
 	restore_interrupts(oldirqstate);
@@ -515,6 +520,29 @@
 int
 omap3_gptimer_start(unsigned int n)
 {
+	struct omap3_gptimer_softc *sc = g_omap3_gptimer_sc;
+	struct omap3_gptimer *timer;
+	uint32_t val;
+
+	/* Sanity checks */
+	if (sc == NULL)
+		return (ENOMEM);
+	if ((n == 0) || (n > OMAP3_NUM_TIMERS))
+		return (EINVAL);
+	
+	/* Get a pointer to the individual timer struct */
+	timer = &sc->sc_timers[n-1];
+	if (!(timer->flags & OMAP3_GPTIMER_ACTIVATED_FLAG))
+		return (EINVAL);
+
+	OMAP3_GPTIMER_LOCK(timer);
+
+	val = omap3_gptimer_readl(timer, OMAP3_GPT_TCLR);
+	val |= TCLR_ST;
+	omap3_gptimer_writel(timer, OMAP3_GPT_TCLR, val);
+
+	OMAP3_GPTIMER_UNLOCK(timer);
+
 	return 0;
 }
 
@@ -529,6 +557,29 @@
 int
 omap3_gptimer_stop(unsigned int n)
 {
+	struct omap3_gptimer_softc *sc = g_omap3_gptimer_sc;
+	struct omap3_gptimer *timer;
+	uint32_t val;
+
+	/* Sanity checks */
+	if (sc == NULL)
+		return (ENOMEM);
+	if ((n == 0) || (n > OMAP3_NUM_TIMERS))
+		return (EINVAL);
+	
+	/* Get a pointer to the individual timer struct */
+	timer = &sc->sc_timers[n-1];
+	if (!(timer->flags & OMAP3_GPTIMER_ACTIVATED_FLAG))
+		return (EINVAL);
+
+	OMAP3_GPTIMER_LOCK(timer);
+	
+	val = omap3_gptimer_readl(timer, OMAP3_GPT_TCLR);
+	val &= ~TCLR_ST;
+	omap3_gptimer_writel(timer, OMAP3_GPT_TCLR, val);
+
+	OMAP3_GPTIMER_UNLOCK(timer);
+
 	return 0;
 }
 
@@ -741,6 +792,7 @@
 static int
 omap3_gptimer_probe(device_t dev)
 {
+	printf( "GPTIMER HABABABA\n" );
 	device_set_desc(dev, "TI OMAP3 General Purpose Timers");
 	return (0);
 }
@@ -757,6 +809,8 @@
 	u_int oldirqstate;
 	unsigned int timer_freq;
 
+	device_printf( dev, "Attaching the device..." );
+
 
 	// Setup the basics
 	sc->sc_dev = dev;
@@ -781,6 +835,10 @@
 		timer->irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, 
 		                                        RF_ACTIVE | RF_SHAREABLE);
 
+		/* Mutex to protect the shared data structures */
+		snprintf(name, 32, "omap_gptimer%u", (n + 1));
+		mtx_init(&timer->mtx, device_get_nameunit(dev), name, MTX_SPIN);
+
 		// I decided to delete support for OMAP4 timers from the original code - aleek
 		rev = omap3_gptimer_readl(timer, OMAP3_GPT_TIDR);
 		switch (rev) {
@@ -863,6 +921,7 @@
 	/* Restore interrupt state */
 	restore_interrupts(oldirqstate);
 
+	return 0;
 }
 
 static device_method_t g_omap3_gptimer_methods[] = {

Modified: soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer.h
==============================================================================
--- soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer.h	Wed Jun 13 17:45:38 2012	(r237620)
+++ soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer.h	Wed Jun 13 18:01:43 2012	(r237621)
@@ -63,7 +63,7 @@
 #define OMAP_GPTIMER_PROFILE_OMAP3		3
 
 // XXX @todo fix it, move somewhere
-#define OMAP3_HEARTBEAT_GPIO	150
+//#define OMAP3_HEARTBEAT_GPIO	150
 
 
 /*

Modified: soc2012/aleek/beaglexm-armv6/sys/arm/ti/common.c
==============================================================================
--- soc2012/aleek/beaglexm-armv6/sys/arm/ti/common.c	Wed Jun 13 17:45:38 2012	(r237620)
+++ soc2012/aleek/beaglexm-armv6/sys/arm/ti/common.c	Wed Jun 13 18:01:43 2012	(r237621)
@@ -70,7 +70,7 @@
 }
 #endif
 
-#ifdef SOC_TI_AM335X
+#if defined( SOC_TI_AM335X ) || defined( SOC_TI_AM37X )
 static int
 fdt_aintc_decode_ic(phandle_t node, pcell_t *intr, int *interrupt, int *trig,
     int *pol)
@@ -94,5 +94,9 @@
 #ifdef SOC_TI_AM335X
 	&fdt_aintc_decode_ic,
 #endif
+#ifdef SOC_TI_AM37X
+	&fdt_aintc_decode_ic,
+#endif
+
 	NULL
 };


More information about the svn-soc-all mailing list