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