Date: Wed, 13 Jun 2012 18:01:44 +0000 From: aleek@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r237621 - in soc2012/aleek/beaglexm-armv6/sys/arm/ti: . am37x Message-ID: <20120613180144.2A9B8106564A@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 };
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120613180144.2A9B8106564A>
