PERFORCE change 101489 for review

Warner Losh imp at FreeBSD.org
Thu Jul 13 21:42:19 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=101489

Change 101489 by imp at imp_lighthouse on 2006/07/13 21:42:16

	WIP for cognet

Affected files ...

.. //depot/projects/arm/src/sys/arm/at91/at91_tc.c#5 edit

Differences ...

==== //depot/projects/arm/src/sys/arm/at91/at91_tc.c#5 (text+ko) ====

@@ -66,10 +66,10 @@
 	int overflows;
 };
 
-#define RD4(counter, off) \
-	bus_read_4((counter)->sc->mem_res, (off) + (counter)->offset)
-#define WR4(counter, off, val) \
-	bus_write_4((counter)->sc->mem_res, (off) + (counter)->offset, (val))
+#define RD4(tc, off) \
+	bus_read_4((tc)->sc->mem_res, (off) + (tc)->offset)
+#define WR4(tc, off, val) \
+	bus_write_4((tc)->sc->mem_res, (off) + (tc)->offset, (val))
 #define RD4sc(sc, off) \
 	bus_read_4(sc->mem_res, (off))
 #define WR4sc(sc, off, val) \
@@ -104,9 +104,10 @@
 	at91_tc_get_timecount, /* get_timecount */
 	NULL, /* no poll_pps */
 	0xfffffu, /* counter_mask */
-	5000000, /* frequency */
+//	5000000, /* frequency */
+	60000000 / 8, /* frequency */
 	"5MHz", /* name */
-	20000 /* quality */
+	2000 /* quality */
 };
 #endif
 
@@ -142,6 +143,7 @@
 		// On the TSC board, we have 5MHz going into TIOA2.  Setup
 		// TC1's XC1 to use this.
 		WR4sc(sc, TC_BMR, TC_BMR_XC1_TIOA2);
+	printf("BMR: %x\n", RD4sc(sc, TC_BMR));
 #endif
 	for (i = 0; i < MAX_COUNTER; i++)
 		at91_tc_counter_init(sc, &sc->tc[i], i);
@@ -149,7 +151,7 @@
 	if (device_get_unit(dev) == 0) {
 		// XXX need cdev
 		// Init our timecounter.
-		at91_tc_tc = &sc->tc[0];
+		at91_tc_tc = &sc->tc[1];
 		tc_init(&at91_tc_timecounter);
 	}
 #endif
@@ -213,12 +215,13 @@
 #endif
 
 	tc->sc = sc;
+	printf("tc%d offset %x\n", unit, (uint32_t)tc->offset);
 #ifdef AT91_TSC
 	// Only TC1 is needed.  All others are disabled.
 	if (unit != 1 || device_get_unit(sc->dev) != 0) {
 #endif
+		WR4(tc, TC_IDR, 0xffffffff);
 		WR4(tc, TC_CCR, TC_CCR_CLKDIS);
-		WR4(tc, TC_IDR, 0xffffffff);
 		return;
 #ifdef AT91_TSC
 	}
@@ -234,14 +237,22 @@
 
 	// Setup TC1 into Capture Mode (WAVE=0), clocked by our external
 	// 5MHz, loading RA on rise and RB on falling edge
-	WR4(tc, TC_CMR, TC_CMR_XC1 | TC_CMR_BURST_NONE | TC_CMR_ETRGEDG_NONE |
+//	WR4(tc, TC_CMR, TC_CMR_XC1 | TC_CMR_BURST_NONE | TC_CMR_ETRGEDG_NONE |
+//	    TC_CMR_LDRA_RISE | TC_CMR_LDRB_FALL);
+	WR4(tc, TC_CMR, TC_CMR_TIMER_CLOCK2 | TC_CMR_BURST_NONE | TC_CMR_ETRGEDG_NONE |
 	    TC_CMR_LDRA_RISE | TC_CMR_LDRB_FALL);
-
+	printf("CMR: %x\n", RD4(tc, TC_CMR));
 	WR4(tc, TC_IDR, 0xffffffff);
 	WR4(tc, TC_IER, TC_SR_COVFS | TC_SR_LOVRS | TC_SR_LDRAS | TC_SR_LDRBS);
+	printf("IMR: %x\n", RD4(tc, TC_IMR));
 
 	// Now that we have ISR setup, we can enable clocks and go!
 	WR4(tc, TC_CCR, TC_CCR_SWTRG | TC_CCR_CLKEN);
+	{
+	    uint32_t last;
+	    last = RD4(tc, TC_CV);
+	    printf("Last is %x and %x SR %x\n", last, RD4(tc, TC_CV), RD4(tc, TC_SR));
+	}
 #endif
 }
 
@@ -252,9 +263,11 @@
 	struct at91_tc_counter *tc = argp;
 	uint32_t status;
 
+printf("Howdy!\n");
 	status = RD4(tc, TC_SR);
-	if (status & TC_SR_COVFS)
+	if (status & TC_SR_COVFS) {
 		tc->sc->overflows++;
+	}
 	if (status & TC_SR_LOVRS)
 		printf("Didn't read RA or RB in time\n");
 	if (status & TC_SR_LDRAS)


More information about the p4-projects mailing list