--- sys/arch/arm/xscale/pxa2x0_clock.c | 28 ++++++++++++++-------------- 1 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/sys/arch/arm/xscale/pxa2x0_clock.c b/sys/arch/arm/xscale/pxa2x0_clock.c index 89b9c44..7644c0c 100644 --- a/sys/arch/arm/xscale/pxa2x0_clock.c +++ b/sys/arch/arm/xscale/pxa2x0_clock.c @@ -45,6 +45,7 @@ struct pxaost_softc { bus_space_tag_t sc_iot; bus_space_handle_t sc_ioh; + u_int32_t sc_clock_hz; u_int32_t sc_clock_count; u_int32_t sc_statclock_count; u_int32_t sc_statclock_step; @@ -55,10 +56,6 @@ struct pxaost_softc { static struct pxaost_softc *pxaost_sc = NULL; -#define CLK4_TIMER_FREQUENCY 32768 /* 32.768KHz */ - -#define CLK0_TIMER_FREQUENCY 3250000 /* 3.2500MHz */ - #ifndef STATHZ #define STATHZ 64 #endif @@ -74,7 +71,7 @@ struct cfdriver pxaost_cd = { u_int pxaost_get_timecount(struct timecounter *tc); static struct timecounter pxaost_timecounter = { - pxaost_get_timecount, NULL, 0xffffffff, CLK4_TIMER_FREQUENCY, + pxaost_get_timecount, NULL, 0xffffffff, 0, "pxaost", 0, NULL }; @@ -98,6 +95,8 @@ pxaost_attach(parent, self, aux) printf("\n"); + sc->sc_clock_hz = 32768; /* OS Timer 4-11 uses 32768Hz clock */ + sc->sc_iot = sa->sa_iot; pxaost_sc = sc; @@ -203,7 +202,7 @@ void setstatclockrate(int newstathz) { u_int32_t count; - pxaost_sc->sc_statclock_step = CLK4_TIMER_FREQUENCY / newstathz; + pxaost_sc->sc_statclock_step = pxaost_sc->sc_clock_hz / newstathz; count = bus_space_read_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSCR4); count += pxaost_sc->sc_statclock_step; pxaost_sc->sc_statclock_count = count; @@ -233,14 +232,14 @@ cpu_initclocks() stathz = STATHZ; profhz = stathz; - pxaost_sc->sc_statclock_step = CLK4_TIMER_FREQUENCY / stathz; - pxaost_sc->sc_clock_step = CLK4_TIMER_FREQUENCY / hz; - pxaost_sc->sc_clock_step_err_cnt = CLK4_TIMER_FREQUENCY % hz; + pxaost_sc->sc_statclock_step = pxaost_sc->sc_clock_hz / stathz; + pxaost_sc->sc_clock_step = pxaost_sc->sc_clock_hz / hz; + pxaost_sc->sc_clock_step_err_cnt = pxaost_sc->sc_clock_hz % hz; pxaost_sc->sc_clock_step_error = 0; /* Use the channels 0 and 1 for hardclock and statclock, respectively */ pxaost_sc->sc_clock_count = pxaost_sc->sc_clock_step; - pxaost_sc->sc_statclock_count = CLK4_TIMER_FREQUENCY / stathz; + pxaost_sc->sc_statclock_count = pxaost_sc->sc_clock_hz / stathz; pxa2x0_intr_establish(PXA2X0_INT_OST, IPL_CLOCK, doclockintr, 0, "clock"); @@ -253,6 +252,7 @@ cpu_initclocks() bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSMR5, clk + pxaost_sc->sc_statclock_count); + pxaost_timecounter.tc_frequency = pxaost_sc->sc_clock_hz; tc_init(&pxaost_timecounter); } @@ -264,14 +264,14 @@ delay(usecs) volatile int j; int csec, usec; - if (usecs > (0x80000000 / (CLK4_TIMER_FREQUENCY))) { + if (usecs > (0x80000000 / (pxaost_sc->sc_clock_hz))) { csec = usecs / 10000; usec = usecs % 10000; - delaycnt = (CLK4_TIMER_FREQUENCY / 100) * csec + - (CLK4_TIMER_FREQUENCY / 100) * usec / 10000; + delaycnt = (pxaost_sc->sc_clock_hz / 100) * csec + + (pxaost_sc->sc_clock_hz / 100) * usec / 10000; } else { - delaycnt = CLK4_TIMER_FREQUENCY * usecs / 1000000; + delaycnt = pxaost_sc->sc_clock_hz * usecs / 1000000; } if (delaycnt <= 1) -- 1.7.0.5