[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