[RFC] Clean up sparc64 timecounters

Jung-uk Kim jkim at FreeBSD.org
Tue Jun 28 17:38:05 UTC 2011


On Tuesday 28 June 2011 01:26 pm, Jung-uk Kim wrote:
> Can you please review the attached patch?
>
> sys/sparc64/pci/fire.c:
> - Remove redundant timecounter masking from tc_get_timecount
> method. - Remove an unnecessary macro for timecounter mask.
> - Remove a redundant NULL assignment.
>
> sys/sparc64/pci/schizo.c:
> - Remove redundant timecounter masking from tc_get_timecount
> method. - Correct timecounter mask.  Note this is a no-op because
> the STX_CTRL_PERF_CNT_CNT0_SHIFT is actually zero.
> - Remove a redundant NULL assignment.
>
> sys/sparc64/sparc64/counter.c:
> - Remove redundant timecounter masking from tc_get_timecount
> method. - Add M_ZERO flag to malloc(9) for timecounter to be
> consistent with other timecounters.
> - Remove now a redundant NULL assignment.
>
> sys/sparc64/sparc64/tick.c:
> - Remove redundant NULL assignments for static timecounters.
>
> Basically, I wanted to get rid of unnecessary (and wrong)
> timecounter masking within tc_get_timecount methods.  Other changes
> are for consistencies.

@@ -686,8 +684,7 @@ fire_attach(device_t dev)
                if (tc == NULL)
                        panic("%s: could not malloc timecounter", __func__);
                tc->tc_get_timecount = fire_get_timecount;
-               tc->tc_poll_pps = NULL;
-               tc->tc_counter_mask = TC_COUNTER_MAX_MASK;
+               tc->tc_counter_mask = ~0ul;
                                      ^^^^
                                      ~0u
                if (OF_getprop(OF_peer(0), "clock-frequency", &prop,
                    sizeof(prop)) == -1)
                        panic("%s: could not determine clock frequency",

Sorry, attached a revised patch.

Jung-uk Kim
-------------- next part --------------
Index: sys/sparc64/pci/schizo.c
===================================================================
--- sys/sparc64/pci/schizo.c	(revision 223648)
+++ sys/sparc64/pci/schizo.c	(working copy)
@@ -482,8 +482,8 @@ schizo_attach(device_t dev)
 		if (tc == NULL)
 			panic("%s: could not malloc timecounter", __func__);
 		tc->tc_get_timecount = schizo_get_timecount;
-		tc->tc_poll_pps = NULL;
-		tc->tc_counter_mask = STX_CTRL_PERF_CNT_MASK;
+		tc->tc_counter_mask = STX_CTRL_PERF_CNT_MASK <<
+		    STX_CTRL_PERF_CNT_CNT0_SHIFT;
 		if (OF_getprop(OF_peer(0), "clock-frequency", &prop,
 		    sizeof(prop)) == -1)
 			panic("%s: could not determine clock frequency",
@@ -1521,6 +1521,5 @@ schizo_get_timecount(struct timecounter *tc)
 	struct schizo_softc *sc;
 
 	sc = tc->tc_priv;
-	return (SCHIZO_CTRL_READ_8(sc, STX_CTRL_PERF_CNT) &
-	    (STX_CTRL_PERF_CNT_MASK << STX_CTRL_PERF_CNT_CNT0_SHIFT));
+	return (SCHIZO_CTRL_READ_8(sc, STX_CTRL_PERF_CNT));
 }
Index: sys/sparc64/pci/fire.c
===================================================================
--- sys/sparc64/pci/fire.c	(revision 223648)
+++ sys/sparc64/pci/fire.c	(working copy)
@@ -660,8 +660,6 @@ fire_attach(device_t dev)
 	FIRE_PCI_WRITE_8(sc, FO_PCI_EQ_CTRL_SET_BASE + (j << 3),
 	    FO_PCI_EQ_CTRL_SET_EN);
 
-#define	TC_COUNTER_MAX_MASK	0xffffffff
-
 	/*
 	 * Setup JBC/UBC performance counter 0 in bus cycle counting
 	 * mode as timecounter.  Unfortunately, at least with Fire all
@@ -686,8 +684,7 @@ fire_attach(device_t dev)
 		if (tc == NULL)
 			panic("%s: could not malloc timecounter", __func__);
 		tc->tc_get_timecount = fire_get_timecount;
-		tc->tc_poll_pps = NULL;
-		tc->tc_counter_mask = TC_COUNTER_MAX_MASK;
+		tc->tc_counter_mask = ~0u;
 		if (OF_getprop(OF_peer(0), "clock-frequency", &prop,
 		    sizeof(prop)) == -1)
 			panic("%s: could not determine clock frequency",
@@ -2170,5 +2167,5 @@ fire_get_timecount(struct timecounter *tc)
 	struct fire_softc *sc;
 
 	sc = tc->tc_priv;
-	return (FIRE_CTRL_READ_8(sc, FO_XBC_PRF_CNT0) & TC_COUNTER_MAX_MASK);
+	return (FIRE_CTRL_READ_8(sc, FO_XBC_PRF_CNT0));
 }
Index: sys/sparc64/sparc64/counter.c
===================================================================
--- sys/sparc64/sparc64/counter.c	(revision 223648)
+++ sys/sparc64/sparc64/counter.c	(working copy)
@@ -86,13 +86,12 @@ sparc64_counter_init(const char *name, bus_space_t
 	bus_space_write_8(tag, handle, offset + CTR_CT1 + CTR_LIMIT,
 	    COUNTER_MASK);
 	/* Register as a time counter. */
-	tc = malloc(sizeof(*tc), M_DEVBUF, M_WAITOK);
+	tc = malloc(sizeof(*tc), M_DEVBUF, M_WAITOK | M_ZERO);
 	sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK);
 	sc->sc_tag = tag;
 	sc->sc_handle = handle;
 	sc->sc_offset = offset + CTR_CT0;
 	tc->tc_get_timecount = counter_get_timecount;
