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>