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

aleek at FreeBSD.org aleek at FreeBSD.org
Wed Jul 4 12:10:28 UTC 2012


Author: aleek
Date: Wed Jul  4 12:10:20 2012
New Revision: 238946
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=238946

Log:
  fixed bug in gptimer driver. mmc is dectected

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

Modified: soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer.h
==============================================================================
--- soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer.h	Wed Jul  4 10:17:02 2012	(r238945)
+++ soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer.h	Wed Jul  4 12:10:20 2012	(r238946)
@@ -119,7 +119,10 @@
                     void (*callback)(void *data), void *data);
 
 int
-omap3_gptimer_start(struct eventtimer *et, struct bintime *first,  struct bintime *period);
+omap3_gptimer_start_et(struct eventtimer *et, struct bintime *first,  struct bintime *period);
+
+int
+omap3_gptimer_start(struct omap3_gptimer_softc *sc);
 
 int
 omap3_gptimer_stop(struct eventtimer *et);

Modified: soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer_tc.c
==============================================================================
--- soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer_tc.c	Wed Jul  4 10:17:02 2012	(r238945)
+++ soc2012/aleek/beaglexm-armv6/sys/arm/ti/am37x/am37x_gptimer_tc.c	Wed Jul  4 12:10:20 2012	(r238946)
@@ -79,7 +79,7 @@
  */
 static struct timecounter omap3_gptimer_tc = {
 	/* Name of the timecounter. */
-	.tc_name           = "OMAP3 Timecouter",
+	.tc_name           = "OMAP3 Timecounter",
 	/*
 	 * This function reads the counter.  It is not required to
 	 * mask any unimplemented bits out, as long as they are
@@ -464,7 +464,7 @@
  *	Returns 0 on success, otherwise an error code
  */
 int
-omap3_gptimer_start(struct eventtimer *et, struct bintime *first,  struct bintime *period)
+omap3_gptimer_start_et(struct eventtimer *et, struct bintime *first,  struct bintime *period)
 {
 	struct omap3_gptimer_softc *sc = (struct omap3_gptimer_softc *)et->et_priv;
 	uint32_t val;
@@ -486,6 +486,27 @@
 	return 0;
 }
 
+int
+omap3_gptimer_start(struct omap3_gptimer_softc *sc)
+{
+	uint32_t val;
+
+	/* Sanity checks */
+	if (sc == NULL)
+		return (ENOMEM);
+	if (!(sc->flags & OMAP3_GPTIMER_ACTIVATED_FLAG))
+		return (EINVAL);
+
+	//OMAP3_GPTIMER_LOCK(sc);
+
+	val = gptimer_read_4(OMAP3_GPT_TCLR);
+	val |= TCLR_ST;
+	gptimer_write_4(OMAP3_GPT_TCLR, val);
+
+	//OMAP3_GPTIMER_UNLOCK(sc);
+
+	return 0;
+}
 /**
  *	omap3_gptimer_stop - stops a one-shot or periodic timer
  *	@n: the number of the timer (first timer is number 1)
@@ -772,12 +793,14 @@
 	/* setup GPTIMER10 for system ticks, and GPTIMER11 for general purpose counter */
 	oldirqstate = disable_interrupts(I32_bit);
 
-	/* Setup another timer to be the timecounter */
+	/* Setup timer to be the timecounter */
 	if (omap3_gptimer_activate(sc, OMAP3_GPTIMER_PERIODIC_FLAG, 0, NULL, NULL)) {
 		device_printf(dev, "Error: failed to activate system tick timer\n");
-	}/* else if (omap3_gptimer_start(sc)) {
+	}
+	else if (omap3_gptimer_start(sc))
+	{
 		device_printf(dev, "Error: failed to start system tick timer\n");
-	}*/
+	}
 
 	/* Save the system clock speed */
 	omap3_gptimer_get_freq(sc, &timer_freq);
@@ -859,8 +882,8 @@
 		panic("Error: failed to start system tick timer\n");
 	
 	/* Lastly start the tick timer */
-	/*if (omap3_gptimer_start(sc))
-		panic("Error: failed to start system tick timer\n");*/
+	if (omap3_gptimer_start(sc))
+		panic("Error: failed to start system tick timer\n");
 
 	omap3_gptimer_get_freq(sc, &timer_freq);
 	device_printf(dev, "tick: timer_freq = %u\n", timer_freq);
