---
 sys/arch/arm/xscale/pxa2x0_clock.c |   72 ++++++++++++++----------------------
 1 files changed, 28 insertions(+), 44 deletions(-)

diff --git a/sys/arch/arm/xscale/pxa2x0_clock.c 
b/sys/arch/arm/xscale/pxa2x0_clock.c
index 7644c0c..b781edf 100644
--- a/sys/arch/arm/xscale/pxa2x0_clock.c
+++ b/sys/arch/arm/xscale/pxa2x0_clock.c
@@ -95,7 +95,7 @@ pxaost_attach(parent, self, aux)
 
        printf("\n");
 
-       sc->sc_clock_hz = 32768;        /* OS Timer 4-11 uses 32768Hz clock */
+       sc->sc_clock_hz = 3250000;      /* OS Timer 0 uses 3.25MHz clock */
 
        sc->sc_iot = sa->sa_iot;
 
@@ -109,16 +109,13 @@ pxaost_attach(parent, self, aux)
        bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, SAOST_IR, 0);
        bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, SAOST_SR, 0x3f);
 
-       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OMCR4, 
0xc1);
-       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OMCR5, 
0x41);
-
-       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSMR4,
+       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSMR0,
            pxaost_sc->sc_clock_count);
-       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSMR5,
+       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSMR1,
            pxaost_sc->sc_statclock_count);
 
        /* Zero the counter value */
-       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSCR4, 0);
+       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSCR0, 0);
 
 }
 
@@ -126,7 +123,7 @@ u_int
 pxaost_get_timecount(struct timecounter *tc)
 {
        return bus_space_read_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh,
-           OST_OSCR4);
+           OST_OSCR0);
 }
 
 int
@@ -137,7 +134,7 @@ clockintr(arg)
        u_int32_t oscr, match;
        u_int32_t match_error;
 
-       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, SAOST_SR, 0x10);
+       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, SAOST_SR, 0x01);
 
        match = pxaost_sc->sc_clock_count;
 
@@ -154,15 +151,15 @@ clockintr(arg)
                hardclock(frame);
 
                oscr = bus_space_read_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh,
-                   OST_OSCR4);
+                   OST_OSCR0);
 
        } while ((signed)(oscr - match) > 0);
 
         /* prevent missed interrupts */
-       if (oscr - match < 5)
-               match += 5;
+       if (oscr - match < 50)
+               match += 50;
 
-       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSMR4,
+       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSMR0,
            match);
 
        return(1);
@@ -173,9 +170,9 @@ statintr(arg)
        void *arg;
 {
        struct clockframe *frame = arg;
-       u_int32_t oscr, match;
+       u_int32_t oscr, match = 0;
 
-       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, SAOST_SR, 0x20);
+       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, SAOST_SR, 0x02);
 
        /* schedule next clock intr */
        match = pxaost_sc->sc_statclock_count;
@@ -185,14 +182,15 @@ statintr(arg)
                statclock(frame);
 
                oscr = bus_space_read_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh,
-                   OST_OSCR4);
+                   OST_OSCR0);
 
        } while ((signed)(oscr - match) > 0);
 
         /* prevent missed interrupts */
-       if (oscr - match < 5)
-               match += 5;
-       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSMR5,
+       if (oscr - match < 50)
+               match += 50;
+
+       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSMR1,
            match);
 
        return(1);
@@ -203,26 +201,11 @@ setstatclockrate(int newstathz)
 {
        u_int32_t count;
        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;
+       count = pxaost_sc->sc_statclock_step;
+       count += bus_space_read_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, 
OST_OSCR0);
        pxaost_sc->sc_statclock_count = count;
        bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh,
-           OST_OSMR5, count);
-}
-
-int
-doclockintr(void *arg)
-{
-       u_int32_t status;
-       int result = 0;
-
-       status = bus_space_read_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, 
SAOST_SR);
-       if (status & 0x10)
-               result |= clockintr(arg);
-       if (status & 0x20)
-               result |= statintr(arg);
-
-       return (result);
+           OST_OSMR1, count);
 }
 
 void
@@ -241,15 +224,16 @@ cpu_initclocks()
        pxaost_sc->sc_clock_count = pxaost_sc->sc_clock_step;
        pxaost_sc->sc_statclock_count = pxaost_sc->sc_clock_hz / stathz;
 
-       pxa2x0_intr_establish(PXA2X0_INT_OST, IPL_CLOCK, doclockintr, 0, 
"clock");
+       pxa2x0_intr_establish(PXA2X0_INT_OST0, IPL_CLOCK, clockintr, 0, 
"clock");
+       pxa2x0_intr_establish(PXA2X0_INT_OST1, IPL_CLOCK, statintr, 0, 
"statclock");
 
-       clk = bus_space_read_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSCR4);
+       clk = bus_space_read_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSCR0);
 
        bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, SAOST_SR, 0x3f);
-       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, SAOST_IR, 0x30);
-       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSMR4,
+       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, SAOST_IR, 0x03);
+       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSMR0,
            clk + pxaost_sc->sc_clock_count);
-       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSMR5,
+       bus_space_write_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh, OST_OSMR1,
            clk + pxaost_sc->sc_statclock_count);
 
        pxaost_timecounter.tc_frequency = pxaost_sc->sc_clock_hz;
@@ -287,13 +271,13 @@ delay(usecs)
        }
 
        oclock = bus_space_read_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh,
-           OST_OSCR4);
+           OST_OSCR0);
 
        while (1) {
                for (j = 100; j > 0; j--)
                        ;
                clock = bus_space_read_4(pxaost_sc->sc_iot, pxaost_sc->sc_ioh,
-                   OST_OSCR4);
+                   OST_OSCR0);
                delta = clock - oclock;
                if (delta > delaycnt)
                        break;
-- 
1.7.0.5

Reply via email to