-	tc->tc_poll_pps = NULL;
 	tc->tc_counter_mask = COUNTER_MASK;
 	tc->tc_frequency = COUNTER_FREQ;
 	tc->tc_name = strdup(name, M_DEVBUF);
@@ -107,6 +106,5 @@ counter_get_timecount(struct timecounter *tc)
 	struct ct_softc *sc;
 
 	sc = tc->tc_priv;
-	return (bus_space_read_8(sc->sc_tag, sc->sc_handle, sc->sc_offset) &
-	    COUNTER_MASK);
+	return (bus_space_read_8(sc->sc_tag, sc->sc_handle, sc->sc_offset));
 }
Index: sys/sparc64/sparc64/tick.c
===================================================================
--- sys/sparc64/sparc64/tick.c	(revision 223648)
+++ sys/sparc64/sparc64/tick.c	(working copy)
@@ -197,12 +197,10 @@ cpu_initclocks(void)
 	 * quality (S)TICK timers in the MP case.
 	 */
 	tick_tc.tc_get_timecount = tick_get_timecount_up;
-	tick_tc.tc_poll_pps = NULL;
 	tick_tc.tc_counter_mask = ~0u;
 	tick_tc.tc_frequency = clock;
 	tick_tc.tc_name = "tick";
 	tick_tc.tc_quality = TICK_QUALITY_UP;
-	tick_tc.tc_priv = NULL;
 #ifdef SMP
 	if (cpu_mp_probe()) {
 		tick_tc.tc_get_timecount = tick_get_timecount_mp;
@@ -212,12 +210,10 @@ cpu_initclocks(void)
 	tc_init(&tick_tc);
 	if (sclock != 0) {
 		stick_tc.tc_get_timecount = stick_get_timecount_up;
-		stick_tc.tc_poll_pps = NULL;
 		stick_tc.tc_counter_mask = ~0u;
 		stick_tc.tc_frequency = sclock;
 		stick_tc.tc_name = "stick";
 		stick_tc.tc_quality = TICK_QUALITY_UP;
-		stick_tc.tc_priv = NULL;
 #ifdef SMP
 		if (cpu_mp_probe()) {
 			stick_tc.tc_get_timecount = stick_get_timecount_mp;


More information about the freebsd-sparc64 mailing list