---
 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

Reply via email to