svn commit: r245450 - in head/sys: arm/allwinner arm/conf boot/fdt/dts
Alexander Motin
mav at FreeBSD.org
Tue Jan 15 09:23:18 UTC 2013
On 15.01.2013 10:26, Ganbold Tsagaankhuu wrote:
> Author: ganbold (doc committer)
> Date: Tue Jan 15 08:26:16 2013
> New Revision: 245450
> URL: http://svnweb.freebsd.org/changeset/base/245450
>
> Log:
> Initial support for Allwinner A10 SoC (Cubieboard)
> Add simple console driver
> Add interrupt handling and timer codes
> Add kernel config file
> Add dts file
> Approved by: gonzo
> + /* Set desired frequency in event timer and timecounter */
> + sc->et.et_frequency = (uint64_t)freq;
> + sc->clkfreq = (uint64_t)freq;
> + sc->et.et_name = "a10_timer Eventtimer";
> + sc->et.et_flags = ET_FLAGS_ONESHOT | ET_FLAGS_PERIODIC;
> + sc->et.et_quality = 1000;
> + sc->et.et_min_period.sec = 0;
> + sc->et.et_min_period.frac =
> + ((0x00000002LLU << 32) / sc->et.et_frequency) << 32;
> + sc->et.et_max_period.sec = 0xfffffff0U / sc->et.et_frequency;
> + sc->et.et_max_period.frac =
> + ((0xfffffffeLLU << 32) / sc->et.et_frequency) << 32;
> + sc->et.et_start = a10_timer_timer_start;
> + sc->et.et_stop = a10_timer_timer_stop;
> + sc->et.et_priv = sc;
> + et_register(&sc->et);
> +static int
> +a10_timer_timer_start(struct eventtimer *et, struct bintime *first,
> + struct bintime *period)
> +{
> + struct a10_timer_softc *sc;
> + uint32_t clo, count;
> +
> + sc = (struct a10_timer_softc *)et->et_priv;
> +
> + if (first != NULL) {
> + count = (sc->et.et_frequency * (first->frac >> 32)) >> 32;
> + if (first->sec != 0)
> + count += sc->et.et_frequency * first->sec;
> +
> + /* clear */
> + timer_write_4(sc, SW_TIMER0_CUR_VALUE_REG, 0);
> + clo = timer_read_4(sc, SW_TIMER0_CUR_VALUE_REG);
> + clo += count;
> + timer_write_4(sc, SW_TIMER0_CUR_VALUE_REG, clo);
> +
> + return (0);
> + }
> +
> + return (EINVAL);
> +}
It seems like you've announced periodic mode support above, but haven't
implemented it here.
--
Alexander Motin
More information about the svn-src-all
mailing list