Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Jun 2011 13:26:57 -0400
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        Marius Strobl <marius@freebsd.org>
Cc:        freebsd-sparc64@freebsd.org
Subject:   [RFC] Clean up sparc64 timecounters
Message-ID:  <201106281327.02537.jkim@FreeBSD.org>

next in thread | raw e-mail | index | archive | help

--Boundary-00=_m7gCO49rbORZkTy
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

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.

Thanks!

Jung-uk Kim

--Boundary-00=_m7gCO49rbORZkTy
Content-Type: text/plain;
  charset="iso-8859-1";
  name="tc_sparc64.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="tc_sparc64.diff"

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 = ~0ul;
 		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;

--Boundary-00=_m7gCO49rbORZkTy--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106281327.02537.jkim>