@@ -875,7 +898,7 @@
 	omap3_gptimer_et.et_min_period.frac	= ((0x00000002LLU << 32) / omap3_gptimer_et.et_frequency) << 32;
 	omap3_gptimer_et.et_max_period.sec	= 0xfffffff0U / omap3_gptimer_et.et_frequency;
 	omap3_gptimer_et.et_max_period.frac	= ((0xfffffffeLLU << 32) / omap3_gptimer_et.et_frequency) << 32;
-	omap3_gptimer_et.et_start			= omap3_gptimer_start;
+	omap3_gptimer_et.et_start			= omap3_gptimer_start_et;
 	omap3_gptimer_et.et_stop			= omap3_gptimer_stop;
 	omap3_gptimer_et.et_priv			= &omap3_gptimer_et;
 	et_register( &omap3_gptimer_et );

Modified: soc2012/aleek/beaglexm-armv6/sys/arm/ti/ti_mmchs.c
==============================================================================
--- soc2012/aleek/beaglexm-armv6/sys/arm/ti/ti_mmchs.c	Wed Jul  4 10:17:02 2012	(r238945)
+++ soc2012/aleek/beaglexm-armv6/sys/arm/ti/ti_mmchs.c	Wed Jul  4 12:10:20 2012	(r238946)
@@ -908,7 +908,7 @@
 	/* Loop waiting for the command to finish */
 	timeout = hz;
 	do {
-		pause("MMCINIT", 1);
+		pause("MMCINIT1", 1);
 		if (timeout-- == 0) {
 			device_printf(sc->sc_dev, "Error: first stream init timed out\n");
 			break;
@@ -924,7 +924,7 @@
 	/* Loop waiting for the second command to finish */
 	timeout = hz;
 	do {
-		pause("MMCINIT", 1);
+		pause("MMCINIT2", 1);
 		if (timeout-- == 0) {
 			device_printf(sc->sc_dev, "Error: second stream init timed out\n");
 			break;
@@ -1431,7 +1431,6 @@
 static int
 ti_mmchs_init_dma_channels(struct ti_mmchs_softc *sc)
 {
-	printf( "%s:%d\n", __FILE__, __LINE__ );
 #ifdef SOC_TI_AM335X
 	switch (sc->device_id) {
 		case 0:
@@ -1455,13 +1454,11 @@
 	int err;
 	uint32_t rev;
 
-	printf( "%s:%d\n", __FILE__, __LINE__ );
 	/* Get the current chip revision */
 	rev = ti_revision();
 	if ((OMAP_REV_DEVICE(rev) != OMAP4430_DEV) && (sc->device_id > 3))
 		return(EINVAL);
 
-	printf( "%s:%d\n", __FILE__, __LINE__ );
 	/* Get the DMA MMC triggers */
 	switch (sc->device_id) {
 		case 0:
@@ -1490,13 +1487,11 @@
 			return(EINVAL);
 	}
 
-	printf( "%s:%d\n", __FILE__, __LINE__ );
 	/* Activate a RX channel from the OMAP DMA driver */
 	err = ti_sdma_activate_channel(&sc->sc_dmach_rd, ti_mmchs_dma_intr, sc);
 	if (err != 0)
 		return(err);
 
-	printf( "%s:%d\n", __FILE__, __LINE__ );
 	/* Setup the RX channel for MMC data transfers */
 	ti_sdma_set_xfer_burst(sc->sc_dmach_rd, TI_SDMA_BURST_NONE,
 	    TI_SDMA_BURST_64);
@@ -1506,13 +1501,11 @@
 	ti_sdma_set_addr_mode(sc->sc_dmach_rd, TI_SDMA_ADDR_CONSTANT,
 	    TI_SDMA_ADDR_POST_INCREMENT);
 
-	printf( "%s:%d\n", __FILE__, __LINE__ );
 	/* Activate and configure the TX DMA channel */
 	err = ti_sdma_activate_channel(&sc->sc_dmach_wr, ti_mmchs_dma_intr, sc);
 	if (err != 0)
 		return(err);
 
-	printf( "%s:%d\n", __FILE__, __LINE__ );
 	/* Setup the TX channel for MMC data transfers */
 	ti_sdma_set_xfer_burst(sc->sc_dmach_wr, TI_SDMA_BURST_64,
 	    TI_SDMA_BURST_NONE);


More information about the svn-soc-all mailing list